obsidian-integration-testing 15.0.0 → 16.0.0

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.
@@ -29,7 +29,7 @@ var import_capture_screenshot = require("./capture-screenshot.cjs");
29
29
  var import_sharp_loader = require("./sharp-loader.cjs");
30
30
  const FONT_SIZE_RATIO = 0.034;
31
31
  const BAND_HEIGHT_RATIO = 2.2;
32
- const BAND_OPACITY = 0.94;
32
+ const BAND_OPACITY = 1;
33
33
  const MINIMUM_FONT_SIZE_IN_PIXELS = 18;
34
34
  const MINIMUM_HEIGHT_RATIO = 0.075;
35
35
  const SIDE_MARGIN_RATIO = 0.04;
@@ -140,4 +140,4 @@ async function measureCaptionWidth(text, fontSizeInPixels) {
140
140
  labelScreenshot,
141
141
  measureLabelCaption
142
142
  });
143
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhYmVsLXNjcmVlbnNob3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBZGRzIGEgY2FwdGlvbiBiYW5kIHRvIGFuIGFscmVhZHktY2FwdHVyZWQgc2NyZWVuc2hvdC5cbiAqXG4gKiBBIHN0b3JlIGxpc3Rpbmcgc2hvd3Mgc2NyZWVuc2hvdHMgT05FIEFUIEEgVElNRSwgaW4gYSBjYXJvdXNlbCwgd2l0aCBub1xuICogY2FwdGlvbiBvZiBpdHMgb3duIFx1MjAxNCBzbyBhbiBpbWFnZSBoYXMgdG8gc2F5IHdoYXQgaXQgaXMgc2hvd2luZy4gV2l0aG91dCB0aGF0LFxuICogYSBzaG90IG9mIHRoZSBzdGF0ZSBhIHBsdWdpbiByZW1vdmVzIHJlYWRzIGFzIGEgc2hvdCBvZiB0aGUgc3RhdGUgdGhlIHBsdWdpblxuICogY2F1c2VzLCB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG1lc3NhZ2UuXG4gKlxuICogVGhlIGJhbmQgaXMgZHJhd24gb3ZlciB0aGUgQk9UVE9NIG9mIHRoZSBmcmFtZSwgZm9yIHR3byByZWFzb25zOiB0aGUgdG9wIGlzXG4gKiB3aGVyZSB0aGUgY29udGVudCBiZWluZyBkZW1vbnN0cmF0ZWQgdXN1YWxseSBzdGFydHMsIGFuZCB0aGUgYm90dG9tIG9mIGFuXG4gKiBPYnNpZGlhbiBmcmFtZSBpcyBjaHJvbWUgXHUyMDE0IHN0YXR1cyBiYXIsIHdvcmQgY291bnQsIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCB3aGljaCB0aGVcbiAqIGJhbmQgdGhlbiBjb3ZlcnMgcmF0aGVyIHRoYW4gY29tcGV0aW5nIHdpdGguXG4gKlxuICogVGhpcyBpcyBwb3N0LXByb2Nlc3NpbmcsIGRlbGliZXJhdGVseS4gVGhlIGNhcHR1cmUgc3RheXMgYW4gdW50b3VjaGVkIGRldmljZVxuICogZnJhbWUsIGFuZCByZXdvcmRpbmcgYSBsYWJlbCBuZWVkcyBubyByZS1zaG9vdC5cbiAqXG4gKiBBIGNhcHRpb24gdGhhdCBpcyB0b28gbG9uZyBmb3IgaXRzIGZyYW1lIGlzIE1FQVNVUkVEIGFuZCByZWplY3RlZCByYXRoZXIgdGhhblxuICogZHJhd24uIEFuIFNWRyBgPHRleHQ+YCBpcyBjbGlwcGVkIGJ5IGl0cyB2aWV3cG9ydCBhdCBib3RoIGVuZHMgd2l0aCBub1xuICogZWxsaXBzaXMgYW5kIG5vIGVycm9yLCBzbyBhbiBvdmVybG9uZyBjYXB0aW9uIHNoaXBzIGFzIGEgc2VudGVuY2UgZnJhZ21lbnRcbiAqIHRoYXQgbG9va3MgZGVsaWJlcmF0ZSBcdTIwMTQgYG5hYmxlZCBpbiBTZXR0aW5ncyAtIGEgbGlzdGVuaW5nIHBsdWdpbiBpcyB0b2xkYCBcdTIwMTRcbiAqIGFuZCB0aGUgZnJhbWUgaXMgc3RpbGwgZXhhY3RseSB0aGUgc2l6ZSBpdCBzaG91bGQgYmUsIHNvIGV2ZXJ5IGRpbWVuc2lvblxuICogYXNzZXJ0aW9uIGRvd25zdHJlYW0gc3RpbGwgcGFzc2VzLiBUaGUgb25seSBmZWVkYmFjayBhbnlvbmUgZXZlciBnb3Qgd2FzXG4gKiBsb29raW5nIGF0IHRoZSBQTkcuIFNlZSB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaGFycENvbXBvc2l0ZUxheWVyIH0gZnJvbSAnLi9zaGFycC1sb2FkZXIuY2pzJztcblxuaW1wb3J0IHsgcmVhZFBuZ0RpbWVuc2lvbnMgfSBmcm9tICcuL2NhcHR1cmUtc2NyZWVuc2hvdC5janMnO1xuaW1wb3J0IHsgaW1wb3J0U2hhcnAgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb21wdXRlTGFiZWxCYW5kfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlTGFiZWxCYW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGdlb21ldHJ5IG9mIHRoZSBjYXB0aW9uIGJhbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFiZWxCYW5kR2VvbWV0cnkge1xuICAvKipcbiAgICogSG93IG11Y2ggaG9yaXpvbnRhbCByb29tIHRoZSBjYXB0aW9uIGhhcywgaW4gcGl4ZWxzOiB0aGUgaW1hZ2Ugd2lkdGggbGVzc1xuICAgKiB0aGUgbWFyZ2luIGhlbGQgY2xlYXIgYXQgZWFjaCBlbmQsIHNvIGEgY2FwdGlvbiB0aGF0IGZpdHMgZG9lcyBub3QgcmVhZCBhc1xuICAgKiB0aG91Z2ggaXQgd2VyZSBhYm91dCB0byB0b3VjaCB0aGUgZWRnZSBvZiB0aGUgZnJhbWUuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvbnQgc2l6ZSBmb3IgdGhlIGNhcHRpb24sIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBiYW5kLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBoZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGltYWdlIHRvIHRoZSB0b3Agb2YgdGhlIGJhbmQsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IHRvcEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCBhIGNhcHRpb24gbWVhc3VyZXMgYWdhaW5zdCB0aGUgZnJhbWUgaXQgaXMgZGVzdGluZWQgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50IHtcbiAgLyoqXG4gICAqIFRoZSByb29tIGF2YWlsYWJsZSwgaW4gcGl4ZWxzIFx1MjAxNCB7QGxpbmsgTGFiZWxCYW5kR2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVsc30uXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNhcHRpb24gZml0cyB0aGF0IHJvb20uXG4gICAqL1xuICByZWFkb25seSBkb2VzRml0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIb3cgd2lkZSB0aGUgY2FwdGlvbiBhY3R1YWxseSByZW5kZXJzLCBpbiBwaXhlbHMsIGF0IHRoZSBzaXplIHRoZSBiYW5kXG4gICAqIHdvdWxkIGRyYXcgaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0V2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBsYWJlbFNjcmVlbnNob3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsU2NyZWVuc2hvdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNhcHRpb24uIEtlZXAgaXQgdG8gYSBoYW5kZnVsIG9mIHdvcmRzOiBpdCBpcyByZWFkIGF0IGxpc3RpbmctdGh1bWJuYWlsXG4gICAqIHNpemUsIGFuZCBpdCBpcyBuZWl0aGVyIHdyYXBwZWQgbm9yIHNocnVuayB0byBmaXQgXHUyMDE0IG9uZSB0aGF0IGRvZXMgbm90IGZpdFxuICAgKiBpcyBSRUpFQ1RFRCwgd2l0aCB0aGUgbWVhc3VyZWQgd2lkdGggYW5kIHRoZSByb29tIGF2YWlsYWJsZS4gQ2hlY2sgYVxuICAgKiBjYW5kaWRhdGUgd2l0aCB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0gYmVmb3JlIGNvbW1pdHRpbmcgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG1lYXN1cmVMYWJlbENhcHRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lYXN1cmVMYWJlbENhcHRpb25QYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBpbWFnZSB0aGUgY2FwdGlvbiBpcyBkZXN0aW5lZCBmb3IsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIGltYWdlIHRoZSBjYXB0aW9uIGlzIGRlc3RpbmVkIGZvciwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXB0aW9uIHRvIG1lYXN1cmUuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FwdGlvbiBzaXplIGFzIGEgZnJhY3Rpb24gb2YgaW1hZ2UgV0lEVEgsIG5vdCBoZWlnaHQuXG4gKlxuICogV2lkdGggaXMgd2hhdCBnb3Zlcm5zIGxlZ2liaWxpdHkgaGVyZTogYSA5MDB4MTYwMCBwaG9uZSBmcmFtZSBhbmQgYSAxMjAweDgwMFxuICogZGVza3RvcCBmcmFtZSBhcmUgcmVhZCBhdCBzaW1pbGFyIG9uLXNjcmVlbiB3aWR0aHMgaW4gYSBsaXN0aW5nLCBzbyBzaXppbmcgYnlcbiAqIHdpZHRoIGtlZXBzIHRoZSBjYXB0aW9uIHZpc3VhbGx5IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSB0d28uXG4gKi9cbmNvbnN0IEZPTlRfU0laRV9SQVRJTyA9IDAuMDM0O1xuXG4vKipcbiAqIEJhbmQgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSBcdTIwMTQgZW5vdWdoIHRvIHNpdCB0aGUgdGV4dCBvbiB3aXRoXG4gKiBjbGVhciBzcGFjZSBhYm92ZSBhbmQgYmVsb3cuXG4gKi9cbmNvbnN0IEJBTkRfSEVJR0hUX1JBVElPID0gMi4yO1xuXG4vKipcbiAqIE9wYWNpdHkgb2YgdGhlIGJhbmQuIE5lYXItb3BhcXVlIG9uIHB1cnBvc2U6IHRoZSBiYW5kIGV4aXN0cyBwYXJ0bHkgdG8gQ09WRVJcbiAqIHRoZSBjaHJvbWUgYWxvbmcgdGhlIGJvdHRvbSBvZiB0aGUgZnJhbWUsIGFuZCBhdCAwLjgyIGEgc3RhdHVzIGJhciBsZWdpYmx5XG4gKiBibGVkIHRocm91Z2ggYmVoaW5kIHRoZSBjYXB0aW9uLCB3aGljaCBsb29rZWQgbGlrZSBhIG1pc3Rha2UgcmF0aGVyIHRoYW4gYVxuICogZGVzaWduLlxuICovXG5jb25zdCBCQU5EX09QQUNJVFkgPSAwLjk0O1xuXG5jb25zdCBNSU5JTVVNX0ZPTlRfU0laRV9JTl9QSVhFTFMgPSAxODtcblxuLyoqXG4gKiBGbG9vciBvbiBiYW5kIGhlaWdodCBhcyBhIGZyYWN0aW9uIG9mIGltYWdlIEhFSUdIVC5cbiAqXG4gKiBIZWlnaHQgZGVyaXZlZCBmcm9tIHRoZSBjYXB0aW9uIGFsb25lIGlzIHRvbyBzaGFsbG93IG9uIGEgdGFsbCBmcmFtZTogb24gYVxuICogOTAweDE2MDAgcGhvbmUgaXQgY2FtZSB0byA2OHB4IGFuZCBzbGljZWQgdGhyb3VnaCB0aGUgc3RhdHVzIHJvdyBpdCB3YXMgbWVhbnRcbiAqIHRvIGNvdmVyLCBjbGlwcGluZyB0aGUgdGV4dCBtaWQtbGluZS4gVGhpcyBmbG9vciBtYWtlcyB0aGUgYmFuZCBkZWVwIGVub3VnaCB0b1xuICogc3dhbGxvdyB0aGF0IHJvdyB3aG9sZSAoMTIwcHggb24gYSA5MDB4MTYwMCBwaG9uZSksIGFuZCBpcyBpbmVydCBvbiBhIHdpZGUgZnJhbWUgd2hlcmUgdGhlIGNhcHRpb24tZGVyaXZlZFxuICogaGVpZ2h0IGlzIGFscmVhZHkgdGhlIGxhcmdlciBvZiB0aGUgdHdvLlxuICovXG5jb25zdCBNSU5JTVVNX0hFSUdIVF9SQVRJTyA9IDAuMDc1O1xuXG4vKipcbiAqIE1hcmdpbiBoZWxkIGNsZWFyIGF0IEVBQ0ggZW5kIG9mIHRoZSBjYXB0aW9uLCBhcyBhIGZyYWN0aW9uIG9mIGltYWdlIHdpZHRoLlxuICpcbiAqIEEgY2FwdGlvbiB0aGF0IGVuZHMgYSBwaXhlbCBpbnNpZGUgdGhlIGZyYW1lIGlzIGxlZ2FsbHkgdW4tY2xpcHBlZCBhbmQgc3RpbGxcbiAqIGxvb2tzIHdyb25nLCBzbyB0aGUgcm9vbSBhIGNhcHRpb24gaXMgbWVhc3VyZWQgYWdhaW5zdCBpcyB0aGUgZnJhbWUgbGVzcyB0aGlzXG4gKiBhdCBib3RoIGVuZHMgXHUyMDE0IDQ4cHggZWFjaCBzaWRlIG9uIGEgMTIwMHB4IGZyYW1lLlxuICovXG5jb25zdCBTSURFX01BUkdJTl9SQVRJTyA9IDAuMDQ7XG5cbi8qKlxuICogRGl2aXNvciB0aGF0IHR1cm5zIGEgc3BhbiBpbnRvIGl0cyBtaWRwb2ludCwgZm9yIGNlbnRlcmluZyB0aGUgY2FwdGlvbi5cbiAqL1xuY29uc3QgQ0VOVEVSX0RJVklTT1IgPSAyO1xuXG4vKipcbiAqIFRoZSBjYXB0aW9uJ3MgdHlwZWZhY2UgYW5kIHdlaWdodCwgaW4gb25lIHBsYWNlIGJlY2F1c2UgdGhlIGJhbmQgYW5kIHRoZVxuICogbWVhc3VyZW1lbnQgY2FudmFzIE1VU1QgZHJhdyB3aXRoIHRoZSBzYW1lIG9uZXM6IGEgbWVhc3VyZW1lbnQgdGFrZW4gaW4gYVxuICogZGlmZmVyZW50IGZhY2UgaXMgbm90IGEgbWVhc3VyZW1lbnQgb2YgdGhlIHRoaW5nIHRoYXQgc2hpcHMuXG4gKi9cbmNvbnN0IEZPTlRfRkFNSUxZID0gJ1NlZ29lIFVJLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJztcblxuY29uc3QgRk9OVF9XRUlHSFQgPSAnNjAwJztcblxuY29uc3QgQ0FQVElPTl9GSUxMID0gJyNmZmZmZmYnO1xuXG4vKipcbiAqIFVwcGVyIGJvdW5kIG9uIG9uZSBnbHlwaCdzIGFkdmFuY2Ugd2lkdGgsIGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZS5cbiAqXG4gKiBJdCBzaXplcyB0aGUgb2ZmLXNjcmVlbiBjYW52YXMgdGhlIGNhcHRpb24gaXMgbWVhc3VyZWQgb24sIGFuZCBpdCBvbmx5IGV2ZXJcbiAqIG5lZWRzIHRvIGJlIGFuIG92ZXItZXN0aW1hdGU6IGEgY2FudmFzIHRvbyBuYXJyb3cgd291bGQgY2xpcCB0aGUgdGV4dCBiZWluZ1xuICogbWVhc3VyZWQsIHVuZGVyLXJlcG9ydCBpdHMgd2lkdGgsIGFuZCByZWludHJvZHVjZSB0aGUgZXhhY3Qgc2lsZW50IGNsaXBwaW5nXG4gKiB0aGUgbWVhc3VyZW1lbnQgZXhpc3RzIHRvIGNhdGNoLiBObyBMYXRpbiBnbHlwaCBpbiBhIHByb3BvcnRpb25hbCBzYW5zXG4gKiBhZHZhbmNlcyBhIGZ1bGwgZW0gXHUyMDE0IGFuIGVtIGRhc2gsIHRoZSB3aWRlc3QsIGlzIDEuMCBcdTIwMTQgc28gMS4xIGlzIGhlYWRyb29tIGF0XG4gKiBuZWdsaWdpYmxlIGNvc3QgKG1lYXN1cmVkIHByb3NlIHJ1bnMgYWJvdXQgMC40NSBlbSBwZXIgY2hhcmFjdGVyLCBzbyB0aGVcbiAqIGNhbnZhcyBjb21lcyBvdXQgcm91Z2hseSAyLjV4IHRoZSB0ZXh0KS5cbiAqL1xuY29uc3QgTUFYSU1VTV9HTFlQSF9BRFZBTkNFX1JBVElPID0gMS4xO1xuXG4vKipcbiAqIEhlaWdodCBvZiB0aGUgbWVhc3VyZW1lbnQgY2FudmFzIGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSwgc28gYXNjZW5kZXJzXG4gKiBhbmQgZGVzY2VuZGVycyBoYXZlIHJvb20gYW5kIHRoZSB0cmltIHJlYWRzIHRoZSBnbHlwaHMgcmF0aGVyIHRoYW4gdGhlIGVkZ2UuXG4gKi9cbmNvbnN0IE1FQVNVUkVNRU5UX0NBTlZBU19IRUlHSFRfUkFUSU8gPSAzO1xuXG4vKipcbiAqIEhvdyBmYXIgYSBwaXhlbCBtYXkgZGlmZmVyIGZyb20gdGhlIHRyYW5zcGFyZW50IHN1cnJvdW5kIGJlZm9yZSBgdHJpbWAgY291bnRzXG4gKiBpdCBhcyB0ZXh0LiBEZWxpYmVyYXRlbHkgZmFyIGxvd2VyIHRoYW4gYHNoYXJwYCdzIGRlZmF1bHQgb2YgMTA6IHRoZSBvdXRlcm1vc3RcbiAqIHBpeGVscyBvZiBhbiBhbnRpYWxpYXNlZCBnbHlwaCBhcmUgdmVyeSBmYWludCwgYW5kIHRoZSBkZWZhdWx0IGRpc2NhcmRzIHRoZW0sXG4gKiB1bmRlci1tZWFzdXJpbmcgYSBjYXB0aW9uIGJ5IGEgcGl4ZWwgb3IgdHdvIGF0IGVhY2ggZW5kLlxuICovXG5jb25zdCBUUklNX1RIUkVTSE9MRCA9IDE7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkQ2FwdGlvblRleHRFbGVtZW50fS5cbiAqL1xuaW50ZXJmYWNlIENhcHRpb25UZXh0RWxlbWVudFBhcmFtcyB7XG4gIHJlYWRvbmx5IGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0QW5jaG9yOiAnbWlkZGxlJyB8ICdzdGFydCc7XG4gIHJlYWRvbmx5IHhJblBpeGVsczogbnVtYmVyO1xuICByZWFkb25seSB5SW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNWRyBmb3IgdGhlIGNhcHRpb24gYmFuZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBjYXB0aW9uLlxuICogQHBhcmFtIGdlb21ldHJ5IC0gVGhlIGJhbmQgZ2VvbWV0cnkuXG4gKiBAcGFyYW0gaW1hZ2VXaWR0aEluUGl4ZWxzIC0gV2lkdGggb2YgdGhlIGltYWdlLCBzbyB0aGUgYmFuZCBzcGFucyBpdC5cbiAqIEByZXR1cm5zIFRoZSBTVkcgbWFya3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMYWJlbFN2Zyh0ZXh0OiBzdHJpbmcsIGdlb21ldHJ5OiBMYWJlbEJhbmRHZW9tZXRyeSwgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCB7IGZvbnRTaXplSW5QaXhlbHMsIGhlaWdodEluUGl4ZWxzIH0gPSBnZW9tZXRyeTtcbiAgY29uc3QgY2FwdGlvbkVsZW1lbnQgPSBidWlsZENhcHRpb25UZXh0RWxlbWVudCh7XG4gICAgZm9udFNpemVJblBpeGVscyxcbiAgICB0ZXh0LFxuICAgIHRleHRBbmNob3I6ICdtaWRkbGUnLFxuICAgIHhJblBpeGVsczogaW1hZ2VXaWR0aEluUGl4ZWxzIC8gQ0VOVEVSX0RJVklTT1IsXG4gICAgeUluUGl4ZWxzOiBoZWlnaHRJblBpeGVscyAvIENFTlRFUl9ESVZJU09SXG4gIH0pO1xuXG4gIHJldHVybiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIke1N0cmluZyhpbWFnZVdpZHRoSW5QaXhlbHMpfVwiIGhlaWdodD1cIiR7U3RyaW5nKGhlaWdodEluUGl4ZWxzKX1cIj5gXG4gICAgKyBgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyl9XCIgYFxuICAgICsgYGZpbGw9XCIjMDAwMDAwXCIgZmlsbC1vcGFjaXR5PVwiJHtTdHJpbmcoQkFORF9PUEFDSVRZKX1cIi8+YFxuICAgICsgYCR7Y2FwdGlvbkVsZW1lbnR9PC9zdmc+YDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgY2FwdGlvbiBiYW5kJ3Mgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGEgZ2l2ZW4gaW1hZ2UuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbWFnZSBkaW1lbnNpb25zLlxuICogQHJldHVybnMgVGhlIGJhbmQgZ2VvbWV0cnkuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGVpdGhlciBkaW1lbnNpb24gaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUxhYmVsQmFuZChwYXJhbXM6IENvbXB1dGVMYWJlbEJhbmRQYXJhbXMpOiBMYWJlbEJhbmRHZW9tZXRyeSB7XG4gIGNvbnN0IHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzIH0gPSBwYXJhbXM7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW1hZ2VXaWR0aEluUGl4ZWxzKSB8fCBpbWFnZVdpZHRoSW5QaXhlbHMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZUxhYmVsQmFuZDogaW1hZ2VXaWR0aEluUGl4ZWxzIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIsIGdvdCAke1N0cmluZyhpbWFnZVdpZHRoSW5QaXhlbHMpfS5gKTtcbiAgfVxuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGltYWdlSGVpZ2h0SW5QaXhlbHMpIHx8IGltYWdlSGVpZ2h0SW5QaXhlbHMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZUxhYmVsQmFuZDogaW1hZ2VIZWlnaHRJblBpeGVscyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtTdHJpbmcoaW1hZ2VIZWlnaHRJblBpeGVscyl9LmApO1xuICB9XG5cbiAgY29uc3QgZm9udFNpemVJblBpeGVscyA9IE1hdGgubWF4KE1JTklNVU1fRk9OVF9TSVpFX0lOX1BJWEVMUywgTWF0aC5yb3VuZChpbWFnZVdpZHRoSW5QaXhlbHMgKiBGT05UX1NJWkVfUkFUSU8pKTtcbiAgY29uc3QgY2FwdGlvbkhlaWdodEluUGl4ZWxzID0gTWF0aC5yb3VuZChmb250U2l6ZUluUGl4ZWxzICogQkFORF9IRUlHSFRfUkFUSU8pO1xuICBjb25zdCBmbG9vcmVkSGVpZ2h0SW5QaXhlbHMgPSBNYXRoLm1heChjYXB0aW9uSGVpZ2h0SW5QaXhlbHMsIE1hdGgucm91bmQoaW1hZ2VIZWlnaHRJblBpeGVscyAqIE1JTklNVU1fSEVJR0hUX1JBVElPKSk7XG4gIGNvbnN0IGhlaWdodEluUGl4ZWxzID0gTWF0aC5taW4oaW1hZ2VIZWlnaHRJblBpeGVscywgZmxvb3JlZEhlaWdodEluUGl4ZWxzKTtcbiAgY29uc3Qgc2lkZU1hcmdpbkluUGl4ZWxzID0gTWF0aC5yb3VuZChpbWFnZVdpZHRoSW5QaXhlbHMgKiBTSURFX01BUkdJTl9SQVRJTyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXB0aW9uUm9vbUluUGl4ZWxzOiBpbWFnZVdpZHRoSW5QaXhlbHMgLSAoc2lkZU1hcmdpbkluUGl4ZWxzICogQ0VOVEVSX0RJVklTT1IpLFxuICAgIGZvbnRTaXplSW5QaXhlbHMsXG4gICAgaGVpZ2h0SW5QaXhlbHMsXG4gICAgdG9wSW5QaXhlbHM6IGltYWdlSGVpZ2h0SW5QaXhlbHMgLSBoZWlnaHRJblBpeGVsc1xuICB9O1xufVxuXG4vKipcbiAqIEVzY2FwZXMgdGV4dCBmb3IgaW5jbHVzaW9uIGluIFNWRyBjaGFyYWN0ZXIgZGF0YS5cbiAqXG4gKiBBIGNhcHRpb24gaXMgYXV0aG9yZWQgcGVyIHNjcmVlbnNob3QgYW5kIGNhbiBsZWdpdGltYXRlbHkgY29udGFpbiBgJmAgb3IgdGhlXG4gKiBhbmdsZSBicmFja2V0cyBPYnNpZGlhbiB1c2VzIGluIGxpbmsgc3ludGF4OyB1bmVzY2FwZWQsIHRob3NlIG1ha2UgdGhlIFNWR1xuICogaW1wb3NzaWJsZSB0byBwYXJzZSBhbmQgYHNoYXJwYCBmYWlscyBvbiBhIGNhcHRpb24gcmF0aGVyIHRoYW4gb24gYW4gaW1hZ2UuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgcmF3IGNhcHRpb24uXG4gKiBAcmV0dXJucyBUaGUgY2FwdGlvbiwgc2FmZSB0byBlbWJlZCBpbiBTVkcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVTdmdUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKVxuICAgIC5yZXBsYWNlQWxsKCdcIicsICcmcXVvdDsnKVxuICAgIC5yZXBsYWNlQWxsKCdcXCcnLCAnJmFwb3M7Jyk7XG59XG5cbi8qKlxuICogRHJhd3MgYSBjYXB0aW9uIGJhbmQgYWNyb3NzIHRoZSBib3R0b20gb2YgYSBzY3JlZW5zaG90LlxuICpcbiAqIFRoZSBpbWFnZSBrZWVwcyBpdHMgZGltZW5zaW9ucyBleGFjdGx5OiB0aGUgYmFuZCBpcyBjb21wb3NpdGVkIE9WRVIgdGhlXG4gKiBmcmFtZSwgbmV2ZXIgYXBwZW5kZWQgdG8gaXQsIGJlY2F1c2UgdGhlIHN0b3JlIGV4cGVjdHMgYSBzcGVjaWZpYyBzaXplLlxuICpcbiAqIEBwYXJhbSBieXRlcyAtIFRoZSBjYXB0dXJlZCBQTkcuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjYXB0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbGFiZWxlZCBQTkcsIHRoZSBzYW1lIHNpemUgYXMgdGhlIGlucHV0LlxuICogQHRocm93cyBFcnJvciBpZiBgc2hhcnBgIGlzIG5vdCBpbnN0YWxsZWQsIHRoZSBpbWFnZSBkaW1lbnNpb25zIGNhbm5vdCBiZSByZWFkLCBvciB0aGUgY2FwdGlvbiBpcyB0b28gd2lkZSBmb3IgdGhlIGZyYW1lLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGFiZWxTY3JlZW5zaG90KGJ5dGVzOiBVaW50OEFycmF5LCBvcHRpb25zOiBMYWJlbFNjcmVlbnNob3RPcHRpb25zKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IHNoYXJwID0gYXdhaXQgaW1wb3J0U2hhcnAoJ2xhYmVsU2NyZWVuc2hvdCcpO1xuICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHNoYXJwKGJ5dGVzKS5tZXRhZGF0YSgpO1xuICBjb25zdCBpbWFnZVdpZHRoSW5QaXhlbHMgPSBtZXRhZGF0YS53aWR0aDtcbiAgY29uc3QgaW1hZ2VIZWlnaHRJblBpeGVscyA9IG1ldGFkYXRhLmhlaWdodDtcblxuICAvKiB2OCBpZ25vcmUgbmV4dCAzIC0tIERlZmVuc2l2ZTogYHNoYXJwYCByZWplY3RzIGEgbm9uLWltYWdlIGJlZm9yZSBpdCBjYW4gcmVwb3J0IG1ldGFkYXRhIHdpdGhvdXQgZGltZW5zaW9ucywgc28gdGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgZnJvbSBhIHRlc3QuICovXG4gIGlmIChpbWFnZVdpZHRoSW5QaXhlbHMgPT09IHVuZGVmaW5lZCB8fCBpbWFnZUhlaWdodEluUGl4ZWxzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhYmVsU2NyZWVuc2hvdDogY291bGQgbm90IHJlYWQgdGhlIHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLicpO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlTGFiZWxCYW5kKHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzIH0pO1xuICBjb25zdCB0ZXh0V2lkdGhJblBpeGVscyA9IGF3YWl0IG1lYXN1cmVDYXB0aW9uV2lkdGgob3B0aW9ucy50ZXh0LCBnZW9tZXRyeS5mb250U2l6ZUluUGl4ZWxzKTtcblxuICBpZiAodGV4dFdpZHRoSW5QaXhlbHMgPiBnZW9tZXRyeS5jYXB0aW9uUm9vbUluUGl4ZWxzKSB7XG4gICAgY29uc3Qgb3ZlcmZsb3dJblBpeGVscyA9IHRleHRXaWR0aEluUGl4ZWxzIC0gZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscztcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgbGFiZWxTY3JlZW5zaG90OiB0aGUgY2FwdGlvbiBpcyAke1N0cmluZyhvdmVyZmxvd0luUGl4ZWxzKX1weCB0b28gd2lkZSBmb3IgdGhlIGZyYW1lLiBgXG4gICAgICAgICsgYEl0IHJlbmRlcnMgJHtTdHJpbmcodGV4dFdpZHRoSW5QaXhlbHMpfXB4IGF0IGZvbnQtc2l6ZSAke1N0cmluZyhnZW9tZXRyeS5mb250U2l6ZUluUGl4ZWxzKX0sIGFuZCBhIGBcbiAgICAgICAgKyBgJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1weCBmcmFtZSBoYXMgcm9vbSBmb3IgJHtTdHJpbmcoZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscyl9cHguIGBcbiAgICAgICAgKyAnU2hvcnRlbiBpdDogYSBjYXB0aW9uIHRoYXQgZG9lcyBub3QgZml0IGlzIGNsaXBwZWQgYXQgQk9USCBlbmRzLCB3aXRoIG5vIGVsbGlwc2lzIHRvIHNob3cgaXQgaGFwcGVuZWQuICdcbiAgICAgICAgKyBgQ2FwdGlvbjogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLnRleHQpfWBcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc3ZnID0gYnVpbGRMYWJlbFN2ZyhvcHRpb25zLnRleHQsIGdlb21ldHJ5LCBpbWFnZVdpZHRoSW5QaXhlbHMpO1xuICBjb25zdCBsYXllcjogU2hhcnBDb21wb3NpdGVMYXllciA9IHtcbiAgICBpbnB1dDogQnVmZmVyLmZyb20oc3ZnKSxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogZ2VvbWV0cnkudG9wSW5QaXhlbHNcbiAgfTtcblxuICBjb25zdCBsYWJlbGVkID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLmNvbXBvc2l0ZShbbGF5ZXJdKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShsYWJlbGVkKTtcbn1cblxuLyoqXG4gKiBNZWFzdXJlcyBhIGNhcHRpb24gYWdhaW5zdCB0aGUgZnJhbWUgaXQgaXMgZGVzdGluZWQgZm9yLCB3aXRob3V0IGRyYXdpbmdcbiAqIGFueXRoaW5nLlxuICpcbiAqIFRoaXMgaXMgd2hhdCB7QGxpbmsgbGFiZWxTY3JlZW5zaG90fSByZWplY3RzIGFuIG92ZXJsb25nIGNhcHRpb24gd2l0aCwgZXhwb3NlZFxuICogc28gYSBjYXB0aW9uIGNhbiBiZSBjaG9zZW4gd2l0aCB0aGUgbnVtYmVyIGluIGhhbmQgaW5zdGVhZCBvZiBieSBjYXB0dXJpbmcgYVxuICogZnJhbWUgYW5kIGxvb2tpbmcgYXQgaXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjYXB0aW9uIGFuZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UgaXQgaXMgZm9yLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbWVhc3VyZW1lbnQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGBzaGFycGAgaXMgbm90IGluc3RhbGxlZCwgb3IgZWl0aGVyIGRpbWVuc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZWFzdXJlTGFiZWxDYXB0aW9uKHBhcmFtczogTWVhc3VyZUxhYmVsQ2FwdGlvblBhcmFtcyk6IFByb21pc2U8TGFiZWxDYXB0aW9uTWVhc3VyZW1lbnQ+IHtcbiAgY29uc3QgeyBpbWFnZUhlaWdodEluUGl4ZWxzLCBpbWFnZVdpZHRoSW5QaXhlbHMsIHRleHQgfSA9IHBhcmFtcztcbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlTGFiZWxCYW5kKHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzIH0pO1xuICBjb25zdCB0ZXh0V2lkdGhJblBpeGVscyA9IGF3YWl0IG1lYXN1cmVDYXB0aW9uV2lkdGgodGV4dCwgZ2VvbWV0cnkuZm9udFNpemVJblBpeGVscyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXB0aW9uUm9vbUluUGl4ZWxzOiBnZW9tZXRyeS5jYXB0aW9uUm9vbUluUGl4ZWxzLFxuICAgIGRvZXNGaXQ6IHRleHRXaWR0aEluUGl4ZWxzIDw9IGdlb21ldHJ5LmNhcHRpb25Sb29tSW5QaXhlbHMsXG4gICAgdGV4dFdpZHRoSW5QaXhlbHNcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNhcHRpb24ncyBTVkcgYDx0ZXh0PmAgZWxlbWVudC5cbiAqXG4gKiBCb3RoIHRoZSBiYW5kIGFuZCB0aGUgbWVhc3VyZW1lbnQgY2FudmFzIGdvIHRocm91Z2ggaGVyZSwgc28gdGhlIHRoaW5nIHRoYXRcbiAqIGlzIG1lYXN1cmVkIGlzIGRyYXduIHdpdGggdGhlIHNhbWUgZmFjZSwgd2VpZ2h0IGFuZCBzaXplIGFzIHRoZSB0aGluZyB0aGF0XG4gKiBzaGlwcy4gVHdvIGhhbmQtd3JpdHRlbiBjb3BpZXMgd291bGQgYmUgZnJlZSB0byBkcmlmdCwgYW5kIGEgbWVhc3VyZW1lbnQgdGhhdFxuICogaGFzIGRyaWZ0ZWQgZnJvbSB0aGUgZHJhd2luZyBpcyB3b3JzZSB0aGFuIG5vIG1lYXN1cmVtZW50IGF0IGFsbC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNhcHRpb24sIGl0cyBzaXplLCBhbmQgd2hlcmUgdG8gYW5jaG9yIGl0LlxuICogQHJldHVybnMgVGhlIGA8dGV4dD5gIG1hcmt1cC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDYXB0aW9uVGV4dEVsZW1lbnQocGFyYW1zOiBDYXB0aW9uVGV4dEVsZW1lbnRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGZvbnRTaXplSW5QaXhlbHMsIHRleHQsIHRleHRBbmNob3IsIHhJblBpeGVscywgeUluUGl4ZWxzIH0gPSBwYXJhbXM7XG5cbiAgcmV0dXJuIGA8dGV4dCB4PVwiJHtTdHJpbmcoeEluUGl4ZWxzKX1cIiB5PVwiJHtTdHJpbmcoeUluUGl4ZWxzKX1cIiBgXG4gICAgKyBgZm9udC1mYW1pbHk9XCIke0ZPTlRfRkFNSUxZfVwiIGZvbnQtc2l6ZT1cIiR7U3RyaW5nKGZvbnRTaXplSW5QaXhlbHMpfVwiIGBcbiAgICArIGBmb250LXdlaWdodD1cIiR7Rk9OVF9XRUlHSFR9XCIgZmlsbD1cIiR7Q0FQVElPTl9GSUxMfVwiIHRleHQtYW5jaG9yPVwiJHt0ZXh0QW5jaG9yfVwiIGRvbWluYW50LWJhc2VsaW5lPVwiY2VudHJhbFwiPmBcbiAgICArIGAke2VzY2FwZVN2Z1RleHQodGV4dCl9PC90ZXh0PmA7XG59XG5cbi8qKlxuICogTWVhc3VyZXMgaG93IHdpZGUgYSBjYXB0aW9uIHJlbmRlcnMgYXQgYSBnaXZlbiBzaXplLlxuICpcbiAqIFRoZSB0ZXh0IGlzIGRyYXduIGFsb25lIG9uIGEgdHJhbnNwYXJlbnQgY2FudmFzIGRlbGliZXJhdGVseSB3aWRlciB0aGFuIGl0IGNhblxuICogcG9zc2libHkgbmVlZCwgdGhlbiBgdHJpbWBtZWQgYmFjayB0byBpdHMgb3duIGluayBcdTIwMTQgdGhlIHNhbWUgbWVhc3VyZW1lbnQgdGhhdFxuICogd2FzIHByZXZpb3VzbHkgZG9uZSBieSBoYW5kLCBvbmNlLCBwZXIgY2FwdGlvbiwgYnkgd2hvZXZlciB0aG91Z2h0IHRvIGRvdWJ0XG4gKiBvbmUuIFRoZSByZW5kZXJlciBkb2luZyB0aGUgbWVhc3VyaW5nIGlzIHRoZSByZW5kZXJlciB0aGF0IGRyYXdzIHRoZSBiYW5kLCBzb1xuICogdGhlIHR3byBjYW5ub3QgZGlzYWdyZWUgYWJvdXQgYSBmb250IHRoZSBob3N0IGRvZXMgb3IgZG9lcyBub3QgaGF2ZS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBjYXB0aW9uLlxuICogQHBhcmFtIGZvbnRTaXplSW5QaXhlbHMgLSBUaGUgc2l6ZSB0aGUgYmFuZCB3b3VsZCBkcmF3IGl0IGF0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmVuZGVyZWQgd2lkdGggaW4gcGl4ZWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiBtZWFzdXJlQ2FwdGlvbldpZHRoKHRleHQ6IHN0cmluZywgZm9udFNpemVJblBpeGVsczogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgLy8gQSBjYXB0aW9uIHdpdGggbm8gaW5rIGxlYXZlcyB0aGUgY2FudmFzIHVuaWZvcm1seSB0cmFuc3BhcmVudCwgYW5kIGB0cmltYFxuICAvLyByZXR1cm5zIHN1Y2ggYW4gaW1hZ2UgdW50b3VjaGVkIFx1MjAxNCBpLmUuIHJlcG9ydHMgdGhlIHdob2xlIGNhbnZhcyBhcyB0ZXh0LlxuICBpZiAodGV4dC50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCdtZWFzdXJlTGFiZWxDYXB0aW9uJyk7XG4gIGNvbnN0IHBhZGRpbmdJblBpeGVscyA9IGZvbnRTaXplSW5QaXhlbHMgKiBDRU5URVJfRElWSVNPUjtcbiAgY29uc3QgY2FudmFzV2lkdGhJblBpeGVscyA9IE1hdGguY2VpbChmb250U2l6ZUluUGl4ZWxzICogTUFYSU1VTV9HTFlQSF9BRFZBTkNFX1JBVElPICogdGV4dC5sZW5ndGgpICsgcGFkZGluZ0luUGl4ZWxzO1xuICBjb25zdCBjYW52YXNIZWlnaHRJblBpeGVscyA9IE1hdGguY2VpbChmb250U2l6ZUluUGl4ZWxzICogTUVBU1VSRU1FTlRfQ0FOVkFTX0hFSUdIVF9SQVRJTyk7XG4gIGNvbnN0IGNhcHRpb25FbGVtZW50ID0gYnVpbGRDYXB0aW9uVGV4dEVsZW1lbnQoe1xuICAgIGZvbnRTaXplSW5QaXhlbHMsXG4gICAgdGV4dCxcbiAgICB0ZXh0QW5jaG9yOiAnc3RhcnQnLFxuICAgIHhJblBpeGVsczogZm9udFNpemVJblBpeGVscyxcbiAgICB5SW5QaXhlbHM6IGNhbnZhc0hlaWdodEluUGl4ZWxzIC8gQ0VOVEVSX0RJVklTT1JcbiAgfSk7XG4gIGNvbnN0IHN2ZyA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIiR7U3RyaW5nKGNhbnZhc1dpZHRoSW5QaXhlbHMpfVwiIGhlaWdodD1cIiR7U3RyaW5nKGNhbnZhc0hlaWdodEluUGl4ZWxzKX1cIj5gXG4gICAgKyBgJHtjYXB0aW9uRWxlbWVudH08L3N2Zz5gO1xuXG4gIGNvbnN0IHRyaW1tZWQgPSBhd2FpdCBzaGFycChuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShzdmcpKSlcbiAgICAudHJpbSh7IHRocmVzaG9sZDogVFJJTV9USFJFU0hPTEQgfSlcbiAgICAucG5nKClcbiAgICAudG9CdWZmZXIoKTtcblxuICByZXR1cm4gcmVhZFBuZ0RpbWVuc2lvbnMobmV3IFVpbnQ4QXJyYXkodHJpbW1lZCkpLndpZHRoSW5QaXhlbHM7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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
143
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhYmVsLXNjcmVlbnNob3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBZGRzIGEgY2FwdGlvbiBiYW5kIHRvIGFuIGFscmVhZHktY2FwdHVyZWQgc2NyZWVuc2hvdC5cbiAqXG4gKiBBIHN0b3JlIGxpc3Rpbmcgc2hvd3Mgc2NyZWVuc2hvdHMgT05FIEFUIEEgVElNRSwgaW4gYSBjYXJvdXNlbCwgd2l0aCBub1xuICogY2FwdGlvbiBvZiBpdHMgb3duIFx1MjAxNCBzbyBhbiBpbWFnZSBoYXMgdG8gc2F5IHdoYXQgaXQgaXMgc2hvd2luZy4gV2l0aG91dCB0aGF0LFxuICogYSBzaG90IG9mIHRoZSBzdGF0ZSBhIHBsdWdpbiByZW1vdmVzIHJlYWRzIGFzIGEgc2hvdCBvZiB0aGUgc3RhdGUgdGhlIHBsdWdpblxuICogY2F1c2VzLCB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG1lc3NhZ2UuXG4gKlxuICogVGhlIGJhbmQgaXMgZHJhd24gb3ZlciB0aGUgQk9UVE9NIG9mIHRoZSBmcmFtZSwgZm9yIHR3byByZWFzb25zOiB0aGUgdG9wIGlzXG4gKiB3aGVyZSB0aGUgY29udGVudCBiZWluZyBkZW1vbnN0cmF0ZWQgdXN1YWxseSBzdGFydHMsIGFuZCB0aGUgYm90dG9tIG9mIGFuXG4gKiBPYnNpZGlhbiBmcmFtZSBpcyBjaHJvbWUgXHUyMDE0IHN0YXR1cyBiYXIsIHdvcmQgY291bnQsIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCB3aGljaCB0aGVcbiAqIGJhbmQgdGhlbiBjb3ZlcnMgcmF0aGVyIHRoYW4gY29tcGV0aW5nIHdpdGguXG4gKlxuICogVGhpcyBpcyBwb3N0LXByb2Nlc3NpbmcsIGRlbGliZXJhdGVseS4gVGhlIGNhcHR1cmUgc3RheXMgYW4gdW50b3VjaGVkIGRldmljZVxuICogZnJhbWUsIGFuZCByZXdvcmRpbmcgYSBsYWJlbCBuZWVkcyBubyByZS1zaG9vdC5cbiAqXG4gKiBBIGNhcHRpb24gdGhhdCBpcyB0b28gbG9uZyBmb3IgaXRzIGZyYW1lIGlzIE1FQVNVUkVEIGFuZCByZWplY3RlZCByYXRoZXIgdGhhblxuICogZHJhd24uIEFuIFNWRyBgPHRleHQ+YCBpcyBjbGlwcGVkIGJ5IGl0cyB2aWV3cG9ydCBhdCBib3RoIGVuZHMgd2l0aCBub1xuICogZWxsaXBzaXMgYW5kIG5vIGVycm9yLCBzbyBhbiBvdmVybG9uZyBjYXB0aW9uIHNoaXBzIGFzIGEgc2VudGVuY2UgZnJhZ21lbnRcbiAqIHRoYXQgbG9va3MgZGVsaWJlcmF0ZSBcdTIwMTQgYG5hYmxlZCBpbiBTZXR0aW5ncyAtIGEgbGlzdGVuaW5nIHBsdWdpbiBpcyB0b2xkYCBcdTIwMTRcbiAqIGFuZCB0aGUgZnJhbWUgaXMgc3RpbGwgZXhhY3RseSB0aGUgc2l6ZSBpdCBzaG91bGQgYmUsIHNvIGV2ZXJ5IGRpbWVuc2lvblxuICogYXNzZXJ0aW9uIGRvd25zdHJlYW0gc3RpbGwgcGFzc2VzLiBUaGUgb25seSBmZWVkYmFjayBhbnlvbmUgZXZlciBnb3Qgd2FzXG4gKiBsb29raW5nIGF0IHRoZSBQTkcuIFNlZSB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaGFycENvbXBvc2l0ZUxheWVyIH0gZnJvbSAnLi9zaGFycC1sb2FkZXIuY2pzJztcblxuaW1wb3J0IHsgcmVhZFBuZ0RpbWVuc2lvbnMgfSBmcm9tICcuL2NhcHR1cmUtc2NyZWVuc2hvdC5janMnO1xuaW1wb3J0IHsgaW1wb3J0U2hhcnAgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb21wdXRlTGFiZWxCYW5kfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlTGFiZWxCYW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGdlb21ldHJ5IG9mIHRoZSBjYXB0aW9uIGJhbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFiZWxCYW5kR2VvbWV0cnkge1xuICAvKipcbiAgICogSG93IG11Y2ggaG9yaXpvbnRhbCByb29tIHRoZSBjYXB0aW9uIGhhcywgaW4gcGl4ZWxzOiB0aGUgaW1hZ2Ugd2lkdGggbGVzc1xuICAgKiB0aGUgbWFyZ2luIGhlbGQgY2xlYXIgYXQgZWFjaCBlbmQsIHNvIGEgY2FwdGlvbiB0aGF0IGZpdHMgZG9lcyBub3QgcmVhZCBhc1xuICAgKiB0aG91Z2ggaXQgd2VyZSBhYm91dCB0byB0b3VjaCB0aGUgZWRnZSBvZiB0aGUgZnJhbWUuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvbnQgc2l6ZSBmb3IgdGhlIGNhcHRpb24sIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBiYW5kLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBoZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGltYWdlIHRvIHRoZSB0b3Agb2YgdGhlIGJhbmQsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IHRvcEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCBhIGNhcHRpb24gbWVhc3VyZXMgYWdhaW5zdCB0aGUgZnJhbWUgaXQgaXMgZGVzdGluZWQgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50IHtcbiAgLyoqXG4gICAqIFRoZSByb29tIGF2YWlsYWJsZSwgaW4gcGl4ZWxzIFx1MjAxNCB7QGxpbmsgTGFiZWxCYW5kR2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVsc30uXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNhcHRpb24gZml0cyB0aGF0IHJvb20uXG4gICAqL1xuICByZWFkb25seSBkb2VzRml0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIb3cgd2lkZSB0aGUgY2FwdGlvbiBhY3R1YWxseSByZW5kZXJzLCBpbiBwaXhlbHMsIGF0IHRoZSBzaXplIHRoZSBiYW5kXG4gICAqIHdvdWxkIGRyYXcgaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0V2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBsYWJlbFNjcmVlbnNob3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsU2NyZWVuc2hvdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNhcHRpb24uIEtlZXAgaXQgdG8gYSBoYW5kZnVsIG9mIHdvcmRzOiBpdCBpcyByZWFkIGF0IGxpc3RpbmctdGh1bWJuYWlsXG4gICAqIHNpemUsIGFuZCBpdCBpcyBuZWl0aGVyIHdyYXBwZWQgbm9yIHNocnVuayB0byBmaXQgXHUyMDE0IG9uZSB0aGF0IGRvZXMgbm90IGZpdFxuICAgKiBpcyBSRUpFQ1RFRCwgd2l0aCB0aGUgbWVhc3VyZWQgd2lkdGggYW5kIHRoZSByb29tIGF2YWlsYWJsZS4gQ2hlY2sgYVxuICAgKiBjYW5kaWRhdGUgd2l0aCB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0gYmVmb3JlIGNvbW1pdHRpbmcgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG1lYXN1cmVMYWJlbENhcHRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lYXN1cmVMYWJlbENhcHRpb25QYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBpbWFnZSB0aGUgY2FwdGlvbiBpcyBkZXN0aW5lZCBmb3IsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIGltYWdlIHRoZSBjYXB0aW9uIGlzIGRlc3RpbmVkIGZvciwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXB0aW9uIHRvIG1lYXN1cmUuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FwdGlvbiBzaXplIGFzIGEgZnJhY3Rpb24gb2YgaW1hZ2UgV0lEVEgsIG5vdCBoZWlnaHQuXG4gKlxuICogV2lkdGggaXMgd2hhdCBnb3Zlcm5zIGxlZ2liaWxpdHkgaGVyZTogYSA5MDB4MTYwMCBwaG9uZSBmcmFtZSBhbmQgYSAxMjAweDgwMFxuICogZGVza3RvcCBmcmFtZSBhcmUgcmVhZCBhdCBzaW1pbGFyIG9uLXNjcmVlbiB3aWR0aHMgaW4gYSBsaXN0aW5nLCBzbyBzaXppbmcgYnlcbiAqIHdpZHRoIGtlZXBzIHRoZSBjYXB0aW9uIHZpc3VhbGx5IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSB0d28uXG4gKi9cbmNvbnN0IEZPTlRfU0laRV9SQVRJTyA9IDAuMDM0O1xuXG4vKipcbiAqIEJhbmQgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSBcdTIwMTQgZW5vdWdoIHRvIHNpdCB0aGUgdGV4dCBvbiB3aXRoXG4gKiBjbGVhciBzcGFjZSBhYm92ZSBhbmQgYmVsb3cuXG4gKi9cbmNvbnN0IEJBTkRfSEVJR0hUX1JBVElPID0gMi4yO1xuXG4vKipcbiAqIE9wYWNpdHkgb2YgdGhlIGJhbmQuIEZ1bGx5IG9wYXF1ZSwgYW5kIHRoYXQgaXMgYSBkZWNpc2lvbiByYXRoZXIgdGhhbiBhXG4gKiBkZWZhdWx0OiB0aGUgYmFuZCdzIGpvYiBpcyB0byBDT1ZFUiB0aGUgY2hyb21lIGFsb25nIHRoZSBib3R0b20gb2YgdGhlIGZyYW1lLFxuICogc28gbm90aGluZyB1bmRlcm5lYXRoIGl0IG1heSByZWFjaCB0aGUgY2FwdHVyZWQgZnJhbWUgYXQgYWxsLlxuICpcbiAqIEl0IHdhcyAwLjk0LCBhIHZhbHVlIGNob3NlbiBvbmx5IGJlY2F1c2UgMC44MiBsZXQgYSBzdGF0dXMgYmFyIGxlZ2libHkgYmxlZWRcbiAqIHRocm91Z2ggYmVoaW5kIHRoZSBjYXB0aW9uIGFuZCBsb29rIGxpa2UgYSBtaXN0YWtlIHJhdGhlciB0aGFuIGEgZGVzaWduLlxuICogTm90aGluZyBpbiB0aGF0IGFyZ3VlZCBmb3IgMC45NCBvdmVyIGZ1bGwgb3BhY2l0eS4gV2hhdCAwLjk0IGRvZXMgaXMgYXR0ZW51YXRlXG4gKiB3aGF0ZXZlciBpcyB1bmRlciB0aGUgYmFuZCB0byBhYm91dCA2ICUgYnJpZ2h0bmVzcyBcdTIwMTQgaW52aXNpYmxlIHRvIGEgcmVhZGVyLFxuICogYW5kIHN0aWxsIDM0OSBkaWZmZXJpbmcgcGl4ZWxzIHRvIGEgZGlmZiwgbWVhc3VyZWQgb24gYSB0ZW1wb3JhcnkgdmF1bHQncyBuYW1lXG4gKiByZW5kZXJpbmcgdW5kZXIgdGhlIGJhbmQgb2YgYSAxMjAweDgwMCBkZXNrdG9wIGZyYW1lLiBBbnkgdmFsdWUgYmVsb3cgMSBob2xkc1xuICogdGhhdCBjaGFubmVsIG9wZW4gZm9yIGV2ZXJ5IHZhcnlpbmcgdGhpbmcgdGhlIGJvdHRvbSBjaHJvbWUgY2FuIGNhcnJ5IFx1MjAxNCBhXG4gKiBjbG9jaywgYSB3b3JkIGNvdW50LCBhIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCBvbiBhIGZyYW1lIG5vYm9keSBoYXMgY2FwdHVyZWQgeWV0LlxuICpcbiAqIFdyaXR0ZW4gaW50byB0aGUgZW1pdHRlZCBTVkcgZXhwbGljaXRseSwgZXZlbiB0aG91Z2ggMSBpcyB3aGF0IGBmaWxsLW9wYWNpdHlgXG4gKiBkZWZhdWx0cyB0by4gRHJvcHBpbmcgdGhlIGF0dHJpYnV0ZSB3b3VsZCBsZWF2ZSB0aGlzIGNvbnN0YW50IHVudXNlZCBhbmQgdGFrZVxuICogdGhlIGRlY2lzaW9uIGF3YXkgd2l0aCBpdDogdGhlIGJhbmQgd291bGQgdGhlbiBiZSBvcGFxdWUgYnkgYWNjaWRlbnQgb2YgdGhlXG4gKiBmb3JtYXQgcmF0aGVyIHRoYW4gb24gcHVycG9zZSwgd2l0aCBub3RoaW5nIG5hbWVkIHRvIHJlYWQgYW5kIG5vdGhpbmcgdG9cbiAqIGFzc2VydCBvbi5cbiAqL1xuY29uc3QgQkFORF9PUEFDSVRZID0gMTtcblxuY29uc3QgTUlOSU1VTV9GT05UX1NJWkVfSU5fUElYRUxTID0gMTg7XG5cbi8qKlxuICogRmxvb3Igb24gYmFuZCBoZWlnaHQgYXMgYSBmcmFjdGlvbiBvZiBpbWFnZSBIRUlHSFQuXG4gKlxuICogSGVpZ2h0IGRlcml2ZWQgZnJvbSB0aGUgY2FwdGlvbiBhbG9uZSBpcyB0b28gc2hhbGxvdyBvbiBhIHRhbGwgZnJhbWU6IG9uIGFcbiAqIDkwMHgxNjAwIHBob25lIGl0IGNhbWUgdG8gNjhweCBhbmQgc2xpY2VkIHRocm91Z2ggdGhlIHN0YXR1cyByb3cgaXQgd2FzIG1lYW50XG4gKiB0byBjb3ZlciwgY2xpcHBpbmcgdGhlIHRleHQgbWlkLWxpbmUuIFRoaXMgZmxvb3IgbWFrZXMgdGhlIGJhbmQgZGVlcCBlbm91Z2ggdG9cbiAqIHN3YWxsb3cgdGhhdCByb3cgd2hvbGUgKDEyMHB4IG9uIGEgOTAweDE2MDAgcGhvbmUpLCBhbmQgaXMgaW5lcnQgb24gYSB3aWRlIGZyYW1lIHdoZXJlIHRoZSBjYXB0aW9uLWRlcml2ZWRcbiAqIGhlaWdodCBpcyBhbHJlYWR5IHRoZSBsYXJnZXIgb2YgdGhlIHR3by5cbiAqL1xuY29uc3QgTUlOSU1VTV9IRUlHSFRfUkFUSU8gPSAwLjA3NTtcblxuLyoqXG4gKiBNYXJnaW4gaGVsZCBjbGVhciBhdCBFQUNIIGVuZCBvZiB0aGUgY2FwdGlvbiwgYXMgYSBmcmFjdGlvbiBvZiBpbWFnZSB3aWR0aC5cbiAqXG4gKiBBIGNhcHRpb24gdGhhdCBlbmRzIGEgcGl4ZWwgaW5zaWRlIHRoZSBmcmFtZSBpcyBsZWdhbGx5IHVuLWNsaXBwZWQgYW5kIHN0aWxsXG4gKiBsb29rcyB3cm9uZywgc28gdGhlIHJvb20gYSBjYXB0aW9uIGlzIG1lYXN1cmVkIGFnYWluc3QgaXMgdGhlIGZyYW1lIGxlc3MgdGhpc1xuICogYXQgYm90aCBlbmRzIFx1MjAxNCA0OHB4IGVhY2ggc2lkZSBvbiBhIDEyMDBweCBmcmFtZS5cbiAqL1xuY29uc3QgU0lERV9NQVJHSU5fUkFUSU8gPSAwLjA0O1xuXG4vKipcbiAqIERpdmlzb3IgdGhhdCB0dXJucyBhIHNwYW4gaW50byBpdHMgbWlkcG9pbnQsIGZvciBjZW50ZXJpbmcgdGhlIGNhcHRpb24uXG4gKi9cbmNvbnN0IENFTlRFUl9ESVZJU09SID0gMjtcblxuLyoqXG4gKiBUaGUgY2FwdGlvbidzIHR5cGVmYWNlIGFuZCB3ZWlnaHQsIGluIG9uZSBwbGFjZSBiZWNhdXNlIHRoZSBiYW5kIGFuZCB0aGVcbiAqIG1lYXN1cmVtZW50IGNhbnZhcyBNVVNUIGRyYXcgd2l0aCB0aGUgc2FtZSBvbmVzOiBhIG1lYXN1cmVtZW50IHRha2VuIGluIGFcbiAqIGRpZmZlcmVudCBmYWNlIGlzIG5vdCBhIG1lYXN1cmVtZW50IG9mIHRoZSB0aGluZyB0aGF0IHNoaXBzLlxuICovXG5jb25zdCBGT05UX0ZBTUlMWSA9ICdTZWdvZSBVSSwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZic7XG5cbmNvbnN0IEZPTlRfV0VJR0hUID0gJzYwMCc7XG5cbmNvbnN0IENBUFRJT05fRklMTCA9ICcjZmZmZmZmJztcblxuLyoqXG4gKiBVcHBlciBib3VuZCBvbiBvbmUgZ2x5cGgncyBhZHZhbmNlIHdpZHRoLCBhcyBhIG11bHRpcGxlIG9mIHRoZSBmb250IHNpemUuXG4gKlxuICogSXQgc2l6ZXMgdGhlIG9mZi1zY3JlZW4gY2FudmFzIHRoZSBjYXB0aW9uIGlzIG1lYXN1cmVkIG9uLCBhbmQgaXQgb25seSBldmVyXG4gKiBuZWVkcyB0byBiZSBhbiBvdmVyLWVzdGltYXRlOiBhIGNhbnZhcyB0b28gbmFycm93IHdvdWxkIGNsaXAgdGhlIHRleHQgYmVpbmdcbiAqIG1lYXN1cmVkLCB1bmRlci1yZXBvcnQgaXRzIHdpZHRoLCBhbmQgcmVpbnRyb2R1Y2UgdGhlIGV4YWN0IHNpbGVudCBjbGlwcGluZ1xuICogdGhlIG1lYXN1cmVtZW50IGV4aXN0cyB0byBjYXRjaC4gTm8gTGF0aW4gZ2x5cGggaW4gYSBwcm9wb3J0aW9uYWwgc2Fuc1xuICogYWR2YW5jZXMgYSBmdWxsIGVtIFx1MjAxNCBhbiBlbSBkYXNoLCB0aGUgd2lkZXN0LCBpcyAxLjAgXHUyMDE0IHNvIDEuMSBpcyBoZWFkcm9vbSBhdFxuICogbmVnbGlnaWJsZSBjb3N0IChtZWFzdXJlZCBwcm9zZSBydW5zIGFib3V0IDAuNDUgZW0gcGVyIGNoYXJhY3Rlciwgc28gdGhlXG4gKiBjYW52YXMgY29tZXMgb3V0IHJvdWdobHkgMi41eCB0aGUgdGV4dCkuXG4gKi9cbmNvbnN0IE1BWElNVU1fR0xZUEhfQURWQU5DRV9SQVRJTyA9IDEuMTtcblxuLyoqXG4gKiBIZWlnaHQgb2YgdGhlIG1lYXN1cmVtZW50IGNhbnZhcyBhcyBhIG11bHRpcGxlIG9mIHRoZSBmb250IHNpemUsIHNvIGFzY2VuZGVyc1xuICogYW5kIGRlc2NlbmRlcnMgaGF2ZSByb29tIGFuZCB0aGUgdHJpbSByZWFkcyB0aGUgZ2x5cGhzIHJhdGhlciB0aGFuIHRoZSBlZGdlLlxuICovXG5jb25zdCBNRUFTVVJFTUVOVF9DQU5WQVNfSEVJR0hUX1JBVElPID0gMztcblxuLyoqXG4gKiBIb3cgZmFyIGEgcGl4ZWwgbWF5IGRpZmZlciBmcm9tIHRoZSB0cmFuc3BhcmVudCBzdXJyb3VuZCBiZWZvcmUgYHRyaW1gIGNvdW50c1xuICogaXQgYXMgdGV4dC4gRGVsaWJlcmF0ZWx5IGZhciBsb3dlciB0aGFuIGBzaGFycGAncyBkZWZhdWx0IG9mIDEwOiB0aGUgb3V0ZXJtb3N0XG4gKiBwaXhlbHMgb2YgYW4gYW50aWFsaWFzZWQgZ2x5cGggYXJlIHZlcnkgZmFpbnQsIGFuZCB0aGUgZGVmYXVsdCBkaXNjYXJkcyB0aGVtLFxuICogdW5kZXItbWVhc3VyaW5nIGEgY2FwdGlvbiBieSBhIHBpeGVsIG9yIHR3byBhdCBlYWNoIGVuZC5cbiAqL1xuY29uc3QgVFJJTV9USFJFU0hPTEQgPSAxO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZENhcHRpb25UZXh0RWxlbWVudH0uXG4gKi9cbmludGVyZmFjZSBDYXB0aW9uVGV4dEVsZW1lbnRQYXJhbXMge1xuICByZWFkb25seSBmb250U2l6ZUluUGl4ZWxzOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdGV4dEFuY2hvcjogJ21pZGRsZScgfCAnc3RhcnQnO1xuICByZWFkb25seSB4SW5QaXhlbHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgeUluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBTVkcgZm9yIHRoZSBjYXB0aW9uIGJhbmQuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgY2FwdGlvbi5cbiAqIEBwYXJhbSBnZW9tZXRyeSAtIFRoZSBiYW5kIGdlb21ldHJ5LlxuICogQHBhcmFtIGltYWdlV2lkdGhJblBpeGVscyAtIFdpZHRoIG9mIHRoZSBpbWFnZSwgc28gdGhlIGJhbmQgc3BhbnMgaXQuXG4gKiBAcmV0dXJucyBUaGUgU1ZHIG1hcmt1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGFiZWxTdmcodGV4dDogc3RyaW5nLCBnZW9tZXRyeTogTGFiZWxCYW5kR2VvbWV0cnksIGltYWdlV2lkdGhJblBpeGVsczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgeyBmb250U2l6ZUluUGl4ZWxzLCBoZWlnaHRJblBpeGVscyB9ID0gZ2VvbWV0cnk7XG4gIGNvbnN0IGNhcHRpb25FbGVtZW50ID0gYnVpbGRDYXB0aW9uVGV4dEVsZW1lbnQoe1xuICAgIGZvbnRTaXplSW5QaXhlbHMsXG4gICAgdGV4dCxcbiAgICB0ZXh0QW5jaG9yOiAnbWlkZGxlJyxcbiAgICB4SW5QaXhlbHM6IGltYWdlV2lkdGhJblBpeGVscyAvIENFTlRFUl9ESVZJU09SLFxuICAgIHlJblBpeGVsczogaGVpZ2h0SW5QaXhlbHMgLyBDRU5URVJfRElWSVNPUlxuICB9KTtcblxuICByZXR1cm4gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyl9XCI+YFxuICAgICsgYDxyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIiR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9XCIgaGVpZ2h0PVwiJHtTdHJpbmcoaGVpZ2h0SW5QaXhlbHMpfVwiIGBcbiAgICArIGBmaWxsPVwiIzAwMDAwMFwiIGZpbGwtb3BhY2l0eT1cIiR7U3RyaW5nKEJBTkRfT1BBQ0lUWSl9XCIvPmBcbiAgICArIGAke2NhcHRpb25FbGVtZW50fTwvc3ZnPmA7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGNhcHRpb24gYmFuZCdzIHNpemUgYW5kIHBvc2l0aW9uIGZvciBhIGdpdmVuIGltYWdlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgaW1hZ2UgZGltZW5zaW9ucy5cbiAqIEByZXR1cm5zIFRoZSBiYW5kIGdlb21ldHJ5LlxuICogQHRocm93cyBFcnJvciBpZiBlaXRoZXIgZGltZW5zaW9uIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVMYWJlbEJhbmQocGFyYW1zOiBDb21wdXRlTGFiZWxCYW5kUGFyYW1zKTogTGFiZWxCYW5kR2VvbWV0cnkge1xuICBjb25zdCB7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9ID0gcGFyYW1zO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGltYWdlV2lkdGhJblBpeGVscykgfHwgaW1hZ2VXaWR0aEluUGl4ZWxzIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVMYWJlbEJhbmQ6IGltYWdlV2lkdGhJblBpeGVscyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX0uYCk7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbWFnZUhlaWdodEluUGl4ZWxzKSB8fCBpbWFnZUhlaWdodEluUGl4ZWxzIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVMYWJlbEJhbmQ6IGltYWdlSGVpZ2h0SW5QaXhlbHMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKGltYWdlSGVpZ2h0SW5QaXhlbHMpfS5gKTtcbiAgfVxuXG4gIGNvbnN0IGZvbnRTaXplSW5QaXhlbHMgPSBNYXRoLm1heChNSU5JTVVNX0ZPTlRfU0laRV9JTl9QSVhFTFMsIE1hdGgucm91bmQoaW1hZ2VXaWR0aEluUGl4ZWxzICogRk9OVF9TSVpFX1JBVElPKSk7XG4gIGNvbnN0IGNhcHRpb25IZWlnaHRJblBpeGVscyA9IE1hdGgucm91bmQoZm9udFNpemVJblBpeGVscyAqIEJBTkRfSEVJR0hUX1JBVElPKTtcbiAgY29uc3QgZmxvb3JlZEhlaWdodEluUGl4ZWxzID0gTWF0aC5tYXgoY2FwdGlvbkhlaWdodEluUGl4ZWxzLCBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0SW5QaXhlbHMgKiBNSU5JTVVNX0hFSUdIVF9SQVRJTykpO1xuICBjb25zdCBoZWlnaHRJblBpeGVscyA9IE1hdGgubWluKGltYWdlSGVpZ2h0SW5QaXhlbHMsIGZsb29yZWRIZWlnaHRJblBpeGVscyk7XG4gIGNvbnN0IHNpZGVNYXJnaW5JblBpeGVscyA9IE1hdGgucm91bmQoaW1hZ2VXaWR0aEluUGl4ZWxzICogU0lERV9NQVJHSU5fUkFUSU8pO1xuXG4gIHJldHVybiB7XG4gICAgY2FwdGlvblJvb21JblBpeGVsczogaW1hZ2VXaWR0aEluUGl4ZWxzIC0gKHNpZGVNYXJnaW5JblBpeGVscyAqIENFTlRFUl9ESVZJU09SKSxcbiAgICBmb250U2l6ZUluUGl4ZWxzLFxuICAgIGhlaWdodEluUGl4ZWxzLFxuICAgIHRvcEluUGl4ZWxzOiBpbWFnZUhlaWdodEluUGl4ZWxzIC0gaGVpZ2h0SW5QaXhlbHNcbiAgfTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHRleHQgZm9yIGluY2x1c2lvbiBpbiBTVkcgY2hhcmFjdGVyIGRhdGEuXG4gKlxuICogQSBjYXB0aW9uIGlzIGF1dGhvcmVkIHBlciBzY3JlZW5zaG90IGFuZCBjYW4gbGVnaXRpbWF0ZWx5IGNvbnRhaW4gYCZgIG9yIHRoZVxuICogYW5nbGUgYnJhY2tldHMgT2JzaWRpYW4gdXNlcyBpbiBsaW5rIHN5bnRheDsgdW5lc2NhcGVkLCB0aG9zZSBtYWtlIHRoZSBTVkdcbiAqIGltcG9zc2libGUgdG8gcGFyc2UgYW5kIGBzaGFycGAgZmFpbHMgb24gYSBjYXB0aW9uIHJhdGhlciB0aGFuIG9uIGFuIGltYWdlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHJhdyBjYXB0aW9uLlxuICogQHJldHVybnMgVGhlIGNhcHRpb24sIHNhZmUgdG8gZW1iZWQgaW4gU1ZHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlU3ZnVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JylcbiAgICAucmVwbGFjZUFsbCgnPCcsICcmbHQ7JylcbiAgICAucmVwbGFjZUFsbCgnPicsICcmZ3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXFwnJywgJyZhcG9zOycpO1xufVxuXG4vKipcbiAqIERyYXdzIGEgY2FwdGlvbiBiYW5kIGFjcm9zcyB0aGUgYm90dG9tIG9mIGEgc2NyZWVuc2hvdC5cbiAqXG4gKiBUaGUgaW1hZ2Uga2VlcHMgaXRzIGRpbWVuc2lvbnMgZXhhY3RseTogdGhlIGJhbmQgaXMgY29tcG9zaXRlZCBPVkVSIHRoZVxuICogZnJhbWUsIG5ldmVyIGFwcGVuZGVkIHRvIGl0LCBiZWNhdXNlIHRoZSBzdG9yZSBleHBlY3RzIGEgc3BlY2lmaWMgc2l6ZS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgY2FwdHVyZWQgUE5HLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgY2FwdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhYmVsZWQgUE5HLCB0aGUgc2FtZSBzaXplIGFzIHRoZSBpbnB1dC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYHNoYXJwYCBpcyBub3QgaW5zdGFsbGVkLCB0aGUgaW1hZ2UgZGltZW5zaW9ucyBjYW5ub3QgYmUgcmVhZCwgb3IgdGhlIGNhcHRpb24gaXMgdG9vIHdpZGUgZm9yIHRoZSBmcmFtZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhYmVsU2NyZWVuc2hvdChieXRlczogVWludDhBcnJheSwgb3B0aW9uczogTGFiZWxTY3JlZW5zaG90T3B0aW9ucyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCdsYWJlbFNjcmVlbnNob3QnKTtcbiAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBzaGFycChieXRlcykubWV0YWRhdGEoKTtcbiAgY29uc3QgaW1hZ2VXaWR0aEluUGl4ZWxzID0gbWV0YWRhdGEud2lkdGg7XG4gIGNvbnN0IGltYWdlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoaW1hZ2VXaWR0aEluUGl4ZWxzID09PSB1bmRlZmluZWQgfHwgaW1hZ2VIZWlnaHRJblBpeGVscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsYWJlbFNjcmVlbnNob3Q6IGNvdWxkIG5vdCByZWFkIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IGdlb21ldHJ5ID0gY29tcHV0ZUxhYmVsQmFuZCh7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9KTtcbiAgY29uc3QgdGV4dFdpZHRoSW5QaXhlbHMgPSBhd2FpdCBtZWFzdXJlQ2FwdGlvbldpZHRoKG9wdGlvbnMudGV4dCwgZ2VvbWV0cnkuZm9udFNpemVJblBpeGVscyk7XG5cbiAgaWYgKHRleHRXaWR0aEluUGl4ZWxzID4gZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscykge1xuICAgIGNvbnN0IG92ZXJmbG93SW5QaXhlbHMgPSB0ZXh0V2lkdGhJblBpeGVscyAtIGdlb21ldHJ5LmNhcHRpb25Sb29tSW5QaXhlbHM7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGxhYmVsU2NyZWVuc2hvdDogdGhlIGNhcHRpb24gaXMgJHtTdHJpbmcob3ZlcmZsb3dJblBpeGVscyl9cHggdG9vIHdpZGUgZm9yIHRoZSBmcmFtZS4gYFxuICAgICAgICArIGBJdCByZW5kZXJzICR7U3RyaW5nKHRleHRXaWR0aEluUGl4ZWxzKX1weCBhdCBmb250LXNpemUgJHtTdHJpbmcoZ2VvbWV0cnkuZm9udFNpemVJblBpeGVscyl9LCBhbmQgYSBgXG4gICAgICAgICsgYCR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9cHggZnJhbWUgaGFzIHJvb20gZm9yICR7U3RyaW5nKGdlb21ldHJ5LmNhcHRpb25Sb29tSW5QaXhlbHMpfXB4LiBgXG4gICAgICAgICsgJ1Nob3J0ZW4gaXQ6IGEgY2FwdGlvbiB0aGF0IGRvZXMgbm90IGZpdCBpcyBjbGlwcGVkIGF0IEJPVEggZW5kcywgd2l0aCBubyBlbGxpcHNpcyB0byBzaG93IGl0IGhhcHBlbmVkLiAnXG4gICAgICAgICsgYENhcHRpb246ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucy50ZXh0KX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHN2ZyA9IGJ1aWxkTGFiZWxTdmcob3B0aW9ucy50ZXh0LCBnZW9tZXRyeSwgaW1hZ2VXaWR0aEluUGl4ZWxzKTtcbiAgY29uc3QgbGF5ZXI6IFNoYXJwQ29tcG9zaXRlTGF5ZXIgPSB7XG4gICAgaW5wdXQ6IEJ1ZmZlci5mcm9tKHN2ZyksXG4gICAgbGVmdDogMCxcbiAgICB0b3A6IGdlb21ldHJ5LnRvcEluUGl4ZWxzXG4gIH07XG5cbiAgY29uc3QgbGFiZWxlZCA9IGF3YWl0IHNoYXJwKGJ5dGVzKVxuICAgIC5jb21wb3NpdGUoW2xheWVyXSlcbiAgICAucG5nKClcbiAgICAudG9CdWZmZXIoKTtcblxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobGFiZWxlZCk7XG59XG5cbi8qKlxuICogTWVhc3VyZXMgYSBjYXB0aW9uIGFnYWluc3QgdGhlIGZyYW1lIGl0IGlzIGRlc3RpbmVkIGZvciwgd2l0aG91dCBkcmF3aW5nXG4gKiBhbnl0aGluZy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQge0BsaW5rIGxhYmVsU2NyZWVuc2hvdH0gcmVqZWN0cyBhbiBvdmVybG9uZyBjYXB0aW9uIHdpdGgsIGV4cG9zZWRcbiAqIHNvIGEgY2FwdGlvbiBjYW4gYmUgY2hvc2VuIHdpdGggdGhlIG51bWJlciBpbiBoYW5kIGluc3RlYWQgb2YgYnkgY2FwdHVyaW5nIGFcbiAqIGZyYW1lIGFuZCBsb29raW5nIGF0IGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY2FwdGlvbiBhbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGltYWdlIGl0IGlzIGZvci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG1lYXN1cmVtZW50LlxuICogQHRocm93cyBFcnJvciBpZiBgc2hhcnBgIGlzIG5vdCBpbnN0YWxsZWQsIG9yIGVpdGhlciBkaW1lbnNpb24gaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWVhc3VyZUxhYmVsQ2FwdGlvbihwYXJhbXM6IE1lYXN1cmVMYWJlbENhcHRpb25QYXJhbXMpOiBQcm9taXNlPExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50PiB7XG4gIGNvbnN0IHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzLCB0ZXh0IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGdlb21ldHJ5ID0gY29tcHV0ZUxhYmVsQmFuZCh7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9KTtcbiAgY29uc3QgdGV4dFdpZHRoSW5QaXhlbHMgPSBhd2FpdCBtZWFzdXJlQ2FwdGlvbldpZHRoKHRleHQsIGdlb21ldHJ5LmZvbnRTaXplSW5QaXhlbHMpO1xuXG4gIHJldHVybiB7XG4gICAgY2FwdGlvblJvb21JblBpeGVsczogZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscyxcbiAgICBkb2VzRml0OiB0ZXh0V2lkdGhJblBpeGVscyA8PSBnZW9tZXRyeS5jYXB0aW9uUm9vbUluUGl4ZWxzLFxuICAgIHRleHRXaWR0aEluUGl4ZWxzXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjYXB0aW9uJ3MgU1ZHIGA8dGV4dD5gIGVsZW1lbnQuXG4gKlxuICogQm90aCB0aGUgYmFuZCBhbmQgdGhlIG1lYXN1cmVtZW50IGNhbnZhcyBnbyB0aHJvdWdoIGhlcmUsIHNvIHRoZSB0aGluZyB0aGF0XG4gKiBpcyBtZWFzdXJlZCBpcyBkcmF3biB3aXRoIHRoZSBzYW1lIGZhY2UsIHdlaWdodCBhbmQgc2l6ZSBhcyB0aGUgdGhpbmcgdGhhdFxuICogc2hpcHMuIFR3byBoYW5kLXdyaXR0ZW4gY29waWVzIHdvdWxkIGJlIGZyZWUgdG8gZHJpZnQsIGFuZCBhIG1lYXN1cmVtZW50IHRoYXRcbiAqIGhhcyBkcmlmdGVkIGZyb20gdGhlIGRyYXdpbmcgaXMgd29yc2UgdGhhbiBubyBtZWFzdXJlbWVudCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjYXB0aW9uLCBpdHMgc2l6ZSwgYW5kIHdoZXJlIHRvIGFuY2hvciBpdC5cbiAqIEByZXR1cm5zIFRoZSBgPHRleHQ+YCBtYXJrdXAuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ2FwdGlvblRleHRFbGVtZW50KHBhcmFtczogQ2FwdGlvblRleHRFbGVtZW50UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBmb250U2l6ZUluUGl4ZWxzLCB0ZXh0LCB0ZXh0QW5jaG9yLCB4SW5QaXhlbHMsIHlJblBpeGVscyB9ID0gcGFyYW1zO1xuXG4gIHJldHVybiBgPHRleHQgeD1cIiR7U3RyaW5nKHhJblBpeGVscyl9XCIgeT1cIiR7U3RyaW5nKHlJblBpeGVscyl9XCIgYFxuICAgICsgYGZvbnQtZmFtaWx5PVwiJHtGT05UX0ZBTUlMWX1cIiBmb250LXNpemU9XCIke1N0cmluZyhmb250U2l6ZUluUGl4ZWxzKX1cIiBgXG4gICAgKyBgZm9udC13ZWlnaHQ9XCIke0ZPTlRfV0VJR0hUfVwiIGZpbGw9XCIke0NBUFRJT05fRklMTH1cIiB0ZXh0LWFuY2hvcj1cIiR7dGV4dEFuY2hvcn1cIiBkb21pbmFudC1iYXNlbGluZT1cImNlbnRyYWxcIj5gXG4gICAgKyBgJHtlc2NhcGVTdmdUZXh0KHRleHQpfTwvdGV4dD5gO1xufVxuXG4vKipcbiAqIE1lYXN1cmVzIGhvdyB3aWRlIGEgY2FwdGlvbiByZW5kZXJzIGF0IGEgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBUaGUgdGV4dCBpcyBkcmF3biBhbG9uZSBvbiBhIHRyYW5zcGFyZW50IGNhbnZhcyBkZWxpYmVyYXRlbHkgd2lkZXIgdGhhbiBpdCBjYW5cbiAqIHBvc3NpYmx5IG5lZWQsIHRoZW4gYHRyaW1gbWVkIGJhY2sgdG8gaXRzIG93biBpbmsgXHUyMDE0IHRoZSBzYW1lIG1lYXN1cmVtZW50IHRoYXRcbiAqIHdhcyBwcmV2aW91c2x5IGRvbmUgYnkgaGFuZCwgb25jZSwgcGVyIGNhcHRpb24sIGJ5IHdob2V2ZXIgdGhvdWdodCB0byBkb3VidFxuICogb25lLiBUaGUgcmVuZGVyZXIgZG9pbmcgdGhlIG1lYXN1cmluZyBpcyB0aGUgcmVuZGVyZXIgdGhhdCBkcmF3cyB0aGUgYmFuZCwgc29cbiAqIHRoZSB0d28gY2Fubm90IGRpc2FncmVlIGFib3V0IGEgZm9udCB0aGUgaG9zdCBkb2VzIG9yIGRvZXMgbm90IGhhdmUuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgY2FwdGlvbi5cbiAqIEBwYXJhbSBmb250U2l6ZUluUGl4ZWxzIC0gVGhlIHNpemUgdGhlIGJhbmQgd291bGQgZHJhdyBpdCBhdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlbmRlcmVkIHdpZHRoIGluIHBpeGVscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWVhc3VyZUNhcHRpb25XaWR0aCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gIC8vIEEgY2FwdGlvbiB3aXRoIG5vIGluayBsZWF2ZXMgdGhlIGNhbnZhcyB1bmlmb3JtbHkgdHJhbnNwYXJlbnQsIGFuZCBgdHJpbWBcbiAgLy8gcmV0dXJucyBzdWNoIGFuIGltYWdlIHVudG91Y2hlZCBcdTIwMTQgaS5lLiByZXBvcnRzIHRoZSB3aG9sZSBjYW52YXMgYXMgdGV4dC5cbiAgaWYgKHRleHQudHJpbSgpID09PSAnJykge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3Qgc2hhcnAgPSBhd2FpdCBpbXBvcnRTaGFycCgnbWVhc3VyZUxhYmVsQ2FwdGlvbicpO1xuICBjb25zdCBwYWRkaW5nSW5QaXhlbHMgPSBmb250U2l6ZUluUGl4ZWxzICogQ0VOVEVSX0RJVklTT1I7XG4gIGNvbnN0IGNhbnZhc1dpZHRoSW5QaXhlbHMgPSBNYXRoLmNlaWwoZm9udFNpemVJblBpeGVscyAqIE1BWElNVU1fR0xZUEhfQURWQU5DRV9SQVRJTyAqIHRleHQubGVuZ3RoKSArIHBhZGRpbmdJblBpeGVscztcbiAgY29uc3QgY2FudmFzSGVpZ2h0SW5QaXhlbHMgPSBNYXRoLmNlaWwoZm9udFNpemVJblBpeGVscyAqIE1FQVNVUkVNRU5UX0NBTlZBU19IRUlHSFRfUkFUSU8pO1xuICBjb25zdCBjYXB0aW9uRWxlbWVudCA9IGJ1aWxkQ2FwdGlvblRleHRFbGVtZW50KHtcbiAgICBmb250U2l6ZUluUGl4ZWxzLFxuICAgIHRleHQsXG4gICAgdGV4dEFuY2hvcjogJ3N0YXJ0JyxcbiAgICB4SW5QaXhlbHM6IGZvbnRTaXplSW5QaXhlbHMsXG4gICAgeUluUGl4ZWxzOiBjYW52YXNIZWlnaHRJblBpeGVscyAvIENFTlRFUl9ESVZJU09SXG4gIH0pO1xuICBjb25zdCBzdmcgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIke1N0cmluZyhjYW52YXNXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhjYW52YXNIZWlnaHRJblBpeGVscyl9XCI+YFxuICAgICsgYCR7Y2FwdGlvbkVsZW1lbnR9PC9zdmc+YDtcblxuICBjb25zdCB0cmltbWVkID0gYXdhaXQgc2hhcnAobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oc3ZnKSkpXG4gICAgLnRyaW0oeyB0aHJlc2hvbGQ6IFRSSU1fVEhSRVNIT0xEIH0pXG4gICAgLnBuZygpXG4gICAgLnRvQnVmZmVyKCk7XG5cbiAgcmV0dXJuIHJlYWRQbmdEaW1lbnNpb25zKG5ldyBVaW50OEFycmF5KHRyaW1tZWQpKS53aWR0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
@@ -21,7 +21,7 @@ __export(library_exports, {
21
21
  LIBRARY_VERSION: () => LIBRARY_VERSION
22
22
  });
