@ethlete/core 2.7.1 → 2.7.2

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 (56) hide show
  1. package/esm2022/lib/components/structured-data/structured-data.component.mjs +3 -3
  2. package/esm2022/lib/directives/animatable/animatable.directive.mjs +3 -3
  3. package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +3 -3
  4. package/esm2022/lib/directives/animated-overlay/animated-overlay.directive.mjs +3 -3
  5. package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +3 -3
  6. package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +3 -3
  7. package/esm2022/lib/directives/delayable/delayable.directive.mjs +3 -3
  8. package/esm2022/lib/directives/is-active-element/is-active-element.directive.mjs +3 -3
  9. package/esm2022/lib/directives/is-element/is-element.directive.mjs +3 -3
  10. package/esm2022/lib/directives/let/let.directive.mjs +3 -3
  11. package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +3 -3
  12. package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +3 -3
  13. package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +3 -3
  14. package/esm2022/lib/directives/repeat/repeat.directive.mjs +3 -3
  15. package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +3 -3
  16. package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +3 -3
  17. package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +3 -3
  18. package/esm2022/lib/directives/seo/seo.directive.mjs +3 -3
  19. package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +3 -3
  20. package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +3 -3
  21. package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +3 -3
  22. package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +3 -3
  23. package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +3 -3
  24. package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +3 -3
  25. package/esm2022/lib/services/click-observer.service.mjs +6 -6
  26. package/esm2022/lib/services/content-observer.service.mjs +6 -6
  27. package/esm2022/lib/services/focus-visible.service.mjs +3 -3
  28. package/esm2022/lib/services/resize-observer.service.mjs +6 -6
  29. package/esm2022/lib/services/router-state.service.mjs +3 -3
  30. package/esm2022/lib/services/viewport.service.mjs +3 -3
  31. package/esm2022/lib/utils/public-api.mjs +2 -1
  32. package/esm2022/lib/utils/round.utils.mjs +5 -0
  33. package/esm2022/lib/utils/scrollable.utils.mjs +4 -10
  34. package/fesm2022/ethlete-core.mjs +108 -109
  35. package/fesm2022/ethlete-core.mjs.map +1 -1
  36. package/lib/components/structured-data/structured-data.component.d.ts +1 -1
  37. package/lib/directives/animatable/animatable.directive.d.ts +1 -1
  38. package/lib/directives/animated-lifecycle/animated-lifecycle.directive.d.ts +1 -1
  39. package/lib/directives/animated-overlay/animated-overlay.directive.d.ts +1 -1
  40. package/lib/directives/click-outside/click-outside.directive.d.ts +1 -1
  41. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.d.ts +1 -1
  42. package/lib/directives/delayable/delayable.directive.d.ts +1 -1
  43. package/lib/directives/is-active-element/is-active-element.directive.d.ts +1 -1
  44. package/lib/directives/is-element/is-element.directive.d.ts +1 -1
  45. package/lib/directives/let/let.directive.d.ts +1 -1
  46. package/lib/directives/observe-content/observe-content.directive.d.ts +1 -1
  47. package/lib/directives/observe-resize/observe-resize.directive.d.ts +1 -1
  48. package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +1 -1
  49. package/lib/directives/repeat/repeat.directive.d.ts +1 -1
  50. package/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.d.ts +1 -1
  51. package/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.d.ts +1 -1
  52. package/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.d.ts +1 -1
  53. package/lib/directives/seo/seo.directive.d.ts +1 -1
  54. package/lib/utils/public-api.d.ts +1 -0
  55. package/lib/utils/round.utils.d.ts +1 -0
  56. package/package.json +5 -5
