system-testing 1.0.93 → 1.0.94

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.
@@ -180,11 +180,6 @@ export default class WebDriverDriver {
180
180
  * @returns {Promise<unknown>}
181
181
  */
182
182
  interactSendKeysWithFallback(element: import("selenium-webdriver").WebElement, ...args: any[]): Promise<unknown>;
183
- /**
184
- * @param {import("selenium-webdriver").WebElement} element
185
- * @returns {Promise<void>}
186
- */
187
- interactPress(element: import("selenium-webdriver").WebElement): Promise<void>;
188
183
  /**
189
184
  * @param {string} selector
190
185
  * @param {WaitForNoSelectorArgs} [args]
@@ -506,10 +506,6 @@ export default class WebDriverDriver {
506
506
  }
507
507
  return await /** @type {{click: (...clickArgs: any[]) => Promise<any>}} */ (element).click(...args);
508
508
  }
509
- else if (methodName === "press") {
510
- await this.interactPress(element);
511
- return undefined;
512
- }
513
509
  else if (!( /** @type {any} */(element))[methodName]) {
514
510
  throw new Error(`${element.constructor.name} hasn't an attribute named: ${methodName}`);
515
511
  }
@@ -618,30 +614,6 @@ export default class WebDriverDriver {
618
614
  `, element, nextValue);
619
615
  return sendKeysResult;
620
616
  }
621
- /**
622
- * @param {import("selenium-webdriver").WebElement} element
623
- * @returns {Promise<void>}
624
- */
625
- async interactPress(element) {
626
- await this.getWebDriver().executeScript(`
627
- const element = arguments[0]
628
-
629
- if (typeof element.focus == "function") {
630
- element.focus()
631
- }
632
-
633
- for (const eventName of ["pointerdown", "mousedown", "pointerup", "mouseup", "click"]) {
634
- const mouseEvent = new MouseEvent(eventName, {
635
- bubbles: true,
636
- cancelable: true,
637
- composed: true,
638
- view: window
639
- })
640
-
641
- element.dispatchEvent(mouseEvent)
642
- }
643
- `, element);
644
- }
645
617
  /**
646
618
  * @param {string} selector
647
619
  * @param {WaitForNoSelectorArgs} [args]
@@ -699,4 +671,4 @@ export default class WebDriverDriver {
699
671
  }
700
672
  }
701
673
  }
702
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViZHJpdmVyLWRyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kcml2ZXJzL3dlYmRyaXZlci1kcml2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksYUFBYSxFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDN0QsT0FBTyxPQUFPLE1BQU0sbUNBQW1DLENBQUE7QUFDdkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUUvQzs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUs7SUFDcEMsTUFBTSxLQUFLLEdBQUcsdUNBQXVDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ25CLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsa0JBQWtCLENBQUMsT0FBTztJQUNqQyxPQUFPLE9BQU8sQ0FDWixPQUFPO1FBQ1AsT0FBTyxPQUFPLEtBQUssUUFBUTtRQUMzQixPQUFPLElBQUksT0FBTztRQUNsQixPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUNwQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQUs7SUFDekIsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQTtJQUMvQixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsNkJBQTZCLENBQUMsS0FBSztJQUMxQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUE7SUFFeEIsT0FBTyxZQUFZLEVBQUUsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFNUMsSUFBSSxTQUFTLEtBQUssNkJBQTZCLElBQUksU0FBUyxLQUFLLDhCQUE4QixJQUFJLFNBQVMsS0FBSyw0QkFBNEIsRUFBRSxDQUFDO1lBQzlJLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxZQUFZLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ25FLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7UUFFRCxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQTtJQUNuQyxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMscUJBQXFCLENBQUMsR0FBRyxJQUFJO0lBQ3BDLE9BQU8sSUFBSTtTQUNSLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ1gsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTdCLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2xELENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUNiLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlDQUFpQyxDQUFDLEdBQUcsSUFBSTtJQUNoRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtBQUN4RixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0g7O0dBRUc7QUFDSDs7O0dBR0c7QUFFSCxNQUFNLG9CQUFxQixTQUFRLEtBQUs7Q0FBSTtBQUM1QyxNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsYUFBYSxDQUFBO0FBRXRDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxlQUFlO0lBQ2xDOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUE7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUE7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxPQUFPO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3hCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO1FBQ3JELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQztJQUV2Qzs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7UUFDMUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1FBRXJDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFNBQVM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsTUFBTSxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxrQ0FBa0MsRUFBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBTSxpREFBaUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzdMLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUE7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFBO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7UUFDekQsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVU7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUE7UUFDM0IsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSTtRQUNwQixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2hELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxnQkFBZ0I7UUFDcEIsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDbEQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsS0FBSyxDQUFDLE9BQU87UUFDWCxPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ2xELENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsS0FBSyxDQUFDLGNBQWM7UUFDbEIsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGNBQWM7UUFDbEIsSUFBSSxPQUFPLENBQUE7UUFFWCxJQUFJLENBQUM7WUFDSCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDL0UsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUV0QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUE7WUFDbkUsSUFBSSxPQUFPLENBQUE7WUFFWCxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtZQUN6QixDQUFDO1lBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUVELE9BQU8sV0FBVyxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQzNCLE1BQU0sRUFBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLGVBQWUsR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUE7UUFDN0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxQyxJQUFJLGFBQWEsQ0FBQTtRQUVqQixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQixhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQTtRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsR0FBRyxPQUFPLENBQUE7UUFDekIsQ0FBQztRQUVELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFN0YsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFDOUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzVCLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQy9FLE1BQU0sV0FBVyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQzdCLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7WUFFcEYsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxhQUFhLENBQUE7WUFDdEIsQ0FBQztZQUVELE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO1lBRTNCLEtBQUssTUFBTSxPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO2dCQUUvQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVc7b0JBQUUsU0FBUTtnQkFDckMsSUFBSSxDQUFDLE9BQU8sSUFBSSxXQUFXO29CQUFFLFNBQVE7Z0JBRXJDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNoQyxDQUFDO1lBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtRQUN6QixDQUFDLENBQUE7UUFDRCx3REFBd0Q7UUFDeEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBRWpCLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLFFBQVEsR0FBRyxhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBRXZELElBQUksQ0FBQztnQkFDSCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbEIsUUFBUSxHQUFHLE1BQU0sV0FBVyxFQUFFLENBQUE7Z0JBQ2hDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ3hDLFFBQVEsR0FBRyxNQUFNLFdBQVcsRUFBRSxDQUFBO3dCQUU5QixPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO29CQUM1QixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7Z0JBQ2QsQ0FBQztnQkFFRCxNQUFLO1lBQ1AsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUE7Z0JBRS9CLElBQUksS0FBSyxZQUFZLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO29CQUM5RCxtQkFBbUIsR0FBRyxJQUFJLENBQUE7Z0JBQzVCLENBQUM7cUJBQU0sSUFBSSxLQUFLLFlBQVksY0FBYyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztvQkFDOUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO2dCQUM1QixDQUFDO2dCQUVELElBQ0UsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLFlBQVksSUFBSSxtQkFBbUIsQ0FBQzt1QkFDakUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUNwQixDQUFDO29CQUNELFNBQVE7Z0JBQ1YsQ0FBQztnQkFFRCxNQUFNLGNBQWMsQ0FBQyx3Q0FBd0MsY0FBYyxLQUFLLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQzFJLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzNDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzVCLHdEQUF3RDtRQUN4RCxJQUFJLFFBQVEsQ0FBQTtRQUVaLElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzNDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDdkgsQ0FBQztZQUVELE1BQU0sY0FBYyxDQUFDLEdBQUcsT0FBTyxLQUFLLE1BQU0sS0FBSyxlQUFlLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNyRyxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFFBQVEsQ0FBQyxNQUFNLHVCQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM5RyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQTtZQUN0RCxNQUFNLElBQUksb0JBQW9CLENBQUMsbUNBQW1DLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDdkksQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUk7UUFDN0IsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUk7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFDLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1lBQ3RELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxvQkFBb0IsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLEtBQUssQ0FBQTtZQUNkLENBQUM7WUFFRCxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsSUFBSTtRQUMxQyxzREFBc0Q7UUFDdEQsSUFBSSxPQUFPLENBQUE7UUFFWCxJQUFJLE9BQU8sbUJBQW1CLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0MsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0RCxDQUFDO2FBQU0sSUFBSSxPQUFPLG1CQUFtQixJQUFJLFFBQVEsSUFBSSxtQkFBbUIsS0FBSyxJQUFJLElBQUksVUFBVSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDdkgsTUFBTSxFQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsRUFBQyxHQUFHLG1CQUFtQixDQUFBO1lBRW5ELE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQTtZQUU1QixPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxzREFBc0QsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDeEYsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRS9CLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4QyxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxJQUFJO1FBQ25DLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtRQUViLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixLQUFLLEVBQUUsQ0FBQTtZQUVQLElBQUksQ0FBQztnQkFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtnQkFFMUQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ3ZELE1BQUs7WUFDUCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyw4QkFBOEIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyw0QkFBNEIsRUFBRSxDQUFDO3dCQUN6SCxNQUFNLEtBQUssQ0FBQTtvQkFDYixDQUFDO3lCQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssNkJBQTZCLEVBQUUsQ0FBQzt3QkFDcEUsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ2YsTUFBTSxjQUFjLENBQUMsV0FBVyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSx1QkFBdUIsS0FBSyxZQUFZLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTt3QkFDaEssQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO3dCQUNoQixDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLGNBQWMsQ0FBQyxXQUFXLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLG1CQUFtQixLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7b0JBQzNJLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sY0FBYyxDQUFDLFdBQVcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksbUJBQW1CLE9BQU8sS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUN6SCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU87UUFDakMsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDcEYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNsRSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUk7UUFDckMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNyRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSTtRQUNyRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7UUFFYixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osS0FBSyxFQUFFLENBQUE7WUFFUCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtZQUU1RCxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzlCLElBQUksT0FBTyxtQkFBbUIsS0FBSyxRQUFRLElBQUksbUJBQW1CLElBQUksY0FBYyxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNoSixPQUFPLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBO29CQUNsRSxDQUFDO29CQUVELE9BQU8sTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7Z0JBQ3hDLENBQUM7cUJBQU0sSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2xDLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO3dCQUV6QixPQUFPLFNBQVMsQ0FBQTtvQkFDbEIsQ0FBQztvQkFFRCxPQUFPLE1BQU0sNkRBQTZELENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtnQkFDckcsQ0FBQztxQkFBTSxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUVqQyxPQUFPLFNBQVMsQ0FBQTtnQkFDbEIsQ0FBQztxQkFBTSxJQUFJLENBQUMsRUFBQyxrQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksK0JBQStCLFVBQVUsRUFBRSxDQUFDLENBQUE7Z0JBQ3pGLENBQUM7cUJBQU0sSUFBSSxPQUFPLEVBQUMsa0JBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLFVBQVUsb0JBQW9CLENBQUMsQ0FBQTtnQkFDaEYsQ0FBQztnQkFFRCx1RUFBdUU7Z0JBQ3ZFLE9BQU8sTUFBTSxFQUFDLGtCQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtZQUNsRSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxrQkFBa0IsR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFFL0QsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO3dCQUN2QixvREFBb0Q7d0JBQ3BELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUNmLElBQUksa0JBQWtCLENBQUE7NEJBRXRCLElBQUksT0FBTyxtQkFBbUIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQ0FDM0Msa0JBQWtCLEdBQUcsZ0JBQWdCLG1CQUFtQixFQUFFLENBQUE7NEJBQzVELENBQUM7aUNBQU0sQ0FBQztnQ0FDTixrQkFBa0IsR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUE7NEJBQ3BELENBQUM7NEJBRUQsTUFBTSxjQUFjLENBQUMsR0FBRyxrQkFBa0IsSUFBSSxVQUFVLGlCQUFpQixLQUFLLFlBQVksa0JBQWtCLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO3dCQUMxSSxDQUFDOzZCQUFNLENBQUM7NEJBQ04sTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7d0JBQ2hCLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksVUFBVSxhQUFhLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtvQkFDL0gsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxjQUFjLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxVQUFVLGFBQWEsT0FBTyxLQUFLLEtBQUssS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQzdHLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTztRQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFekQsSUFBSSxPQUFPLGFBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNyQyxPQUFPLGFBQWEsQ0FBQTtRQUN0QixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFM0MsSUFBSSxPQUFPLFdBQVcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFdBQVcsQ0FBQTtRQUNwQixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSTtRQUNqRCxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzdELE1BQU0sY0FBYyxHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQ3RELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTVELElBQUksT0FBTyxXQUFXLElBQUksUUFBUSxJQUFJLE9BQU8sVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDbEcsT0FBTyxjQUFjLENBQUE7UUFDdkIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLGlDQUFpQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFBO1FBRXZILElBQUksT0FBTyxXQUFXLElBQUksUUFBUSxJQUFJLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNoRSxPQUFPLGNBQWMsQ0FBQTtRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQW1DdkMsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFdEIsT0FBTyxjQUFjLENBQUE7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTztRQUN6QixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJ2QyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ3pDLE1BQU0sRUFBQyxlQUFlLEVBQUUsR0FBRyxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUE7UUFFM0MsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDekUsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBRTlFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRS9CLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUN4QyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQzVCLEtBQUssSUFBSSxFQUFFO29CQUNULE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7b0JBRS9FLG1CQUFtQjtvQkFDbkIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUMxQixPQUFPLElBQUksQ0FBQTtvQkFDYixDQUFDO29CQUVELHdCQUF3QjtvQkFDeEIsSUFBSSxDQUFDO3dCQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO3dCQUVuRCxPQUFPLENBQUMsV0FBVyxDQUFBO29CQUNyQixDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2YsSUFDRSxLQUFLLFlBQVksS0FBSzs0QkFDdEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlHLENBQUM7NEJBQ0QsT0FBTyxLQUFLLENBQUE7d0JBQ2QsQ0FBQzt3QkFFRCxNQUFNLEtBQUssQ0FBQTtvQkFDYixDQUFDO2dCQUNILENBQUMsRUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ25CLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVE7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFBO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksY0FBYyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sY0FBYyxDQUFDLFlBQVksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3JGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssQ0FBQTtZQUNiLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCeSwgZXJyb3IgYXMgU2VsZW5pdW1FcnJvcn0gZnJvbSBcInNlbGVuaXVtLXdlYmRyaXZlclwiXG5pbXBvcnQgbG9nZ2luZyBmcm9tIFwic2VsZW5pdW0td2ViZHJpdmVyL2xpYi9sb2dnaW5nLmpzXCJcbmltcG9ydCB7d2FpdH0gZnJvbSBcImF3YWl0ZXJ5XCJcbmltcG9ydCB0aW1lb3V0IGZyb20gXCJhd2FpdGVyeS9idWlsZC90aW1lb3V0LmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHBhcmFtIHt1bmtub3dufSBjYXVzZVxuICogQHJldHVybnMge0Vycm9yICYge2NhdXNlOiB1bmtub3dufX1cbiAqL1xuZnVuY3Rpb24gZXJyb3JXaXRoQ2F1c2UobWVzc2FnZSwgY2F1c2UpIHtcbiAgY29uc3QgZXJyb3IgPSAvKiogQHR5cGUge0Vycm9yICYge2NhdXNlOiB1bmtub3dufX0gKi8gKG5ldyBFcnJvcihtZXNzYWdlKSlcbiAgZXJyb3IuY2F1c2UgPSBjYXVzZVxuICByZXR1cm4gZXJyb3Jcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtlbGVtZW50IGlzIGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fVxuICovXG5mdW5jdGlvbiBpc1dlYkRyaXZlckVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBlbGVtZW50ICYmXG4gICAgdHlwZW9mIGVsZW1lbnQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcImdldElkXCIgaW4gZWxlbWVudCAmJlxuICAgIHR5cGVvZiBlbGVtZW50LmdldElkID09PSBcImZ1bmN0aW9uXCJcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3JcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldEVycm9yTmFtZShlcnJvcikge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJldHVybiBlcnJvci5jb25zdHJ1Y3Rvci5uYW1lXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSBlcnJvclxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0UmV0cnlhYmxlSW50ZXJhY3RFcnJvck5hbWUoZXJyb3IpIHtcbiAgbGV0IGN1cnJlbnRFcnJvciA9IGVycm9yXG5cbiAgd2hpbGUgKGN1cnJlbnRFcnJvcikge1xuICAgIGNvbnN0IGVycm9yTmFtZSA9IGdldEVycm9yTmFtZShjdXJyZW50RXJyb3IpXG5cbiAgICBpZiAoZXJyb3JOYW1lID09PSBcIkVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvclwiIHx8IGVycm9yTmFtZSA9PT0gXCJFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yXCIgfHwgZXJyb3JOYW1lID09PSBcIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yXCIpIHtcbiAgICAgIHJldHVybiBlcnJvck5hbWVcbiAgICB9XG5cbiAgICBpZiAoIShjdXJyZW50RXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgfHwgIShcImNhdXNlXCIgaW4gY3VycmVudEVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGN1cnJlbnRFcnJvciA9IGN1cnJlbnRFcnJvci5jYXVzZVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uYW55fSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRTZW5kS2V5c1RleHRBcHBlbmQoLi4uYXJncykge1xuICByZXR1cm4gYXJnc1xuICAgIC5tYXAoKGFyZykgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nQXJnID0gU3RyaW5nKGFyZylcblxuICAgICAgaWYgKC9bXFx1RTAwOVxcdUUwM0RdYVxcdUUwMDAvaS50ZXN0KHN0cmluZ0FyZykpIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cmluZ0FyZy5yZXBsYWNlKC9bXFx1RTAwMC1cXHVGOEZGXS9nLCBcIlwiKVxuICAgIH0pXG4gICAgLmpvaW4oXCJcIilcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLmFueX0gYXJnc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGdldFNlbmRLZXlzVXNlc1NlbGVjdEFsbEFuZERlbGV0ZSguLi5hcmdzKSB7XG4gIHJldHVybiBhcmdzLnNvbWUoKGFyZykgPT4gL1tcXHVFMDA5XFx1RTAzRF1hXFx1RTAwMC9pLnRlc3QoU3RyaW5nKGFyZykpKSAmJlxuICAgIGFyZ3Muc29tZSgoYXJnKSA9PiBTdHJpbmcoYXJnKS5pbmNsdWRlcyhcIlxcdUUwMDNcIikgfHwgU3RyaW5nKGFyZykuaW5jbHVkZXMoXCJcXHVFMDE3XCIpKVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZpbmRBcmdzXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdIE92ZXJyaWRlIHRpbWVvdXQgZm9yIGxvb2t1cC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGx9IFt2aXNpYmxlXSBXaGV0aGVyIHRvIHJlcXVpcmUgZWxlbWVudHMgdG8gYmUgdmlzaWJsZSAoYHRydWVgKSBvciBoaWRkZW4gKGBmYWxzZWApLiBVc2UgYG51bGxgIHRvIGRpc2FibGUgdmlzaWJpbGl0eSBmaWx0ZXJpbmcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzY3JvbGxUb10gV2hldGhlciB0byBzY3JvbGwgZm91bmQgZWxlbWVudHMgaW50byB2aWV3IGJlZm9yZSByZXR1cm5pbmcgdGhlbS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VzZUJhc2VTZWxlY3Rvcl0gV2hldGhlciB0byBzY29wZSBieSB0aGUgYmFzZSBzZWxlY3Rvci5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7RmluZEFyZ3MgJiB7d2l0aEZhbGxiYWNrPzogYm9vbGVhbn19IEludGVyYWN0QXJnc1xuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdhaXRGb3JOb1NlbGVjdG9yQXJnc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbdXNlQmFzZVNlbGVjdG9yXSBXaGV0aGVyIHRvIHNjb3BlIGJ5IHRoZSBiYXNlIHNlbGVjdG9yLlxuICovXG5cbmNsYXNzIEVsZW1lbnROb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3IgeyB9XG5jb25zdCB7V2ViRHJpdmVyRXJyb3J9ID0gU2VsZW5pdW1FcnJvclxuXG4vKipcbiAqIEJhc2UgZHJpdmVyIHVzaW5nIHNlbGVuaXVtLXdlYmRyaXZlciBzZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViRHJpdmVyRHJpdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYnJvd3Nlci5qc1wiKS5kZWZhdWx0fSBhcmdzLmJyb3dzZXJcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbYXJncy5vcHRpb25zXVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2Jyb3dzZXIsIG9wdGlvbnMgPSB7fX0pIHtcbiAgICB0aGlzLmJyb3dzZXIgPSBicm93c2VyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuYmFzZVVybCA9IHVuZGVmaW5lZFxuICAgIHRoaXMud2ViRHJpdmVyID0gdW5kZWZpbmVkXG4gICAgdGhpcy5fZHJpdmVyVGltZW91dHMgPSA1MDAwXG4gICAgdGhpcy5fdGltZW91dHMgPSA1MDAwXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVcmxcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzZXRCYXNlVXJsKGJhc2VVcmwpIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0QmFzZVVybCgpIHtcbiAgICBpZiAoIXRoaXMuYmFzZVVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHJpdmVyIGJhc2UgVVJMIGhhcyBub3QgYmVlbiBzZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgZ2V0VGltZW91dHMoKSB7IHJldHVybiB0aGlzLl90aW1lb3V0cyB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRHJpdmVyfVxuICAgKi9cbiAgZ2V0V2ViRHJpdmVyKCkge1xuICAgIGlmICghdGhpcy53ZWJEcml2ZXIpIHRocm93IG5ldyBFcnJvcihcIkRyaXZlciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcIilcbiAgICB0aGlzLmJyb3dzZXIudGhyb3dJZkh0dHBTZXJ2ZXJFcnJvcigpXG5cbiAgICByZXR1cm4gdGhpcy53ZWJEcml2ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJEcml2ZXJ9IHdlYkRyaXZlclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNldFdlYkRyaXZlcih3ZWJEcml2ZXIpIHtcbiAgICB0aGlzLndlYkRyaXZlciA9IHdlYkRyaXZlclxuICAgIHRoaXMuYnJvd3Nlci5kcml2ZXIgPSB3ZWJEcml2ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInN0YXJ0KCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyXCIpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlcikge1xuICAgICAgYXdhaXQgdGltZW91dCh7dGltZW91dDogdGhpcy5nZXRUaW1lb3V0cygpLCBlcnJvck1lc3NhZ2U6IFwidGltZW91dCB3aGlsZSBxdWl0dGluZyBXZWJEcml2ZXJcIn0sIGFzeW5jICgpID0+IGF3YWl0IC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIHRoaXMud2ViRHJpdmVyPn0gKi8gKHRoaXMud2ViRHJpdmVyKS5xdWl0KCkpXG4gICAgfVxuXG4gICAgdGhpcy53ZWJEcml2ZXIgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJyb3dzZXIuZHJpdmVyID0gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ld1RpbWVvdXRcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBkcml2ZXJTZXRUaW1lb3V0cyhuZXdUaW1lb3V0KSB7XG4gICAgdGhpcy5fZHJpdmVyVGltZW91dHMgPSBuZXdUaW1lb3V0XG4gICAgYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5tYW5hZ2UoKS5zZXRUaW1lb3V0cyh7aW1wbGljaXQ6IG5ld1RpbWVvdXR9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZVRpbWVvdXRzKCkge1xuICAgIGlmICghdGhpcy5nZXRUaW1lb3V0cygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaW1lb3V0cyBoYXZlbid0IHByZXZpb3VzbHkgYmVlbiBzZXRcIilcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmRyaXZlclNldFRpbWVvdXRzKHRoaXMuZ2V0VGltZW91dHMoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbmV3VGltZW91dFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNldFRpbWVvdXRzKG5ld1RpbWVvdXQpIHtcbiAgICB0aGlzLl90aW1lb3V0cyA9IG5ld1RpbWVvdXRcbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVUaW1lb3V0cygpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRTZWxlY3RvcihzZWxlY3Rvcikge1xuICAgIHJldHVybiB0aGlzLmJyb3dzZXIuZ2V0U2VsZWN0b3Ioc2VsZWN0b3IpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBkcml2ZXJWaXNpdChwYXRoKSB7XG4gICAgY29uc3QgaXNBYnNvbHV0ZVVybCA9IC9eW2Etel0rOlxcL1xcLy9pLnRlc3QocGF0aClcbiAgICBjb25zdCB1cmwgPSBpc0Fic29sdXRlVXJsID8gcGF0aCA6IGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gXG5cbiAgICBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLmdldCh1cmwpXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbGwgY29va2llcyBmb3IgdGhlIGN1cnJlbnQgYnJvd3NlciBzZXNzaW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUFsbENvb2tpZXMoKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5tYW5hZ2UoKS5kZWxldGVBbGxDb29raWVzKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAqL1xuICBhc3luYyBnZXRDdXJyZW50VXJsKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5nZXRDdXJyZW50VXJsKClcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBcIlwiXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59ICovXG4gIGFzeW5jIGdldEhUTUwoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuZ2V0UGFnZVNvdXJjZSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gKi9cbiAgYXN5bmMgdGFrZVNjcmVlbnNob3QoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkudGFrZVNjcmVlbnNob3QoKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYnJvd3NlciBsb2dzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGdldEJyb3dzZXJMb2dzKCkge1xuICAgIGxldCBlbnRyaWVzXG5cbiAgICB0cnkge1xuICAgICAgZW50cmllcyA9IGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkubWFuYWdlKCkubG9ncygpLmdldChsb2dnaW5nLlR5cGUuQlJPV1NFUilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBjb25zdCBicm93c2VyTG9ncyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VNYXRjaCA9IGVudHJ5Lm1lc3NhZ2UubWF0Y2goL14oLispIChcXGQrKTooXFxkKykgKC4rKSQvKVxuICAgICAgbGV0IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2VNYXRjaCkge1xuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZU1hdGNoWzRdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlID0gZW50cnkubWVzc2FnZVxuICAgICAgfVxuXG4gICAgICBicm93c2VyTG9ncy5wdXNoKGAke2VudHJ5LmxldmVsLm5hbWV9OiAke21lc3NhZ2V9YClcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3NlckxvZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgZWxlbWVudHMgYnkgQ1NTIHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXT59XG4gICAqL1xuICBhc3luYyBhbGwoc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtzY3JvbGxUbyA9IGZhbHNlLCB2aXNpYmxlID0gdHJ1ZSwgdGltZW91dCwgdXNlQmFzZVNlbGVjdG9yID0gdHJ1ZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuICAgIGNvbnN0IHJlc3RBcmdzS2V5cyA9IE9iamVjdC5rZXlzKHJlc3RBcmdzKVxuICAgIGxldCBhY3R1YWxUaW1lb3V0XG5cbiAgICBpZiAodGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhY3R1YWxUaW1lb3V0ID0gdGhpcy5fZHJpdmVyVGltZW91dHNcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0dWFsVGltZW91dCA9IHRpbWVvdXRcbiAgICB9XG5cbiAgICBpZiAocmVzdEFyZ3NLZXlzLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhcmd1bWVudHM6ICR7cmVzdEFyZ3NLZXlzLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgY29uc3QgYWN0dWFsU2VsZWN0b3IgPSB1c2VCYXNlU2VsZWN0b3IgPyB0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKSA6IHNlbGVjdG9yXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IGdldFRpbWVMZWZ0ID0gKCkgPT4gTWF0aC5tYXgoYWN0dWFsVGltZW91dCAtIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSwgMClcbiAgICBjb25zdCBnZXRFbGVtZW50cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLmZpbmRFbGVtZW50cyhCeS5jc3MoYWN0dWFsU2VsZWN0b3IpKVxuXG4gICAgICBpZiAodmlzaWJsZSAhPT0gdHJ1ZSAmJiB2aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW11cblxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGZvdW5kRWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgaXNEaXNwbGF5ZWQgPSBhd2FpdCBlbGVtZW50LmlzRGlzcGxheWVkKClcblxuICAgICAgICBpZiAodmlzaWJsZSAmJiAhaXNEaXNwbGF5ZWQpIGNvbnRpbnVlXG4gICAgICAgIGlmICghdmlzaWJsZSAmJiBpc0Rpc3BsYXllZCkgY29udGludWVcblxuICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzLnB1c2goZWxlbWVudClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHNcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudFtdfSAqL1xuICAgIGxldCBlbGVtZW50cyA9IFtdXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgdGltZUxlZnQgPSBhY3R1YWxUaW1lb3V0ID09IDAgPyAwIDogZ2V0VGltZUxlZnQoKVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGltZUxlZnQgPT0gMCkge1xuICAgICAgICAgIGVsZW1lbnRzID0gYXdhaXQgZ2V0RWxlbWVudHMoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50cyA9IGF3YWl0IGdldEVsZW1lbnRzKClcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICB9LCB0aW1lTGVmdClcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsZXQgaXNTdGFsZUVsZW1lbnRFcnJvciA9IGZhbHNlXG5cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VsZW5pdW1FcnJvci5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikge1xuICAgICAgICAgIGlzU3RhbGVFbGVtZW50RXJyb3IgPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXZWJEcml2ZXJFcnJvciAmJiBlcnJvci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZVwiKSkge1xuICAgICAgICAgIGlzU3RhbGVFbGVtZW50RXJyb3IgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGVycm9yIGluc3RhbmNlb2YgU2VsZW5pdW1FcnJvci5UaW1lb3V0RXJyb3IgfHwgaXNTdGFsZUVsZW1lbnRFcnJvcilcbiAgICAgICAgICAmJiBnZXRUaW1lTGVmdCgpID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3JXaXRoQ2F1c2UoYENvdWxkbid0IGdldCBlbGVtZW50cyB3aXRoIHNlbGVjdG9yOiAke2FjdHVhbFNlbGVjdG9yfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yfWAsIGVycm9yKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2Nyb2xsVG8pIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICBhd2FpdCB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyhlbGVtZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgQ1NTIHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnQ+fVxuICAgKi9cbiAgYXN5bmMgZmluZChzZWxlY3RvciwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXX0gKi9cbiAgICBsZXQgZWxlbWVudHNcblxuICAgIHRyeSB7XG4gICAgICBlbGVtZW50cyA9IGF3YWl0IHRoaXMuYWxsKHNlbGVjdG9yLCBhcmdzKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfSAtICR7ZXJyb3IubWVzc2FnZX0gKHNlbGVjdG9yOiAke3RoaXMuZ2V0U2VsZWN0b3Ioc2VsZWN0b3IpfSlgLCBlcnJvcilcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3JXaXRoQ2F1c2UoYCR7dHlwZW9mIGVycm9yfSAtICR7ZXJyb3J9IChzZWxlY3RvcjogJHt0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKX0pYCwgZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIDEgZWxlbWVudHMgKCR7ZWxlbWVudHMubGVuZ3RofSkgd2FzIGZvdW5kIGJ5IENTUzogJHt0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKX1gKVxuICAgIH1cblxuICAgIGlmICghZWxlbWVudHNbMF0pIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRTZWNvbmRzID0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMFxuICAgICAgdGhyb3cgbmV3IEVsZW1lbnROb3RGb3VuZEVycm9yKGBFbGVtZW50IGNvdWxkbid0IGJlIGZvdW5kIGFmdGVyICR7ZWxhcHNlZFNlY29uZHMudG9GaXhlZCgyKX1zIGJ5IENTUzogJHt0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKX1gKVxuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c1swXVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgdGVzdCBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdElEXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudD59XG4gICAqL1xuICBhc3luYyBmaW5kQnlUZXN0SUQodGVzdElELCBhcmdzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZChgW2RhdGEtdGVzdGlkPScke3Rlc3RJRH0nXWAsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiB0ZXN0IElEIGlzIGN1cnJlbnRseSByZW5kZXJlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJRFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXNUZXN0SUQodGVzdElELCBhcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmluZEJ5VGVzdElEKHRlc3RJRCwgey4uLmFyZ3MsIHRpbWVvdXQ6IDB9KVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fCh7c2VsZWN0b3I6IHN0cmluZ30gJiBGaW5kQXJncyAmIHt3aXRoRmFsbGJhY2s/OiBib29sZWFufSl9IGVsZW1lbnRPcklkZW50aWZpZXJcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50Pn1cbiAgICovXG4gIGFzeW5jIF9maW5kRWxlbWVudChlbGVtZW50T3JJZGVudGlmaWVyLCBhcmdzKSB7XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudH0gKi9cbiAgICBsZXQgZWxlbWVudFxuXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50T3JJZGVudGlmaWVyID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmZpbmQoZWxlbWVudE9ySWRlbnRpZmllciwgYXJncylcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50T3JJZGVudGlmaWVyID09IFwib2JqZWN0XCIgJiYgZWxlbWVudE9ySWRlbnRpZmllciAhPT0gbnVsbCAmJiBcInNlbGVjdG9yXCIgaW4gZWxlbWVudE9ySWRlbnRpZmllcikge1xuICAgICAgY29uc3Qge3NlbGVjdG9yLCAuLi5yZXN0QXJnc30gPSBlbGVtZW50T3JJZGVudGlmaWVyXG5cbiAgICAgIGRlbGV0ZSByZXN0QXJncy53aXRoRmFsbGJhY2tcblxuICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZChzZWxlY3RvciwgcmVzdEFyZ3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fSAqLyAoZWxlbWVudE9ySWRlbnRpZmllcilcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgQ1NTIHNlbGVjdG9yIHdpdGhvdXQgd2FpdGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50Pn1cbiAgICovXG4gIGFzeW5jIGZpbmROb1dhaXQoc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuZHJpdmVyU2V0VGltZW91dHMoMClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kKHNlbGVjdG9yLCBhcmdzKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc3RvcmVUaW1lb3V0cygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyBhbiBlbGVtZW50LCBhbGxvd2luZyBzZWxlY3RvciBhcmdzIHdoZW4gdXNpbmcgYSBDU1Mgc2VsZWN0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fSBlbGVtZW50T3JJZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGNsaWNrKGVsZW1lbnRPcklkZW50aWZpZXIsIGFyZ3MpIHtcbiAgICBsZXQgdHJpZXMgPSAwXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJpZXMrK1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5fZmluZEVsZW1lbnQoZWxlbWVudE9ySWRlbnRpZmllciwgYXJncylcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuZ2V0V2ViRHJpdmVyKCkuYWN0aW9ucyh7YXN5bmM6IHRydWV9KVxuXG4gICAgICAgIGF3YWl0IGFjdGlvbnMubW92ZSh7b3JpZ2luOiBlbGVtZW50fSkuY2xpY2soKS5wZXJmb3JtKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvclwiIHx8IGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yXCIpIHtcbiAgICAgICAgICAgIGlmICh0cmllcyA+PSAzKSB7XG4gICAgICAgICAgICAgIHRocm93IGVycm9yV2l0aENhdXNlKGBFbGVtZW50ICR7ZWxlbWVudE9ySWRlbnRpZmllci5jb25zdHJ1Y3Rvci5uYW1lfSBjbGljayBmYWlsZWQgYWZ0ZXIgJHt0cmllc30gdHJpZXMgLSAke2Vycm9yLmNvbnN0cnVjdG9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCwgZXJyb3IpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCB3YWl0KDUwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgRWxlbWVudCAke2VsZW1lbnRPcklkZW50aWZpZXIuY29uc3RydWN0b3IubmFtZX0gY2xpY2sgZmFpbGVkIC0gJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgRWxlbWVudCAke2VsZW1lbnRPcklkZW50aWZpZXIuY29uc3RydWN0b3IubmFtZX0gY2xpY2sgZmFpbGVkIC0gJHt0eXBlb2YgZXJyb3J9OiAke2Vycm9yfWAsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzY3JvbGxFbGVtZW50SW50b1ZpZXcoZWxlbWVudCkge1xuICAgIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuYWN0aW9ucyh7YXN5bmM6IHRydWV9KS5tb3ZlKHtvcmlnaW46IGVsZW1lbnR9KS5wZXJmb3JtKClcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIGFuIGVsZW1lbnQgaW50byB2aWV3LlxuICAgKiBAcGFyYW0ge3N0cmluZ3xpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudHwoe3NlbGVjdG9yOiBzdHJpbmd9ICYgRmluZEFyZ3MgJiB7d2l0aEZhbGxiYWNrPzogYm9vbGVhbn0pfSBlbGVtZW50T3JJZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNjcm9sbEludG9WaWV3KGVsZW1lbnRPcklkZW50aWZpZXIsIGFyZ3MpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5fZmluZEVsZW1lbnQoZWxlbWVudE9ySWRlbnRpZmllciwgYXJncylcbiAgICBhd2FpdCB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyhlbGVtZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdGVzdCBJRCBpbnRvIHZpZXcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXN0SURcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc2Nyb2xsVGVzdElkSW50b1ZpZXcodGVzdElELCBhcmdzKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZEJ5VGVzdElEKHRlc3RJRCwgYXJncylcbiAgICBhd2FpdCB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyhlbGVtZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVyYWN0cyB3aXRoIGFuIGVsZW1lbnQgYnkgY2FsbGluZyBhIG1ldGhvZCBvbiBpdCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuXG4gICAqIFJldHJ5aW5nIG9uIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciwgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciwgb3IgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR8c3RyaW5nfHtzZWxlY3Rvcjogc3RyaW5nfSAmIEludGVyYWN0QXJnc30gZWxlbWVudE9ySWRlbnRpZmllciBUaGUgZWxlbWVudCBvciBhIENTUyBzZWxlY3RvciB0byBmaW5kIHRoZSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgdG8gY2FsbCBvbiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIGludGVyYWN0KGVsZW1lbnRPcklkZW50aWZpZXIsIG1ldGhvZE5hbWUsIC4uLmFyZ3MpIHtcbiAgICBsZXQgdHJpZXMgPSAwXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJpZXMrK1xuXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5fZmluZEVsZW1lbnQoZWxlbWVudE9ySWRlbnRpZmllcilcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09IFwic2VuZEtleXNcIikge1xuICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudE9ySWRlbnRpZmllciA9PT0gXCJvYmplY3RcIiAmJiBlbGVtZW50T3JJZGVudGlmaWVyICYmIFwid2l0aEZhbGxiYWNrXCIgaW4gZWxlbWVudE9ySWRlbnRpZmllciAmJiBlbGVtZW50T3JJZGVudGlmaWVyLndpdGhGYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW50ZXJhY3RTZW5kS2V5c1dpdGhGYWxsYmFjayhlbGVtZW50LCAuLi5hcmdzKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhd2FpdCBlbGVtZW50LnNlbmRLZXlzKC4uLmFyZ3MpXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gXCJjbGlja1wiKSB7XG4gICAgICAgICAgaWYgKGlzV2ViRHJpdmVyRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGljayhlbGVtZW50KVxuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IC8qKiBAdHlwZSB7e2NsaWNrOiAoLi4uY2xpY2tBcmdzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+fX0gKi8gKGVsZW1lbnQpLmNsaWNrKC4uLmFyZ3MpXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gXCJwcmVzc1wiKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pbnRlcmFjdFByZXNzKGVsZW1lbnQpXG5cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSBpZiAoISgvKiogQHR5cGUge2FueX0gKi8gKGVsZW1lbnQpKVttZXRob2ROYW1lXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbGVtZW50LmNvbnN0cnVjdG9yLm5hbWV9IGhhc24ndCBhbiBhdHRyaWJ1dGUgbmFtZWQ6ICR7bWV0aG9kTmFtZX1gKVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoLyoqIEB0eXBlIHthbnl9ICovIChlbGVtZW50KSlbbWV0aG9kTmFtZV0gIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VsZW1lbnQuY29uc3RydWN0b3IubmFtZX0jJHttZXRob2ROYW1lfSBpcyBub3QgYSBmdW5jdGlvbmApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb250IGNhbGwgd2l0aCBjYW5kaWRhdGUsIGJlY2F1c2UgdGhhdCB3aWxsIGJpbmQgdGhlIGZ1bmN0aW9uIHdyb25nLlxuICAgICAgICByZXR1cm4gYXdhaXQgKC8qKiBAdHlwZSB7YW55fSAqLyAoZWxlbWVudCkpW21ldGhvZE5hbWVdKC4uLmFyZ3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnN0IHJldHJ5YWJsZUVycm9yTmFtZSA9IGdldFJldHJ5YWJsZUludGVyYWN0RXJyb3JOYW1lKGVycm9yKVxuXG4gICAgICAgICAgaWYgKHJldHJ5YWJsZUVycm9yTmFtZSkge1xuICAgICAgICAgICAgLy8gUmV0cnkgZmluZGluZyB0aGUgZWxlbWVudCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBpdFxuICAgICAgICAgICAgaWYgKHRyaWVzID49IDMpIHtcbiAgICAgICAgICAgICAgbGV0IGVsZW1lbnREZXNjcmlwdGlvblxuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudE9ySWRlbnRpZmllciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudERlc2NyaXB0aW9uID0gYENTUyBzZWxlY3RvciAke2VsZW1lbnRPcklkZW50aWZpZXJ9YFxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnREZXNjcmlwdGlvbiA9IGAke2VsZW1lbnQuY29uc3RydWN0b3IubmFtZX1gXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlbGVtZW50RGVzY3JpcHRpb259ICR7bWV0aG9kTmFtZX0gZmFpbGVkIGFmdGVyICR7dHJpZXN9IHRyaWVzIC0gJHtyZXRyeWFibGVFcnJvck5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCwgZXJyb3IpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCB3YWl0KDUwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlbGVtZW50LmNvbnN0cnVjdG9yLm5hbWV9ICR7bWV0aG9kTmFtZX0gZmFpbGVkIC0gJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlbGVtZW50LmNvbnN0cnVjdG9yLm5hbWV9ICR7bWV0aG9kTmFtZX0gZmFpbGVkIC0gJHt0eXBlb2YgZXJyb3J9OiAke2Vycm9yfWAsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPn1cbiAgICovXG4gIGFzeW5jIHJlYWRJbnRlcmFjdGFibGVWYWx1ZShlbGVtZW50KSB7XG4gICAgY29uc3QgdmFsdWVQcm9wZXJ0eSA9IGF3YWl0IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcblxuICAgIGlmICh0eXBlb2YgdmFsdWVQcm9wZXJ0eSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdmFsdWVQcm9wZXJ0eVxuICAgIH1cblxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gYXdhaXQgZWxlbWVudC5nZXRUZXh0KClcblxuICAgIGlmICh0eXBlb2YgdGV4dENvbnRlbnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRleHRDb250ZW50XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gICAqL1xuICBhc3luYyBpbnRlcmFjdFNlbmRLZXlzV2l0aEZhbGxiYWNrKGVsZW1lbnQsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHBlY3RlZEFwcGVuZCA9IGdldFNlbmRLZXlzVGV4dEFwcGVuZCguLi5hcmdzKVxuICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gYXdhaXQgdGhpcy5yZWFkSW50ZXJhY3RhYmxlVmFsdWUoZWxlbWVudClcbiAgICBjb25zdCBzZW5kS2V5c1Jlc3VsdCA9IGF3YWl0IGVsZW1lbnQuc2VuZEtleXMoLi4uYXJncylcbiAgICBjb25zdCBhZnRlclZhbHVlID0gYXdhaXQgdGhpcy5yZWFkSW50ZXJhY3RhYmxlVmFsdWUoZWxlbWVudClcblxuICAgIGlmICh0eXBlb2YgYmVmb3JlVmFsdWUgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYWZ0ZXJWYWx1ZSA9PSBcInN0cmluZ1wiICYmIGFmdGVyVmFsdWUgIT09IGJlZm9yZVZhbHVlKSB7XG4gICAgICByZXR1cm4gc2VuZEtleXNSZXN1bHRcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VmFsdWUgPSBnZXRTZW5kS2V5c1VzZXNTZWxlY3RBbGxBbmREZWxldGUoLi4uYXJncykgPyBleHBlY3RlZEFwcGVuZCA6IGAke2JlZm9yZVZhbHVlIHx8IFwiXCJ9JHtleHBlY3RlZEFwcGVuZH1gXG5cbiAgICBpZiAodHlwZW9mIGJlZm9yZVZhbHVlID09IFwic3RyaW5nXCIgJiYgbmV4dFZhbHVlID09PSBiZWZvcmVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHNlbmRLZXlzUmVzdWx0XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5leGVjdXRlU2NyaXB0KGBcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhcmd1bWVudHNbMF1cbiAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IFN0cmluZyhhcmd1bWVudHNbMV0gPz8gXCJcIilcblxuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50LmZvY3VzID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50LnZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVsZW1lbnQpXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwgXCJ2YWx1ZVwiKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiKVxuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gU3RyaW5nKGVsZW1lbnQudmFsdWUpXG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwoZWxlbWVudCwgbmV4dFZhbHVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSBuZXh0VmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50Ll92YWx1ZVRyYWNrZXIgJiYgdHlwZW9mIGVsZW1lbnQuX3ZhbHVlVHJhY2tlci5zZXRWYWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlbGVtZW50Ll92YWx1ZVRyYWNrZXIuc2V0VmFsdWUocHJldmlvdXNWYWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7YnViYmxlczogdHJ1ZX0pKVxuICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHtidWJibGVzOiB0cnVlfSkpXG4gICAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlXG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBuZXh0VmFsdWVcbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHtidWJibGVzOiB0cnVlfSkpXG4gICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgYCwgZWxlbWVudCwgbmV4dFZhbHVlKVxuXG4gICAgcmV0dXJuIHNlbmRLZXlzUmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGludGVyYWN0UHJlc3MoZWxlbWVudCkge1xuICAgIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuZXhlY3V0ZVNjcmlwdChgXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXJndW1lbnRzWzBdXG5cbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5mb2N1cyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZWxlbWVudC5mb2N1cygpXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIG9mIFtcInBvaW50ZXJkb3duXCIsIFwibW91c2Vkb3duXCIsIFwicG9pbnRlcnVwXCIsIFwibW91c2V1cFwiLCBcImNsaWNrXCJdKSB7XG4gICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBuZXcgTW91c2VFdmVudChldmVudE5hbWUsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICAgICAgdmlldzogd2luZG93XG4gICAgICAgIH0pXG5cbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpXG4gICAgICB9XG4gICAgYCwgZWxlbWVudClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtXYWl0Rm9yTm9TZWxlY3RvckFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JOb1NlbGVjdG9yKHNlbGVjdG9yLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCB7dXNlQmFzZVNlbGVjdG9yLCAuLi5yZXN0QXJnc30gPSBhcmdzXG5cbiAgICBpZiAoT2JqZWN0LmtleXMocmVzdEFyZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBhcmdzOiAke09iamVjdC5rZXlzKHJlc3RBcmdzKS5qb2luKFwiLCBcIil9YClcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxTZWxlY3RvciA9IHVzZUJhc2VTZWxlY3RvciA/IHRoaXMuZ2V0U2VsZWN0b3Ioc2VsZWN0b3IpIDogc2VsZWN0b3JcblxuICAgIGF3YWl0IHRoaXMuZHJpdmVyU2V0VGltZW91dHMoMClcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl93aXRoUmV0aHJvd25FcnJvcnMoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLndhaXQoXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLmZpbmRFbGVtZW50cyhCeS5jc3MoYWN0dWFsU2VsZWN0b3IpKVxuXG4gICAgICAgICAgICAvLyBOb3QgZm91bmQgYXQgYWxsXG4gICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZvdW5kIGJ1dCBub3QgdmlzaWJsZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNEaXNwbGF5ZWQgPSBhd2FpdCBlbGVtZW50c1swXS5pc0Rpc3BsYXllZCgpXG5cbiAgICAgICAgICAgICAgcmV0dXJuICFpc0Rpc3BsYXllZFxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgICAgICAgICAoZXJyb3IuY29uc3RydWN0b3IubmFtZSA9PT0gXCJTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvclwiIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZVwiKSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5nZXRUaW1lb3V0cygpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVzdG9yZVRpbWVvdXRzKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPGFueT59IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyBfd2l0aFJldGhyb3duRXJyb3JzKGNhbGxiYWNrKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFdlYkRyaXZlckVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yV2l0aENhdXNlKGBTZWxlbml1bSAke2Vycm9yLmNvbnN0cnVjdG9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCwgZXJyb3IpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
674
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViZHJpdmVyLWRyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kcml2ZXJzL3dlYmRyaXZlci1kcml2ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksYUFBYSxFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDN0QsT0FBTyxPQUFPLE1BQU0sbUNBQW1DLENBQUE7QUFDdkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUUvQzs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUs7SUFDcEMsTUFBTSxLQUFLLEdBQUcsdUNBQXVDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ25CLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsa0JBQWtCLENBQUMsT0FBTztJQUNqQyxPQUFPLE9BQU8sQ0FDWixPQUFPO1FBQ1AsT0FBTyxPQUFPLEtBQUssUUFBUTtRQUMzQixPQUFPLElBQUksT0FBTztRQUNsQixPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUNwQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQUs7SUFDekIsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQTtJQUMvQixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsNkJBQTZCLENBQUMsS0FBSztJQUMxQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUE7SUFFeEIsT0FBTyxZQUFZ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O29CQUNyQixDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2YsSUFDRSxLQUFLLFlBQVksS0FBSzs0QkFDdEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlHLENBQUM7NEJBQ0QsT0FBTyxLQUFLLENBQUE7d0JBQ2QsQ0FBQzt3QkFFRCxNQUFNLEtBQUssQ0FBQTtvQkFDYixDQUFDO2dCQUNILENBQUMsRUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ25CLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVE7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFBO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksY0FBYyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sY0FBYyxDQUFDLFlBQVksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3JGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssQ0FBQTtZQUNiLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCeSwgZXJyb3IgYXMgU2VsZW5pdW1FcnJvcn0gZnJvbSBcInNlbGVuaXVtLXdlYmRyaXZlclwiXG5pbXBvcnQgbG9nZ2luZyBmcm9tIFwic2VsZW5pdW0td2ViZHJpdmVyL2xpYi9sb2dnaW5nLmpzXCJcbmltcG9ydCB7d2FpdH0gZnJvbSBcImF3YWl0ZXJ5XCJcbmltcG9ydCB0aW1lb3V0IGZyb20gXCJhd2FpdGVyeS9idWlsZC90aW1lb3V0LmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHBhcmFtIHt1bmtub3dufSBjYXVzZVxuICogQHJldHVybnMge0Vycm9yICYge2NhdXNlOiB1bmtub3dufX1cbiAqL1xuZnVuY3Rpb24gZXJyb3JXaXRoQ2F1c2UobWVzc2FnZSwgY2F1c2UpIHtcbiAgY29uc3QgZXJyb3IgPSAvKiogQHR5cGUge0Vycm9yICYge2NhdXNlOiB1bmtub3dufX0gKi8gKG5ldyBFcnJvcihtZXNzYWdlKSlcbiAgZXJyb3IuY2F1c2UgPSBjYXVzZVxuICByZXR1cm4gZXJyb3Jcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtlbGVtZW50IGlzIGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fVxuICovXG5mdW5jdGlvbiBpc1dlYkRyaXZlckVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBlbGVtZW50ICYmXG4gICAgdHlwZW9mIGVsZW1lbnQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcImdldElkXCIgaW4gZWxlbWVudCAmJlxuICAgIHR5cGVvZiBlbGVtZW50LmdldElkID09PSBcImZ1bmN0aW9uXCJcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3JcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldEVycm9yTmFtZShlcnJvcikge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJldHVybiBlcnJvci5jb25zdHJ1Y3Rvci5uYW1lXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSBlcnJvclxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0UmV0cnlhYmxlSW50ZXJhY3RFcnJvck5hbWUoZXJyb3IpIHtcbiAgbGV0IGN1cnJlbnRFcnJvciA9IGVycm9yXG5cbiAgd2hpbGUgKGN1cnJlbnRFcnJvcikge1xuICAgIGNvbnN0IGVycm9yTmFtZSA9IGdldEVycm9yTmFtZShjdXJyZW50RXJyb3IpXG5cbiAgICBpZiAoZXJyb3JOYW1lID09PSBcIkVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvclwiIHx8IGVycm9yTmFtZSA9PT0gXCJFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yXCIgfHwgZXJyb3JOYW1lID09PSBcIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yXCIpIHtcbiAgICAgIHJldHVybiBlcnJvck5hbWVcbiAgICB9XG5cbiAgICBpZiAoIShjdXJyZW50RXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgfHwgIShcImNhdXNlXCIgaW4gY3VycmVudEVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGN1cnJlbnRFcnJvciA9IGN1cnJlbnRFcnJvci5jYXVzZVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEBwYXJhbSB7Li4uYW55fSBhcmdzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRTZW5kS2V5c1RleHRBcHBlbmQoLi4uYXJncykge1xuICByZXR1cm4gYXJnc1xuICAgIC5tYXAoKGFyZykgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nQXJnID0gU3RyaW5nKGFyZylcblxuICAgICAgaWYgKC9bXFx1RTAwOVxcdUUwM0RdYVxcdUUwMDAvaS50ZXN0KHN0cmluZ0FyZykpIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cmluZ0FyZy5yZXBsYWNlKC9bXFx1RTAwMC1cXHVGOEZGXS9nLCBcIlwiKVxuICAgIH0pXG4gICAgLmpvaW4oXCJcIilcbn1cblxuLyoqXG4gKiBAcGFyYW0gey4uLmFueX0gYXJnc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGdldFNlbmRLZXlzVXNlc1NlbGVjdEFsbEFuZERlbGV0ZSguLi5hcmdzKSB7XG4gIHJldHVybiBhcmdzLnNvbWUoKGFyZykgPT4gL1tcXHVFMDA5XFx1RTAzRF1hXFx1RTAwMC9pLnRlc3QoU3RyaW5nKGFyZykpKSAmJlxuICAgIGFyZ3Muc29tZSgoYXJnKSA9PiBTdHJpbmcoYXJnKS5pbmNsdWRlcyhcIlxcdUUwMDNcIikgfHwgU3RyaW5nKGFyZykuaW5jbHVkZXMoXCJcXHVFMDE3XCIpKVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZpbmRBcmdzXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdIE92ZXJyaWRlIHRpbWVvdXQgZm9yIGxvb2t1cC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGx9IFt2aXNpYmxlXSBXaGV0aGVyIHRvIHJlcXVpcmUgZWxlbWVudHMgdG8gYmUgdmlzaWJsZSAoYHRydWVgKSBvciBoaWRkZW4gKGBmYWxzZWApLiBVc2UgYG51bGxgIHRvIGRpc2FibGUgdmlzaWJpbGl0eSBmaWx0ZXJpbmcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzY3JvbGxUb10gV2hldGhlciB0byBzY3JvbGwgZm91bmQgZWxlbWVudHMgaW50byB2aWV3IGJlZm9yZSByZXR1cm5pbmcgdGhlbS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VzZUJhc2VTZWxlY3Rvcl0gV2hldGhlciB0byBzY29wZSBieSB0aGUgYmFzZSBzZWxlY3Rvci5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7RmluZEFyZ3MgJiB7d2l0aEZhbGxiYWNrPzogYm9vbGVhbn19IEludGVyYWN0QXJnc1xuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdhaXRGb3JOb1NlbGVjdG9yQXJnc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbdXNlQmFzZVNlbGVjdG9yXSBXaGV0aGVyIHRvIHNjb3BlIGJ5IHRoZSBiYXNlIHNlbGVjdG9yLlxuICovXG5cbmNsYXNzIEVsZW1lbnROb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3IgeyB9XG5jb25zdCB7V2ViRHJpdmVyRXJyb3J9ID0gU2VsZW5pdW1FcnJvclxuXG4vKipcbiAqIEJhc2UgZHJpdmVyIHVzaW5nIHNlbGVuaXVtLXdlYmRyaXZlciBzZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViRHJpdmVyRHJpdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYnJvd3Nlci5qc1wiKS5kZWZhdWx0fSBhcmdzLmJyb3dzZXJcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbYXJncy5vcHRpb25zXVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2Jyb3dzZXIsIG9wdGlvbnMgPSB7fX0pIHtcbiAgICB0aGlzLmJyb3dzZXIgPSBicm93c2VyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuYmFzZVVybCA9IHVuZGVmaW5lZFxuICAgIHRoaXMud2ViRHJpdmVyID0gdW5kZWZpbmVkXG4gICAgdGhpcy5fZHJpdmVyVGltZW91dHMgPSA1MDAwXG4gICAgdGhpcy5fdGltZW91dHMgPSA1MDAwXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVcmxcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzZXRCYXNlVXJsKGJhc2VVcmwpIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0QmFzZVVybCgpIHtcbiAgICBpZiAoIXRoaXMuYmFzZVVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHJpdmVyIGJhc2UgVVJMIGhhcyBub3QgYmVlbiBzZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgZ2V0VGltZW91dHMoKSB7IHJldHVybiB0aGlzLl90aW1lb3V0cyB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRHJpdmVyfVxuICAgKi9cbiAgZ2V0V2ViRHJpdmVyKCkge1xuICAgIGlmICghdGhpcy53ZWJEcml2ZXIpIHRocm93IG5ldyBFcnJvcihcIkRyaXZlciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcIilcbiAgICB0aGlzLmJyb3dzZXIudGhyb3dJZkh0dHBTZXJ2ZXJFcnJvcigpXG5cbiAgICByZXR1cm4gdGhpcy53ZWJEcml2ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJEcml2ZXJ9IHdlYkRyaXZlclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNldFdlYkRyaXZlcih3ZWJEcml2ZXIpIHtcbiAgICB0aGlzLndlYkRyaXZlciA9IHdlYkRyaXZlclxuICAgIHRoaXMuYnJvd3Nlci5kcml2ZXIgPSB3ZWJEcml2ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInN0YXJ0KCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyXCIpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlcikge1xuICAgICAgYXdhaXQgdGltZW91dCh7dGltZW91dDogdGhpcy5nZXRUaW1lb3V0cygpLCBlcnJvck1lc3NhZ2U6IFwidGltZW91dCB3aGlsZSBxdWl0dGluZyBXZWJEcml2ZXJcIn0sIGFzeW5jICgpID0+IGF3YWl0IC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIHRoaXMud2ViRHJpdmVyPn0gKi8gKHRoaXMud2ViRHJpdmVyKS5xdWl0KCkpXG4gICAgfVxuXG4gICAgdGhpcy53ZWJEcml2ZXIgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJyb3dzZXIuZHJpdmVyID0gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ld1RpbWVvdXRcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBkcml2ZXJTZXRUaW1lb3V0cyhuZXdUaW1lb3V0KSB7XG4gICAgdGhpcy5fZHJpdmVyVGltZW91dHMgPSBuZXdUaW1lb3V0XG4gICAgYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5tYW5hZ2UoKS5zZXRUaW1lb3V0cyh7aW1wbGljaXQ6IG5ld1RpbWVvdXR9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZVRpbWVvdXRzKCkge1xuICAgIGlmICghdGhpcy5nZXRUaW1lb3V0cygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaW1lb3V0cyBoYXZlbid0IHByZXZpb3VzbHkgYmVlbiBzZXRcIilcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmRyaXZlclNldFRpbWVvdXRzKHRoaXMuZ2V0VGltZW91dHMoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbmV3VGltZW91dFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNldFRpbWVvdXRzKG5ld1RpbWVvdXQpIHtcbiAgICB0aGlzLl90aW1lb3V0cyA9IG5ld1RpbWVvdXRcbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVUaW1lb3V0cygpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRTZWxlY3RvcihzZWxlY3Rvcikge1xuICAgIHJldHVybiB0aGlzLmJyb3dzZXIuZ2V0U2VsZWN0b3Ioc2VsZWN0b3IpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBkcml2ZXJWaXNpdChwYXRoKSB7XG4gICAgY29uc3QgaXNBYnNvbHV0ZVVybCA9IC9eW2Etel0rOlxcL1xcLy9pLnRlc3QocGF0aClcbiAgICBjb25zdCB1cmwgPSBpc0Fic29sdXRlVXJsID8gcGF0aCA6IGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gXG5cbiAgICBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLmdldCh1cmwpXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbGwgY29va2llcyBmb3IgdGhlIGN1cnJlbnQgYnJvd3NlciBzZXNzaW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUFsbENvb2tpZXMoKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5tYW5hZ2UoKS5kZWxldGVBbGxDb29raWVzKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAqL1xuICBhc3luYyBnZXRDdXJyZW50VXJsKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5nZXRDdXJyZW50VXJsKClcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBcIlwiXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59ICovXG4gIGFzeW5jIGdldEhUTUwoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuZ2V0UGFnZVNvdXJjZSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gKi9cbiAgYXN5bmMgdGFrZVNjcmVlbnNob3QoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkudGFrZVNjcmVlbnNob3QoKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYnJvd3NlciBsb2dzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGdldEJyb3dzZXJMb2dzKCkge1xuICAgIGxldCBlbnRyaWVzXG5cbiAgICB0cnkge1xuICAgICAgZW50cmllcyA9IGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkubWFuYWdlKCkubG9ncygpLmdldChsb2dnaW5nLlR5cGUuQlJPV1NFUilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBjb25zdCBicm93c2VyTG9ncyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VNYXRjaCA9IGVudHJ5Lm1lc3NhZ2UubWF0Y2goL14oLispIChcXGQrKTooXFxkKykgKC4rKSQvKVxuICAgICAgbGV0IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2VNYXRjaCkge1xuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZU1hdGNoWzRdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlID0gZW50cnkubWVzc2FnZVxuICAgICAgfVxuXG4gICAgICBicm93c2VyTG9ncy5wdXNoKGAke2VudHJ5LmxldmVsLm5hbWV9OiAke21lc3NhZ2V9YClcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3NlckxvZ3NcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgZWxlbWVudHMgYnkgQ1NTIHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXT59XG4gICAqL1xuICBhc3luYyBhbGwoc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtzY3JvbGxUbyA9IGZhbHNlLCB2aXNpYmxlID0gdHJ1ZSwgdGltZW91dCwgdXNlQmFzZVNlbGVjdG9yID0gdHJ1ZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuICAgIGNvbnN0IHJlc3RBcmdzS2V5cyA9IE9iamVjdC5rZXlzKHJlc3RBcmdzKVxuICAgIGxldCBhY3R1YWxUaW1lb3V0XG5cbiAgICBpZiAodGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhY3R1YWxUaW1lb3V0ID0gdGhpcy5fZHJpdmVyVGltZW91dHNcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0dWFsVGltZW91dCA9IHRpbWVvdXRcbiAgICB9XG5cbiAgICBpZiAocmVzdEFyZ3NLZXlzLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhcmd1bWVudHM6ICR7cmVzdEFyZ3NLZXlzLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgY29uc3QgYWN0dWFsU2VsZWN0b3IgPSB1c2VCYXNlU2VsZWN0b3IgPyB0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKSA6IHNlbGVjdG9yXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IGdldFRpbWVMZWZ0ID0gKCkgPT4gTWF0aC5tYXgoYWN0dWFsVGltZW91dCAtIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSwgMClcbiAgICBjb25zdCBnZXRFbGVtZW50cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldFdlYkRyaXZlcigpLmZpbmRFbGVtZW50cyhCeS5jc3MoYWN0dWFsU2VsZWN0b3IpKVxuXG4gICAgICBpZiAodmlzaWJsZSAhPT0gdHJ1ZSAmJiB2aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW11cblxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGZvdW5kRWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgaXNEaXNwbGF5ZWQgPSBhd2FpdCBlbGVtZW50LmlzRGlzcGxheWVkKClcblxuICAgICAgICBpZiAodmlzaWJsZSAmJiAhaXNEaXNwbGF5ZWQpIGNvbnRpbnVlXG4gICAgICAgIGlmICghdmlzaWJsZSAmJiBpc0Rpc3BsYXllZCkgY29udGludWVcblxuICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzLnB1c2goZWxlbWVudClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHNcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudFtdfSAqL1xuICAgIGxldCBlbGVtZW50cyA9IFtdXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgdGltZUxlZnQgPSBhY3R1YWxUaW1lb3V0ID09IDAgPyAwIDogZ2V0VGltZUxlZnQoKVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGltZUxlZnQgPT0gMCkge1xuICAgICAgICAgIGVsZW1lbnRzID0gYXdhaXQgZ2V0RWxlbWVudHMoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50cyA9IGF3YWl0IGdldEVsZW1lbnRzKClcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICB9LCB0aW1lTGVmdClcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsZXQgaXNTdGFsZUVsZW1lbnRFcnJvciA9IGZhbHNlXG5cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VsZW5pdW1FcnJvci5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikge1xuICAgICAgICAgIGlzU3RhbGVFbGVtZW50RXJyb3IgPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXZWJEcml2ZXJFcnJvciAmJiBlcnJvci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJzdGFsZSBlbGVtZW50IHJlZmVyZW5jZVwiKSkge1xuICAgICAgICAgIGlzU3RhbGVFbGVtZW50RXJyb3IgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGVycm9yIGluc3RhbmNlb2YgU2VsZW5pdW1FcnJvci5UaW1lb3V0RXJyb3IgfHwgaXNTdGFsZUVsZW1lbnRFcnJvcilcbiAgICAgICAgICAmJiBnZXRUaW1lTGVmdCgpID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3JXaXRoQ2F1c2UoYENvdWxkbid0IGdldCBlbGVtZW50cyB3aXRoIHNlbGVjdG9yOiAke2FjdHVhbFNlbGVjdG9yfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yfWAsIGVycm9yKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2Nyb2xsVG8pIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICBhd2FpdCB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyhlbGVtZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgQ1NTIHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnQ+fVxuICAgKi9cbiAgYXN5bmMgZmluZChzZWxlY3RvciwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnRbXX0gKi9cbiAgICBsZXQgZWxlbWVudHNcblxuICAgIHRyeSB7XG4gICAgICBlbGVtZW50cyA9IGF3YWl0IHRoaXMuYWxsKHNlbGVjdG9yLCBhcmdzKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfSAtICR7ZXJyb3IubWVzc2FnZX0gKHNlbGVjdG9yOiAke3RoaXMuZ2V0U2VsZWN0b3Ioc2VsZWN0b3IpfSlgLCBlcnJvcilcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3JXaXRoQ2F1c2UoYCR7dHlwZW9mIGVycm9yfSAtICR7ZXJyb3J9IChzZWxlY3RvcjogJHt0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKX0pYCwgZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIDEgZWxlbWVudHMgKCR7ZWxlbWVudHMubGVuZ3RofSkgd2FzIGZvdW5kIGJ5IENTUzogJHt0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKX1gKVxuICAgIH1cblxuICAgIGlmICghZWxlbWVudHNbMF0pIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRTZWNvbmRzID0gKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMFxuICAgICAgdGhyb3cgbmV3IEVsZW1lbnROb3RGb3VuZEVycm9yKGBFbGVtZW50IGNvdWxkbid0IGJlIGZvdW5kIGFmdGVyICR7ZWxhcHNlZFNlY29uZHMudG9GaXhlZCgyKX1zIGJ5IENTUzogJHt0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKX1gKVxuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c1swXVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgdGVzdCBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdElEXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudD59XG4gICAqL1xuICBhc3luYyBmaW5kQnlUZXN0SUQodGVzdElELCBhcmdzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZChgW2RhdGEtdGVzdGlkPScke3Rlc3RJRH0nXWAsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiB0ZXN0IElEIGlzIGN1cnJlbnRseSByZW5kZXJlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJRFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXNUZXN0SUQodGVzdElELCBhcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmluZEJ5VGVzdElEKHRlc3RJRCwgey4uLmFyZ3MsIHRpbWVvdXQ6IDB9KVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWxlbWVudE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fCh7c2VsZWN0b3I6IHN0cmluZ30gJiBGaW5kQXJncyAmIHt3aXRoRmFsbGJhY2s/OiBib29sZWFufSl9IGVsZW1lbnRPcklkZW50aWZpZXJcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50Pn1cbiAgICovXG4gIGFzeW5jIF9maW5kRWxlbWVudChlbGVtZW50T3JJZGVudGlmaWVyLCBhcmdzKSB7XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudH0gKi9cbiAgICBsZXQgZWxlbWVudFxuXG4gICAgaWYgKHR5cGVvZiBlbGVtZW50T3JJZGVudGlmaWVyID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmZpbmQoZWxlbWVudE9ySWRlbnRpZmllciwgYXJncylcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50T3JJZGVudGlmaWVyID09IFwib2JqZWN0XCIgJiYgZWxlbWVudE9ySWRlbnRpZmllciAhPT0gbnVsbCAmJiBcInNlbGVjdG9yXCIgaW4gZWxlbWVudE9ySWRlbnRpZmllcikge1xuICAgICAgY29uc3Qge3NlbGVjdG9yLCAuLi5yZXN0QXJnc30gPSBlbGVtZW50T3JJZGVudGlmaWVyXG5cbiAgICAgIGRlbGV0ZSByZXN0QXJncy53aXRoRmFsbGJhY2tcblxuICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZChzZWxlY3RvciwgcmVzdEFyZ3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fSAqLyAoZWxlbWVudE9ySWRlbnRpZmllcilcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgQ1NTIHNlbGVjdG9yIHdpdGhvdXQgd2FpdGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50Pn1cbiAgICovXG4gIGFzeW5jIGZpbmROb1dhaXQoc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuZHJpdmVyU2V0VGltZW91dHMoMClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kKHNlbGVjdG9yLCBhcmdzKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc3RvcmVUaW1lb3V0cygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyBhbiBlbGVtZW50LCBhbGxvd2luZyBzZWxlY3RvciBhcmdzIHdoZW4gdXNpbmcgYSBDU1Mgc2VsZWN0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50fSBlbGVtZW50T3JJZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGNsaWNrKGVsZW1lbnRPcklkZW50aWZpZXIsIGFyZ3MpIHtcbiAgICBsZXQgdHJpZXMgPSAwXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJpZXMrK1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5fZmluZEVsZW1lbnQoZWxlbWVudE9ySWRlbnRpZmllciwgYXJncylcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuZ2V0V2ViRHJpdmVyKCkuYWN0aW9ucyh7YXN5bmM6IHRydWV9KVxuXG4gICAgICAgIGF3YWl0IGFjdGlvbnMubW92ZSh7b3JpZ2luOiBlbGVtZW50fSkuY2xpY2soKS5wZXJmb3JtKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvclwiIHx8IGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yXCIpIHtcbiAgICAgICAgICAgIGlmICh0cmllcyA+PSAzKSB7XG4gICAgICAgICAgICAgIHRocm93IGVycm9yV2l0aENhdXNlKGBFbGVtZW50ICR7ZWxlbWVudE9ySWRlbnRpZmllci5jb25zdHJ1Y3Rvci5uYW1lfSBjbGljayBmYWlsZWQgYWZ0ZXIgJHt0cmllc30gdHJpZXMgLSAke2Vycm9yLmNvbnN0cnVjdG9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCwgZXJyb3IpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCB3YWl0KDUwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgRWxlbWVudCAke2VsZW1lbnRPcklkZW50aWZpZXIuY29uc3RydWN0b3IubmFtZX0gY2xpY2sgZmFpbGVkIC0gJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgRWxlbWVudCAke2VsZW1lbnRPcklkZW50aWZpZXIuY29uc3RydWN0b3IubmFtZX0gY2xpY2sgZmFpbGVkIC0gJHt0eXBlb2YgZXJyb3J9OiAke2Vycm9yfWAsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzY3JvbGxFbGVtZW50SW50b1ZpZXcoZWxlbWVudCkge1xuICAgIGF3YWl0IHRoaXMuZ2V0V2ViRHJpdmVyKCkuYWN0aW9ucyh7YXN5bmM6IHRydWV9KS5tb3ZlKHtvcmlnaW46IGVsZW1lbnR9KS5wZXJmb3JtKClcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIGFuIGVsZW1lbnQgaW50byB2aWV3LlxuICAgKiBAcGFyYW0ge3N0cmluZ3xpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudHwoe3NlbGVjdG9yOiBzdHJpbmd9ICYgRmluZEFyZ3MgJiB7d2l0aEZhbGxiYWNrPzogYm9vbGVhbn0pfSBlbGVtZW50T3JJZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNjcm9sbEludG9WaWV3KGVsZW1lbnRPcklkZW50aWZpZXIsIGFyZ3MpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5fZmluZEVsZW1lbnQoZWxlbWVudE9ySWRlbnRpZmllciwgYXJncylcbiAgICBhd2FpdCB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyhlbGVtZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdGVzdCBJRCBpbnRvIHZpZXcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXN0SURcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc2Nyb2xsVGVzdElkSW50b1ZpZXcodGVzdElELCBhcmdzKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZEJ5VGVzdElEKHRlc3RJRCwgYXJncylcbiAgICBhd2FpdCB0aGlzLnNjcm9sbEVsZW1lbnRJbnRvVmlldyhlbGVtZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVyYWN0cyB3aXRoIGFuIGVsZW1lbnQgYnkgY2FsbGluZyBhIG1ldGhvZCBvbiBpdCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuXG4gICAqIFJldHJ5aW5nIG9uIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciwgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciwgb3IgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR8c3RyaW5nfHtzZWxlY3Rvcjogc3RyaW5nfSAmIEludGVyYWN0QXJnc30gZWxlbWVudE9ySWRlbnRpZmllciBUaGUgZWxlbWVudCBvciBhIENTUyBzZWxlY3RvciB0byBmaW5kIHRoZSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgdG8gY2FsbCBvbiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIGludGVyYWN0KGVsZW1lbnRPcklkZW50aWZpZXIsIG1ldGhvZE5hbWUsIC4uLmFyZ3MpIHtcbiAgICBsZXQgdHJpZXMgPSAwXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJpZXMrK1xuXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5fZmluZEVsZW1lbnQoZWxlbWVudE9ySWRlbnRpZmllcilcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09IFwic2VuZEtleXNcIikge1xuICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudE9ySWRlbnRpZmllciA9PT0gXCJvYmplY3RcIiAmJiBlbGVtZW50T3JJZGVudGlmaWVyICYmIFwid2l0aEZhbGxiYWNrXCIgaW4gZWxlbWVudE9ySWRlbnRpZmllciAmJiBlbGVtZW50T3JJZGVudGlmaWVyLndpdGhGYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW50ZXJhY3RTZW5kS2V5c1dpdGhGYWxsYmFjayhlbGVtZW50LCAuLi5hcmdzKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhd2FpdCBlbGVtZW50LnNlbmRLZXlzKC4uLmFyZ3MpXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gXCJjbGlja1wiKSB7XG4gICAgICAgICAgaWYgKGlzV2ViRHJpdmVyRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGljayhlbGVtZW50KVxuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IC8qKiBAdHlwZSB7e2NsaWNrOiAoLi4uY2xpY2tBcmdzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+fX0gKi8gKGVsZW1lbnQpLmNsaWNrKC4uLmFyZ3MpXG4gICAgICAgIH0gZWxzZSBpZiAoISgvKiogQHR5cGUge2FueX0gKi8gKGVsZW1lbnQpKVttZXRob2ROYW1lXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbGVtZW50LmNvbnN0cnVjdG9yLm5hbWV9IGhhc24ndCBhbiBhdHRyaWJ1dGUgbmFtZWQ6ICR7bWV0aG9kTmFtZX1gKVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoLyoqIEB0eXBlIHthbnl9ICovIChlbGVtZW50KSlbbWV0aG9kTmFtZV0gIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VsZW1lbnQuY29uc3RydWN0b3IubmFtZX0jJHttZXRob2ROYW1lfSBpcyBub3QgYSBmdW5jdGlvbmApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb250IGNhbGwgd2l0aCBjYW5kaWRhdGUsIGJlY2F1c2UgdGhhdCB3aWxsIGJpbmQgdGhlIGZ1bmN0aW9uIHdyb25nLlxuICAgICAgICByZXR1cm4gYXdhaXQgKC8qKiBAdHlwZSB7YW55fSAqLyAoZWxlbWVudCkpW21ldGhvZE5hbWVdKC4uLmFyZ3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnN0IHJldHJ5YWJsZUVycm9yTmFtZSA9IGdldFJldHJ5YWJsZUludGVyYWN0RXJyb3JOYW1lKGVycm9yKVxuXG4gICAgICAgICAgaWYgKHJldHJ5YWJsZUVycm9yTmFtZSkge1xuICAgICAgICAgICAgLy8gUmV0cnkgZmluZGluZyB0aGUgZWxlbWVudCBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBpdFxuICAgICAgICAgICAgaWYgKHRyaWVzID49IDMpIHtcbiAgICAgICAgICAgICAgbGV0IGVsZW1lbnREZXNjcmlwdGlvblxuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudE9ySWRlbnRpZmllciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudERlc2NyaXB0aW9uID0gYENTUyBzZWxlY3RvciAke2VsZW1lbnRPcklkZW50aWZpZXJ9YFxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnREZXNjcmlwdGlvbiA9IGAke2VsZW1lbnQuY29uc3RydWN0b3IubmFtZX1gXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlbGVtZW50RGVzY3JpcHRpb259ICR7bWV0aG9kTmFtZX0gZmFpbGVkIGFmdGVyICR7dHJpZXN9IHRyaWVzIC0gJHtyZXRyeWFibGVFcnJvck5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCwgZXJyb3IpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCB3YWl0KDUwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlbGVtZW50LmNvbnN0cnVjdG9yLm5hbWV9ICR7bWV0aG9kTmFtZX0gZmFpbGVkIC0gJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgJHtlbGVtZW50LmNvbnN0cnVjdG9yLm5hbWV9ICR7bWV0aG9kTmFtZX0gZmFpbGVkIC0gJHt0eXBlb2YgZXJyb3J9OiAke2Vycm9yfWAsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPn1cbiAgICovXG4gIGFzeW5jIHJlYWRJbnRlcmFjdGFibGVWYWx1ZShlbGVtZW50KSB7XG4gICAgY29uc3QgdmFsdWVQcm9wZXJ0eSA9IGF3YWl0IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcblxuICAgIGlmICh0eXBlb2YgdmFsdWVQcm9wZXJ0eSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdmFsdWVQcm9wZXJ0eVxuICAgIH1cblxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gYXdhaXQgZWxlbWVudC5nZXRUZXh0KClcblxuICAgIGlmICh0eXBlb2YgdGV4dENvbnRlbnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRleHRDb250ZW50XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gICAqL1xuICBhc3luYyBpbnRlcmFjdFNlbmRLZXlzV2l0aEZhbGxiYWNrKGVsZW1lbnQsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHBlY3RlZEFwcGVuZCA9IGdldFNlbmRLZXlzVGV4dEFwcGVuZCguLi5hcmdzKVxuICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gYXdhaXQgdGhpcy5yZWFkSW50ZXJhY3RhYmxlVmFsdWUoZWxlbWVudClcbiAgICBjb25zdCBzZW5kS2V5c1Jlc3VsdCA9IGF3YWl0IGVsZW1lbnQuc2VuZEtleXMoLi4uYXJncylcbiAgICBjb25zdCBhZnRlclZhbHVlID0gYXdhaXQgdGhpcy5yZWFkSW50ZXJhY3RhYmxlVmFsdWUoZWxlbWVudClcblxuICAgIGlmICh0eXBlb2YgYmVmb3JlVmFsdWUgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYWZ0ZXJWYWx1ZSA9PSBcInN0cmluZ1wiICYmIGFmdGVyVmFsdWUgIT09IGJlZm9yZVZhbHVlKSB7XG4gICAgICByZXR1cm4gc2VuZEtleXNSZXN1bHRcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VmFsdWUgPSBnZXRTZW5kS2V5c1VzZXNTZWxlY3RBbGxBbmREZWxldGUoLi4uYXJncykgPyBleHBlY3RlZEFwcGVuZCA6IGAke2JlZm9yZVZhbHVlIHx8IFwiXCJ9JHtleHBlY3RlZEFwcGVuZH1gXG5cbiAgICBpZiAodHlwZW9mIGJlZm9yZVZhbHVlID09IFwic3RyaW5nXCIgJiYgbmV4dFZhbHVlID09PSBiZWZvcmVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHNlbmRLZXlzUmVzdWx0XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5leGVjdXRlU2NyaXB0KGBcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhcmd1bWVudHNbMF1cbiAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IFN0cmluZyhhcmd1bWVudHNbMV0gPz8gXCJcIilcblxuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50LmZvY3VzID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50LnZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVsZW1lbnQpXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwgXCJ2YWx1ZVwiKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiKVxuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gU3RyaW5nKGVsZW1lbnQudmFsdWUpXG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwoZWxlbWVudCwgbmV4dFZhbHVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSBuZXh0VmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50Ll92YWx1ZVRyYWNrZXIgJiYgdHlwZW9mIGVsZW1lbnQuX3ZhbHVlVHJhY2tlci5zZXRWYWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBlbGVtZW50Ll92YWx1ZVRyYWNrZXIuc2V0VmFsdWUocHJldmlvdXNWYWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7YnViYmxlczogdHJ1ZX0pKVxuICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHtidWJibGVzOiB0cnVlfSkpXG4gICAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlXG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBuZXh0VmFsdWVcbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHtidWJibGVzOiB0cnVlfSkpXG4gICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgYCwgZWxlbWVudCwgbmV4dFZhbHVlKVxuXG4gICAgcmV0dXJuIHNlbmRLZXlzUmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7V2FpdEZvck5vU2VsZWN0b3JBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB3YWl0Rm9yTm9TZWxlY3RvcihzZWxlY3RvciwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge3VzZUJhc2VTZWxlY3RvciwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKHJlc3RBcmdzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJnczogJHtPYmplY3Qua2V5cyhyZXN0QXJncykuam9pbihcIiwgXCIpfWApXG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsU2VsZWN0b3IgPSB1c2VCYXNlU2VsZWN0b3IgPyB0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9yKSA6IHNlbGVjdG9yXG5cbiAgICBhd2FpdCB0aGlzLmRyaXZlclNldFRpbWVvdXRzKDApXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fd2l0aFJldGhyb3duRXJyb3JzKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS53YWl0KFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgdGhpcy5nZXRXZWJEcml2ZXIoKS5maW5kRWxlbWVudHMoQnkuY3NzKGFjdHVhbFNlbGVjdG9yKSlcblxuICAgICAgICAgICAgLy8gTm90IGZvdW5kIGF0IGFsbFxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGb3VuZCBidXQgbm90IHZpc2libGVcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRGlzcGxheWVkID0gYXdhaXQgZWxlbWVudHNbMF0uaXNEaXNwbGF5ZWQoKVxuXG4gICAgICAgICAgICAgIHJldHVybiAhaXNEaXNwbGF5ZWRcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgICAgICAgICAgKGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3JcIiB8fCBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwic3RhbGUgZWxlbWVudCByZWZlcmVuY2VcIikpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuZ2V0VGltZW91dHMoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc3RvcmVUaW1lb3V0cygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxhbnk+fSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgYXN5bmMgX3dpdGhSZXRocm93bkVycm9ycyhjYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXZWJEcml2ZXJFcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcldpdGhDYXVzZShgU2VsZW5pdW0gJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "system-testing",
3
- "version": "1.0.93",
3
+ "version": "1.0.94",
4
4
  "description": "System testing with Selenium and browsers.",
5
5
  "bin": {
6
6
  "system-testing": "build/cli.js"