23
23
  module.exports = __toCommonJS(library_exports);
24
- const LIBRARY_VERSION = false ? "dev" : "15.0.0";
24
+ const LIBRARY_VERSION = false ? "dev" : "16.0.0";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  LIBRARY_VERSION
@@ -2,7 +2,7 @@ import { readPngDimensions } from "./capture-screenshot.mjs";
2
2
  import { importSharp } from "./sharp-loader.mjs";
3
3
  const FONT_SIZE_RATIO = 0.034;
4
4
  const BAND_HEIGHT_RATIO = 2.2;
5
- const BAND_OPACITY = 0.94;
5
+ const BAND_OPACITY = 1;
6
6
  const MINIMUM_FONT_SIZE_IN_PIXELS = 18;
7
7
  const MINIMUM_HEIGHT_RATIO = 0.075;
8
8
  const SIDE_MARGIN_RATIO = 0.04;
@@ -112,4 +112,4 @@ export {
112
112
  labelScreenshot,
113
113
  measureLabelCaption
114
114
  };
115
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhYmVsLXNjcmVlbnNob3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBZGRzIGEgY2FwdGlvbiBiYW5kIHRvIGFuIGFscmVhZHktY2FwdHVyZWQgc2NyZWVuc2hvdC5cbiAqXG4gKiBBIHN0b3JlIGxpc3Rpbmcgc2hvd3Mgc2NyZWVuc2hvdHMgT05FIEFUIEEgVElNRSwgaW4gYSBjYXJvdXNlbCwgd2l0aCBub1xuICogY2FwdGlvbiBvZiBpdHMgb3duIFx1MjAxNCBzbyBhbiBpbWFnZSBoYXMgdG8gc2F5IHdoYXQgaXQgaXMgc2hvd2luZy4gV2l0aG91dCB0aGF0LFxuICogYSBzaG90IG9mIHRoZSBzdGF0ZSBhIHBsdWdpbiByZW1vdmVzIHJlYWRzIGFzIGEgc2hvdCBvZiB0aGUgc3RhdGUgdGhlIHBsdWdpblxuICogY2F1c2VzLCB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG1lc3NhZ2UuXG4gKlxuICogVGhlIGJhbmQgaXMgZHJhd24gb3ZlciB0aGUgQk9UVE9NIG9mIHRoZSBmcmFtZSwgZm9yIHR3byByZWFzb25zOiB0aGUgdG9wIGlzXG4gKiB3aGVyZSB0aGUgY29udGVudCBiZWluZyBkZW1vbnN0cmF0ZWQgdXN1YWxseSBzdGFydHMsIGFuZCB0aGUgYm90dG9tIG9mIGFuXG4gKiBPYnNpZGlhbiBmcmFtZSBpcyBjaHJvbWUgXHUyMDE0IHN0YXR1cyBiYXIsIHdvcmQgY291bnQsIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCB3aGljaCB0aGVcbiAqIGJhbmQgdGhlbiBjb3ZlcnMgcmF0aGVyIHRoYW4gY29tcGV0aW5nIHdpdGguXG4gKlxuICogVGhpcyBpcyBwb3N0LXByb2Nlc3NpbmcsIGRlbGliZXJhdGVseS4gVGhlIGNhcHR1cmUgc3RheXMgYW4gdW50b3VjaGVkIGRldmljZVxuICogZnJhbWUsIGFuZCByZXdvcmRpbmcgYSBsYWJlbCBuZWVkcyBubyByZS1zaG9vdC5cbiAqXG4gKiBBIGNhcHRpb24gdGhhdCBpcyB0b28gbG9uZyBmb3IgaXRzIGZyYW1lIGlzIE1FQVNVUkVEIGFuZCByZWplY3RlZCByYXRoZXIgdGhhblxuICogZHJhd24uIEFuIFNWRyBgPHRleHQ+YCBpcyBjbGlwcGVkIGJ5IGl0cyB2aWV3cG9ydCBhdCBib3RoIGVuZHMgd2l0aCBub1xuICogZWxsaXBzaXMgYW5kIG5vIGVycm9yLCBzbyBhbiBvdmVybG9uZyBjYXB0aW9uIHNoaXBzIGFzIGEgc2VudGVuY2UgZnJhZ21lbnRcbiAqIHRoYXQgbG9va3MgZGVsaWJlcmF0ZSBcdTIwMTQgYG5hYmxlZCBpbiBTZXR0aW5ncyAtIGEgbGlzdGVuaW5nIHBsdWdpbiBpcyB0b2xkYCBcdTIwMTRcbiAqIGFuZCB0aGUgZnJhbWUgaXMgc3RpbGwgZXhhY3RseSB0aGUgc2l6ZSBpdCBzaG91bGQgYmUsIHNvIGV2ZXJ5IGRpbWVuc2lvblxuICogYXNzZXJ0aW9uIGRvd25zdHJlYW0gc3RpbGwgcGFzc2VzLiBUaGUgb25seSBmZWVkYmFjayBhbnlvbmUgZXZlciBnb3Qgd2FzXG4gKiBsb29raW5nIGF0IHRoZSBQTkcuIFNlZSB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaGFycENvbXBvc2l0ZUxheWVyIH0gZnJvbSAnLi9zaGFycC1sb2FkZXIubWpzJztcblxuaW1wb3J0IHsgcmVhZFBuZ0RpbWVuc2lvbnMgfSBmcm9tICcuL2NhcHR1cmUtc2NyZWVuc2hvdC5tanMnO1xuaW1wb3J0IHsgaW1wb3J0U2hhcnAgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb21wdXRlTGFiZWxCYW5kfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlTGFiZWxCYW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGdlb21ldHJ5IG9mIHRoZSBjYXB0aW9uIGJhbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFiZWxCYW5kR2VvbWV0cnkge1xuICAvKipcbiAgICogSG93IG11Y2ggaG9yaXpvbnRhbCByb29tIHRoZSBjYXB0aW9uIGhhcywgaW4gcGl4ZWxzOiB0aGUgaW1hZ2Ugd2lkdGggbGVzc1xuICAgKiB0aGUgbWFyZ2luIGhlbGQgY2xlYXIgYXQgZWFjaCBlbmQsIHNvIGEgY2FwdGlvbiB0aGF0IGZpdHMgZG9lcyBub3QgcmVhZCBhc1xuICAgKiB0aG91Z2ggaXQgd2VyZSBhYm91dCB0byB0b3VjaCB0aGUgZWRnZSBvZiB0aGUgZnJhbWUuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvbnQgc2l6ZSBmb3IgdGhlIGNhcHRpb24sIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBiYW5kLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBoZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGltYWdlIHRvIHRoZSB0b3Agb2YgdGhlIGJhbmQsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IHRvcEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCBhIGNhcHRpb24gbWVhc3VyZXMgYWdhaW5zdCB0aGUgZnJhbWUgaXQgaXMgZGVzdGluZWQgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50IHtcbiAgLyoqXG4gICAqIFRoZSByb29tIGF2YWlsYWJsZSwgaW4gcGl4ZWxzIFx1MjAxNCB7QGxpbmsgTGFiZWxCYW5kR2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVsc30uXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNhcHRpb24gZml0cyB0aGF0IHJvb20uXG4gICAqL1xuICByZWFkb25seSBkb2VzRml0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIb3cgd2lkZSB0aGUgY2FwdGlvbiBhY3R1YWxseSByZW5kZXJzLCBpbiBwaXhlbHMsIGF0IHRoZSBzaXplIHRoZSBiYW5kXG4gICAqIHdvdWxkIGRyYXcgaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0V2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBsYWJlbFNjcmVlbnNob3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsU2NyZWVuc2hvdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNhcHRpb24uIEtlZXAgaXQgdG8gYSBoYW5kZnVsIG9mIHdvcmRzOiBpdCBpcyByZWFkIGF0IGxpc3RpbmctdGh1bWJuYWlsXG4gICAqIHNpemUsIGFuZCBpdCBpcyBuZWl0aGVyIHdyYXBwZWQgbm9yIHNocnVuayB0byBmaXQgXHUyMDE0IG9uZSB0aGF0IGRvZXMgbm90IGZpdFxuICAgKiBpcyBSRUpFQ1RFRCwgd2l0aCB0aGUgbWVhc3VyZWQgd2lkdGggYW5kIHRoZSByb29tIGF2YWlsYWJsZS4gQ2hlY2sgYVxuICAgKiBjYW5kaWRhdGUgd2l0aCB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0gYmVmb3JlIGNvbW1pdHRpbmcgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG1lYXN1cmVMYWJlbENhcHRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lYXN1cmVMYWJlbENhcHRpb25QYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBpbWFnZSB0aGUgY2FwdGlvbiBpcyBkZXN0aW5lZCBmb3IsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIGltYWdlIHRoZSBjYXB0aW9uIGlzIGRlc3RpbmVkIGZvciwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXB0aW9uIHRvIG1lYXN1cmUuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FwdGlvbiBzaXplIGFzIGEgZnJhY3Rpb24gb2YgaW1hZ2UgV0lEVEgsIG5vdCBoZWlnaHQuXG4gKlxuICogV2lkdGggaXMgd2hhdCBnb3Zlcm5zIGxlZ2liaWxpdHkgaGVyZTogYSA5MDB4MTYwMCBwaG9uZSBmcmFtZSBhbmQgYSAxMjAweDgwMFxuICogZGVza3RvcCBmcmFtZSBhcmUgcmVhZCBhdCBzaW1pbGFyIG9uLXNjcmVlbiB3aWR0aHMgaW4gYSBsaXN0aW5nLCBzbyBzaXppbmcgYnlcbiAqIHdpZHRoIGtlZXBzIHRoZSBjYXB0aW9uIHZpc3VhbGx5IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSB0d28uXG4gKi9cbmNvbnN0IEZPTlRfU0laRV9SQVRJTyA9IDAuMDM0O1xuXG4vKipcbiAqIEJhbmQgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSBcdTIwMTQgZW5vdWdoIHRvIHNpdCB0aGUgdGV4dCBvbiB3aXRoXG4gKiBjbGVhciBzcGFjZSBhYm92ZSBhbmQgYmVsb3cuXG4gKi9cbmNvbnN0IEJBTkRfSEVJR0hUX1JBVElPID0gMi4yO1xuXG4vKipcbiAqIE9wYWNpdHkgb2YgdGhlIGJhbmQuIE5lYXItb3BhcXVlIG9uIHB1cnBvc2U6IHRoZSBiYW5kIGV4aXN0cyBwYXJ0bHkgdG8gQ09WRVJcbiAqIHRoZSBjaHJvbWUgYWxvbmcgdGhlIGJvdHRvbSBvZiB0aGUgZnJhbWUsIGFuZCBhdCAwLjgyIGEgc3RhdHVzIGJhciBsZWdpYmx5XG4gKiBibGVkIHRocm91Z2ggYmVoaW5kIHRoZSBjYXB0aW9uLCB3aGljaCBsb29rZWQgbGlrZSBhIG1pc3Rha2UgcmF0aGVyIHRoYW4gYVxuICogZGVzaWduLlxuICovXG5jb25zdCBCQU5EX09QQUNJVFkgPSAwLjk0O1xuXG5jb25zdCBNSU5JTVVNX0ZPTlRfU0laRV9JTl9QSVhFTFMgPSAxODtcblxuLyoqXG4gKiBGbG9vciBvbiBiYW5kIGhlaWdodCBhcyBhIGZyYWN0aW9uIG9mIGltYWdlIEhFSUdIVC5cbiAqXG4gKiBIZWlnaHQgZGVyaXZlZCBmcm9tIHRoZSBjYXB0aW9uIGFsb25lIGlzIHRvbyBzaGFsbG93IG9uIGEgdGFsbCBmcmFtZTogb24gYVxuICogOTAweDE2MDAgcGhvbmUgaXQgY2FtZSB0byA2OHB4IGFuZCBzbGljZWQgdGhyb3VnaCB0aGUgc3RhdHVzIHJvdyBpdCB3YXMgbWVhbnRcbiAqIHRvIGNvdmVyLCBjbGlwcGluZyB0aGUgdGV4dCBtaWQtbGluZS4gVGhpcyBmbG9vciBtYWtlcyB0aGUgYmFuZCBkZWVwIGVub3VnaCB0b1xuICogc3dhbGxvdyB0aGF0IHJvdyB3aG9sZSAoMTIwcHggb24gYSA5MDB4MTYwMCBwaG9uZSksIGFuZCBpcyBpbmVydCBvbiBhIHdpZGUgZnJhbWUgd2hlcmUgdGhlIGNhcHRpb24tZGVyaXZlZFxuICogaGVpZ2h0IGlzIGFscmVhZHkgdGhlIGxhcmdlciBvZiB0aGUgdHdvLlxuICovXG5jb25zdCBNSU5JTVVNX0hFSUdIVF9SQVRJTyA9IDAuMDc1O1xuXG4vKipcbiAqIE1hcmdpbiBoZWxkIGNsZWFyIGF0IEVBQ0ggZW5kIG9mIHRoZSBjYXB0aW9uLCBhcyBhIGZyYWN0aW9uIG9mIGltYWdlIHdpZHRoLlxuICpcbiAqIEEgY2FwdGlvbiB0aGF0IGVuZHMgYSBwaXhlbCBpbnNpZGUgdGhlIGZyYW1lIGlzIGxlZ2FsbHkgdW4tY2xpcHBlZCBhbmQgc3RpbGxcbiAqIGxvb2tzIHdyb25nLCBzbyB0aGUgcm9vbSBhIGNhcHRpb24gaXMgbWVhc3VyZWQgYWdhaW5zdCBpcyB0aGUgZnJhbWUgbGVzcyB0aGlzXG4gKiBhdCBib3RoIGVuZHMgXHUyMDE0IDQ4cHggZWFjaCBzaWRlIG9uIGEgMTIwMHB4IGZyYW1lLlxuICovXG5jb25zdCBTSURFX01BUkdJTl9SQVRJTyA9IDAuMDQ7XG5cbi8qKlxuICogRGl2aXNvciB0aGF0IHR1cm5zIGEgc3BhbiBpbnRvIGl0cyBtaWRwb2ludCwgZm9yIGNlbnRlcmluZyB0aGUgY2FwdGlvbi5cbiAqL1xuY29uc3QgQ0VOVEVSX0RJVklTT1IgPSAyO1xuXG4vKipcbiAqIFRoZSBjYXB0aW9uJ3MgdHlwZWZhY2UgYW5kIHdlaWdodCwgaW4gb25lIHBsYWNlIGJlY2F1c2UgdGhlIGJhbmQgYW5kIHRoZVxuICogbWVhc3VyZW1lbnQgY2FudmFzIE1VU1QgZHJhdyB3aXRoIHRoZSBzYW1lIG9uZXM6IGEgbWVhc3VyZW1lbnQgdGFrZW4gaW4gYVxuICogZGlmZmVyZW50IGZhY2UgaXMgbm90IGEgbWVhc3VyZW1lbnQgb2YgdGhlIHRoaW5nIHRoYXQgc2hpcHMuXG4gKi9cbmNvbnN0IEZPTlRfRkFNSUxZID0gJ1NlZ29lIFVJLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJztcblxuY29uc3QgRk9OVF9XRUlHSFQgPSAnNjAwJztcblxuY29uc3QgQ0FQVElPTl9GSUxMID0gJyNmZmZmZmYnO1xuXG4vKipcbiAqIFVwcGVyIGJvdW5kIG9uIG9uZSBnbHlwaCdzIGFkdmFuY2Ugd2lkdGgsIGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZS5cbiAqXG4gKiBJdCBzaXplcyB0aGUgb2ZmLXNjcmVlbiBjYW52YXMgdGhlIGNhcHRpb24gaXMgbWVhc3VyZWQgb24sIGFuZCBpdCBvbmx5IGV2ZXJcbiAqIG5lZWRzIHRvIGJlIGFuIG92ZXItZXN0aW1hdGU6IGEgY2FudmFzIHRvbyBuYXJyb3cgd291bGQgY2xpcCB0aGUgdGV4dCBiZWluZ1xuICogbWVhc3VyZWQsIHVuZGVyLXJlcG9ydCBpdHMgd2lkdGgsIGFuZCByZWludHJvZHVjZSB0aGUgZXhhY3Qgc2lsZW50IGNsaXBwaW5nXG4gKiB0aGUgbWVhc3VyZW1lbnQgZXhpc3RzIHRvIGNhdGNoLiBObyBMYXRpbiBnbHlwaCBpbiBhIHByb3BvcnRpb25hbCBzYW5zXG4gKiBhZHZhbmNlcyBhIGZ1bGwgZW0gXHUyMDE0IGFuIGVtIGRhc2gsIHRoZSB3aWRlc3QsIGlzIDEuMCBcdTIwMTQgc28gMS4xIGlzIGhlYWRyb29tIGF0XG4gKiBuZWdsaWdpYmxlIGNvc3QgKG1lYXN1cmVkIHByb3NlIHJ1bnMgYWJvdXQgMC40NSBlbSBwZXIgY2hhcmFjdGVyLCBzbyB0aGVcbiAqIGNhbnZhcyBjb21lcyBvdXQgcm91Z2hseSAyLjV4IHRoZSB0ZXh0KS5cbiAqL1xuY29uc3QgTUFYSU1VTV9HTFlQSF9BRFZBTkNFX1JBVElPID0gMS4xO1xuXG4vKipcbiAqIEhlaWdodCBvZiB0aGUgbWVhc3VyZW1lbnQgY2FudmFzIGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSwgc28gYXNjZW5kZXJzXG4gKiBhbmQgZGVzY2VuZGVycyBoYXZlIHJvb20gYW5kIHRoZSB0cmltIHJlYWRzIHRoZSBnbHlwaHMgcmF0aGVyIHRoYW4gdGhlIGVkZ2UuXG4gKi9cbmNvbnN0IE1FQVNVUkVNRU5UX0NBTlZBU19IRUlHSFRfUkFUSU8gPSAzO1xuXG4vKipcbiAqIEhvdyBmYXIgYSBwaXhlbCBtYXkgZGlmZmVyIGZyb20gdGhlIHRyYW5zcGFyZW50IHN1cnJvdW5kIGJlZm9yZSBgdHJpbWAgY291bnRzXG4gKiBpdCBhcyB0ZXh0LiBEZWxpYmVyYXRlbHkgZmFyIGxvd2VyIHRoYW4gYHNoYXJwYCdzIGRlZmF1bHQgb2YgMTA6IHRoZSBvdXRlcm1vc3RcbiAqIHBpeGVscyBvZiBhbiBhbnRpYWxpYXNlZCBnbHlwaCBhcmUgdmVyeSBmYWludCwgYW5kIHRoZSBkZWZhdWx0IGRpc2NhcmRzIHRoZW0sXG4gKiB1bmRlci1tZWFzdXJpbmcgYSBjYXB0aW9uIGJ5IGEgcGl4ZWwgb3IgdHdvIGF0IGVhY2ggZW5kLlxuICovXG5jb25zdCBUUklNX1RIUkVTSE9MRCA9IDE7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkQ2FwdGlvblRleHRFbGVtZW50fS5cbiAqL1xuaW50ZXJmYWNlIENhcHRpb25UZXh0RWxlbWVudFBhcmFtcyB7XG4gIHJlYWRvbmx5IGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0QW5jaG9yOiAnbWlkZGxlJyB8ICdzdGFydCc7XG4gIHJlYWRvbmx5IHhJblBpeGVsczogbnVtYmVyO1xuICByZWFkb25seSB5SW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNWRyBmb3IgdGhlIGNhcHRpb24gYmFuZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBjYXB0aW9uLlxuICogQHBhcmFtIGdlb21ldHJ5IC0gVGhlIGJhbmQgZ2VvbWV0cnkuXG4gKiBAcGFyYW0gaW1hZ2VXaWR0aEluUGl4ZWxzIC0gV2lkdGggb2YgdGhlIGltYWdlLCBzbyB0aGUgYmFuZCBzcGFucyBpdC5cbiAqIEByZXR1cm5zIFRoZSBTVkcgbWFya3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMYWJlbFN2Zyh0ZXh0OiBzdHJpbmcsIGdlb21ldHJ5OiBMYWJlbEJhbmRHZW9tZXRyeSwgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCB7IGZvbnRTaXplSW5QaXhlbHMsIGhlaWdodEluUGl4ZWxzIH0gPSBnZW9tZXRyeTtcbiAgY29uc3QgY2FwdGlvbkVsZW1lbnQgPSBidWlsZENhcHRpb25UZXh0RWxlbWVudCh7XG4gICAgZm9udFNpemVJblBpeGVscyxcbiAgICB0ZXh0LFxuICAgIHRleHRBbmNob3I6ICdtaWRkbGUnLFxuICAgIHhJblBpeGVsczogaW1hZ2VXaWR0aEluUGl4ZWxzIC8gQ0VOVEVSX0RJVklTT1IsXG4gICAgeUluUGl4ZWxzOiBoZWlnaHRJblBpeGVscyAvIENFTlRFUl9ESVZJU09SXG4gIH0pO1xuXG4gIHJldHVybiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIke1N0cmluZyhpbWFnZVdpZHRoSW5QaXhlbHMpfVwiIGhlaWdodD1cIiR7U3RyaW5nKGhlaWdodEluUGl4ZWxzKX1cIj5gXG4gICAgKyBgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyl9XCIgYFxuICAgICsgYGZpbGw9XCIjMDAwMDAwXCIgZmlsbC1vcGFjaXR5PVwiJHtTdHJpbmcoQkFORF9PUEFDSVRZKX1cIi8+YFxuICAgICsgYCR7Y2FwdGlvbkVsZW1lbnR9PC9zdmc+YDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgY2FwdGlvbiBiYW5kJ3Mgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGEgZ2l2ZW4gaW1hZ2UuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbWFnZSBkaW1lbnNpb25zLlxuICogQHJldHVybnMgVGhlIGJhbmQgZ2VvbWV0cnkuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGVpdGhlciBkaW1lbnNpb24gaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUxhYmVsQmFuZChwYXJhbXM6IENvbXB1dGVMYWJlbEJhbmRQYXJhbXMpOiBMYWJlbEJhbmRHZW9tZXRyeSB7XG4gIGNvbnN0IHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzIH0gPSBwYXJhbXM7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW1hZ2VXaWR0aEluUGl4ZWxzKSB8fCBpbWFnZVdpZHRoSW5QaXhlbHMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZUxhYmVsQmFuZDogaW1hZ2VXaWR0aEluUGl4ZWxzIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIsIGdvdCAke1N0cmluZyhpbWFnZVdpZHRoSW5QaXhlbHMpfS5gKTtcbiAgfVxuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGltYWdlSGVpZ2h0SW5QaXhlbHMpIHx8IGltYWdlSGVpZ2h0SW5QaXhlbHMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZUxhYmVsQmFuZDogaW1hZ2VIZWlnaHRJblBpeGVscyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtTdHJpbmcoaW1hZ2VIZWlnaHRJblBpeGVscyl9LmApO1xuICB9XG5cbiAgY29uc3QgZm9udFNpemVJblBpeGVscyA9IE1hdGgubWF4KE1JTklNVU1fRk9OVF9TSVpFX0lOX1BJWEVMUywgTWF0aC5yb3VuZChpbWFnZVdpZHRoSW5QaXhlbHMgKiBGT05UX1NJWkVfUkFUSU8pKTtcbiAgY29uc3QgY2FwdGlvbkhlaWdodEluUGl4ZWxzID0gTWF0aC5yb3VuZChmb250U2l6ZUluUGl4ZWxzICogQkFORF9IRUlHSFRfUkFUSU8pO1xuICBjb25zdCBmbG9vcmVkSGVpZ2h0SW5QaXhlbHMgPSBNYXRoLm1heChjYXB0aW9uSGVpZ2h0SW5QaXhlbHMsIE1hdGgucm91bmQoaW1hZ2VIZWlnaHRJblBpeGVscyAqIE1JTklNVU1fSEVJR0hUX1JBVElPKSk7XG4gIGNvbnN0IGhlaWdodEluUGl4ZWxzID0gTWF0aC5taW4oaW1hZ2VIZWlnaHRJblBpeGVscywgZmxvb3JlZEhlaWdodEluUGl4ZWxzKTtcbiAgY29uc3Qgc2lkZU1hcmdpbkluUGl4ZWxzID0gTWF0aC5yb3VuZChpbWFnZVdpZHRoSW5QaXhlbHMgKiBTSURFX01BUkdJTl9SQVRJTyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXB0aW9uUm9vbUluUGl4ZWxzOiBpbWFnZVdpZHRoSW5QaXhlbHMgLSAoc2lkZU1hcmdpbkluUGl4ZWxzICogQ0VOVEVSX0RJVklTT1IpLFxuICAgIGZvbnRTaXplSW5QaXhlbHMsXG4gICAgaGVpZ2h0SW5QaXhlbHMsXG4gICAgdG9wSW5QaXhlbHM6IGltYWdlSGVpZ2h0SW5QaXhlbHMgLSBoZWlnaHRJblBpeGVsc1xuICB9O1xufVxuXG4vKipcbiAqIEVzY2FwZXMgdGV4dCBmb3IgaW5jbHVzaW9uIGluIFNWRyBjaGFyYWN0ZXIgZGF0YS5cbiAqXG4gKiBBIGNhcHRpb24gaXMgYXV0aG9yZWQgcGVyIHNjcmVlbnNob3QgYW5kIGNhbiBsZWdpdGltYXRlbHkgY29udGFpbiBgJmAgb3IgdGhlXG4gKiBhbmdsZSBicmFja2V0cyBPYnNpZGlhbiB1c2VzIGluIGxpbmsgc3ludGF4OyB1bmVzY2FwZWQsIHRob3NlIG1ha2UgdGhlIFNWR1xuICogaW1wb3NzaWJsZSB0byBwYXJzZSBhbmQgYHNoYXJwYCBmYWlscyBvbiBhIGNhcHRpb24gcmF0aGVyIHRoYW4gb24gYW4gaW1hZ2UuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgcmF3IGNhcHRpb24uXG4gKiBAcmV0dXJucyBUaGUgY2FwdGlvbiwgc2FmZSB0byBlbWJlZCBpbiBTVkcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVTdmdUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKVxuICAgIC5yZXBsYWNlQWxsKCdcIicsICcmcXVvdDsnKVxuICAgIC5yZXBsYWNlQWxsKCdcXCcnLCAnJmFwb3M7Jyk7XG59XG5cbi8qKlxuICogRHJhd3MgYSBjYXB0aW9uIGJhbmQgYWNyb3NzIHRoZSBib3R0b20gb2YgYSBzY3JlZW5zaG90LlxuICpcbiAqIFRoZSBpbWFnZSBrZWVwcyBpdHMgZGltZW5zaW9ucyBleGFjdGx5OiB0aGUgYmFuZCBpcyBjb21wb3NpdGVkIE9WRVIgdGhlXG4gKiBmcmFtZSwgbmV2ZXIgYXBwZW5kZWQgdG8gaXQsIGJlY2F1c2UgdGhlIHN0b3JlIGV4cGVjdHMgYSBzcGVjaWZpYyBzaXplLlxuICpcbiAqIEBwYXJhbSBieXRlcyAtIFRoZSBjYXB0dXJlZCBQTkcuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjYXB0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbGFiZWxlZCBQTkcsIHRoZSBzYW1lIHNpemUgYXMgdGhlIGlucHV0LlxuICogQHRocm93cyBFcnJvciBpZiBgc2hhcnBgIGlzIG5vdCBpbnN0YWxsZWQsIHRoZSBpbWFnZSBkaW1lbnNpb25zIGNhbm5vdCBiZSByZWFkLCBvciB0aGUgY2FwdGlvbiBpcyB0b28gd2lkZSBmb3IgdGhlIGZyYW1lLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGFiZWxTY3JlZW5zaG90KGJ5dGVzOiBVaW50OEFycmF5LCBvcHRpb25zOiBMYWJlbFNjcmVlbnNob3RPcHRpb25zKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IHNoYXJwID0gYXdhaXQgaW1wb3J0U2hhcnAoJ2xhYmVsU2NyZWVuc2hvdCcpO1xuICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHNoYXJwKGJ5dGVzKS5tZXRhZGF0YSgpO1xuICBjb25zdCBpbWFnZVdpZHRoSW5QaXhlbHMgPSBtZXRhZGF0YS53aWR0aDtcbiAgY29uc3QgaW1hZ2VIZWlnaHRJblBpeGVscyA9IG1ldGFkYXRhLmhlaWdodDtcblxuICAvKiB2OCBpZ25vcmUgbmV4dCAzIC0tIERlZmVuc2l2ZTogYHNoYXJwYCByZWplY3RzIGEgbm9uLWltYWdlIGJlZm9yZSBpdCBjYW4gcmVwb3J0IG1ldGFkYXRhIHdpdGhvdXQgZGltZW5zaW9ucywgc28gdGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgZnJvbSBhIHRlc3QuICovXG4gIGlmIChpbWFnZVdpZHRoSW5QaXhlbHMgPT09IHVuZGVmaW5lZCB8fCBpbWFnZUhlaWdodEluUGl4ZWxzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhYmVsU2NyZWVuc2hvdDogY291bGQgbm90IHJlYWQgdGhlIHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLicpO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlTGFiZWxCYW5kKHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzIH0pO1xuICBjb25zdCB0ZXh0V2lkdGhJblBpeGVscyA9IGF3YWl0IG1lYXN1cmVDYXB0aW9uV2lkdGgob3B0aW9ucy50ZXh0LCBnZW9tZXRyeS5mb250U2l6ZUluUGl4ZWxzKTtcblxuICBpZiAodGV4dFdpZHRoSW5QaXhlbHMgPiBnZW9tZXRyeS5jYXB0aW9uUm9vbUluUGl4ZWxzKSB7XG4gICAgY29uc3Qgb3ZlcmZsb3dJblBpeGVscyA9IHRleHRXaWR0aEluUGl4ZWxzIC0gZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscztcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgbGFiZWxTY3JlZW5zaG90OiB0aGUgY2FwdGlvbiBpcyAke1N0cmluZyhvdmVyZmxvd0luUGl4ZWxzKX1weCB0b28gd2lkZSBmb3IgdGhlIGZyYW1lLiBgXG4gICAgICAgICsgYEl0IHJlbmRlcnMgJHtTdHJpbmcodGV4dFdpZHRoSW5QaXhlbHMpfXB4IGF0IGZvbnQtc2l6ZSAke1N0cmluZyhnZW9tZXRyeS5mb250U2l6ZUluUGl4ZWxzKX0sIGFuZCBhIGBcbiAgICAgICAgKyBgJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1weCBmcmFtZSBoYXMgcm9vbSBmb3IgJHtTdHJpbmcoZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscyl9cHguIGBcbiAgICAgICAgKyAnU2hvcnRlbiBpdDogYSBjYXB0aW9uIHRoYXQgZG9lcyBub3QgZml0IGlzIGNsaXBwZWQgYXQgQk9USCBlbmRzLCB3aXRoIG5vIGVsbGlwc2lzIHRvIHNob3cgaXQgaGFwcGVuZWQuICdcbiAgICAgICAgKyBgQ2FwdGlvbjogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLnRleHQpfWBcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc3ZnID0gYnVpbGRMYWJlbFN2ZyhvcHRpb25zLnRleHQsIGdlb21ldHJ5LCBpbWFnZVdpZHRoSW5QaXhlbHMpO1xuICBjb25zdCBsYXllcjogU2hhcnBDb21wb3NpdGVMYXllciA9IHtcbiAgICBpbnB1dDogQnVmZmVyLmZyb20oc3ZnKSxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogZ2VvbWV0cnkudG9wSW5QaXhlbHNcbiAgfTtcblxuICBjb25zdCBsYWJlbGVkID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLmNvbXBvc2l0ZShbbGF5ZXJdKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShsYWJlbGVkKTtcbn1cblxuLyoqXG4gKiBNZWFzdXJlcyBhIGNhcHRpb24gYWdhaW5zdCB0aGUgZnJhbWUgaXQgaXMgZGVzdGluZWQgZm9yLCB3aXRob3V0IGRyYXdpbmdcbiAqIGFueXRoaW5nLlxuICpcbiAqIFRoaXMgaXMgd2hhdCB7QGxpbmsgbGFiZWxTY3JlZW5zaG90fSByZWplY3RzIGFuIG92ZXJsb25nIGNhcHRpb24gd2l0aCwgZXhwb3NlZFxuICogc28gYSBjYXB0aW9uIGNhbiBiZSBjaG9zZW4gd2l0aCB0aGUgbnVtYmVyIGluIGhhbmQgaW5zdGVhZCBvZiBieSBjYXB0dXJpbmcgYVxuICogZnJhbWUgYW5kIGxvb2tpbmcgYXQgaXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjYXB0aW9uIGFuZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UgaXQgaXMgZm9yLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbWVhc3VyZW1lbnQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGBzaGFycGAgaXMgbm90IGluc3RhbGxlZCwgb3IgZWl0aGVyIGRpbWVuc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZWFzdXJlTGFiZWxDYXB0aW9uKHBhcmFtczogTWVhc3VyZUxhYmVsQ2FwdGlvblBhcmFtcyk6IFByb21pc2U8TGFiZWxDYXB0aW9uTWVhc3VyZW1lbnQ+IHtcbiAgY29uc3QgeyBpbWFnZUhlaWdodEluUGl4ZWxzLCBpbWFnZVdpZHRoSW5QaXhlbHMsIHRleHQgfSA9IHBhcmFtcztcbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlTGFiZWxCYW5kKHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzIH0pO1xuICBjb25zdCB0ZXh0V2lkdGhJblBpeGVscyA9IGF3YWl0IG1lYXN1cmVDYXB0aW9uV2lkdGgodGV4dCwgZ2VvbWV0cnkuZm9udFNpemVJblBpeGVscyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXB0aW9uUm9vbUluUGl4ZWxzOiBnZW9tZXRyeS5jYXB0aW9uUm9vbUluUGl4ZWxzLFxuICAgIGRvZXNGaXQ6IHRleHRXaWR0aEluUGl4ZWxzIDw9IGdlb21ldHJ5LmNhcHRpb25Sb29tSW5QaXhlbHMsXG4gICAgdGV4dFdpZHRoSW5QaXhlbHNcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNhcHRpb24ncyBTVkcgYDx0ZXh0PmAgZWxlbWVudC5cbiAqXG4gKiBCb3RoIHRoZSBiYW5kIGFuZCB0aGUgbWVhc3VyZW1lbnQgY2FudmFzIGdvIHRocm91Z2ggaGVyZSwgc28gdGhlIHRoaW5nIHRoYXRcbiAqIGlzIG1lYXN1cmVkIGlzIGRyYXduIHdpdGggdGhlIHNhbWUgZmFjZSwgd2VpZ2h0IGFuZCBzaXplIGFzIHRoZSB0aGluZyB0aGF0XG4gKiBzaGlwcy4gVHdvIGhhbmQtd3JpdHRlbiBjb3BpZXMgd291bGQgYmUgZnJlZSB0byBkcmlmdCwgYW5kIGEgbWVhc3VyZW1lbnQgdGhhdFxuICogaGFzIGRyaWZ0ZWQgZnJvbSB0aGUgZHJhd2luZyBpcyB3b3JzZSB0aGFuIG5vIG1lYXN1cmVtZW50IGF0IGFsbC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNhcHRpb24sIGl0cyBzaXplLCBhbmQgd2hlcmUgdG8gYW5jaG9yIGl0LlxuICogQHJldHVybnMgVGhlIGA8dGV4dD5gIG1hcmt1cC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDYXB0aW9uVGV4dEVsZW1lbnQocGFyYW1zOiBDYXB0aW9uVGV4dEVsZW1lbnRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGZvbnRTaXplSW5QaXhlbHMsIHRleHQsIHRleHRBbmNob3IsIHhJblBpeGVscywgeUluUGl4ZWxzIH0gPSBwYXJhbXM7XG5cbiAgcmV0dXJuIGA8dGV4dCB4PVwiJHtTdHJpbmcoeEluUGl4ZWxzKX1cIiB5PVwiJHtTdHJpbmcoeUluUGl4ZWxzKX1cIiBgXG4gICAgKyBgZm9udC1mYW1pbHk9XCIke0ZPTlRfRkFNSUxZfVwiIGZvbnQtc2l6ZT1cIiR7U3RyaW5nKGZvbnRTaXplSW5QaXhlbHMpfVwiIGBcbiAgICArIGBmb250LXdlaWdodD1cIiR7Rk9OVF9XRUlHSFR9XCIgZmlsbD1cIiR7Q0FQVElPTl9GSUxMfVwiIHRleHQtYW5jaG9yPVwiJHt0ZXh0QW5jaG9yfVwiIGRvbWluYW50LWJhc2VsaW5lPVwiY2VudHJhbFwiPmBcbiAgICArIGAke2VzY2FwZVN2Z1RleHQodGV4dCl9PC90ZXh0PmA7XG59XG5cbi8qKlxuICogTWVhc3VyZXMgaG93IHdpZGUgYSBjYXB0aW9uIHJlbmRlcnMgYXQgYSBnaXZlbiBzaXplLlxuICpcbiAqIFRoZSB0ZXh0IGlzIGRyYXduIGFsb25lIG9uIGEgdHJhbnNwYXJlbnQgY2FudmFzIGRlbGliZXJhdGVseSB3aWRlciB0aGFuIGl0IGNhblxuICogcG9zc2libHkgbmVlZCwgdGhlbiBgdHJpbWBtZWQgYmFjayB0byBpdHMgb3duIGluayBcdTIwMTQgdGhlIHNhbWUgbWVhc3VyZW1lbnQgdGhhdFxuICogd2FzIHByZXZpb3VzbHkgZG9uZSBieSBoYW5kLCBvbmNlLCBwZXIgY2FwdGlvbiwgYnkgd2hvZXZlciB0aG91Z2h0IHRvIGRvdWJ0XG4gKiBvbmUuIFRoZSByZW5kZXJlciBkb2luZyB0aGUgbWVhc3VyaW5nIGlzIHRoZSByZW5kZXJlciB0aGF0IGRyYXdzIHRoZSBiYW5kLCBzb1xuICogdGhlIHR3byBjYW5ub3QgZGlzYWdyZWUgYWJvdXQgYSBmb250IHRoZSBob3N0IGRvZXMgb3IgZG9lcyBub3QgaGF2ZS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBjYXB0aW9uLlxuICogQHBhcmFtIGZvbnRTaXplSW5QaXhlbHMgLSBUaGUgc2l6ZSB0aGUgYmFuZCB3b3VsZCBkcmF3IGl0IGF0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmVuZGVyZWQgd2lkdGggaW4gcGl4ZWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiBtZWFzdXJlQ2FwdGlvbldpZHRoKHRleHQ6IHN0cmluZywgZm9udFNpemVJblBpeGVsczogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgLy8gQSBjYXB0aW9uIHdpdGggbm8gaW5rIGxlYXZlcyB0aGUgY2FudmFzIHVuaWZvcm1seSB0cmFuc3BhcmVudCwgYW5kIGB0cmltYFxuICAvLyByZXR1cm5zIHN1Y2ggYW4gaW1hZ2UgdW50b3VjaGVkIFx1MjAxNCBpLmUuIHJlcG9ydHMgdGhlIHdob2xlIGNhbnZhcyBhcyB0ZXh0LlxuICBpZiAodGV4dC50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCdtZWFzdXJlTGFiZWxDYXB0aW9uJyk7XG4gIGNvbnN0IHBhZGRpbmdJblBpeGVscyA9IGZvbnRTaXplSW5QaXhlbHMgKiBDRU5URVJfRElWSVNPUjtcbiAgY29uc3QgY2FudmFzV2lkdGhJblBpeGVscyA9IE1hdGguY2VpbChmb250U2l6ZUluUGl4ZWxzICogTUFYSU1VTV9HTFlQSF9BRFZBTkNFX1JBVElPICogdGV4dC5sZW5ndGgpICsgcGFkZGluZ0luUGl4ZWxzO1xuICBjb25zdCBjYW52YXNIZWlnaHRJblBpeGVscyA9IE1hdGguY2VpbChmb250U2l6ZUluUGl4ZWxzICogTUVBU1VSRU1FTlRfQ0FOVkFTX0hFSUdIVF9SQVRJTyk7XG4gIGNvbnN0IGNhcHRpb25FbGVtZW50ID0gYnVpbGRDYXB0aW9uVGV4dEVsZW1lbnQoe1xuICAgIGZvbnRTaXplSW5QaXhlbHMsXG4gICAgdGV4dCxcbiAgICB0ZXh0QW5jaG9yOiAnc3RhcnQnLFxuICAgIHhJblBpeGVsczogZm9udFNpemVJblBpeGVscyxcbiAgICB5SW5QaXhlbHM6IGNhbnZhc0hlaWdodEluUGl4ZWxzIC8gQ0VOVEVSX0RJVklTT1JcbiAgfSk7XG4gIGNvbnN0IHN2ZyA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIiR7U3RyaW5nKGNhbnZhc1dpZHRoSW5QaXhlbHMpfVwiIGhlaWdodD1cIiR7U3RyaW5nKGNhbnZhc0hlaWdodEluUGl4ZWxzKX1cIj5gXG4gICAgKyBgJHtjYXB0aW9uRWxlbWVudH08L3N2Zz5gO1xuXG4gIGNvbnN0IHRyaW1tZWQgPSBhd2FpdCBzaGFycChuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShzdmcpKSlcbiAgICAudHJpbSh7IHRocmVzaG9sZDogVFJJTV9USFJFU0hPTEQgfSlcbiAgICAucG5nKClcbiAgICAudG9CdWZmZXIoKTtcblxuICByZXR1cm4gcmVhZFBuZ0RpbWVuc2lvbnMobmV3IFVpbnQ4QXJyYXkodHJpbW1lZCkpLndpZHRoSW5QaXhlbHM7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUE2QkEsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxtQkFBbUI7QUF5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
115
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhYmVsLXNjcmVlbnNob3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBZGRzIGEgY2FwdGlvbiBiYW5kIHRvIGFuIGFscmVhZHktY2FwdHVyZWQgc2NyZWVuc2hvdC5cbiAqXG4gKiBBIHN0b3JlIGxpc3Rpbmcgc2hvd3Mgc2NyZWVuc2hvdHMgT05FIEFUIEEgVElNRSwgaW4gYSBjYXJvdXNlbCwgd2l0aCBub1xuICogY2FwdGlvbiBvZiBpdHMgb3duIFx1MjAxNCBzbyBhbiBpbWFnZSBoYXMgdG8gc2F5IHdoYXQgaXQgaXMgc2hvd2luZy4gV2l0aG91dCB0aGF0LFxuICogYSBzaG90IG9mIHRoZSBzdGF0ZSBhIHBsdWdpbiByZW1vdmVzIHJlYWRzIGFzIGEgc2hvdCBvZiB0aGUgc3RhdGUgdGhlIHBsdWdpblxuICogY2F1c2VzLCB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG1lc3NhZ2UuXG4gKlxuICogVGhlIGJhbmQgaXMgZHJhd24gb3ZlciB0aGUgQk9UVE9NIG9mIHRoZSBmcmFtZSwgZm9yIHR3byByZWFzb25zOiB0aGUgdG9wIGlzXG4gKiB3aGVyZSB0aGUgY29udGVudCBiZWluZyBkZW1vbnN0cmF0ZWQgdXN1YWxseSBzdGFydHMsIGFuZCB0aGUgYm90dG9tIG9mIGFuXG4gKiBPYnNpZGlhbiBmcmFtZSBpcyBjaHJvbWUgXHUyMDE0IHN0YXR1cyBiYXIsIHdvcmQgY291bnQsIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCB3aGljaCB0aGVcbiAqIGJhbmQgdGhlbiBjb3ZlcnMgcmF0aGVyIHRoYW4gY29tcGV0aW5nIHdpdGguXG4gKlxuICogVGhpcyBpcyBwb3N0LXByb2Nlc3NpbmcsIGRlbGliZXJhdGVseS4gVGhlIGNhcHR1cmUgc3RheXMgYW4gdW50b3VjaGVkIGRldmljZVxuICogZnJhbWUsIGFuZCByZXdvcmRpbmcgYSBsYWJlbCBuZWVkcyBubyByZS1zaG9vdC5cbiAqXG4gKiBBIGNhcHRpb24gdGhhdCBpcyB0b28gbG9uZyBmb3IgaXRzIGZyYW1lIGlzIE1FQVNVUkVEIGFuZCByZWplY3RlZCByYXRoZXIgdGhhblxuICogZHJhd24uIEFuIFNWRyBgPHRleHQ+YCBpcyBjbGlwcGVkIGJ5IGl0cyB2aWV3cG9ydCBhdCBib3RoIGVuZHMgd2l0aCBub1xuICogZWxsaXBzaXMgYW5kIG5vIGVycm9yLCBzbyBhbiBvdmVybG9uZyBjYXB0aW9uIHNoaXBzIGFzIGEgc2VudGVuY2UgZnJhZ21lbnRcbiAqIHRoYXQgbG9va3MgZGVsaWJlcmF0ZSBcdTIwMTQgYG5hYmxlZCBpbiBTZXR0aW5ncyAtIGEgbGlzdGVuaW5nIHBsdWdpbiBpcyB0b2xkYCBcdTIwMTRcbiAqIGFuZCB0aGUgZnJhbWUgaXMgc3RpbGwgZXhhY3RseSB0aGUgc2l6ZSBpdCBzaG91bGQgYmUsIHNvIGV2ZXJ5IGRpbWVuc2lvblxuICogYXNzZXJ0aW9uIGRvd25zdHJlYW0gc3RpbGwgcGFzc2VzLiBUaGUgb25seSBmZWVkYmFjayBhbnlvbmUgZXZlciBnb3Qgd2FzXG4gKiBsb29raW5nIGF0IHRoZSBQTkcuIFNlZSB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaGFycENvbXBvc2l0ZUxheWVyIH0gZnJvbSAnLi9zaGFycC1sb2FkZXIubWpzJztcblxuaW1wb3J0IHsgcmVhZFBuZ0RpbWVuc2lvbnMgfSBmcm9tICcuL2NhcHR1cmUtc2NyZWVuc2hvdC5tanMnO1xuaW1wb3J0IHsgaW1wb3J0U2hhcnAgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb21wdXRlTGFiZWxCYW5kfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlTGFiZWxCYW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgaW1hZ2UgYmVpbmcgbGFiZWxlZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGdlb21ldHJ5IG9mIHRoZSBjYXB0aW9uIGJhbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFiZWxCYW5kR2VvbWV0cnkge1xuICAvKipcbiAgICogSG93IG11Y2ggaG9yaXpvbnRhbCByb29tIHRoZSBjYXB0aW9uIGhhcywgaW4gcGl4ZWxzOiB0aGUgaW1hZ2Ugd2lkdGggbGVzc1xuICAgKiB0aGUgbWFyZ2luIGhlbGQgY2xlYXIgYXQgZWFjaCBlbmQsIHNvIGEgY2FwdGlvbiB0aGF0IGZpdHMgZG9lcyBub3QgcmVhZCBhc1xuICAgKiB0aG91Z2ggaXQgd2VyZSBhYm91dCB0byB0b3VjaCB0aGUgZWRnZSBvZiB0aGUgZnJhbWUuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvbnQgc2l6ZSBmb3IgdGhlIGNhcHRpb24sIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBiYW5kLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBoZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGltYWdlIHRvIHRoZSB0b3Agb2YgdGhlIGJhbmQsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IHRvcEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCBhIGNhcHRpb24gbWVhc3VyZXMgYWdhaW5zdCB0aGUgZnJhbWUgaXQgaXMgZGVzdGluZWQgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50IHtcbiAgLyoqXG4gICAqIFRoZSByb29tIGF2YWlsYWJsZSwgaW4gcGl4ZWxzIFx1MjAxNCB7QGxpbmsgTGFiZWxCYW5kR2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVsc30uXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uUm9vbUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNhcHRpb24gZml0cyB0aGF0IHJvb20uXG4gICAqL1xuICByZWFkb25seSBkb2VzRml0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIb3cgd2lkZSB0aGUgY2FwdGlvbiBhY3R1YWxseSByZW5kZXJzLCBpbiBwaXhlbHMsIGF0IHRoZSBzaXplIHRoZSBiYW5kXG4gICAqIHdvdWxkIGRyYXcgaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0V2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBsYWJlbFNjcmVlbnNob3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsU2NyZWVuc2hvdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNhcHRpb24uIEtlZXAgaXQgdG8gYSBoYW5kZnVsIG9mIHdvcmRzOiBpdCBpcyByZWFkIGF0IGxpc3RpbmctdGh1bWJuYWlsXG4gICAqIHNpemUsIGFuZCBpdCBpcyBuZWl0aGVyIHdyYXBwZWQgbm9yIHNocnVuayB0byBmaXQgXHUyMDE0IG9uZSB0aGF0IGRvZXMgbm90IGZpdFxuICAgKiBpcyBSRUpFQ1RFRCwgd2l0aCB0aGUgbWVhc3VyZWQgd2lkdGggYW5kIHRoZSByb29tIGF2YWlsYWJsZS4gQ2hlY2sgYVxuICAgKiBjYW5kaWRhdGUgd2l0aCB7QGxpbmsgbWVhc3VyZUxhYmVsQ2FwdGlvbn0gYmVmb3JlIGNvbW1pdHRpbmcgdG8gaXQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG1lYXN1cmVMYWJlbENhcHRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lYXN1cmVMYWJlbENhcHRpb25QYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBpbWFnZSB0aGUgY2FwdGlvbiBpcyBkZXN0aW5lZCBmb3IsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIGltYWdlIHRoZSBjYXB0aW9uIGlzIGRlc3RpbmVkIGZvciwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXB0aW9uIHRvIG1lYXN1cmUuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FwdGlvbiBzaXplIGFzIGEgZnJhY3Rpb24gb2YgaW1hZ2UgV0lEVEgsIG5vdCBoZWlnaHQuXG4gKlxuICogV2lkdGggaXMgd2hhdCBnb3Zlcm5zIGxlZ2liaWxpdHkgaGVyZTogYSA5MDB4MTYwMCBwaG9uZSBmcmFtZSBhbmQgYSAxMjAweDgwMFxuICogZGVza3RvcCBmcmFtZSBhcmUgcmVhZCBhdCBzaW1pbGFyIG9uLXNjcmVlbiB3aWR0aHMgaW4gYSBsaXN0aW5nLCBzbyBzaXppbmcgYnlcbiAqIHdpZHRoIGtlZXBzIHRoZSBjYXB0aW9uIHZpc3VhbGx5IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSB0d28uXG4gKi9cbmNvbnN0IEZPTlRfU0laRV9SQVRJTyA9IDAuMDM0O1xuXG4vKipcbiAqIEJhbmQgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSBcdTIwMTQgZW5vdWdoIHRvIHNpdCB0aGUgdGV4dCBvbiB3aXRoXG4gKiBjbGVhciBzcGFjZSBhYm92ZSBhbmQgYmVsb3cuXG4gKi9cbmNvbnN0IEJBTkRfSEVJR0hUX1JBVElPID0gMi4yO1xuXG4vKipcbiAqIE9wYWNpdHkgb2YgdGhlIGJhbmQuIEZ1bGx5IG9wYXF1ZSwgYW5kIHRoYXQgaXMgYSBkZWNpc2lvbiByYXRoZXIgdGhhbiBhXG4gKiBkZWZhdWx0OiB0aGUgYmFuZCdzIGpvYiBpcyB0byBDT1ZFUiB0aGUgY2hyb21lIGFsb25nIHRoZSBib3R0b20gb2YgdGhlIGZyYW1lLFxuICogc28gbm90aGluZyB1bmRlcm5lYXRoIGl0IG1heSByZWFjaCB0aGUgY2FwdHVyZWQgZnJhbWUgYXQgYWxsLlxuICpcbiAqIEl0IHdhcyAwLjk0LCBhIHZhbHVlIGNob3NlbiBvbmx5IGJlY2F1c2UgMC44MiBsZXQgYSBzdGF0dXMgYmFyIGxlZ2libHkgYmxlZWRcbiAqIHRocm91Z2ggYmVoaW5kIHRoZSBjYXB0aW9uIGFuZCBsb29rIGxpa2UgYSBtaXN0YWtlIHJhdGhlciB0aGFuIGEgZGVzaWduLlxuICogTm90aGluZyBpbiB0aGF0IGFyZ3VlZCBmb3IgMC45NCBvdmVyIGZ1bGwgb3BhY2l0eS4gV2hhdCAwLjk0IGRvZXMgaXMgYXR0ZW51YXRlXG4gKiB3aGF0ZXZlciBpcyB1bmRlciB0aGUgYmFuZCB0byBhYm91dCA2ICUgYnJpZ2h0bmVzcyBcdTIwMTQgaW52aXNpYmxlIHRvIGEgcmVhZGVyLFxuICogYW5kIHN0aWxsIDM0OSBkaWZmZXJpbmcgcGl4ZWxzIHRvIGEgZGlmZiwgbWVhc3VyZWQgb24gYSB0ZW1wb3JhcnkgdmF1bHQncyBuYW1lXG4gKiByZW5kZXJpbmcgdW5kZXIgdGhlIGJhbmQgb2YgYSAxMjAweDgwMCBkZXNrdG9wIGZyYW1lLiBBbnkgdmFsdWUgYmVsb3cgMSBob2xkc1xuICogdGhhdCBjaGFubmVsIG9wZW4gZm9yIGV2ZXJ5IHZhcnlpbmcgdGhpbmcgdGhlIGJvdHRvbSBjaHJvbWUgY2FuIGNhcnJ5IFx1MjAxNCBhXG4gKiBjbG9jaywgYSB3b3JkIGNvdW50LCBhIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCBvbiBhIGZyYW1lIG5vYm9keSBoYXMgY2FwdHVyZWQgeWV0LlxuICpcbiAqIFdyaXR0ZW4gaW50byB0aGUgZW1pdHRlZCBTVkcgZXhwbGljaXRseSwgZXZlbiB0aG91Z2ggMSBpcyB3aGF0IGBmaWxsLW9wYWNpdHlgXG4gKiBkZWZhdWx0cyB0by4gRHJvcHBpbmcgdGhlIGF0dHJpYnV0ZSB3b3VsZCBsZWF2ZSB0aGlzIGNvbnN0YW50IHVudXNlZCBhbmQgdGFrZVxuICogdGhlIGRlY2lzaW9uIGF3YXkgd2l0aCBpdDogdGhlIGJhbmQgd291bGQgdGhlbiBiZSBvcGFxdWUgYnkgYWNjaWRlbnQgb2YgdGhlXG4gKiBmb3JtYXQgcmF0aGVyIHRoYW4gb24gcHVycG9zZSwgd2l0aCBub3RoaW5nIG5hbWVkIHRvIHJlYWQgYW5kIG5vdGhpbmcgdG9cbiAqIGFzc2VydCBvbi5cbiAqL1xuY29uc3QgQkFORF9PUEFDSVRZID0gMTtcblxuY29uc3QgTUlOSU1VTV9GT05UX1NJWkVfSU5fUElYRUxTID0gMTg7XG5cbi8qKlxuICogRmxvb3Igb24gYmFuZCBoZWlnaHQgYXMgYSBmcmFjdGlvbiBvZiBpbWFnZSBIRUlHSFQuXG4gKlxuICogSGVpZ2h0IGRlcml2ZWQgZnJvbSB0aGUgY2FwdGlvbiBhbG9uZSBpcyB0b28gc2hhbGxvdyBvbiBhIHRhbGwgZnJhbWU6IG9uIGFcbiAqIDkwMHgxNjAwIHBob25lIGl0IGNhbWUgdG8gNjhweCBhbmQgc2xpY2VkIHRocm91Z2ggdGhlIHN0YXR1cyByb3cgaXQgd2FzIG1lYW50XG4gKiB0byBjb3ZlciwgY2xpcHBpbmcgdGhlIHRleHQgbWlkLWxpbmUuIFRoaXMgZmxvb3IgbWFrZXMgdGhlIGJhbmQgZGVlcCBlbm91Z2ggdG9cbiAqIHN3YWxsb3cgdGhhdCByb3cgd2hvbGUgKDEyMHB4IG9uIGEgOTAweDE2MDAgcGhvbmUpLCBhbmQgaXMgaW5lcnQgb24gYSB3aWRlIGZyYW1lIHdoZXJlIHRoZSBjYXB0aW9uLWRlcml2ZWRcbiAqIGhlaWdodCBpcyBhbHJlYWR5IHRoZSBsYXJnZXIgb2YgdGhlIHR3by5cbiAqL1xuY29uc3QgTUlOSU1VTV9IRUlHSFRfUkFUSU8gPSAwLjA3NTtcblxuLyoqXG4gKiBNYXJnaW4gaGVsZCBjbGVhciBhdCBFQUNIIGVuZCBvZiB0aGUgY2FwdGlvbiwgYXMgYSBmcmFjdGlvbiBvZiBpbWFnZSB3aWR0aC5cbiAqXG4gKiBBIGNhcHRpb24gdGhhdCBlbmRzIGEgcGl4ZWwgaW5zaWRlIHRoZSBmcmFtZSBpcyBsZWdhbGx5IHVuLWNsaXBwZWQgYW5kIHN0aWxsXG4gKiBsb29rcyB3cm9uZywgc28gdGhlIHJvb20gYSBjYXB0aW9uIGlzIG1lYXN1cmVkIGFnYWluc3QgaXMgdGhlIGZyYW1lIGxlc3MgdGhpc1xuICogYXQgYm90aCBlbmRzIFx1MjAxNCA0OHB4IGVhY2ggc2lkZSBvbiBhIDEyMDBweCBmcmFtZS5cbiAqL1xuY29uc3QgU0lERV9NQVJHSU5fUkFUSU8gPSAwLjA0O1xuXG4vKipcbiAqIERpdmlzb3IgdGhhdCB0dXJucyBhIHNwYW4gaW50byBpdHMgbWlkcG9pbnQsIGZvciBjZW50ZXJpbmcgdGhlIGNhcHRpb24uXG4gKi9cbmNvbnN0IENFTlRFUl9ESVZJU09SID0gMjtcblxuLyoqXG4gKiBUaGUgY2FwdGlvbidzIHR5cGVmYWNlIGFuZCB3ZWlnaHQsIGluIG9uZSBwbGFjZSBiZWNhdXNlIHRoZSBiYW5kIGFuZCB0aGVcbiAqIG1lYXN1cmVtZW50IGNhbnZhcyBNVVNUIGRyYXcgd2l0aCB0aGUgc2FtZSBvbmVzOiBhIG1lYXN1cmVtZW50IHRha2VuIGluIGFcbiAqIGRpZmZlcmVudCBmYWNlIGlzIG5vdCBhIG1lYXN1cmVtZW50IG9mIHRoZSB0aGluZyB0aGF0IHNoaXBzLlxuICovXG5jb25zdCBGT05UX0ZBTUlMWSA9ICdTZWdvZSBVSSwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZic7XG5cbmNvbnN0IEZPTlRfV0VJR0hUID0gJzYwMCc7XG5cbmNvbnN0IENBUFRJT05fRklMTCA9ICcjZmZmZmZmJztcblxuLyoqXG4gKiBVcHBlciBib3VuZCBvbiBvbmUgZ2x5cGgncyBhZHZhbmNlIHdpZHRoLCBhcyBhIG11bHRpcGxlIG9mIHRoZSBmb250IHNpemUuXG4gKlxuICogSXQgc2l6ZXMgdGhlIG9mZi1zY3JlZW4gY2FudmFzIHRoZSBjYXB0aW9uIGlzIG1lYXN1cmVkIG9uLCBhbmQgaXQgb25seSBldmVyXG4gKiBuZWVkcyB0byBiZSBhbiBvdmVyLWVzdGltYXRlOiBhIGNhbnZhcyB0b28gbmFycm93IHdvdWxkIGNsaXAgdGhlIHRleHQgYmVpbmdcbiAqIG1lYXN1cmVkLCB1bmRlci1yZXBvcnQgaXRzIHdpZHRoLCBhbmQgcmVpbnRyb2R1Y2UgdGhlIGV4YWN0IHNpbGVudCBjbGlwcGluZ1xuICogdGhlIG1lYXN1cmVtZW50IGV4aXN0cyB0byBjYXRjaC4gTm8gTGF0aW4gZ2x5cGggaW4gYSBwcm9wb3J0aW9uYWwgc2Fuc1xuICogYWR2YW5jZXMgYSBmdWxsIGVtIFx1MjAxNCBhbiBlbSBkYXNoLCB0aGUgd2lkZXN0LCBpcyAxLjAgXHUyMDE0IHNvIDEuMSBpcyBoZWFkcm9vbSBhdFxuICogbmVnbGlnaWJsZSBjb3N0IChtZWFzdXJlZCBwcm9zZSBydW5zIGFib3V0IDAuNDUgZW0gcGVyIGNoYXJhY3Rlciwgc28gdGhlXG4gKiBjYW52YXMgY29tZXMgb3V0IHJvdWdobHkgMi41eCB0aGUgdGV4dCkuXG4gKi9cbmNvbnN0IE1BWElNVU1fR0xZUEhfQURWQU5DRV9SQVRJTyA9IDEuMTtcblxuLyoqXG4gKiBIZWlnaHQgb2YgdGhlIG1lYXN1cmVtZW50IGNhbnZhcyBhcyBhIG11bHRpcGxlIG9mIHRoZSBmb250IHNpemUsIHNvIGFzY2VuZGVyc1xuICogYW5kIGRlc2NlbmRlcnMgaGF2ZSByb29tIGFuZCB0aGUgdHJpbSByZWFkcyB0aGUgZ2x5cGhzIHJhdGhlciB0aGFuIHRoZSBlZGdlLlxuICovXG5jb25zdCBNRUFTVVJFTUVOVF9DQU5WQVNfSEVJR0hUX1JBVElPID0gMztcblxuLyoqXG4gKiBIb3cgZmFyIGEgcGl4ZWwgbWF5IGRpZmZlciBmcm9tIHRoZSB0cmFuc3BhcmVudCBzdXJyb3VuZCBiZWZvcmUgYHRyaW1gIGNvdW50c1xuICogaXQgYXMgdGV4dC4gRGVsaWJlcmF0ZWx5IGZhciBsb3dlciB0aGFuIGBzaGFycGAncyBkZWZhdWx0IG9mIDEwOiB0aGUgb3V0ZXJtb3N0XG4gKiBwaXhlbHMgb2YgYW4gYW50aWFsaWFzZWQgZ2x5cGggYXJlIHZlcnkgZmFpbnQsIGFuZCB0aGUgZGVmYXVsdCBkaXNjYXJkcyB0aGVtLFxuICogdW5kZXItbWVhc3VyaW5nIGEgY2FwdGlvbiBieSBhIHBpeGVsIG9yIHR3byBhdCBlYWNoIGVuZC5cbiAqL1xuY29uc3QgVFJJTV9USFJFU0hPTEQgPSAxO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZENhcHRpb25UZXh0RWxlbWVudH0uXG4gKi9cbmludGVyZmFjZSBDYXB0aW9uVGV4dEVsZW1lbnRQYXJhbXMge1xuICByZWFkb25seSBmb250U2l6ZUluUGl4ZWxzOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdGV4dEFuY2hvcjogJ21pZGRsZScgfCAnc3RhcnQnO1xuICByZWFkb25seSB4SW5QaXhlbHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgeUluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBTVkcgZm9yIHRoZSBjYXB0aW9uIGJhbmQuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgY2FwdGlvbi5cbiAqIEBwYXJhbSBnZW9tZXRyeSAtIFRoZSBiYW5kIGdlb21ldHJ5LlxuICogQHBhcmFtIGltYWdlV2lkdGhJblBpeGVscyAtIFdpZHRoIG9mIHRoZSBpbWFnZSwgc28gdGhlIGJhbmQgc3BhbnMgaXQuXG4gKiBAcmV0dXJucyBUaGUgU1ZHIG1hcmt1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGFiZWxTdmcodGV4dDogc3RyaW5nLCBnZW9tZXRyeTogTGFiZWxCYW5kR2VvbWV0cnksIGltYWdlV2lkdGhJblBpeGVsczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgeyBmb250U2l6ZUluUGl4ZWxzLCBoZWlnaHRJblBpeGVscyB9ID0gZ2VvbWV0cnk7XG4gIGNvbnN0IGNhcHRpb25FbGVtZW50ID0gYnVpbGRDYXB0aW9uVGV4dEVsZW1lbnQoe1xuICAgIGZvbnRTaXplSW5QaXhlbHMsXG4gICAgdGV4dCxcbiAgICB0ZXh0QW5jaG9yOiAnbWlkZGxlJyxcbiAgICB4SW5QaXhlbHM6IGltYWdlV2lkdGhJblBpeGVscyAvIENFTlRFUl9ESVZJU09SLFxuICAgIHlJblBpeGVsczogaGVpZ2h0SW5QaXhlbHMgLyBDRU5URVJfRElWSVNPUlxuICB9KTtcblxuICByZXR1cm4gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyl9XCI+YFxuICAgICsgYDxyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIiR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9XCIgaGVpZ2h0PVwiJHtTdHJpbmcoaGVpZ2h0SW5QaXhlbHMpfVwiIGBcbiAgICArIGBmaWxsPVwiIzAwMDAwMFwiIGZpbGwtb3BhY2l0eT1cIiR7U3RyaW5nKEJBTkRfT1BBQ0lUWSl9XCIvPmBcbiAgICArIGAke2NhcHRpb25FbGVtZW50fTwvc3ZnPmA7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGNhcHRpb24gYmFuZCdzIHNpemUgYW5kIHBvc2l0aW9uIGZvciBhIGdpdmVuIGltYWdlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgaW1hZ2UgZGltZW5zaW9ucy5cbiAqIEByZXR1cm5zIFRoZSBiYW5kIGdlb21ldHJ5LlxuICogQHRocm93cyBFcnJvciBpZiBlaXRoZXIgZGltZW5zaW9uIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVMYWJlbEJhbmQocGFyYW1zOiBDb21wdXRlTGFiZWxCYW5kUGFyYW1zKTogTGFiZWxCYW5kR2VvbWV0cnkge1xuICBjb25zdCB7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9ID0gcGFyYW1zO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGltYWdlV2lkdGhJblBpeGVscykgfHwgaW1hZ2VXaWR0aEluUGl4ZWxzIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVMYWJlbEJhbmQ6IGltYWdlV2lkdGhJblBpeGVscyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX0uYCk7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbWFnZUhlaWdodEluUGl4ZWxzKSB8fCBpbWFnZUhlaWdodEluUGl4ZWxzIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVMYWJlbEJhbmQ6IGltYWdlSGVpZ2h0SW5QaXhlbHMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKGltYWdlSGVpZ2h0SW5QaXhlbHMpfS5gKTtcbiAgfVxuXG4gIGNvbnN0IGZvbnRTaXplSW5QaXhlbHMgPSBNYXRoLm1heChNSU5JTVVNX0ZPTlRfU0laRV9JTl9QSVhFTFMsIE1hdGgucm91bmQoaW1hZ2VXaWR0aEluUGl4ZWxzICogRk9OVF9TSVpFX1JBVElPKSk7XG4gIGNvbnN0IGNhcHRpb25IZWlnaHRJblBpeGVscyA9IE1hdGgucm91bmQoZm9udFNpemVJblBpeGVscyAqIEJBTkRfSEVJR0hUX1JBVElPKTtcbiAgY29uc3QgZmxvb3JlZEhlaWdodEluUGl4ZWxzID0gTWF0aC5tYXgoY2FwdGlvbkhlaWdodEluUGl4ZWxzLCBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0SW5QaXhlbHMgKiBNSU5JTVVNX0hFSUdIVF9SQVRJTykpO1xuICBjb25zdCBoZWlnaHRJblBpeGVscyA9IE1hdGgubWluKGltYWdlSGVpZ2h0SW5QaXhlbHMsIGZsb29yZWRIZWlnaHRJblBpeGVscyk7XG4gIGNvbnN0IHNpZGVNYXJnaW5JblBpeGVscyA9IE1hdGgucm91bmQoaW1hZ2VXaWR0aEluUGl4ZWxzICogU0lERV9NQVJHSU5fUkFUSU8pO1xuXG4gIHJldHVybiB7XG4gICAgY2FwdGlvblJvb21JblBpeGVsczogaW1hZ2VXaWR0aEluUGl4ZWxzIC0gKHNpZGVNYXJnaW5JblBpeGVscyAqIENFTlRFUl9ESVZJU09SKSxcbiAgICBmb250U2l6ZUluUGl4ZWxzLFxuICAgIGhlaWdodEluUGl4ZWxzLFxuICAgIHRvcEluUGl4ZWxzOiBpbWFnZUhlaWdodEluUGl4ZWxzIC0gaGVpZ2h0SW5QaXhlbHNcbiAgfTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHRleHQgZm9yIGluY2x1c2lvbiBpbiBTVkcgY2hhcmFjdGVyIGRhdGEuXG4gKlxuICogQSBjYXB0aW9uIGlzIGF1dGhvcmVkIHBlciBzY3JlZW5zaG90IGFuZCBjYW4gbGVnaXRpbWF0ZWx5IGNvbnRhaW4gYCZgIG9yIHRoZVxuICogYW5nbGUgYnJhY2tldHMgT2JzaWRpYW4gdXNlcyBpbiBsaW5rIHN5bnRheDsgdW5lc2NhcGVkLCB0aG9zZSBtYWtlIHRoZSBTVkdcbiAqIGltcG9zc2libGUgdG8gcGFyc2UgYW5kIGBzaGFycGAgZmFpbHMgb24gYSBjYXB0aW9uIHJhdGhlciB0aGFuIG9uIGFuIGltYWdlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHJhdyBjYXB0aW9uLlxuICogQHJldHVybnMgVGhlIGNhcHRpb24sIHNhZmUgdG8gZW1iZWQgaW4gU1ZHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlU3ZnVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JylcbiAgICAucmVwbGFjZUFsbCgnPCcsICcmbHQ7JylcbiAgICAucmVwbGFjZUFsbCgnPicsICcmZ3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXFwnJywgJyZhcG9zOycpO1xufVxuXG4vKipcbiAqIERyYXdzIGEgY2FwdGlvbiBiYW5kIGFjcm9zcyB0aGUgYm90dG9tIG9mIGEgc2NyZWVuc2hvdC5cbiAqXG4gKiBUaGUgaW1hZ2Uga2VlcHMgaXRzIGRpbWVuc2lvbnMgZXhhY3RseTogdGhlIGJhbmQgaXMgY29tcG9zaXRlZCBPVkVSIHRoZVxuICogZnJhbWUsIG5ldmVyIGFwcGVuZGVkIHRvIGl0LCBiZWNhdXNlIHRoZSBzdG9yZSBleHBlY3RzIGEgc3BlY2lmaWMgc2l6ZS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgY2FwdHVyZWQgUE5HLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgY2FwdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhYmVsZWQgUE5HLCB0aGUgc2FtZSBzaXplIGFzIHRoZSBpbnB1dC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYHNoYXJwYCBpcyBub3QgaW5zdGFsbGVkLCB0aGUgaW1hZ2UgZGltZW5zaW9ucyBjYW5ub3QgYmUgcmVhZCwgb3IgdGhlIGNhcHRpb24gaXMgdG9vIHdpZGUgZm9yIHRoZSBmcmFtZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhYmVsU2NyZWVuc2hvdChieXRlczogVWludDhBcnJheSwgb3B0aW9uczogTGFiZWxTY3JlZW5zaG90T3B0aW9ucyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCdsYWJlbFNjcmVlbnNob3QnKTtcbiAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBzaGFycChieXRlcykubWV0YWRhdGEoKTtcbiAgY29uc3QgaW1hZ2VXaWR0aEluUGl4ZWxzID0gbWV0YWRhdGEud2lkdGg7XG4gIGNvbnN0IGltYWdlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoaW1hZ2VXaWR0aEluUGl4ZWxzID09PSB1bmRlZmluZWQgfHwgaW1hZ2VIZWlnaHRJblBpeGVscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsYWJlbFNjcmVlbnNob3Q6IGNvdWxkIG5vdCByZWFkIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IGdlb21ldHJ5ID0gY29tcHV0ZUxhYmVsQmFuZCh7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9KTtcbiAgY29uc3QgdGV4dFdpZHRoSW5QaXhlbHMgPSBhd2FpdCBtZWFzdXJlQ2FwdGlvbldpZHRoKG9wdGlvbnMudGV4dCwgZ2VvbWV0cnkuZm9udFNpemVJblBpeGVscyk7XG5cbiAgaWYgKHRleHRXaWR0aEluUGl4ZWxzID4gZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscykge1xuICAgIGNvbnN0IG92ZXJmbG93SW5QaXhlbHMgPSB0ZXh0V2lkdGhJblBpeGVscyAtIGdlb21ldHJ5LmNhcHRpb25Sb29tSW5QaXhlbHM7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGxhYmVsU2NyZWVuc2hvdDogdGhlIGNhcHRpb24gaXMgJHtTdHJpbmcob3ZlcmZsb3dJblBpeGVscyl9cHggdG9vIHdpZGUgZm9yIHRoZSBmcmFtZS4gYFxuICAgICAgICArIGBJdCByZW5kZXJzICR7U3RyaW5nKHRleHRXaWR0aEluUGl4ZWxzKX1weCBhdCBmb250LXNpemUgJHtTdHJpbmcoZ2VvbWV0cnkuZm9udFNpemVJblBpeGVscyl9LCBhbmQgYSBgXG4gICAgICAgICsgYCR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9cHggZnJhbWUgaGFzIHJvb20gZm9yICR7U3RyaW5nKGdlb21ldHJ5LmNhcHRpb25Sb29tSW5QaXhlbHMpfXB4LiBgXG4gICAgICAgICsgJ1Nob3J0ZW4gaXQ6IGEgY2FwdGlvbiB0aGF0IGRvZXMgbm90IGZpdCBpcyBjbGlwcGVkIGF0IEJPVEggZW5kcywgd2l0aCBubyBlbGxpcHNpcyB0byBzaG93IGl0IGhhcHBlbmVkLiAnXG4gICAgICAgICsgYENhcHRpb246ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucy50ZXh0KX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHN2ZyA9IGJ1aWxkTGFiZWxTdmcob3B0aW9ucy50ZXh0LCBnZW9tZXRyeSwgaW1hZ2VXaWR0aEluUGl4ZWxzKTtcbiAgY29uc3QgbGF5ZXI6IFNoYXJwQ29tcG9zaXRlTGF5ZXIgPSB7XG4gICAgaW5wdXQ6IEJ1ZmZlci5mcm9tKHN2ZyksXG4gICAgbGVmdDogMCxcbiAgICB0b3A6IGdlb21ldHJ5LnRvcEluUGl4ZWxzXG4gIH07XG5cbiAgY29uc3QgbGFiZWxlZCA9IGF3YWl0IHNoYXJwKGJ5dGVzKVxuICAgIC5jb21wb3NpdGUoW2xheWVyXSlcbiAgICAucG5nKClcbiAgICAudG9CdWZmZXIoKTtcblxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobGFiZWxlZCk7XG59XG5cbi8qKlxuICogTWVhc3VyZXMgYSBjYXB0aW9uIGFnYWluc3QgdGhlIGZyYW1lIGl0IGlzIGRlc3RpbmVkIGZvciwgd2l0aG91dCBkcmF3aW5nXG4gKiBhbnl0aGluZy5cbiAqXG4gKiBUaGlzIGlzIHdoYXQge0BsaW5rIGxhYmVsU2NyZWVuc2hvdH0gcmVqZWN0cyBhbiBvdmVybG9uZyBjYXB0aW9uIHdpdGgsIGV4cG9zZWRcbiAqIHNvIGEgY2FwdGlvbiBjYW4gYmUgY2hvc2VuIHdpdGggdGhlIG51bWJlciBpbiBoYW5kIGluc3RlYWQgb2YgYnkgY2FwdHVyaW5nIGFcbiAqIGZyYW1lIGFuZCBsb29raW5nIGF0IGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY2FwdGlvbiBhbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGltYWdlIGl0IGlzIGZvci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG1lYXN1cmVtZW50LlxuICogQHRocm93cyBFcnJvciBpZiBgc2hhcnBgIGlzIG5vdCBpbnN0YWxsZWQsIG9yIGVpdGhlciBkaW1lbnNpb24gaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWVhc3VyZUxhYmVsQ2FwdGlvbihwYXJhbXM6IE1lYXN1cmVMYWJlbENhcHRpb25QYXJhbXMpOiBQcm9taXNlPExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50PiB7XG4gIGNvbnN0IHsgaW1hZ2VIZWlnaHRJblBpeGVscywgaW1hZ2VXaWR0aEluUGl4ZWxzLCB0ZXh0IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGdlb21ldHJ5ID0gY29tcHV0ZUxhYmVsQmFuZCh7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9KTtcbiAgY29uc3QgdGV4dFdpZHRoSW5QaXhlbHMgPSBhd2FpdCBtZWFzdXJlQ2FwdGlvbldpZHRoKHRleHQsIGdlb21ldHJ5LmZvbnRTaXplSW5QaXhlbHMpO1xuXG4gIHJldHVybiB7XG4gICAgY2FwdGlvblJvb21JblBpeGVsczogZ2VvbWV0cnkuY2FwdGlvblJvb21JblBpeGVscyxcbiAgICBkb2VzRml0OiB0ZXh0V2lkdGhJblBpeGVscyA8PSBnZW9tZXRyeS5jYXB0aW9uUm9vbUluUGl4ZWxzLFxuICAgIHRleHRXaWR0aEluUGl4ZWxzXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjYXB0aW9uJ3MgU1ZHIGA8dGV4dD5gIGVsZW1lbnQuXG4gKlxuICogQm90aCB0aGUgYmFuZCBhbmQgdGhlIG1lYXN1cmVtZW50IGNhbnZhcyBnbyB0aHJvdWdoIGhlcmUsIHNvIHRoZSB0aGluZyB0aGF0XG4gKiBpcyBtZWFzdXJlZCBpcyBkcmF3biB3aXRoIHRoZSBzYW1lIGZhY2UsIHdlaWdodCBhbmQgc2l6ZSBhcyB0aGUgdGhpbmcgdGhhdFxuICogc2hpcHMuIFR3byBoYW5kLXdyaXR0ZW4gY29waWVzIHdvdWxkIGJlIGZyZWUgdG8gZHJpZnQsIGFuZCBhIG1lYXN1cmVtZW50IHRoYXRcbiAqIGhhcyBkcmlmdGVkIGZyb20gdGhlIGRyYXdpbmcgaXMgd29yc2UgdGhhbiBubyBtZWFzdXJlbWVudCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjYXB0aW9uLCBpdHMgc2l6ZSwgYW5kIHdoZXJlIHRvIGFuY2hvciBpdC5cbiAqIEByZXR1cm5zIFRoZSBgPHRleHQ+YCBtYXJrdXAuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ2FwdGlvblRleHRFbGVtZW50KHBhcmFtczogQ2FwdGlvblRleHRFbGVtZW50UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBmb250U2l6ZUluUGl4ZWxzLCB0ZXh0LCB0ZXh0QW5jaG9yLCB4SW5QaXhlbHMsIHlJblBpeGVscyB9ID0gcGFyYW1zO1xuXG4gIHJldHVybiBgPHRleHQgeD1cIiR7U3RyaW5nKHhJblBpeGVscyl9XCIgeT1cIiR7U3RyaW5nKHlJblBpeGVscyl9XCIgYFxuICAgICsgYGZvbnQtZmFtaWx5PVwiJHtGT05UX0ZBTUlMWX1cIiBmb250LXNpemU9XCIke1N0cmluZyhmb250U2l6ZUluUGl4ZWxzKX1cIiBgXG4gICAgKyBgZm9udC13ZWlnaHQ9XCIke0ZPTlRfV0VJR0hUfVwiIGZpbGw9XCIke0NBUFRJT05fRklMTH1cIiB0ZXh0LWFuY2hvcj1cIiR7dGV4dEFuY2hvcn1cIiBkb21pbmFudC1iYXNlbGluZT1cImNlbnRyYWxcIj5gXG4gICAgKyBgJHtlc2NhcGVTdmdUZXh0KHRleHQpfTwvdGV4dD5gO1xufVxuXG4vKipcbiAqIE1lYXN1cmVzIGhvdyB3aWRlIGEgY2FwdGlvbiByZW5kZXJzIGF0IGEgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBUaGUgdGV4dCBpcyBkcmF3biBhbG9uZSBvbiBhIHRyYW5zcGFyZW50IGNhbnZhcyBkZWxpYmVyYXRlbHkgd2lkZXIgdGhhbiBpdCBjYW5cbiAqIHBvc3NpYmx5IG5lZWQsIHRoZW4gYHRyaW1gbWVkIGJhY2sgdG8gaXRzIG93biBpbmsgXHUyMDE0IHRoZSBzYW1lIG1lYXN1cmVtZW50IHRoYXRcbiAqIHdhcyBwcmV2aW91c2x5IGRvbmUgYnkgaGFuZCwgb25jZSwgcGVyIGNhcHRpb24sIGJ5IHdob2V2ZXIgdGhvdWdodCB0byBkb3VidFxuICogb25lLiBUaGUgcmVuZGVyZXIgZG9pbmcgdGhlIG1lYXN1cmluZyBpcyB0aGUgcmVuZGVyZXIgdGhhdCBkcmF3cyB0aGUgYmFuZCwgc29cbiAqIHRoZSB0d28gY2Fubm90IGRpc2FncmVlIGFib3V0IGEgZm9udCB0aGUgaG9zdCBkb2VzIG9yIGRvZXMgbm90IGhhdmUuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgY2FwdGlvbi5cbiAqIEBwYXJhbSBmb250U2l6ZUluUGl4ZWxzIC0gVGhlIHNpemUgdGhlIGJhbmQgd291bGQgZHJhdyBpdCBhdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlbmRlcmVkIHdpZHRoIGluIHBpeGVscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWVhc3VyZUNhcHRpb25XaWR0aCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplSW5QaXhlbHM6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gIC8vIEEgY2FwdGlvbiB3aXRoIG5vIGluayBsZWF2ZXMgdGhlIGNhbnZhcyB1bmlmb3JtbHkgdHJhbnNwYXJlbnQsIGFuZCBgdHJpbWBcbiAgLy8gcmV0dXJucyBzdWNoIGFuIGltYWdlIHVudG91Y2hlZCBcdTIwMTQgaS5lLiByZXBvcnRzIHRoZSB3aG9sZSBjYW52YXMgYXMgdGV4dC5cbiAgaWYgKHRleHQudHJpbSgpID09PSAnJykge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3Qgc2hhcnAgPSBhd2FpdCBpbXBvcnRTaGFycCgnbWVhc3VyZUxhYmVsQ2FwdGlvbicpO1xuICBjb25zdCBwYWRkaW5nSW5QaXhlbHMgPSBmb250U2l6ZUluUGl4ZWxzICogQ0VOVEVSX0RJVklTT1I7XG4gIGNvbnN0IGNhbnZhc1dpZHRoSW5QaXhlbHMgPSBNYXRoLmNlaWwoZm9udFNpemVJblBpeGVscyAqIE1BWElNVU1fR0xZUEhfQURWQU5DRV9SQVRJTyAqIHRleHQubGVuZ3RoKSArIHBhZGRpbmdJblBpeGVscztcbiAgY29uc3QgY2FudmFzSGVpZ2h0SW5QaXhlbHMgPSBNYXRoLmNlaWwoZm9udFNpemVJblBpeGVscyAqIE1FQVNVUkVNRU5UX0NBTlZBU19IRUlHSFRfUkFUSU8pO1xuICBjb25zdCBjYXB0aW9uRWxlbWVudCA9IGJ1aWxkQ2FwdGlvblRleHRFbGVtZW50KHtcbiAgICBmb250U2l6ZUluUGl4ZWxzLFxuICAgIHRleHQsXG4gICAgdGV4dEFuY2hvcjogJ3N0YXJ0JyxcbiAgICB4SW5QaXhlbHM6IGZvbnRTaXplSW5QaXhlbHMsXG4gICAgeUluUGl4ZWxzOiBjYW52YXNIZWlnaHRJblBpeGVscyAvIENFTlRFUl9ESVZJU09SXG4gIH0pO1xuICBjb25zdCBzdmcgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIke1N0cmluZyhjYW52YXNXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhjYW52YXNIZWlnaHRJblBpeGVscyl9XCI+YFxuICAgICsgYCR7Y2FwdGlvbkVsZW1lbnR9PC9zdmc+YDtcblxuICBjb25zdCB0cmltbWVkID0gYXdhaXQgc2hhcnAobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oc3ZnKSkpXG4gICAgLnRyaW0oeyB0aHJlc2hvbGQ6IFRSSU1fVEhSRVNIT0xEIH0pXG4gICAgLnBuZygpXG4gICAgLnRvQnVmZmVyKCk7XG5cbiAgcmV0dXJuIHJlYWRQbmdEaW1lbnNpb25zKG5ldyBVaW50OEFycmF5KHRyaW1tZWQpKS53aWR0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
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = false ? "dev" : "15.0.0";
1
+ const LIBRARY_VERSION = false ? "dev" : "16.0.0";
2
2
  export {
3
3
  LIBRARY_VERSION
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-integration-testing",
3
- "version": "15.0.0",
3
+ "version": "16.0.0",
4
4
  "description": "Simplifies integration testing of Obsidian plugins.",
5
5
  "keywords": [
6
6
  "obsidian",