@@ -71,18 +71,12 @@ export const scrollToElement = (options) => {
71
71
  const elementBlockOrigin = origin === 'center' ? elementBlockCenter : origin === 'end' ? elementBlockEnd : elementBlockStart;
72
72
  const containerInlineOrigin = origin === 'center' ? containerInlineCenter : origin === 'end' ? containerInlineEnd : containerInlineStart;
73
73
  const containerBlockOrigin = origin === 'center' ? containerBlockCenter : origin === 'end' ? containerBlockEnd : containerBlockStart;
74
- const inlineOffsetTemp = elementInlineOrigin - containerInlineOrigin;
75
- const blockOffsetTemp = elementBlockOrigin - containerBlockOrigin;
76
- const scrollDirInline = inlineOffsetTemp > 0 ? 'forward' : 'back';
77
- const scrollDirBlock = blockOffsetTemp > 0 ? 'forward' : 'back';
78
- const inlineOffset = elementInlineOrigin -
79
- containerInlineOrigin +
80
- (scrollDirInline === 'forward' ? scrollInlineMargin : -scrollInlineMargin);
81
- const blockOffset = elementBlockOrigin - containerBlockOrigin + (scrollDirBlock === 'forward' ? scrollBlockMargin : -scrollBlockMargin);
74
+ const inlineOffset = elementInlineOrigin - containerInlineOrigin - scrollInlineMargin;
75
+ const blockOffset = elementBlockOrigin - containerBlockOrigin - scrollBlockMargin;
82
76
  let inlineScroll = direction === 'block' ? undefined : inlineOffset;
83
77
  let blockScroll = direction === 'inline' ? undefined : blockOffset;
84
78
  if (origin === 'nearest') {
85
- const elVisible = isElementVisible({ element, container });
79
+ const elVisible = isElementVisible({ element, container, containerRect });
86
80
  if (elVisible?.inline && elVisible?.block) {
87
81
  return;
88
82
  }
@@ -113,4 +107,4 @@ export const getElementVisibleStates = (options) => {
113
107
  .filter(Boolean);
114
108
  return elementVisibleStates;
115
109
  };
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Njcm9sbGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtJQUN2RCxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpFLE9BQU8sWUFBWSxHQUFHLFlBQVksSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQWdERixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQWdDLEVBQW1DLEVBQUU7SUFDcEcsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtRQUNsQyxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsU0FBUyxLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFFdkMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUNoRztJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BELE1BQU0sYUFBYSxHQUFHLE9BQU8s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QUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsT0FBTyxDQUErQixDQUFDO0lBRWpELE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAgfSBmcm9tICcuL2NsYW1wLnV0aWwnO1xuXG5leHBvcnQgY29uc3QgZWxlbWVudENhblNjcm9sbCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICBjb25zdCB7IHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGggfSA9IGVsZW1lbnQ7XG5cbiAgcmV0dXJuIHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodCB8fCBzY3JvbGxXaWR0aCA+IGNsaWVudFdpZHRoO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJc0VsZW1lbnRWaXNpYmxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBjaGVjayBpZiBpdCBpcyB2aXNpYmxlIGluc2lkZSBhIGNvbnRhaW5lci5cbiAgICovXG4gIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgdG8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgKi9cbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyJ3MgcmVjdCB0byBjaGVjayBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluc2lkZS4gQ2FuIGJlIHN1cHBsaWVkIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIERPTSByZWFkcy5cbiAgICogQGRlZmF1bHQgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAqL1xuICBjb250YWluZXJSZWN0PzogRE9NUmVjdCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbi5cbiAgICovXG4gIGlubGluZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBibG9jayBkaXJlY3Rpb24uXG4gICAqL1xuICBibG9jazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGVsZW1lbnQgdGhhdCBpcyB2aXNpYmxlIGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLlxuICAgKi9cbiAgaW5saW5lSW50ZXJzZWN0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uLlxuICAgKi9cbiAgYmxvY2tJbnRlcnNlY3Rpb246IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCBpcyBiZWluZyBjaGVja2VkIGZvciB2aXNpYmlsaXR5LlxuICAgKi9cbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRWaXNpYmxlID0gKG9wdGlvbnM6IElzRWxlbWVudFZpc2libGVPcHRpb25zKTogQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHwgbnVsbCA9PiB7XG4gIGxldCB7IGNvbnRhaW5lciB9ID0gb3B0aW9ucztcbiAgY29uc3QgeyBlbGVtZW50IH0gPSBvcHRpb25zO1xuXG4gIGlmICghZWxlbWVudCB8fCBjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnRhaW5lciB8fD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIGNvbnN0IGNhblNjcm9sbCA9IGVsZW1lbnRDYW5TY3JvbGwoY29udGFpbmVyKTtcblxuICBpZiAoIWNhblNjcm9sbCkge1xuICAgIHJldHVybiB7IGlubGluZTogdHJ1ZSwgYmxvY2s6IHRydWUsIGJsb2NrSW50ZXJzZWN0aW9uOiAxMDAsIGlubGluZUludGVyc2VjdGlvbjogMTAwLCBlbGVtZW50IH07XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBvcHRpb25zLmNvbnRhaW5lclJlY3QgfHwgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVTdGFydCA9IGVsZW1lbnRSZWN0LmxlZnQ7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja1N0YXJ0ID0gZWxlbWVudFJlY3QudG9wO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZVN0YXJ0ID0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICBjb25zdCBjb250YWluZXJCbG9ja1N0YXJ0ID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgY29uc3QgZWxlbWVudElubGluZUVuZCA9IGVsZW1lbnRJbmxpbmVTdGFydCArIGVsZW1lbnRSZWN0LndpZHRoO1xuICBjb25zdCBlbGVtZW50QmxvY2tFbmQgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsZW1lbnRSZWN0LmhlaWdodDtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVFbmQgPSBjb250YWluZXJJbmxpbmVTdGFydCArIGNvbnRhaW5lclJlY3Qud2lkdGg7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrRW5kID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lclJlY3QuaGVpZ2h0O1xuXG4gIGNvbnN0IGlzRWxlbWVudElubGluZVZpc2libGUgPSBlbGVtZW50SW5saW5lU3RhcnQgPj0gY29udGFpbmVySW5saW5lU3RhcnQgJiYgZWxlbWVudElubGluZUVuZCA8PSBjb250YWluZXJJbmxpbmVFbmQ7XG4gIGNvbnN0IGlzRWxlbWVudEJsb2NrVmlzaWJsZSA9IGVsZW1lbnRCbG9ja1N0YXJ0ID49IGNvbnRhaW5lckJsb2NrU3RhcnQgJiYgZWxlbWVudEJsb2NrRW5kIDw9IGNvbnRhaW5lckJsb2NrRW5kO1xuXG4gIGNvbnN0IGlubGluZUludGVyc2VjdGlvbiA9XG4gICAgTWF0aC5taW4oZWxlbWVudElubGluZUVuZCwgY29udGFpbmVySW5saW5lRW5kKSAtIE1hdGgubWF4KGVsZW1lbnRJbmxpbmVTdGFydCwgY29udGFpbmVySW5saW5lU3RhcnQpO1xuICBjb25zdCBibG9ja0ludGVyc2VjdGlvbiA9XG4gICAgTWF0aC5taW4oZWxlbWVudEJsb2NrRW5kLCBjb250YWluZXJCbG9ja0VuZCkgLSBNYXRoLm1heChlbGVtZW50QmxvY2tTdGFydCwgY29udGFpbmVyQmxvY2tTdGFydCk7XG5cbiAgY29uc3QgaW5saW5lSW50ZXJzZWN0aW9uUGVyY2VudGFnZSA9IGNsYW1wKChpbmxpbmVJbnRlcnNlY3Rpb24gLyBlbGVtZW50UmVjdC53aWR0aCkgKiAxMDApO1xuICBjb25zdCBibG9ja0ludGVyc2VjdGlvblBlcmNlbnRhZ2UgPSBjbGFtcCgoYmxvY2tJbnRlcnNlY3Rpb24gLyBlbGVtZW50UmVjdC5oZWlnaHQpICogMTAwKTtcblxuICByZXR1cm4ge1xuICAgIGlubGluZTogaXNFbGVtZW50SW5saW5lVmlzaWJsZSxcbiAgICBibG9jazogaXNFbGVtZW50QmxvY2tWaXNpYmxlLFxuICAgIGlubGluZUludGVyc2VjdGlvbjogaW5saW5lSW50ZXJzZWN0aW9uUGVyY2VudGFnZSxcbiAgICBibG9ja0ludGVyc2VjdGlvbjogYmxvY2tJbnRlcnNlY3Rpb25QZXJjZW50YWdlLFxuICAgIGVsZW1lbnQsXG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbFRvRWxlbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gc2Nyb2xsIHRvLlxuICAgKi9cbiAgZWxlbWVudD86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBjb250YWluZXIgdG8gc2Nyb2xsIHRvIHRoZSBlbGVtZW50IGluLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICovXG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiB0byBzY3JvbGwgaW4uXG4gICAqIEBkZWZhdWx0ICdib3RoJ1xuICAgKi9cbiAgZGlyZWN0aW9uPzogJ2lubGluZScgfCAnYmxvY2snIHwgJ2JvdGgnO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luIG9mIHRoZSBlbGVtZW50IHRvIHNjcm9sbCB0by5cbiAgICogQGRlZmF1bHQgJ25lYXJlc3QnXG4gICAqL1xuICBvcmlnaW4/OiAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJyB8ICduZWFyZXN0JztcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgJ3Ntb290aCdcbiAgICovXG4gIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgaW5saW5lLW1hcmdpblxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzY3JvbGxJbmxpbmVNYXJnaW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgYmxvY2stbWFyZ2luXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNjcm9sbEJsb2NrTWFyZ2luPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKG9wdGlvbnM6IFNjcm9sbFRvRWxlbWVudE9wdGlvbnMpID0+IHtcbiAgbGV0IHsgY29udGFpbmVyIH0gPSBvcHRpb25zO1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBkaXJlY3Rpb24sXG4gICAgYmVoYXZpb3IgPSAnc21vb3RoJyxcbiAgICBvcmlnaW4gPSAnbmVhcmVzdCcsXG4gICAgc2Nyb2xsQmxvY2tNYXJnaW4gPSAwLFxuICAgIHNjcm9sbElubGluZU1hcmdpbiA9IDAsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmICghZWxlbWVudCB8fCBjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250YWluZXIgfHw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKGNvbnRhaW5lcik7XG5cbiAgaWYgKCFjYW5TY3JvbGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVNpemUgPSBlbGVtZW50UmVjdC53aWR0aDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU2l6ZSA9IGVsZW1lbnRSZWN0LmhlaWdodDtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVTaXplID0gY29udGFpbmVyUmVjdC53aWR0aDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tTaXplID0gY29udGFpbmVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgZWxlbWVudElubGluZVN0YXJ0ID0gZWxlbWVudFJlY3QubGVmdDtcbiAgY29uc3QgZWxlbWVudEJsb2NrU3RhcnQgPSBlbGVtZW50UmVjdC50b3A7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lU3RhcnQgPSBjb250YWluZXJSZWN0LmxlZnQ7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrU3RhcnQgPSBjb250YWluZXJSZWN0LnRvcDtcblxuICBjb25zdCBlbGVtZW50SW5saW5lRW5kID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxlbWVudElubGluZVNpemU7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja0VuZCA9IGVsZW1lbnRCbG9ja1N0YXJ0ICsgZWxlbWVudEJsb2NrU2l6ZTtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVFbmQgPSBjb250YWluZXJJbmxpbmVTdGFydCArIGNvbnRhaW5lcklubGluZVNpemU7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrRW5kID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lckJsb2NrU2l6ZTtcblxuICBjb25zdCBlbGVtZW50SW5saW5lQ2VudGVyID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxlbWVudElubGluZVNpemUgLyAyO1xuICBjb25zdCBlbGVtZW50QmxvY2tDZW50ZXIgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsZW1lbnRCbG9ja1NpemUgLyAyO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZUNlbnRlciA9IGNvbnRhaW5lcklubGluZVN0YXJ0ICsgY29udGFpbmVySW5saW5lU2l6ZSAvIDI7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrQ2VudGVyID0gY29udGFpbmVyQmxvY2tTdGFydCArIGNvbnRhaW5lckJsb2NrU2l6ZSAvIDI7XG5cbiAgY29uc3QgZWxlbWVudElubGluZU9yaWdpbiA9XG4gICAgb3JpZ2luID09PSAnY2VudGVyJyA/IGVsZW1lbnRJbmxpbmVDZW50ZXIgOiBvcmlnaW4gPT09ICdlbmQnID8gZWxlbWVudElubGluZUVuZCA6IGVsZW1lbnRJbmxpbmVTdGFydDtcbiAgY29uc3QgZWxlbWVudEJsb2NrT3JpZ2luID1cbiAgICBvcmlnaW4gPT09ICdjZW50ZXInID8gZWxlbWVudEJsb2NrQ2VudGVyIDogb3JpZ2luID09PSAnZW5kJyA/IGVsZW1lbnRCbG9ja0VuZCA6IGVsZW1lbnRCbG9ja1N0YXJ0O1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZU9yaWdpbiA9XG4gICAgb3JpZ2luID09PSAnY2VudGVyJyA/IGNvbnRhaW5lcklubGluZUNlbnRlciA6IG9yaWdpbiA9PT0gJ2VuZCcgPyBjb250YWluZXJJbmxpbmVFbmQgOiBjb250YWluZXJJbmxpbmVTdGFydDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tPcmlnaW4gPVxuICAgIG9yaWdpbiA9PT0gJ2NlbnRlcicgPyBjb250YWluZXJCbG9ja0NlbnRlciA6IG9yaWdpbiA9PT0gJ2VuZCcgPyBjb250YWluZXJCbG9ja0VuZCA6IGNvbnRhaW5lckJsb2NrU3RhcnQ7XG5cbiAgY29uc3QgaW5saW5lT2Zmc2V0VGVtcCA9IGVsZW1lbnRJbmxpbmVPcmlnaW4gLSBjb250YWluZXJJbmxpbmVPcmlnaW47XG4gIGNvbnN0IGJsb2NrT2Zmc2V0VGVtcCA9IGVsZW1lbnRCbG9ja09yaWdpbiAtIGNvbnRhaW5lckJsb2NrT3JpZ2luO1xuXG4gIGNvbnN0IHNjcm9sbERpcklubGluZSA9IGlubGluZU9mZnNldFRlbXAgPiAwID8gJ2ZvcndhcmQnIDogJ2JhY2snO1xuICBjb25zdCBzY3JvbGxEaXJCbG9jayA9IGJsb2NrT2Zmc2V0VGVtcCA+IDAgPyAnZm9yd2FyZCcgOiAnYmFjayc7XG5cbiAgY29uc3QgaW5saW5lT2Zmc2V0ID1cbiAgICBlbGVtZW50SW5saW5lT3JpZ2luIC1cbiAgICBjb250YWluZXJJbmxpbmVPcmlnaW4gK1xuICAgIChzY3JvbGxEaXJJbmxpbmUgPT09ICdmb3J3YXJkJyA/IHNjcm9sbElubGluZU1hcmdpbiA6IC1zY3JvbGxJbmxpbmVNYXJnaW4pO1xuICBjb25zdCBibG9ja09mZnNldCA9XG4gICAgZWxlbWVudEJsb2NrT3JpZ2luIC0gY29udGFpbmVyQmxvY2tPcmlnaW4gKyAoc2Nyb2xsRGlyQmxvY2sgPT09ICdmb3J3YXJkJyA/IHNjcm9sbEJsb2NrTWFyZ2luIDogLXNjcm9sbEJsb2NrTWFyZ2luKTtcblxuICBsZXQgaW5saW5lU2Nyb2xsOiBudW1iZXIgfCB1bmRlZmluZWQgPSBkaXJlY3Rpb24gPT09ICdibG9jaycgPyB1bmRlZmluZWQgOiBpbmxpbmVPZmZzZXQ7XG4gIGxldCBibG9ja1Njcm9sbDogbnVtYmVyIHwgdW5kZWZpbmVkID0gZGlyZWN0aW9uID09PSAnaW5saW5lJyA/IHVuZGVmaW5lZCA6IGJsb2NrT2Zmc2V0O1xuXG4gIGlmIChvcmlnaW4gPT09ICduZWFyZXN0Jykge1xuICAgIGNvbnN0IGVsVmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUoeyBlbGVtZW50LCBjb250YWluZXIgfSk7XG5cbiAgICBpZiAoZWxWaXNpYmxlPy5pbmxpbmUgJiYgZWxWaXNpYmxlPy5ibG9jaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbFZpc2libGU/LmlubGluZSkge1xuICAgICAgaW5saW5lU2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChlbFZpc2libGU/LmJsb2NrKSB7XG4gICAgICBibG9ja1Njcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBjb250YWluZXIuc2Nyb2xsVG8oe1xuICAgIGxlZnQ6IGNvbnRhaW5lci5zY3JvbGxMZWZ0ICsgKGlubGluZVNjcm9sbCB8fCAwKSxcbiAgICB0b3A6IGNvbnRhaW5lci5zY3JvbGxUb3AgKyAoYmxvY2tTY3JvbGwgfHwgMCksXG4gICAgYmVoYXZpb3IsXG4gIH0pO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRWaXNpYmxlRWxlbWVudHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgdG8gY2hlY2sgZm9yIHZpc2libGUgZWxlbWVudHMuXG4gICAqIEBkZWZhdWx0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgKi9cbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudHMgdG8gY2hlY2sgaWYgdGhleSBhcmUgdmlzaWJsZSBpbnNpZGUgYSBjb250YWluZXIuXG4gICAqL1xuICBlbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRWaXNpYmxlU3RhdGVzID0gKG9wdGlvbnM6IEdldFZpc2libGVFbGVtZW50c09wdGlvbnMpID0+IHtcbiAgbGV0IHsgY29udGFpbmVyIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IGVsZW1lbnRzIH0gPSBvcHRpb25zO1xuXG4gIGNvbnRhaW5lciB8fD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgZWxlbWVudFZpc2libGVTdGF0ZXMgPSBlbGVtZW50c1xuICAgIC5tYXAoKGUpID0+IHtcbiAgICAgIGlmICghZSB8fCAhY29udGFpbmVyKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIGlzRWxlbWVudFZpc2libGUoeyBjb250YWluZXIsIGVsZW1lbnQ6IGUsIGNvbnRhaW5lclJlY3Q6IHJlY3QgfSk7XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eVtdO1xuXG4gIHJldHVybiBlbGVtZW50VmlzaWJsZVN0YXRlcztcbn07XG4iXX0=
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Njcm9sbGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtJQUN2RCxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpFLE9BQU8sWUFBWSxHQUFHLFlBQVksSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQWdERixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQWdDLEVBQW1DLEVBQUU7SUFDcEcsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtRQUNsQyxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsU0FBUyxLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFFdkMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUNoRztJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFakYsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzVDLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUUxQyxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDaEQsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO0lBRTlDLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNoRSxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBRS9ELE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUN0RSxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFFckUsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsSUFBSSxvQkFBb0IsSUFBSSxnQkFBZ0IsSUFBSSxrQkFBa0IsQ0FBQztJQUNwSCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixJQUFJLG1CQUFtQixJQUFJLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQztJQUUvRyxNQUFNLGtCQUFrQixHQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0saUJBQWlCLEdBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBRWxHLE1BQU0sNEJBQTRCLEdBQUcsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBRTFGLE9BQU87UUFDTCxNQUFNLEVBQUUsc0JBQXNCO1FBQzlCLEtBQUssRUFBRSxxQkFBcUI7UUFDNUIsa0JBQWtCLEVBQUUsNEJBQTRCO1FBQ2hELGlCQUFpQixFQUFFLDJCQUEyQjtRQUM5QyxPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQTZDRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUErQixFQUFFLEVBQUU7SUFDakUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1QixNQUFNLEVBQ0osT0FBTyxFQUNQLFNBQVMsRUFDVCxRQUFRLEdBQUcsUUFBUSxFQUNuQixNQUFNLEdBQUcsU0FBUyxFQUNsQixpQkFBaUIsR0FBRyxDQUFDLEVBQ3JCLGtCQUFrQixHQUFHLENBQUMsR0FDdkIsR0FBRyxPQUFPLENBQUM7SUFFWixJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7UUFDbEMsT0FBTztLQUNSO0lBRUQsU0FBUyxLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFFdkMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE9BQU87S0FDUjtJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRXhELE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUM1QyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFFNUMsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ2hELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUVoRCxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO0lBRTFDLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztJQUNoRCxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7SUFFOUMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztJQUNoRSxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUU3RCxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7SUFFbkUsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdkUsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFcEUsTUFBTSxxQkFBcUIsR0FBRyxvQkFBb0IsR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDN0UsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFFMUUsTUFBTSxtQkFBbUIsR0FDdkIsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztJQUN2RyxNQUFNLGtCQUFrQixHQUN0QixNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUVwRyxNQUFNLHFCQUFxQixHQUN6QixNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO0lBQzdHLE1BQU0sb0JBQW9CLEdBQ3hCLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7SUFFMUcsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLEdBQUcscUJBQXFCLEdBQUcsa0JBQWtCLENBQUM7SUFDdEYsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLEdBQUcsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUM7SUFFbEYsSUFBSSxZQUFZLEdBQXVCLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3hGLElBQUksV0FBVyxHQUF1QixTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUV2RixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFMUUsSUFBSSxTQUFTLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUU7WUFDekMsT0FBTztTQUNSO1FBRUQsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQ3JCLFlBQVksR0FBRyxTQUFTLENBQUM7U0FDMUI7UUFFRCxJQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUU7WUFDcEIsV0FBVyxHQUFHLFNBQVMsQ0FBQztTQUN6QjtLQUNGO0lBRUQsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7UUFDaEQsR0FBRyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQzdDLFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFlRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtJQUM1RSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzVCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFN0IsU0FBUyxLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFFdkMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFL0MsTUFBTSxvQkFBb0IsR0FBRyxRQUFRO1NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ1QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVsQyxPQUFPLGdCQUFnQixDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBK0IsQ0FBQztJQUVqRCxPQUFPLG9CQUFvQixDQUFDO0FBQzlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi9jbGFtcC51dGlsJztcblxuZXhwb3J0IGNvbnN0IGVsZW1lbnRDYW5TY3JvbGwgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgY29uc3QgeyBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCwgc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoIH0gPSBlbGVtZW50O1xuXG4gIHJldHVybiBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQgfHwgc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNFbGVtZW50VmlzaWJsZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gY2hlY2sgaWYgaXQgaXMgdmlzaWJsZSBpbnNpZGUgYSBjb250YWluZXIuXG4gICAqL1xuICBlbGVtZW50PzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICovXG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGNvbnRhaW5lcidzIHJlY3QgdG8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbnNpZGUuIENhbiBiZSBzdXBwbGllZCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBET00gcmVhZHMuXG4gICAqIEBkZWZhdWx0IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgKi9cbiAgY29udGFpbmVyUmVjdD86IERPTVJlY3QgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIGlubGluZSBkaXJlY3Rpb24uXG4gICAqL1xuICBpbmxpbmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uLlxuICAgKi9cbiAgYmxvY2s6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbi5cbiAgICovXG4gIGlubGluZUludGVyc2VjdGlvbjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgZWxlbWVudCB0aGF0IGlzIHZpc2libGUgaW4gdGhlIGJsb2NrIGRpcmVjdGlvbi5cbiAgICovXG4gIGJsb2NrSW50ZXJzZWN0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgaXMgYmVpbmcgY2hlY2tlZCBmb3IgdmlzaWJpbGl0eS5cbiAgICovXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgaXNFbGVtZW50VmlzaWJsZSA9IChvcHRpb25zOiBJc0VsZW1lbnRWaXNpYmxlT3B0aW9ucyk6IEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eSB8IG51bGwgPT4ge1xuICBsZXQgeyBjb250YWluZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgZWxlbWVudCB9ID0gb3B0aW9ucztcblxuICBpZiAoIWVsZW1lbnQgfHwgY29udGFpbmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb250YWluZXIgfHw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKGNvbnRhaW5lcik7XG5cbiAgaWYgKCFjYW5TY3JvbGwpIHtcbiAgICByZXR1cm4geyBpbmxpbmU6IHRydWUsIGJsb2NrOiB0cnVlLCBibG9ja0ludGVyc2VjdGlvbjogMTAwLCBpbmxpbmVJbnRlcnNlY3Rpb246IDEwMCwgZWxlbWVudCB9O1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBjb250YWluZXJSZWN0ID0gb3B0aW9ucy5jb250YWluZXJSZWN0IHx8IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBlbGVtZW50SW5saW5lU3RhcnQgPSBlbGVtZW50UmVjdC5sZWZ0O1xuICBjb25zdCBlbGVtZW50QmxvY2tTdGFydCA9IGVsZW1lbnRSZWN0LnRvcDtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVTdGFydCA9IGNvbnRhaW5lclJlY3QubGVmdDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tTdGFydCA9IGNvbnRhaW5lclJlY3QudG9wO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVFbmQgPSBlbGVtZW50SW5saW5lU3RhcnQgKyBlbGVtZW50UmVjdC53aWR0aDtcbiAgY29uc3QgZWxlbWVudEJsb2NrRW5kID0gZWxlbWVudEJsb2NrU3RhcnQgKyBlbGVtZW50UmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lRW5kID0gY29udGFpbmVySW5saW5lU3RhcnQgKyBjb250YWluZXJSZWN0LndpZHRoO1xuICBjb25zdCBjb250YWluZXJCbG9ja0VuZCA9IGNvbnRhaW5lckJsb2NrU3RhcnQgKyBjb250YWluZXJSZWN0LmhlaWdodDtcblxuICBjb25zdCBpc0VsZW1lbnRJbmxpbmVWaXNpYmxlID0gZWxlbWVudElubGluZVN0YXJ0ID49IGNvbnRhaW5lcklubGluZVN0YXJ0ICYmIGVsZW1lbnRJbmxpbmVFbmQgPD0gY29udGFpbmVySW5saW5lRW5kO1xuICBjb25zdCBpc0VsZW1lbnRCbG9ja1Zpc2libGUgPSBlbGVtZW50QmxvY2tTdGFydCA+PSBjb250YWluZXJCbG9ja1N0YXJ0ICYmIGVsZW1lbnRCbG9ja0VuZCA8PSBjb250YWluZXJCbG9ja0VuZDtcblxuICBjb25zdCBpbmxpbmVJbnRlcnNlY3Rpb24gPVxuICAgIE1hdGgubWluKGVsZW1lbnRJbmxpbmVFbmQsIGNvbnRhaW5lcklubGluZUVuZCkgLSBNYXRoLm1heChlbGVtZW50SW5saW5lU3RhcnQsIGNvbnRhaW5lcklubGluZVN0YXJ0KTtcbiAgY29uc3QgYmxvY2tJbnRlcnNlY3Rpb24gPVxuICAgIE1hdGgubWluKGVsZW1lbnRCbG9ja0VuZCwgY29udGFpbmVyQmxvY2tFbmQpIC0gTWF0aC5tYXgoZWxlbWVudEJsb2NrU3RhcnQsIGNvbnRhaW5lckJsb2NrU3RhcnQpO1xuXG4gIGNvbnN0IGlubGluZUludGVyc2VjdGlvblBlcmNlbnRhZ2UgPSBjbGFtcCgoaW5saW5lSW50ZXJzZWN0aW9uIC8gZWxlbWVudFJlY3Qud2lkdGgpICogMTAwKTtcbiAgY29uc3QgYmxvY2tJbnRlcnNlY3Rpb25QZXJjZW50YWdlID0gY2xhbXAoKGJsb2NrSW50ZXJzZWN0aW9uIC8gZWxlbWVudFJlY3QuaGVpZ2h0KSAqIDEwMCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbmxpbmU6IGlzRWxlbWVudElubGluZVZpc2libGUsXG4gICAgYmxvY2s6IGlzRWxlbWVudEJsb2NrVmlzaWJsZSxcbiAgICBpbmxpbmVJbnRlcnNlY3Rpb246IGlubGluZUludGVyc2VjdGlvblBlcmNlbnRhZ2UsXG4gICAgYmxvY2tJbnRlcnNlY3Rpb246IGJsb2NrSW50ZXJzZWN0aW9uUGVyY2VudGFnZSxcbiAgICBlbGVtZW50LFxuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxUb0VsZW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIHNjcm9sbCB0by5cbiAgICovXG4gIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgY29udGFpbmVyIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCBpbi5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gdG8gc2Nyb2xsIGluLlxuICAgKiBAZGVmYXVsdCAnYm90aCdcbiAgICovXG4gIGRpcmVjdGlvbj86ICdpbmxpbmUnIHwgJ2Jsb2NrJyB8ICdib3RoJztcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiBvZiB0aGUgZWxlbWVudCB0byBzY3JvbGwgdG8uXG4gICAqIEBkZWZhdWx0ICduZWFyZXN0J1xuICAgKi9cbiAgb3JpZ2luPzogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnbmVhcmVzdCc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0ICdzbW9vdGgnXG4gICAqL1xuICBiZWhhdmlvcj86IFNjcm9sbEJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Nyb2xsIGlubGluZS1tYXJnaW5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc2Nyb2xsSW5saW5lTWFyZ2luPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Nyb2xsIGJsb2NrLW1hcmdpblxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzY3JvbGxCbG9ja01hcmdpbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IHNjcm9sbFRvRWxlbWVudCA9IChvcHRpb25zOiBTY3JvbGxUb0VsZW1lbnRPcHRpb25zKSA9PiB7XG4gIGxldCB7IGNvbnRhaW5lciB9ID0gb3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgZGlyZWN0aW9uLFxuICAgIGJlaGF2aW9yID0gJ3Ntb290aCcsXG4gICAgb3JpZ2luID0gJ25lYXJlc3QnLFxuICAgIHNjcm9sbEJsb2NrTWFyZ2luID0gMCxcbiAgICBzY3JvbGxJbmxpbmVNYXJnaW4gPSAwLFxuICB9ID0gb3B0aW9ucztcblxuICBpZiAoIWVsZW1lbnQgfHwgY29udGFpbmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGFpbmVyIHx8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgY29uc3QgY2FuU2Nyb2xsID0gZWxlbWVudENhblNjcm9sbChjb250YWluZXIpO1xuXG4gIGlmICghY2FuU2Nyb2xsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVTaXplID0gZWxlbWVudFJlY3Qud2lkdGg7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja1NpemUgPSBlbGVtZW50UmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lU2l6ZSA9IGNvbnRhaW5lclJlY3Qud2lkdGg7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrU2l6ZSA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0O1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVTdGFydCA9IGVsZW1lbnRSZWN0LmxlZnQ7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja1N0YXJ0ID0gZWxlbWVudFJlY3QudG9wO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZVN0YXJ0ID0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICBjb25zdCBjb250YWluZXJCbG9ja1N0YXJ0ID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgY29uc3QgZWxlbWVudElubGluZUVuZCA9IGVsZW1lbnRJbmxpbmVTdGFydCArIGVsZW1lbnRJbmxpbmVTaXplO1xuICBjb25zdCBlbGVtZW50QmxvY2tFbmQgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsZW1lbnRCbG9ja1NpemU7XG5cbiAgY29uc3QgY29udGFpbmVySW5saW5lRW5kID0gY29udGFpbmVySW5saW5lU3RhcnQgKyBjb250YWluZXJJbmxpbmVTaXplO1xuICBjb25zdCBjb250YWluZXJCbG9ja0VuZCA9IGNvbnRhaW5lckJsb2NrU3RhcnQgKyBjb250YWluZXJCbG9ja1NpemU7XG5cbiAgY29uc3QgZWxlbWVudElubGluZUNlbnRlciA9IGVsZW1lbnRJbmxpbmVTdGFydCArIGVsZW1lbnRJbmxpbmVTaXplIC8gMjtcbiAgY29uc3QgZWxlbWVudEJsb2NrQ2VudGVyID0gZWxlbWVudEJsb2NrU3RhcnQgKyBlbGVtZW50QmxvY2tTaXplIC8gMjtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVDZW50ZXIgPSBjb250YWluZXJJbmxpbmVTdGFydCArIGNvbnRhaW5lcklubGluZVNpemUgLyAyO1xuICBjb25zdCBjb250YWluZXJCbG9ja0NlbnRlciA9IGNvbnRhaW5lckJsb2NrU3RhcnQgKyBjb250YWluZXJCbG9ja1NpemUgLyAyO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVPcmlnaW4gPVxuICAgIG9yaWdpbiA9PT0gJ2NlbnRlcicgPyBlbGVtZW50SW5saW5lQ2VudGVyIDogb3JpZ2luID09PSAnZW5kJyA/IGVsZW1lbnRJbmxpbmVFbmQgOiBlbGVtZW50SW5saW5lU3RhcnQ7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja09yaWdpbiA9XG4gICAgb3JpZ2luID09PSAnY2VudGVyJyA/IGVsZW1lbnRCbG9ja0NlbnRlciA6IG9yaWdpbiA9PT0gJ2VuZCcgPyBlbGVtZW50QmxvY2tFbmQgOiBlbGVtZW50QmxvY2tTdGFydDtcblxuICBjb25zdCBjb250YWluZXJJbmxpbmVPcmlnaW4gPVxuICAgIG9yaWdpbiA9PT0gJ2NlbnRlcicgPyBjb250YWluZXJJbmxpbmVDZW50ZXIgOiBvcmlnaW4gPT09ICdlbmQnID8gY29udGFpbmVySW5saW5lRW5kIDogY29udGFpbmVySW5saW5lU3RhcnQ7XG4gIGNvbnN0IGNvbnRhaW5lckJsb2NrT3JpZ2luID1cbiAgICBvcmlnaW4gPT09ICdjZW50ZXInID8gY29udGFpbmVyQmxvY2tDZW50ZXIgOiBvcmlnaW4gPT09ICdlbmQnID8gY29udGFpbmVyQmxvY2tFbmQgOiBjb250YWluZXJCbG9ja1N0YXJ0O1xuXG4gIGNvbnN0IGlubGluZU9mZnNldCA9IGVsZW1lbnRJbmxpbmVPcmlnaW4gLSBjb250YWluZXJJbmxpbmVPcmlnaW4gLSBzY3JvbGxJbmxpbmVNYXJnaW47XG4gIGNvbnN0IGJsb2NrT2Zmc2V0ID0gZWxlbWVudEJsb2NrT3JpZ2luIC0gY29udGFpbmVyQmxvY2tPcmlnaW4gLSBzY3JvbGxCbG9ja01hcmdpbjtcblxuICBsZXQgaW5saW5lU2Nyb2xsOiBudW1iZXIgfCB1bmRlZmluZWQgPSBkaXJlY3Rpb24gPT09ICdibG9jaycgPyB1bmRlZmluZWQgOiBpbmxpbmVPZmZzZXQ7XG4gIGxldCBibG9ja1Njcm9sbDogbnVtYmVyIHwgdW5kZWZpbmVkID0gZGlyZWN0aW9uID09PSAnaW5saW5lJyA/IHVuZGVmaW5lZCA6IGJsb2NrT2Zmc2V0O1xuXG4gIGlmIChvcmlnaW4gPT09ICduZWFyZXN0Jykge1xuICAgIGNvbnN0IGVsVmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUoeyBlbGVtZW50LCBjb250YWluZXIsIGNvbnRhaW5lclJlY3QgfSk7XG5cbiAgICBpZiAoZWxWaXNpYmxlPy5pbmxpbmUgJiYgZWxWaXNpYmxlPy5ibG9jaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbFZpc2libGU/LmlubGluZSkge1xuICAgICAgaW5saW5lU2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChlbFZpc2libGU/LmJsb2NrKSB7XG4gICAgICBibG9ja1Njcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBjb250YWluZXIuc2Nyb2xsVG8oe1xuICAgIGxlZnQ6IGNvbnRhaW5lci5zY3JvbGxMZWZ0ICsgKGlubGluZVNjcm9sbCB8fCAwKSxcbiAgICB0b3A6IGNvbnRhaW5lci5zY3JvbGxUb3AgKyAoYmxvY2tTY3JvbGwgfHwgMCksXG4gICAgYmVoYXZpb3IsXG4gIH0pO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRWaXNpYmxlRWxlbWVudHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgdG8gY2hlY2sgZm9yIHZpc2libGUgZWxlbWVudHMuXG4gICAqIEBkZWZhdWx0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgKi9cbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudHMgdG8gY2hlY2sgaWYgdGhleSBhcmUgdmlzaWJsZSBpbnNpZGUgYSBjb250YWluZXIuXG4gICAqL1xuICBlbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRWaXNpYmxlU3RhdGVzID0gKG9wdGlvbnM6IEdldFZpc2libGVFbGVtZW50c09wdGlvbnMpID0+IHtcbiAgbGV0IHsgY29udGFpbmVyIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IGVsZW1lbnRzIH0gPSBvcHRpb25zO1xuXG4gIGNvbnRhaW5lciB8fD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgZWxlbWVudFZpc2libGVTdGF0ZXMgPSBlbGVtZW50c1xuICAgIC5tYXAoKGUpID0+IHtcbiAgICAgIGlmICghZSB8fCAhY29udGFpbmVyKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIGlzRWxlbWVudFZpc2libGUoeyBjb250YWluZXIsIGVsZW1lbnQ6IGUsIGNvbnRhaW5lclJlY3Q6IHJlY3QgfSk7XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eVtdO1xuXG4gIHJldHVybiBlbGVtZW50VmlzaWJsZVN0YXRlcztcbn07XG4iXX0=