appium-uiautomator2-driver 2.12.4 → 2.12.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/build/index.js +1 -1
- package/build/lib/commands/actions.js +1 -1
- package/build/lib/commands/actions.js.map +1 -1
- package/build/lib/commands/alert.js +1 -1
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/battery.js +1 -1
- package/build/lib/commands/battery.js.map +1 -1
- package/build/lib/commands/element.js +1 -1
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/find.js +1 -1
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +1 -1
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/gestures.js +1 -1
- package/build/lib/commands/gestures.js.map +1 -1
- package/build/lib/commands/index.js +1 -1
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/screenshot.js +1 -1
- package/build/lib/commands/screenshot.js.map +1 -1
- package/build/lib/commands/touch.js +1 -1
- package/build/lib/commands/touch.js.map +1 -1
- package/build/lib/commands/viewport.js +1 -1
- package/build/lib/commands/viewport.js.map +1 -1
- package/build/lib/css-converter.js +1 -1
- package/build/lib/css-converter.js.map +1 -1
- package/build/lib/desired-caps.js +1 -1
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/driver.js +1 -1
- package/build/lib/driver.js.map +1 -1
- package/build/lib/extensions.js +1 -1
- package/build/lib/extensions.js.map +1 -1
- package/build/lib/helpers.js +1 -1
- package/build/lib/helpers.js.map +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/logger.js.map +1 -1
- package/build/lib/method-map.js +1 -1
- package/build/lib/method-map.js.map +1 -1
- package/build/lib/uiautomator2.js +1 -1
- package/build/lib/uiautomator2.js.map +1 -1
- package/npm-shrinkwrap.json +108 -101
- package/package.json +3 -2
- package/scripts/reset.js +30 -0
|
@@ -199,4 +199,4 @@ commands.mobileScroll = async function (opts = {}) {
|
|
|
199
199
|
};
|
|
200
200
|
var _default = commands;
|
|
201
201
|
exports.default = _default;
|
|
202
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VzdHVyZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuXG5mdW5jdGlvbiB0b09yaWdpbiAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IHV0aWwud3JhcEVsZW1lbnQodXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdG9Qb2ludCAoeCwgeSkge1xuICByZXR1cm4gXy5pc0Zpbml0ZSh4KSAmJiBfLmlzRmluaXRlKHkpID8ge3gsIHl9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB0b1JlY3QgKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gW2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodF0uc29tZSgodikgPT4gIV8uaXNGaW5pdGUodikpXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2ltcGxlIGNsaWNrL3RhcCBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHs/Q2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvY2xpY2snLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgb2Zmc2V0OiB0b1BvaW50KHgsIHkpLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9uZ0NsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZHVyYXRpb24gWzUwMF0gLSBDbGljayBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgY2xpY2sgdGhhdCBsYXN0cyBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHs/TG9uZ0NsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVMb25nQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgICBkdXJhdGlvbixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvbG9uZ19jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gICAgZHVyYXRpb24sXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGRvdWJsZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBkb3VibGUgY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZG91YmxlIGNsaWNrIG9uXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIGNsaWNrIHRoYXQgbGFzdHMgZm9yIHRoZSBnaXZlbiBkdXJhdGlvblxuICpcbiAqIEBwYXJhbSB7P0RvdWJsZUNsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHgsIHksXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2RvdWJsZV9jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZHJhZ2dlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiB0aGUgc3RhcnQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBzdGFydCBjb29yZGluYXRlcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGVzZVxuICogY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgYXMgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBlbGVtZW50IGNvcm5lci5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgc3RhcnRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIHN0YXJ0c1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbMjUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtXG4gKiB0aGlzIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogRHJhZ3MgdGhpcyBvYmplY3QgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gez9EcmFnT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEcmFnR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURyYWdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9kcmFnJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIHN0YXJ0OiB0b1BvaW50KHN0YXJ0WCwgc3RhcnRZKSxcbiAgICBlbmQ6IHRvUG9pbnQoZW5kWCwgZW5kWSksXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGbGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGZsaW5nZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gZmxpbmcgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhpc1xuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gLSBEaXJlY3Rpb24gb2YgdGhlIGZsaW5nLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzc1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzXG4gKiBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gZmxpbmdcbiAqIHZlbG9jaXR5IGZvciB0aGUgZ2l2ZW4gdmlldyAoNTAgYnkgZGVmYXVsdClcbiAqL1xuXG4vKipcbiAqIERyYWdzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXG4gKlxuICogQHBhcmFtIHs/RmxpbmdPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBzdGlsbCBzY3JvbGwgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqL1xuY29tbWFuZHMubW9iaWxlRmxpbmdHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxpbmdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9mbGluZycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQaW5jaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHBpbmNoZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gcGluY2ggYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgcGluY2ggYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBwaW5jaCBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGluIHJhbmdlIDAuLjEsIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFsyNTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm1cbiAqIHRoaXMgZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHBpbmNoIGNsb3NlIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2hDbG9zZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9waW5jaF9jbG9zZScsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBwaW5jaCBvcGVuIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQaW5jaE9wZW5HZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvcGluY2hfb3BlbicsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3dpcGVPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gc3dpcGUgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc3dpcGUuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHN3aXBlIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc3dpcGUgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBpbiByYW5nZSAwLi4xLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNTAwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXNcbiAqIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzd2lwZSBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1N3aXBlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVTd2lwZUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvc3dpcGUnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBzY3JvbGwgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoaXNcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBzY3JvbGwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzY3JvbGxpbmcgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBncmVhdGVyIHRoYW4gemVybywgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzUwMDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzIGdlc3R1cmVcbiAqIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2Nyb2xsIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/U2Nyb2xsT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBjYW4gc3RpbGwgc2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbEdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3Njcm9sbCcsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZWxlbWVudElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQsXG4gKiB3aGljaCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiBpcyBhIHZhbGlkIHNjcm9sbGFibGUgY29udGFpbmVyIGFuZCBpdCB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbGVtZW50VG9JZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgaXRlbSwgd2hpY2ggYmVsb25nc1xuICogdG8gdGhlIHNjcm9sbGFibGUgZWxlbWVudCBhYm92ZSwgYW5kIHdoaWNoIHNob3VsZCBiZWNvbWUgdmlzaWJsZSBhZnRlclxuICogdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gaXMgZmluaXNoZWQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYCBzdHJhdGVneS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCBgZWxlbWVudElkYCB1bnRpbCBgZWxlbWVudFRvSWRgXG4gKiBiZWNvbWVzIHZpc2libGUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgYGVsZW1lbnRUb0lkYFxuICogaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSB2aWV3IHBvcnQuIE90aGVyd2lzZSBpdCB3b3VsZCBzY3JvbGxcbiAqIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Nyb2xsYWJsZSBjb250cm9sIGFuZCB0cmllcyB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudFxuICogYnkgc2Nyb2xsaW5nIGl0cyBwYXJlbnQgdG8gdGhlIGVuZCBzdGVwIGJ5IHN0ZXAuIFRoZSBzY3JvbGwgZGlyZWN0aW9uICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuICogaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAcGFyYW0ge1Njcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZFxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxCYWNrVG8gPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50SWQsIGVsZW1lbnRUb0lkfSA9IG9wdHM7XG4gIGlmICghZWxlbWVudElkIHx8ICFlbGVtZW50VG9JZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEJvdGggZWxlbWVudElkIGFuZCBlbGVtZW50VG9JZCBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoXG4gICAgYC9hcHBpdW0vZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50SWQpfS9zY3JvbGxfdG8vJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudFRvSWQpfWAsICdQT1NUJywge30pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCBUaGUgaWRlbnRpZmllciBvZiBhbiBlbGVtZW50LiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIGlzIGEgdmFsaWQgc2Nyb2xsYWJsZSBjb250YWluZXIgYW5kIGl0IHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmBcbiAqIHN0cmF0ZWd5LiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBmaXJzdCBjdXJyZW50bHkgYXZhaWxhYmxlIHNjcm9sbGFibGUgdmlld1xuICogaXMgc2VsZWN0ZWQgZm9yIHRoZSBpbnRlcmFjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gc3RyYXRlZ3kgVGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGBhY2Nlc3NpYmlsaXR5IGlkYCAoVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKVxuICogLSBgY2xhc3MgbmFtZWAgKFVpU2VsZWN0b3IoKS5jbGFzc05hbWUpXG4gKiAtIGAtYW5kcm9pZCB1aWF1dG9tYXRvcmAgKFVpU2VsZWN0b3IpXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHNlbGVjdG9yIFRoZSBjb3JyZXNwb25kaW5nIGxvb2t1cCB2YWx1ZSBmb3IgdGhlIGdpdmVuXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbWF4U3dpcGVzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2lwZXMgdG8gcGVyZm9ybVxuICogb24gdGhlIHRhcmdldCBzY3JvbGxhYmxlIHZpZXcgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnQuXG4gKiBJbiBjYXNlIHRoaXMgdmFsdWUgaXMgdW5zZXQgdGhlbiBpdCB3b3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZVxuICogZWxlbWVudCBpdHNlbGYgKHZ1YSBgZ2V0TWF4U2VhcmNoU3dpcGVzKClgIHByb3BlcnR5KS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCB1bnRpbCB0aGUgZWxlbWVudCBpZGVudGlmaWVkXG4gKiBieSBgc3RyYXRlZ3lgIGFuZCBgc2VsZWN0b3JgIGJlY29tZXMgdmlzaWJsZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZVxuICogZGVzdGluYXRpb24gZWxlbWVudCBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHZpZXcgcG9ydC4gT3RoZXJ3aXNlIGl0IHdvdWxkIHNjcm9sbFxuICogdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRyb2wgYW5kIHRyaWVzIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50XG4gKiBieSBzY3JvbGxpbmcgaXRzIHBhcmVudCB0byB0aGUgZW5kIHN0ZXAgYnkgc3RlcC4gVGhlIHNjcm9sbCBkaXJlY3Rpb24gKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gKiBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7U2Nyb2xsT3B0c30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCwgZWxlbWVudElkLCAvLyBgZWxlbWVudGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlbGVtZW50SWRgIGluc3RlYWRcbiAgICBzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc1xuICB9ID0gb3B0cztcbiAgaWYgKCFzdHJhdGVneSB8fCAhc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBCb3RoIHN0cmF0ZWd5IGFuZCBzZWxlY3RvciBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy90b3VjaC9zY3JvbGwnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCB8fCBlbGVtZW50KSxcbiAgICBwYXJhbXM6IHtzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc30sXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUEsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUduQixTQUFTQyxRQUFRLENBQUVDLE9BQU8sRUFBRTtFQUMxQixPQUFPQSxPQUFPLEdBQUdDLGFBQUksQ0FBQ0MsV0FBVyxDQUFDRCxhQUFJLENBQUNFLGFBQWEsQ0FBQ0gsT0FBTyxDQUFDLENBQUMsR0FBR0ksU0FB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
|
|
202
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kcml2ZXIiLCJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlc3R1cmVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cblxuZnVuY3Rpb24gdG9PcmlnaW4gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyB1dGlsLndyYXBFbGVtZW50KHV0aWwudW53cmFwRWxlbWVudChlbGVtZW50KSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHRvUG9pbnQgKHgsIHkpIHtcbiAgcmV0dXJuIF8uaXNGaW5pdGUoeCkgJiYgXy5pc0Zpbml0ZSh5KSA/IHt4LCB5fSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdG9SZWN0IChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIFtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHRdLnNvbWUoKHYpID0+ICFfLmlzRmluaXRlKHYpKVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiB7bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0fTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGNsaWNrZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpcyBtaXNzaW5nIHRoZW4gYm90aCBjbGljayBvZmZzZXQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIG9mZnNldCBhcmUgcHJvdmlkZWQgdGhlbiB0aGUgY29vcmRpbmF0ZXNcbiAqIGFyZSBwYXJzZWQgYXMgcmVsYXRpdmUgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGNsaWNrIG9uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGNsaWNrIG9uXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHNpbXBsZSBjbGljay90YXAgZ2VzdHVyZVxuICpcbiAqIEBwYXJhbSB7P0NsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGlja0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHgsIHksXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2NsaWNrJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIG9mZnNldDogdG9Qb2ludCh4LCB5KSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvbmdDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGNsaWNrZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpcyBtaXNzaW5nIHRoZW4gYm90aCBjbGljayBvZmZzZXQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIG9mZnNldCBhcmUgcHJvdmlkZWQgdGhlbiB0aGUgY29vcmRpbmF0ZXNcbiAqIGFyZSBwYXJzZWQgYXMgcmVsYXRpdmUgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGNsaWNrIG9uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGNsaWNrIG9uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGR1cmF0aW9uIFs1MDBdIC0gQ2xpY2sgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxuICogVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIGNsaWNrIHRoYXQgbGFzdHMgZm9yIHRoZSBnaXZlbiBkdXJhdGlvblxuICpcbiAqIEBwYXJhbSB7P0xvbmdDbGlja09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlTG9uZ0NsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUxvbmdDbGlja0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHgsIHksXG4gICAgZHVyYXRpb24sXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2xvbmdfY2xpY2snLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgb2Zmc2V0OiB0b1BvaW50KHgsIHkpLFxuICAgIGR1cmF0aW9uLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRG91YmxlQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBkb3VibGUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gZG91YmxlIGNsaWNrIG9uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlIHRvIGRvdWJsZSBjbGljayBvblxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBjbGljayB0aGF0IGxhc3RzIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb25cbiAqXG4gKiBAcGFyYW0gez9Eb3VibGVDbGlja09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICB4LCB5LFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9kb3VibGVfY2xpY2snLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgb2Zmc2V0OiB0b1BvaW50KHgsIHkpLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRHJhZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGRyYWdnZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gdGhlIHN0YXJ0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgc3RhcnQgY29vcmRpbmF0ZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhlc2VcbiAqIGNvb3JkaW5hdGVzIGFyZSBjb25zaWRlcmVkIGFzIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgZWxlbWVudCBjb3JuZXIuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WCAtIFRoZSB4IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIHN0YXJ0c1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFkgLSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSBkcmFnZ2luZyBzdGFydHNcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZW5kWCAtIFRoZSB4IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIGVuZHNcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZW5kWSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIGVuZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzI1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybVxuICogdGhpcyBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIERyYWdzIHRoaXMgb2JqZWN0IHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXG4gKlxuICogQHBhcmFtIHs/RHJhZ09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlRHJhZ0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEcmFnR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvZHJhZycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBzdGFydDogdG9Qb2ludChzdGFydFgsIHN0YXJ0WSksXG4gICAgZW5kOiB0b1BvaW50KGVuZFgsIGVuZFkpLFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRmxpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBmbGluZ2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaWQgaXMgbWlzc2luZyB0aGVuIGZsaW5nIGJvdW5kaW5nIGFyZWEgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBmbGluZyBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoaXNcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdG9wIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBmbGluZyBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBmbGluZyBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIC0gRGlyZWN0aW9uIG9mIHRoZSBmbGluZy5cbiAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZTogYHVwYCwgYGRvd25gLCBgbGVmdGAgYW5kIGByaWdodGAgKGNhc2UgaW5zZW5zaXRpdmUpXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFs3NTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhpc1xuICogZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBtaW5pbXVtIGZsaW5nXG4gKiB2ZWxvY2l0eSBmb3IgdGhlIGdpdmVuIHZpZXcgKDUwIGJ5IGRlZmF1bHQpXG4gKi9cblxuLyoqXG4gKiBEcmFncyB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7P0ZsaW5nT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBjYW4gc3RpbGwgc2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUZsaW5nR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUZsaW5nR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LFxuICAgIGRpcmVjdGlvbixcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvZmxpbmcnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgZGlyZWN0aW9uLFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGluY2hPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBwaW5jaGVkLlxuICogSWYgdGhlIGVsZW1lbnQgaWQgaXMgbWlzc2luZyB0aGVuIHBpbmNoIGJvdW5kaW5nIGFyZWEgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoZVxuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHBpbmNoIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgcGluY2ggYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBpbiByYW5nZSAwLi4xLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbMjUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtXG4gKiB0aGlzIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBwaW5jaCBjbG9zZSBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1BpbmNoT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVQaW5jaENsb3NlR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvcGluY2hfY2xvc2UnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgcGluY2ggb3BlbiBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1BpbmNoT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVQaW5jaE9wZW5HZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2hPcGVuR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3BpbmNoX29wZW4nLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN3aXBlT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgc3dpcGVkLlxuICogSWYgdGhlIGVsZW1lbnQgaWQgaXMgbWlzc2luZyB0aGVuIHN3aXBlIGJvdW5kaW5nIGFyZWEgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoZVxuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gLSBEaXJlY3Rpb24gb2YgdGhlIHN3aXBlLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBzd2lwZSBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHN3aXBlIGFyZWEgc2l6ZS5cbiAqIFZhbGlkIHZhbHVlcyBtdXN0IGJlIGZsb2F0IG51bWJlcnMgaW4gcmFuZ2UgMC4uMSwgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzUwMDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzXG4gKiBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc3dpcGUgZ2VzdHVyZS5cbiAqXG4gKiBAcGFyYW0gez9Td2lwZU9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlU3dpcGVHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3dpcGVHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3N3aXBlJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIGRpcmVjdGlvbixcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Nyb2xsT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgc2Nyb2xsZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gc2Nyb2xsIGJvdW5kaW5nIGFyZWEgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBzY3JvbGwgYm91bmRpbmcgYXJlYSBhcmUgcHJvdmlkZWQgdGhlbiB0aGlzXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBzY3JvbGwgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBzY3JvbGwgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzY3JvbGwgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gLSBEaXJlY3Rpb24gb2YgdGhlIHNjcm9sbC5cbiAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZTogYHVwYCwgYGRvd25gLCBgbGVmdGAgYW5kIGByaWdodGAgKGNhc2UgaW5zZW5zaXRpdmUpXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgc2Nyb2xsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc2Nyb2xsaW5nIGFyZWEgc2l6ZS5cbiAqIFZhbGlkIHZhbHVlcyBtdXN0IGJlIGZsb2F0IG51bWJlcnMgZ3JlYXRlciB0aGFuIHplcm8sIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFs1MDAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhpcyBnZXN0dXJlXG4gKiBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHNjcm9sbCBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1Njcm9sbE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBvYmplY3QgY2FuIHN0aWxsIHNjcm9sbCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LFxuICAgIGRpcmVjdGlvbixcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9zY3JvbGwnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxFbGVtZW50VG9FbGVtZW50T3B0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGVsZW1lbnRJZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50LFxuICogd2hpY2ggaXMgZ29pbmcgdG8gYmUgc2Nyb2xsZWQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogaXMgYSB2YWxpZCBzY3JvbGxhYmxlIGNvbnRhaW5lciBhbmQgaXQgd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYFxuICogc3RyYXRlZ3kuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZWxlbWVudFRvSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGl0ZW0sIHdoaWNoIGJlbG9uZ3NcbiAqIHRvIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQgYWJvdmUsIGFuZCB3aGljaCBzaG91bGQgYmVjb21lIHZpc2libGUgYWZ0ZXJcbiAqIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmAgc3RyYXRlZ3kuXG4gKi9cblxuLyoqXG4gKiBTY3JvbGxzIHRoZSBnaXZlbiBzY3JvbGxhYmxlIGVsZW1lbnQgYGVsZW1lbnRJZGAgdW50aWwgYGVsZW1lbnRUb0lkYFxuICogYmVjb21lcyB2aXNpYmxlLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgdGhlIGBlbGVtZW50VG9JZGBcbiAqIGlzIGFscmVhZHkgdmlzaWJsZSBpbiB0aGUgdmlldyBwb3J0LiBPdGhlcndpc2UgaXQgd291bGQgc2Nyb2xsXG4gKiB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIHNjcm9sbGFibGUgY29udHJvbCBhbmQgdHJpZXMgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnRcbiAqIGJ5IHNjcm9sbGluZyBpdHMgcGFyZW50IHRvIHRoZSBlbmQgc3RlcCBieSBzdGVwLiBUaGUgc2Nyb2xsIGRpcmVjdGlvbiAodmVydGljYWwgb3IgaG9yaXpvbnRhbClcbiAqIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQHBhcmFtIHtTY3JvbGxFbGVtZW50VG9FbGVtZW50T3B0c30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsQmFja1RvID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudElkLCBlbGVtZW50VG9JZH0gPSBvcHRzO1xuICBpZiAoIWVsZW1lbnRJZCB8fCAhZWxlbWVudFRvSWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBCb3RoIGVsZW1lbnRJZCBhbmQgZWxlbWVudFRvSWQgYXJndW1lbnRzIG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKFxuICAgIGAvYXBwaXVtL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudElkKX0vc2Nyb2xsX3RvLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnRUb0lkKX1gLCAnUE9TVCcsIHt9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Nyb2xsT3B0c1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgVGhlIGlkZW50aWZpZXIgb2YgYW4gZWxlbWVudC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiBpcyBhIHZhbGlkIHNjcm9sbGFibGUgY29udGFpbmVyIGFuZCBpdCB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgXG4gKiBzdHJhdGVneS4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcHJvdmlkZWQgdGhlbiB0aGUgZmlyc3QgY3VycmVudGx5IGF2YWlsYWJsZSBzY3JvbGxhYmxlIHZpZXdcbiAqIGlzIHNlbGVjdGVkIGZvciB0aGUgaW50ZXJhY3Rpb24uXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHN0cmF0ZWd5IFRoZSBmb2xsb3dpbmcgc3RyYXRlZ2llcyBhcmUgc3VwcG9ydGVkOlxuICogLSBgYWNjZXNzaWJpbGl0eSBpZGAgKFVpU2VsZWN0b3IoKS5kZXNjcmlwdGlvbilcbiAqIC0gYGNsYXNzIG5hbWVgIChVaVNlbGVjdG9yKCkuY2xhc3NOYW1lKVxuICogLSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgIChVaVNlbGVjdG9yKVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBzZWxlY3RvciBUaGUgY29ycmVzcG9uZGluZyBsb29rdXAgdmFsdWUgZm9yIHRoZSBnaXZlblxuICogc3RyYXRlZ3kuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IG1heFN3aXBlcyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3dpcGVzIHRvIHBlcmZvcm1cbiAqIG9uIHRoZSB0YXJnZXQgc2Nyb2xsYWJsZSB2aWV3IGluIG9yZGVyIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50LlxuICogSW4gY2FzZSB0aGlzIHZhbHVlIGlzIHVuc2V0IHRoZW4gaXQgd291bGQgYmUgcmV0cmlldmVkIGZyb20gdGhlIHNjcm9sbGFibGVcbiAqIGVsZW1lbnQgaXRzZWxmICh2dWEgYGdldE1heFNlYXJjaFN3aXBlcygpYCBwcm9wZXJ0eSkuXG4gKi9cblxuLyoqXG4gKiBTY3JvbGxzIHRoZSBnaXZlbiBzY3JvbGxhYmxlIGVsZW1lbnQgdW50aWwgdGhlIGVsZW1lbnQgaWRlbnRpZmllZFxuICogYnkgYHN0cmF0ZWd5YCBhbmQgYHNlbGVjdG9yYCBiZWNvbWVzIHZpc2libGUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGVcbiAqIGRlc3RpbmF0aW9uIGVsZW1lbnQgaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSB2aWV3IHBvcnQuIE90aGVyd2lzZSBpdCB3b3VsZCBzY3JvbGxcbiAqIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Nyb2xsYWJsZSBjb250cm9sIGFuZCB0cmllcyB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudFxuICogYnkgc2Nyb2xsaW5nIGl0cyBwYXJlbnQgdG8gdGhlIGVuZCBzdGVwIGJ5IHN0ZXAuIFRoZSBzY3JvbGwgZGlyZWN0aW9uICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuICogaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAcGFyYW0ge1Njcm9sbE9wdHN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgc2Nyb2xsaW5nIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbCA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsIGVsZW1lbnRJZCwgLy8gYGVsZW1lbnRgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZWxlbWVudElkYCBpbnN0ZWFkXG4gICAgc3RyYXRlZ3ksIHNlbGVjdG9yLCBtYXhTd2lwZXNcbiAgfSA9IG9wdHM7XG4gIGlmICghc3RyYXRlZ3kgfHwgIXNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgQm90aCBzdHJhdGVneSBhbmQgc2VsZWN0b3IgYXJndW1lbnRzIG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvdG91Y2gvc2Nyb2xsJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQgfHwgZWxlbWVudCksXG4gICAgcGFyYW1zOiB7c3RyYXRlZ3ksIHNlbGVjdG9yLCBtYXhTd2lwZXN9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gestures.js","names":["commands","toOrigin","element","util","wrapElement","unwrapElement","undefined","toPoint","x","y","_","isFinite","toRect","left","top","width","height","some","v","mobileClickGesture","opts","elementId","uiautomator2","jwproxy","command","origin","offset","mobileLongClickGesture","duration","mobileDoubleClickGesture","mobileDragGesture","startX","startY","endX","endY","speed","start","end","mobileFlingGesture","direction","area","mobilePinchCloseGesture","percent","mobilePinchOpenGesture","mobileSwipeGesture","mobileScrollGesture","mobileScrollBackTo","elementToId","errors","InvalidArgumentError","mobileScroll","strategy","selector","maxSwipes","params"],"sources":["../../../lib/commands/gestures.js"],"sourcesContent":["import { util } from 'appium/support';\nimport _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst commands = {};\n\n\nfunction toOrigin (element) {\n return element ? util.wrapElement(util.unwrapElement(element)) : undefined;\n}\n\nfunction toPoint (x, y) {\n return _.isFinite(x) && _.isFinite(y) ? {x, y} : undefined;\n}\n\nfunction toRect (left, top, width, height) {\n return [left, top, width, height].some((v) => !_.isFinite(v))\n ? undefined\n : {left, top, width, height};\n}\n\n/**\n * @typedef {Object} ClickOptions\n * @property {?string} elementId - The id of the element to be clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to click on\n * @property {?number} y - The y coordinate to click on\n */\n\n/**\n * Performs a simple click/tap gesture\n *\n * @param {?ClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileClickGesture = async function mobileClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n });\n};\n\n/**\n * @typedef {Object} LongClickOptions\n * @property {?string} elementId - The id of the element to be clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to click on\n * @property {?number} y - The y coordinate to click on\n * @property {?number} duration [500] - Click duration in milliseconds.\n * The value must not be negative\n */\n\n/**\n * Performs a click that lasts for the given duration\n *\n * @param {?LongClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileLongClickGesture = async function mobileLongClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n duration,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/long_click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n duration,\n });\n};\n\n/**\n * @typedef {Object} DoubleClickOptions\n * @property {?string} elementId - The id of the element to be double clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to double click on\n * @property {?number} y - The y coordinate to double click on\n */\n\n/**\n * Performs a click that lasts for the given duration\n *\n * @param {?DoubleClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileDoubleClickGesture = async function mobileDoubleClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/double_click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n });\n};\n\n/**\n * @typedef {Object} DragOptions\n * @property {?string} elementId - The id of the element to be dragged.\n * If the element id is missing then the start coordinates must be provided.\n * If both the element id and the start coordinates are provided then these\n * coordinates are considered as offsets from the top left element corner.\n * @property {?number} startX - The x coordinate where the dragging starts\n * @property {?number} startY - The y coordinate where the dragging starts\n * @property {!number} endX - The x coordinate where the dragging ends\n * @property {!number} endY - The y coordinate where the dragging ends\n * @property {?number} speed [2500 * displayDensity] - The speed at which to perform\n * this gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Drags this object to the specified location.\n *\n * @param {?DragOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileDragGesture = async function mobileDragGesture (opts = {}) {\n const {\n elementId,\n startX, startY,\n endX, endY,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/drag', 'POST', {\n origin: toOrigin(elementId),\n start: toPoint(startX, startY),\n end: toPoint(endX, endY),\n speed,\n });\n};\n\n/**\n * @typedef {Object} FlingOptions\n * @property {?string} elementId - The id of the element to be flinged.\n * If the element id is missing then fling bounding area must be provided.\n * If both the element id and the fling bounding area are provided then this\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the fling bounding area\n * @property {?number} top - The top coordinate of the fling bounding area\n * @property {?number} width - The width of the fling bounding area\n * @property {?number} height - The height of the fling bounding area\n * @property {!string} direction - Direction of the fling.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {?number} speed [7500 * displayDensity] - The speed at which to perform this\n * gesture in pixels per second. The value must be greater than the minimum fling\n * velocity for the given view (50 by default)\n */\n\n/**\n * Drags to the specified location.\n *\n * @param {?FlingOptions} opts\n * @throws {Error} if provided options are not valid\n * @returns {boolean} True if the object can still scroll in the given direction.\n */\ncommands.mobileFlingGesture = async function mobileFlingGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/fling', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n speed,\n });\n};\n\n/**\n * @typedef {Object} PinchOptions\n * @property {?string} elementId - The id of the element to be pinched.\n * If the element id is missing then pinch bounding area must be provided.\n * If both the element id and the pinch bounding area are provided then the\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the pinch bounding area\n * @property {?number} top - The top coordinate of the pinch bounding area\n * @property {?number} width - The width of the pinch bounding area\n * @property {?number} height - The height of the pinch bounding area\n * @property {!number} percent - The size of the pinch as a percentage of the pinch area size.\n * Valid values must be float numbers in range 0..1, where 1.0 is 100%\n * @property {?number} speed [2500 * displayDensity] - The speed at which to perform\n * this gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a pinch close gesture.\n *\n * @param {?PinchOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobilePinchCloseGesture = async function mobilePinchCloseGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/pinch_close', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n percent,\n speed,\n });\n};\n\n/**\n * Performs a pinch open gesture.\n *\n * @param {?PinchOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobilePinchOpenGesture = async function mobilePinchOpenGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/pinch_open', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} SwipeOptions\n * @property {?string} elementId - The id of the element to be swiped.\n * If the element id is missing then swipe bounding area must be provided.\n * If both the element id and the swipe bounding area are provided then the\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the swipe bounding area\n * @property {?number} top - The top coordinate of the swipe bounding area\n * @property {?number} width - The width of the swipe bounding area\n * @property {?number} height - The height of the swipe bounding area\n * @property {!string} direction - Direction of the swipe.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {!number} percent - The size of the swipe as a percentage of the swipe area size.\n * Valid values must be float numbers in range 0..1, where 1.0 is 100%\n * @property {?number} speed [5000 * displayDensity] - The speed at which to perform this\n * gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a swipe gesture.\n *\n * @param {?SwipeOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileSwipeGesture = async function mobileSwipeGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/swipe', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} ScrollOptions\n * @property {?string} elementId - The id of the element to be scrolled.\n * If the element id is missing then scroll bounding area must be provided.\n * If both the element id and the scroll bounding area are provided then this\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the scroll bounding area\n * @property {?number} top - The top coordinate of the scroll bounding area\n * @property {?number} width - The width of the scroll bounding area\n * @property {?number} height - The height of the scroll bounding area\n * @property {!string} direction - Direction of the scroll.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {!number} percent - The size of the scroll as a percentage of the scrolling area size.\n * Valid values must be float numbers greater than zero, where 1.0 is 100%\n * @property {?number} speed [5000 * displayDensity] - The speed at which to perform this gesture\n * in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a scroll gesture.\n *\n * @param {?ScrollOptions} opts\n * @throws {Error} if provided options are not valid\n * @returns {boolean} True if the object can still scroll in the given direction.\n */\ncommands.mobileScrollGesture = async function mobileScrollGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/scroll', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} ScrollElementToElementOpts\n * @property {string} elementId The identifier of the scrollable element,\n * which is going to be scrolled. It is required this element\n * is a valid scrollable container and it was located by `-android uiautomator`\n * strategy.\n * @property {string} elementToId The identifier of the item, which belongs\n * to the scrollable element above, and which should become visible after\n * the scrolling operation is finished. It is required this element\n * was located by `-android uiautomator` strategy.\n */\n\n/**\n * Scrolls the given scrollable element `elementId` until `elementToId`\n * becomes visible. This function returns immediately if the `elementToId`\n * is already visible in the view port. Otherwise it would scroll\n * to the very beginning of the scrollable control and tries to reach the destination element\n * by scrolling its parent to the end step by step. The scroll direction (vertical or horizontal)\n * is detected automatically.\n *\n * @param {ScrollElementToElementOpts} opts\n * @throws {Error} if the scrolling operation cannot be performed\n */\ncommands.mobileScrollBackTo = async function (opts = {}) {\n const {elementId, elementToId} = opts;\n if (!elementId || !elementToId) {\n throw new errors.InvalidArgumentError(`Both elementId and elementToId arguments must be provided`);\n }\n return await this.uiautomator2.jwproxy.command(\n `/appium/element/${util.unwrapElement(elementId)}/scroll_to/${util.unwrapElement(elementToId)}`, 'POST', {});\n};\n\n/**\n * @typedef {Object} ScrollOpts\n * @property {?string} elementId The identifier of an element. It is required this element\n * is a valid scrollable container and it was located by `-android uiautomator`\n * strategy. If this property is not provided then the first currently available scrollable view\n * is selected for the interaction.\n * @property {!string} strategy The following strategies are supported:\n * - `accessibility id` (UiSelector().description)\n * - `class name` (UiSelector().className)\n * - `-android uiautomator` (UiSelector)\n * @property {!string} selector The corresponding lookup value for the given\n * strategy.\n * @property {?number} maxSwipes The maximum number of swipes to perform\n * on the target scrollable view in order to reach the destination element.\n * In case this value is unset then it would be retrieved from the scrollable\n * element itself (vua `getMaxSearchSwipes()` property).\n */\n\n/**\n * Scrolls the given scrollable element until the element identified\n * by `strategy` and `selector` becomes visible. This function returns immediately if the\n * destination element is already visible in the view port. Otherwise it would scroll\n * to the very beginning of the scrollable control and tries to reach the destination element\n * by scrolling its parent to the end step by step. The scroll direction (vertical or horizontal)\n * is detected automatically.\n *\n * @param {ScrollOpts} opts\n * @throws {Error} if the scrolling operation cannot be performed\n */\ncommands.mobileScroll = async function (opts = {}) {\n const {\n element, elementId, // `element` is deprecated, use `elementId` instead\n strategy, selector, maxSwipes\n } = opts;\n if (!strategy || !selector) {\n throw new errors.InvalidArgumentError(`Both strategy and selector arguments must be provided`);\n }\n return await this.uiautomator2.jwproxy.command('/touch/scroll', 'POST', {\n origin: toOrigin(elementId || element),\n params: {strategy, selector, maxSwipes},\n });\n};\n\nexport default commands;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gestures.js","names":["_support","require","_lodash","_interopRequireDefault","_driver","commands","toOrigin","element","util","wrapElement","unwrapElement","undefined","toPoint","x","y","_","isFinite","toRect","left","top","width","height","some","v","mobileClickGesture","opts","elementId","uiautomator2","jwproxy","command","origin","offset","mobileLongClickGesture","duration","mobileDoubleClickGesture","mobileDragGesture","startX","startY","endX","endY","speed","start","end","mobileFlingGesture","direction","area","mobilePinchCloseGesture","percent","mobilePinchOpenGesture","mobileSwipeGesture","mobileScrollGesture","mobileScrollBackTo","elementToId","errors","InvalidArgumentError","mobileScroll","strategy","selector","maxSwipes","params","_default","exports","default"],"sources":["../../../lib/commands/gestures.js"],"sourcesContent":["import { util } from 'appium/support';\nimport _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst commands = {};\n\n\nfunction toOrigin (element) {\n return element ? util.wrapElement(util.unwrapElement(element)) : undefined;\n}\n\nfunction toPoint (x, y) {\n return _.isFinite(x) && _.isFinite(y) ? {x, y} : undefined;\n}\n\nfunction toRect (left, top, width, height) {\n return [left, top, width, height].some((v) => !_.isFinite(v))\n ? undefined\n : {left, top, width, height};\n}\n\n/**\n * @typedef {Object} ClickOptions\n * @property {?string} elementId - The id of the element to be clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to click on\n * @property {?number} y - The y coordinate to click on\n */\n\n/**\n * Performs a simple click/tap gesture\n *\n * @param {?ClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileClickGesture = async function mobileClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n });\n};\n\n/**\n * @typedef {Object} LongClickOptions\n * @property {?string} elementId - The id of the element to be clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to click on\n * @property {?number} y - The y coordinate to click on\n * @property {?number} duration [500] - Click duration in milliseconds.\n * The value must not be negative\n */\n\n/**\n * Performs a click that lasts for the given duration\n *\n * @param {?LongClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileLongClickGesture = async function mobileLongClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n duration,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/long_click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n duration,\n });\n};\n\n/**\n * @typedef {Object} DoubleClickOptions\n * @property {?string} elementId - The id of the element to be double clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to double click on\n * @property {?number} y - The y coordinate to double click on\n */\n\n/**\n * Performs a click that lasts for the given duration\n *\n * @param {?DoubleClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileDoubleClickGesture = async function mobileDoubleClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/double_click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n });\n};\n\n/**\n * @typedef {Object} DragOptions\n * @property {?string} elementId - The id of the element to be dragged.\n * If the element id is missing then the start coordinates must be provided.\n * If both the element id and the start coordinates are provided then these\n * coordinates are considered as offsets from the top left element corner.\n * @property {?number} startX - The x coordinate where the dragging starts\n * @property {?number} startY - The y coordinate where the dragging starts\n * @property {!number} endX - The x coordinate where the dragging ends\n * @property {!number} endY - The y coordinate where the dragging ends\n * @property {?number} speed [2500 * displayDensity] - The speed at which to perform\n * this gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Drags this object to the specified location.\n *\n * @param {?DragOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileDragGesture = async function mobileDragGesture (opts = {}) {\n const {\n elementId,\n startX, startY,\n endX, endY,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/drag', 'POST', {\n origin: toOrigin(elementId),\n start: toPoint(startX, startY),\n end: toPoint(endX, endY),\n speed,\n });\n};\n\n/**\n * @typedef {Object} FlingOptions\n * @property {?string} elementId - The id of the element to be flinged.\n * If the element id is missing then fling bounding area must be provided.\n * If both the element id and the fling bounding area are provided then this\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the fling bounding area\n * @property {?number} top - The top coordinate of the fling bounding area\n * @property {?number} width - The width of the fling bounding area\n * @property {?number} height - The height of the fling bounding area\n * @property {!string} direction - Direction of the fling.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {?number} speed [7500 * displayDensity] - The speed at which to perform this\n * gesture in pixels per second. The value must be greater than the minimum fling\n * velocity for the given view (50 by default)\n */\n\n/**\n * Drags to the specified location.\n *\n * @param {?FlingOptions} opts\n * @throws {Error} if provided options are not valid\n * @returns {boolean} True if the object can still scroll in the given direction.\n */\ncommands.mobileFlingGesture = async function mobileFlingGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/fling', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n speed,\n });\n};\n\n/**\n * @typedef {Object} PinchOptions\n * @property {?string} elementId - The id of the element to be pinched.\n * If the element id is missing then pinch bounding area must be provided.\n * If both the element id and the pinch bounding area are provided then the\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the pinch bounding area\n * @property {?number} top - The top coordinate of the pinch bounding area\n * @property {?number} width - The width of the pinch bounding area\n * @property {?number} height - The height of the pinch bounding area\n * @property {!number} percent - The size of the pinch as a percentage of the pinch area size.\n * Valid values must be float numbers in range 0..1, where 1.0 is 100%\n * @property {?number} speed [2500 * displayDensity] - The speed at which to perform\n * this gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a pinch close gesture.\n *\n * @param {?PinchOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobilePinchCloseGesture = async function mobilePinchCloseGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/pinch_close', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n percent,\n speed,\n });\n};\n\n/**\n * Performs a pinch open gesture.\n *\n * @param {?PinchOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobilePinchOpenGesture = async function mobilePinchOpenGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/pinch_open', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} SwipeOptions\n * @property {?string} elementId - The id of the element to be swiped.\n * If the element id is missing then swipe bounding area must be provided.\n * If both the element id and the swipe bounding area are provided then the\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the swipe bounding area\n * @property {?number} top - The top coordinate of the swipe bounding area\n * @property {?number} width - The width of the swipe bounding area\n * @property {?number} height - The height of the swipe bounding area\n * @property {!string} direction - Direction of the swipe.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {!number} percent - The size of the swipe as a percentage of the swipe area size.\n * Valid values must be float numbers in range 0..1, where 1.0 is 100%\n * @property {?number} speed [5000 * displayDensity] - The speed at which to perform this\n * gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a swipe gesture.\n *\n * @param {?SwipeOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileSwipeGesture = async function mobileSwipeGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/swipe', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} ScrollOptions\n * @property {?string} elementId - The id of the element to be scrolled.\n * If the element id is missing then scroll bounding area must be provided.\n * If both the element id and the scroll bounding area are provided then this\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the scroll bounding area\n * @property {?number} top - The top coordinate of the scroll bounding area\n * @property {?number} width - The width of the scroll bounding area\n * @property {?number} height - The height of the scroll bounding area\n * @property {!string} direction - Direction of the scroll.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {!number} percent - The size of the scroll as a percentage of the scrolling area size.\n * Valid values must be float numbers greater than zero, where 1.0 is 100%\n * @property {?number} speed [5000 * displayDensity] - The speed at which to perform this gesture\n * in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a scroll gesture.\n *\n * @param {?ScrollOptions} opts\n * @throws {Error} if provided options are not valid\n * @returns {boolean} True if the object can still scroll in the given direction.\n */\ncommands.mobileScrollGesture = async function mobileScrollGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/scroll', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} ScrollElementToElementOpts\n * @property {string} elementId The identifier of the scrollable element,\n * which is going to be scrolled. It is required this element\n * is a valid scrollable container and it was located by `-android uiautomator`\n * strategy.\n * @property {string} elementToId The identifier of the item, which belongs\n * to the scrollable element above, and which should become visible after\n * the scrolling operation is finished. It is required this element\n * was located by `-android uiautomator` strategy.\n */\n\n/**\n * Scrolls the given scrollable element `elementId` until `elementToId`\n * becomes visible. This function returns immediately if the `elementToId`\n * is already visible in the view port. Otherwise it would scroll\n * to the very beginning of the scrollable control and tries to reach the destination element\n * by scrolling its parent to the end step by step. The scroll direction (vertical or horizontal)\n * is detected automatically.\n *\n * @param {ScrollElementToElementOpts} opts\n * @throws {Error} if the scrolling operation cannot be performed\n */\ncommands.mobileScrollBackTo = async function (opts = {}) {\n const {elementId, elementToId} = opts;\n if (!elementId || !elementToId) {\n throw new errors.InvalidArgumentError(`Both elementId and elementToId arguments must be provided`);\n }\n return await this.uiautomator2.jwproxy.command(\n `/appium/element/${util.unwrapElement(elementId)}/scroll_to/${util.unwrapElement(elementToId)}`, 'POST', {});\n};\n\n/**\n * @typedef {Object} ScrollOpts\n * @property {?string} elementId The identifier of an element. It is required this element\n * is a valid scrollable container and it was located by `-android uiautomator`\n * strategy. If this property is not provided then the first currently available scrollable view\n * is selected for the interaction.\n * @property {!string} strategy The following strategies are supported:\n * - `accessibility id` (UiSelector().description)\n * - `class name` (UiSelector().className)\n * - `-android uiautomator` (UiSelector)\n * @property {!string} selector The corresponding lookup value for the given\n * strategy.\n * @property {?number} maxSwipes The maximum number of swipes to perform\n * on the target scrollable view in order to reach the destination element.\n * In case this value is unset then it would be retrieved from the scrollable\n * element itself (vua `getMaxSearchSwipes()` property).\n */\n\n/**\n * Scrolls the given scrollable element until the element identified\n * by `strategy` and `selector` becomes visible. This function returns immediately if the\n * destination element is already visible in the view port. Otherwise it would scroll\n * to the very beginning of the scrollable control and tries to reach the destination element\n * by scrolling its parent to the end step by step. The scroll direction (vertical or horizontal)\n * is detected automatically.\n *\n * @param {ScrollOpts} opts\n * @throws {Error} if the scrolling operation cannot be performed\n */\ncommands.mobileScroll = async function (opts = {}) {\n const {\n element, elementId, // `element` is deprecated, use `elementId` instead\n strategy, selector, maxSwipes\n } = opts;\n if (!strategy || !selector) {\n throw new errors.InvalidArgumentError(`Both strategy and selector arguments must be provided`);\n }\n return await this.uiautomator2.jwproxy.command('/touch/scroll', 'POST', {\n origin: toOrigin(elementId || element),\n params: {strategy, selector, maxSwipes},\n });\n};\n\nexport default commands;\n"],"mappings":"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"}
|
|
@@ -20,4 +20,4 @@ let commands = {};
|
|
|
20
20
|
Object.assign(commands, _alert.default, _find.default, _general.default, _touch.default, _actions.default, _element.default, _viewport.default, _screenshot.default, _battery.default, _gestures.default);
|
|
21
21
|
var _default = commands;
|
|
22
22
|
exports.default = _default;
|
|
23
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWxlcnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9maW5kIiwiX2dlbmVyYWwiLCJfdG91Y2giLCJfZWxlbWVudCIsIl9hY3Rpb25zIiwiX3ZpZXdwb3J0IiwiX3NjcmVlbnNob3QiLCJfYmF0dGVyeSIsIl9nZXN0dXJlcyIsImNvbW1hbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwiYWxlcnRDbWRzIiwiZmluZENtZHMiLCJnZW5lcmFsQ21kcyIsInRvdWNoQ21kcyIsImFjdGlvbnNDbWRzIiwiZWxlbWVudENtZHMiLCJ2aWV3cG9ydENtZHMiLCJzY3JlZW5zaG90Q21kcyIsImJhdHRlcnlDbWRzIiwiZ2VzdHVyZXNDbWRzIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYWxlcnRDbWRzIGZyb20gJy4vYWxlcnQnO1xuaW1wb3J0IGZpbmRDbWRzIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgZ2VuZXJhbENtZHMgZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCB0b3VjaENtZHMgZnJvbSAnLi90b3VjaCc7XG5pbXBvcnQgZWxlbWVudENtZHMgZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCBhY3Rpb25zQ21kcyBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHZpZXdwb3J0Q21kcyBmcm9tICcuL3ZpZXdwb3J0JztcbmltcG9ydCBzY3JlZW5zaG90Q21kcyBmcm9tICcuL3NjcmVlbnNob3QnO1xuaW1wb3J0IGJhdHRlcnlDbWRzIGZyb20gJy4vYmF0dGVyeSc7XG5pbXBvcnQgZ2VzdHVyZXNDbWRzIGZyb20gJy4vZ2VzdHVyZXMnO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcbk9iamVjdC5hc3NpZ24oXG4gIGNvbW1hbmRzLFxuICBhbGVydENtZHMsXG4gIGZpbmRDbWRzLFxuICBnZW5lcmFsQ21kcyxcbiAgdG91Y2hDbWRzLFxuICBhY3Rpb25zQ21kcyxcbiAgZWxlbWVudENtZHMsXG4gIHZpZXdwb3J0Q21kcyxcbiAgc2NyZWVuc2hvdENtZHMsXG4gIGJhdHRlcnlDbWRzLFxuICBnZXN0dXJlc0NtZHMsXG4gIC8vIGFkZCBvdGhlciBjb21tYW5kIHR5cGVzIGhlcmVcbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sU0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsU0FBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBSVUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqQkMsTUFBTSxDQUFDQyxNQUFNLENBQ1hGLFFBQVEsRUFDUkcsY0FBUyxFQUNUQyxhQUFRLEVBQ1JDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsZ0JBQVcsRUFDWEMsZ0JBQVcsRUFDWEMsaUJBQVksRUFDWkMsbUJBQWMsRUFDZEMsZ0JBQVcsRUFDWEMsaUJBQVksQ0FFYjtBQUFDLElBQUFDLFFBQUEsR0FFYWIsUUFBUTtBQUFBYyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["commands","Object","assign","alertCmds","findCmds","generalCmds","touchCmds","actionsCmds","elementCmds","viewportCmds","screenshotCmds","batteryCmds","gesturesCmds"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import alertCmds from './alert';\nimport findCmds from './find';\nimport generalCmds from './general';\nimport touchCmds from './touch';\nimport elementCmds from './element';\nimport actionsCmds from './actions';\nimport viewportCmds from './viewport';\nimport screenshotCmds from './screenshot';\nimport batteryCmds from './battery';\nimport gesturesCmds from './gestures';\n\nlet commands = {};\nObject.assign(\n commands,\n alertCmds,\n findCmds,\n generalCmds,\n touchCmds,\n actionsCmds,\n elementCmds,\n viewportCmds,\n screenshotCmds,\n batteryCmds,\n gesturesCmds,\n // add other command types here\n);\n\nexport default commands;\n\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["_alert","_interopRequireDefault","require","_find","_general","_touch","_element","_actions","_viewport","_screenshot","_battery","_gestures","commands","Object","assign","alertCmds","findCmds","generalCmds","touchCmds","actionsCmds","elementCmds","viewportCmds","screenshotCmds","batteryCmds","gesturesCmds","_default","exports","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import alertCmds from './alert';\nimport findCmds from './find';\nimport generalCmds from './general';\nimport touchCmds from './touch';\nimport elementCmds from './element';\nimport actionsCmds from './actions';\nimport viewportCmds from './viewport';\nimport screenshotCmds from './screenshot';\nimport batteryCmds from './battery';\nimport gesturesCmds from './gestures';\n\nlet commands = {};\nObject.assign(\n commands,\n alertCmds,\n findCmds,\n generalCmds,\n touchCmds,\n actionsCmds,\n elementCmds,\n viewportCmds,\n screenshotCmds,\n batteryCmds,\n gesturesCmds,\n // add other command types here\n);\n\nexport default commands;\n\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,SAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,WAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,QAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,SAAA,GAAAV,sBAAA,CAAAC,OAAA;AAEA,IAAIU,QAAQ,GAAG,CAAC,CAAC;AACjBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,cAAS,EACTC,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,iBAAY,EACZC,mBAAc,EACdC,gBAAW,EACXC,iBAAY,CAEb;AAAC,IAAAC,QAAA,GAEab,QAAQ;AAAAc,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -18,4 +18,4 @@ commands.getScreenshot = async function () {
|
|
|
18
18
|
};
|
|
19
19
|
var _default = commands;
|
|
20
20
|
exports.default = _default;
|
|
21
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImdldFNjcmVlbnNob3QiLCJtanBlZ1N0cmVhbSIsImRhdGEiLCJsYXN0Q2h1bmtQTkdCYXNlNjQiLCJsb2ciLCJ3YXJuIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL3NjcmVlbnNob3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY29tbWFuZHMgPSB7fTtcblxuY29tbWFuZHMuZ2V0U2NyZWVuc2hvdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5tanBlZ1N0cmVhbS5sYXN0Q2h1bmtQTkdCYXNlNjQoKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMubG9nLndhcm4oJ1RyaWVkIHRvIGdldCBzY3JlZW5zaG90IGZyb20gYWN0aXZlIE1KUEVHIHN0cmVhbSwgYnV0IHRoZXJlICcgK1xuICAgICAgJ3dhcyBubyBkYXRhIHlldC4gRmFsbGluZyBiYWNrIHRvIHJlZ3VsYXIgc2NyZWVuc2hvdCBtZXRob2RzLicpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zY3JlZW5zaG90JywgJ0dFVCcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxNQUFNQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CQSxRQUFRLENBQUNDLGFBQWEsR0FBRyxrQkFBa0I7RUFDekMsSUFBSSxJQUFJLENBQUNDLFdBQVcsRUFBRTtJQUNwQixNQUFNQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUNELFdBQVcsQ0FBQ0Usa0JBQWtCLEVBQUU7SUFDeEQsSUFBSUQsSUFBSSxFQUFFO01BQ1IsT0FBT0EsSUFBSTtJQUNiO0lBQ0EsSUFBSSxDQUFDRSxHQUFHLENBQUNDLElBQUksQ0FBQyw4REFBOEQsR0FDMUUsOERBQThELENBQUM7RUFDbkU7RUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDQyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7QUFDdEUsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FFYVYsUUFBUTtBQUFBVyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","names":["commands","getScreenshot","mjpegStream","data","lastChunkPNGBase64","log","warn","uiautomator2","jwproxy","command"],"sources":["../../../lib/commands/screenshot.js"],"sourcesContent":["const commands = {};\n\ncommands.getScreenshot = async function () {\n if (this.mjpegStream) {\n const data = await this.mjpegStream.lastChunkPNGBase64();\n if (data) {\n return data;\n }\n this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' +\n 'was no data yet. Falling back to regular screenshot methods.');\n }\n return await this.uiautomator2.jwproxy.command('/screenshot', 'GET');\n};\n\nexport default commands;\n"],"mappings":";;;;;;;AAAA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAEnBA,QAAQ,CAACC,aAAa,GAAG,kBAAkB;EACzC,IAAI,IAAI,CAACC,WAAW,EAAE;IACpB,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACD,WAAW,CAACE,kBAAkB,EAAE;IACxD,IAAID,IAAI,EAAE;MACR,OAAOA,IAAI;IACb;IACA,IAAI,CAACE,GAAG,CAACC,IAAI,CAAC,8DAA8D,GAC1E,8DAA8D,CAAC;EACnE;EACA,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;AACtE,CAAC;AAAC,
|
|
1
|
+
{"version":3,"file":"screenshot.js","names":["commands","getScreenshot","mjpegStream","data","lastChunkPNGBase64","log","warn","uiautomator2","jwproxy","command","_default","exports","default"],"sources":["../../../lib/commands/screenshot.js"],"sourcesContent":["const commands = {};\n\ncommands.getScreenshot = async function () {\n if (this.mjpegStream) {\n const data = await this.mjpegStream.lastChunkPNGBase64();\n if (data) {\n return data;\n }\n this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' +\n 'was no data yet. Falling back to regular screenshot methods.');\n }\n return await this.uiautomator2.jwproxy.command('/screenshot', 'GET');\n};\n\nexport default commands;\n"],"mappings":";;;;;;;AAAA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAEnBA,QAAQ,CAACC,aAAa,GAAG,kBAAkB;EACzC,IAAI,IAAI,CAACC,WAAW,EAAE;IACpB,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACD,WAAW,CAACE,kBAAkB,EAAE;IACxD,IAAID,IAAI,EAAE;MACR,OAAOA,IAAI;IACb;IACA,IAAI,CAACE,GAAG,CAACC,IAAI,CAAC,8DAA8D,GAC1E,8DAA8D,CAAC;EACnE;EACA,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;AACtE,CAAC;AAAC,IAAAC,QAAA,GAEaV,QAAQ;AAAAW,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -37,4 +37,4 @@ commands.performActions = async function (actions) {
|
|
|
37
37
|
Object.assign(extensions, commands);
|
|
38
38
|
var _default = extensions;
|
|
39
39
|
exports.default = _default;
|
|
40
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImV4dGVuc2lvbnMiLCJkb1BlcmZvcm1NdWx0aUFjdGlvbiIsImVsZW1lbnRJZCIsInN0YXRlcyIsIm9wdHMiLCJhY3Rpb25zIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJwZXJmb3JtQWN0aW9ucyIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZXByb2Nlc3NlZEFjdGlvbnMiLCJtYXAiLCJhY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwicGFyYW1ldGVycyIsInBvaW50ZXJUeXBlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy90b3VjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgY29tbWFuZHMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5kb1BlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQsIHN0YXRlcykge1xuICBsZXQgb3B0cztcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIG9wdHMgPSB7XG4gICAgICBlbGVtZW50SWQsXG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3RvdWNoL211bHRpL3BlcmZvcm0nLCAnUE9TVCcsIG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMgPSB7XG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy90b3VjaC9tdWx0aS9wZXJmb3JtJywgJ1BPU1QnLCBvcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGVyZm9ybUFjdGlvbnMgPSBhc3luYyBmdW5jdGlvbiAoYWN0aW9ucykge1xuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBXM0MgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShhY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgLy8gVGhpcyBpcyBtYW5kYXRvcnksIHNpbmNlIFNlbGVuaXVtIEFQSSB1c2VzIE1PVVNFIGFzIHRoZSBkZWZhdWx0IHBvaW50ZXIgdHlwZVxuICBjb25zdCBwcmVwcm9jZXNzZWRBY3Rpb25zID0gYWN0aW9uc1xuICAgIC5tYXAoKGFjdGlvbikgPT4gT2JqZWN0LmFzc2lnbih7fSwgYWN0aW9uLCBhY3Rpb24udHlwZSA9PT0gJ3BvaW50ZXInID8ge1xuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBwb2ludGVyVHlwZTogJ3RvdWNoJ1xuICAgICAgfVxuICAgIH0gOiB7fSkpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgUHJlcHJvY2Vzc2VkIGFjdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkocHJlcHJvY2Vzc2VkQWN0aW9ucywgbnVsbCwgJyAgJyl9YCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hY3Rpb25zJywgJ1BPU1QnLCB7YWN0aW9uczogcHJlcHJvY2Vzc2VkQWN0aW9uc30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcyk7XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBSUEsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRWxDRCxRQUFRLENBQUNFLG9CQUFvQixHQUFHLGdCQUFnQkMsU0FBUyxFQUFFQyxNQUFNLEVBQUU7RUFDakUsSUFBSUMsSUFBSTtFQUNSLElBQUlGLFNBQVMsRUFBRTtJQUNiRSxJQUFJLEdBQUc7TUFDTEYsU0FBUztNQUNURyxPQUFPLEVBQUVGO0lBQ1gsQ0FBQztJQUVELE9BQU8sTUFBTSxJQUFJLENBQUNHLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFSixJQUFJLENBQUM7RUFDdEYsQ0FBQyxNQUFNO0lBQ0xBLElBQUksR0FBRztNQUNMQyxPQUFPLEVBQUVGO0lBQ1gsQ0FBQztJQUNELE9BQU8sTUFBTSxJQUFJLENBQUNHLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFSixJQUFJLENBQUM7RUFDdEY7QUFDRixDQUFDO0FBRURMLFFBQVEsQ0FBQ1UsY0FBYyxHQUFHLGdCQUFnQkosT0FBTyxFQUFFO0VBQ2pELElBQUksQ0FBQ0ssR0FBRyxDQUFDQyxLQUFLLENBQUUsdUNBQXNDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1IsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUUsRUFBQyxDQUFDO0VBRTVGLE1BQU1TLG1CQUFtQixHQUFHVCxPQUFPLENBQ2hDVSxHQUFHLENBQUVDLE1BQU0sSUFBS0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVGLE1BQU0sRUFBRUEsTUFBTSxDQUFDRyxJQUFJLEtBQUssU0FBUyxHQUFHO0lBQ3JFQyxVQUFVLEVBQUU7TUFDVkMsV0FBVyxFQUFFO0lBQ2Y7RUFDRixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNWLElBQUksQ0FBQ1gsR0FBRyxDQUFDQyxLQUFLLENBQUUseUJBQXdCQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBRSxFQUFDLENBQUM7RUFDMUYsT0FBTyxNQUFNLElBQUksQ0FBQ1IsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFO0lBQUNILE9BQU8sRUFBRVM7RUFBbUIsQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFFREcsTUFBTSxDQUFDQyxNQUFNLENBQUNsQixVQUFVLEVBQUVELFFBQVEsQ0FBQztBQUFDLElBQUF1QixRQUFBLEdBQ3JCdEIsVUFBVTtBQUFBdUIsT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touch.js","names":["commands","extensions","doPerformMultiAction","elementId","states","opts","actions","uiautomator2","jwproxy","command","performActions","log","debug","JSON","stringify","preprocessedActions","map","action","Object","assign","type","parameters","pointerType"],"sources":["../../../lib/commands/touch.js"],"sourcesContent":["let commands = {}, extensions = {};\n\ncommands.doPerformMultiAction = async function (elementId, states) {\n let opts;\n if (elementId) {\n opts = {\n elementId,\n actions: states\n };\n\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n } else {\n opts = {\n actions: states\n };\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n }\n};\n\ncommands.performActions = async function (actions) {\n this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`);\n // This is mandatory, since Selenium API uses MOUSE as the default pointer type\n const preprocessedActions = actions\n .map((action) => Object.assign({}, action, action.type === 'pointer' ? {\n parameters: {\n pointerType: 'touch'\n }\n } : {}));\n this.log.debug(`Preprocessed actions: ${JSON.stringify(preprocessedActions, null, ' ')}`);\n return await this.uiautomator2.jwproxy.command('/actions', 'POST', {actions: preprocessedActions});\n};\n\nObject.assign(extensions, commands);\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAElCD,QAAQ,CAACE,oBAAoB,GAAG,gBAAgBC,SAAS,EAAEC,MAAM,EAAE;EACjE,IAAIC,IAAI;EACR,IAAIF,SAAS,EAAE;IACbE,IAAI,GAAG;MACLF,SAAS;MACTG,OAAO,EAAEF;IACX,CAAC;IAED,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF,CAAC,MAAM;IACLA,IAAI,GAAG;MACLC,OAAO,EAAEF;IACX,CAAC;IACD,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF;AACF,CAAC;AAEDL,QAAQ,CAACU,cAAc,GAAG,gBAAgBJ,OAAO,EAAE;EACjD,IAAI,CAACK,GAAG,CAACC,KAAK,CAAE,uCAAsCC,IAAI,CAACC,SAAS,CAACR,OAAO,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAE5F,MAAMS,mBAAmB,GAAGT,OAAO,CAChCU,GAAG,CAAEC,MAAM,IAAKC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEF,MAAM,EAAEA,MAAM,CAACG,IAAI,KAAK,SAAS,GAAG;IACrEC,UAAU,EAAE;MACVC,WAAW,EAAE;IACf;EACF,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACV,IAAI,CAACX,GAAG,CAACC,KAAK,CAAE,yBAAwBC,IAAI,CAACC,SAAS,CAACC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAC1F,OAAO,MAAM,IAAI,CAACR,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE;IAACH,OAAO,EAAES;EAAmB,CAAC,CAAC;AACpG,CAAC;AAEDG,MAAM,CAACC,MAAM,CAAClB,UAAU,EAAED,QAAQ,CAAC;AAAC,
|
|
1
|
+
{"version":3,"file":"touch.js","names":["commands","extensions","doPerformMultiAction","elementId","states","opts","actions","uiautomator2","jwproxy","command","performActions","log","debug","JSON","stringify","preprocessedActions","map","action","Object","assign","type","parameters","pointerType","_default","exports","default"],"sources":["../../../lib/commands/touch.js"],"sourcesContent":["let commands = {}, extensions = {};\n\ncommands.doPerformMultiAction = async function (elementId, states) {\n let opts;\n if (elementId) {\n opts = {\n elementId,\n actions: states\n };\n\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n } else {\n opts = {\n actions: states\n };\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n }\n};\n\ncommands.performActions = async function (actions) {\n this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`);\n // This is mandatory, since Selenium API uses MOUSE as the default pointer type\n const preprocessedActions = actions\n .map((action) => Object.assign({}, action, action.type === 'pointer' ? {\n parameters: {\n pointerType: 'touch'\n }\n } : {}));\n this.log.debug(`Preprocessed actions: ${JSON.stringify(preprocessedActions, null, ' ')}`);\n return await this.uiautomator2.jwproxy.command('/actions', 'POST', {actions: preprocessedActions});\n};\n\nObject.assign(extensions, commands);\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAElCD,QAAQ,CAACE,oBAAoB,GAAG,gBAAgBC,SAAS,EAAEC,MAAM,EAAE;EACjE,IAAIC,IAAI;EACR,IAAIF,SAAS,EAAE;IACbE,IAAI,GAAG;MACLF,SAAS;MACTG,OAAO,EAAEF;IACX,CAAC;IAED,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF,CAAC,MAAM;IACLA,IAAI,GAAG;MACLC,OAAO,EAAEF;IACX,CAAC;IACD,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF;AACF,CAAC;AAEDL,QAAQ,CAACU,cAAc,GAAG,gBAAgBJ,OAAO,EAAE;EACjD,IAAI,CAACK,GAAG,CAACC,KAAK,CAAE,uCAAsCC,IAAI,CAACC,SAAS,CAACR,OAAO,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAE5F,MAAMS,mBAAmB,GAAGT,OAAO,CAChCU,GAAG,CAAEC,MAAM,IAAKC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEF,MAAM,EAAEA,MAAM,CAACG,IAAI,KAAK,SAAS,GAAG;IACrEC,UAAU,EAAE;MACVC,WAAW,EAAE;IACf;EACF,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACV,IAAI,CAACX,GAAG,CAACC,KAAK,CAAE,yBAAwBC,IAAI,CAACC,SAAS,CAACC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAC1F,OAAO,MAAM,IAAI,CAACR,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE;IAACH,OAAO,EAAES;EAAmB,CAAC,CAAC;AACpG,CAAC;AAEDG,MAAM,CAACC,MAAM,CAAClB,UAAU,EAAED,QAAQ,CAAC;AAAC,IAAAuB,QAAA,GACrBtB,UAAU;AAAAuB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -36,4 +36,4 @@ commands.getViewPortRect = async function () {
|
|
|
36
36
|
Object.assign(extensions, commands);
|
|
37
37
|
var _default = extensions;
|
|
38
38
|
exports.default = _default;
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJleHBvcnRzIiwiZ2V0U3RhdHVzQmFySGVpZ2h0Iiwic3RhdHVzQmFyIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXREZXZpY2VQaXhlbFJhdGlvIiwiZ2V0Vmlld3BvcnRTY3JlZW5zaG90Iiwic2NyZWVuc2hvdCIsImdldFNjcmVlbnNob3QiLCJyZWN0IiwiZ2V0Vmlld1BvcnRSZWN0IiwiaW1hZ2VVdGlsIiwiY3JvcEJhc2U2NEltYWdlIiwid2luZG93U2l6ZSIsImdldFdpbmRvd1NpemUiLCJzdGF0dXNCYXJIZWlnaHQiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvdmlld3BvcnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1hZ2VVdGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmxldCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbi8vIG1lbW9pemVkIGluIGNvbnN0cnVjdG9yXG5jb21tYW5kcy5nZXRTdGF0dXNCYXJIZWlnaHQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHtzdGF0dXNCYXJ9ID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zeXN0ZW1fYmFyc2AsICdHRVQnLCB7fSk7XG4gIHJldHVybiBzdGF0dXNCYXI7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0RGV2aWNlUGl4ZWxSYXRpbyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvcGl4ZWxfcmF0aW8nLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Vmlld3BvcnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzY3JlZW5zaG90ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5zaG90KCk7XG4gIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICByZXR1cm4gYXdhaXQgaW1hZ2VVdGlsLmNyb3BCYXNlNjRJbWFnZShzY3JlZW5zaG90LCByZWN0KTtcbn07XG5cbmNvbW1hbmRzLmdldFZpZXdQb3J0UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgd2luZG93U2l6ZSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICBjb25zdCBzdGF0dXNCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAvLyBhbmRyb2lkIHJldHVybnMgdGhlIHVwc2NhbGVkIHdpbmRvdyBzaXplLCBzbyB0byBnZXQgdGhlIHRydWUgc2l6ZSBvZiB0aGVcbiAgLy8gcmVjdCB3ZSBoYXZlIHRvIGRvd25zY2FsZVxuICByZXR1cm4ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiBzdGF0dXNCYXJIZWlnaHQsXG4gICAgd2lkdGg6IHdpbmRvd1NpemUud2lkdGgsXG4gICAgaGVpZ2h0OiB3aW5kb3dTaXplLmhlaWdodCAtIHN0YXR1c0JhckhlaWdodFxuICB9O1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcyk7XG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUdBLElBQUlDLFVBQVUsR0FBRyxDQUFDLENBQUM7RUFBRUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFELFFBQUEsR0FBQUEsUUFBQTtBQUduQ0EsUUFBUSxDQUFDRSxrQkFBa0IsR0FBRyxrQkFBa0I7RUFDOUMsTUFBTTtJQUFDQztFQUFTLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBRSw0QkFBMkIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDcEcsT0FBT0gsU0FBUztBQUNsQixDQUFDO0FBR0RILFFBQVEsQ0FBQ08sbUJBQW1CLEdBQUcsa0JBQWtCO0VBQy9DLE9BQU8sTUFBTSxJQUFJLENBQUNILFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUFFRE4sUUFBUSxDQUFDUSxxQkFBcUIsR0FBRyxrQkFBa0I7RUFDakQsTUFBTUMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxhQUFhLEVBQUU7RUFDN0MsTUFBTUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxlQUFlLEVBQUU7RUFDekMsT0FBTyxNQUFNQyxrQkFBUyxDQUFDQyxlQUFlLENBQUNMLFVBQVUsRUFBRUUsSUFBSSxDQUFDO0FBQzFELENBQUM7QUFFRFgsUUFBUSxDQUFDWSxlQUFlLEdBQUcsa0JBQWtCO0VBQzNDLE1BQU1HLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQ0MsYUFBYSxFQUFFO0VBQzdDLE1BQU1DLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQ2Ysa0JBQWtCLEVBQUU7RUFHdkQsT0FBTztJQUNMZ0IsSUFBSSxFQUFFLENBQUM7SUFDUEMsR0FBRyxFQUFFRixlQUFlO0lBQ3BCRyxLQUFLLEVBQUVMLFVBQVUsQ0FBQ0ssS0FBSztJQUN2QkMsTUFBTSxFQUFFTixVQUFVLENBQUNNLE1BQU0sR0FBR0o7RUFDOUIsQ0FBQztBQUNILENBQUM7QUFFREssTUFBTSxDQUFDQyxNQUFNLENBQUN4QixVQUFVLEVBQUVDLFFBQVEsQ0FBQztBQUFDLElBQUF3QixRQUFBLEdBRXJCekIsVUFBVTtBQUFBRSxPQUFBLENBQUF3QixPQUFBLEdBQUFELFFBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport.js","names":["extensions","commands","getStatusBarHeight","statusBar","uiautomator2","jwproxy","command","getDevicePixelRatio","getViewportScreenshot","screenshot","getScreenshot","rect","getViewPortRect","imageUtil","cropBase64Image","windowSize","getWindowSize","statusBarHeight","left","top","width","height","Object","assign"],"sources":["../../../lib/commands/viewport.js"],"sourcesContent":["import { imageUtil } from 'appium/support';\n\n\nlet extensions = {}, commands = {};\n\n// memoized in constructor\ncommands.getStatusBarHeight = async function () {\n const {statusBar} = await this.uiautomator2.jwproxy.command(`/appium/device/system_bars`, 'GET', {});\n return statusBar;\n};\n\n// memoized in constructor\ncommands.getDevicePixelRatio = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/pixel_ratio', 'GET', {});\n};\n\ncommands.getViewportScreenshot = async function () {\n const screenshot = await this.getScreenshot();\n const rect = await this.getViewPortRect();\n return await imageUtil.cropBase64Image(screenshot, rect);\n};\n\ncommands.getViewPortRect = async function () {\n const windowSize = await this.getWindowSize();\n const statusBarHeight = await this.getStatusBarHeight();\n // android returns the upscaled window size, so to get the true size of the\n // rect we have to downscale\n return {\n left: 0,\n top: statusBarHeight,\n width: windowSize.width,\n height: windowSize.height - statusBarHeight\n };\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA;AAGA,
|
|
1
|
+
{"version":3,"file":"viewport.js","names":["_support","require","extensions","commands","exports","getStatusBarHeight","statusBar","uiautomator2","jwproxy","command","getDevicePixelRatio","getViewportScreenshot","screenshot","getScreenshot","rect","getViewPortRect","imageUtil","cropBase64Image","windowSize","getWindowSize","statusBarHeight","left","top","width","height","Object","assign","_default","default"],"sources":["../../../lib/commands/viewport.js"],"sourcesContent":["import { imageUtil } from 'appium/support';\n\n\nlet extensions = {}, commands = {};\n\n// memoized in constructor\ncommands.getStatusBarHeight = async function () {\n const {statusBar} = await this.uiautomator2.jwproxy.command(`/appium/device/system_bars`, 'GET', {});\n return statusBar;\n};\n\n// memoized in constructor\ncommands.getDevicePixelRatio = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/pixel_ratio', 'GET', {});\n};\n\ncommands.getViewportScreenshot = async function () {\n const screenshot = await this.getScreenshot();\n const rect = await this.getViewPortRect();\n return await imageUtil.cropBase64Image(screenshot, rect);\n};\n\ncommands.getViewPortRect = async function () {\n const windowSize = await this.getWindowSize();\n const statusBarHeight = await this.getStatusBarHeight();\n // android returns the upscaled window size, so to get the true size of the\n // rect we have to downscale\n return {\n left: 0,\n top: statusBarHeight,\n width: windowSize.width,\n height: windowSize.height - statusBarHeight\n };\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGA,IAAIC,UAAU,GAAG,CAAC,CAAC;EAAEC,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AAGnCA,QAAQ,CAACE,kBAAkB,GAAG,kBAAkB;EAC9C,MAAM;IAACC;EAAS,CAAC,GAAG,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,4BAA2B,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EACpG,OAAOH,SAAS;AAClB,CAAC;AAGDH,QAAQ,CAACO,mBAAmB,GAAG,kBAAkB;EAC/C,OAAO,MAAM,IAAI,CAACH,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,4BAA4B,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAEDN,QAAQ,CAACQ,qBAAqB,GAAG,kBAAkB;EACjD,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACC,aAAa,EAAE;EAC7C,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACC,eAAe,EAAE;EACzC,OAAO,MAAMC,kBAAS,CAACC,eAAe,CAACL,UAAU,EAAEE,IAAI,CAAC;AAC1D,CAAC;AAEDX,QAAQ,CAACY,eAAe,GAAG,kBAAkB;EAC3C,MAAMG,UAAU,GAAG,MAAM,IAAI,CAACC,aAAa,EAAE;EAC7C,MAAMC,eAAe,GAAG,MAAM,IAAI,CAACf,kBAAkB,EAAE;EAGvD,OAAO;IACLgB,IAAI,EAAE,CAAC;IACPC,GAAG,EAAEF,eAAe;IACpBG,KAAK,EAAEL,UAAU,CAACK,KAAK;IACvBC,MAAM,EAAEN,UAAU,CAACM,MAAM,GAAGJ;EAC9B,CAAC;AACH,CAAC;AAEDK,MAAM,CAACC,MAAM,CAACxB,UAAU,EAAEC,QAAQ,CAAC;AAAC,IAAAwB,QAAA,GAErBzB,UAAU;AAAAE,OAAA,CAAAwB,OAAA,GAAAD,QAAA"}
|
|
@@ -178,4 +178,4 @@ class CssConverter {
|
|
|
178
178
|
}
|
|
179
179
|
var _default = CssConverter;
|
|
180
180
|
exports.default = _default;
|
|
181
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZXIiLCJDc3NTZWxlY3RvclBhcnNlciIsInJlZ2lzdGVyU2VsZWN0b3JQc2V1ZG9zIiwicmVnaXN0ZXJOZXN0aW5nT3BlcmF0b3JzIiwicmVnaXN0ZXJBdHRyRXF1YWxpdHlNb2RzIiwiZW5hYmxlU3Vic3RpdHV0ZXMiLCJSRVNPVVJDRV9JRCIsIklEX0xPQ0FUT1JfUEFUVEVSTiIsIkJPT0xFQU5fQVRUUlMiLCJOVU1FUklDX0FUVFJTIiwiU1RSX0FUVFJTIiwiQUxMX0FUVFJTIiwiQVRUUklCVVRFX0FMSUFTRVMiLCJ0b1NuYWtlQ2FzZSIsInN0ciIsInRva2VucyIsInNwbGl0IiwibWFwIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwib3V0Iiwiam9pbiIsImFzc2VydEdldEJvb2wiLCJjc3MiLCJ2YWwiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJuYW1lIiwiYXNzZXJ0R2V0QXR0ck5hbWUiLCJhdHRyTmFtZSIsIm9mZmljaWFsQXR0ciIsImFsaWFzQXR0cnMiLCJnZXRXb3JkTWF0Y2hlclJlZ2V4Iiwid29yZCIsImVzY2FwZVJlZ0V4cCIsIkNzc0NvbnZlcnRlciIsImNvbnN0cnVjdG9yIiwic2VsZWN0b3IiLCJwa2ciLCJmb3JtYXRJZExvY2F0b3IiLCJsb2NhdG9yIiwidGVzdCIsInBhcnNlQXR0ciIsImNzc0F0dHIiLCJ2YWx1ZVR5cGUiLCJtZXRob2ROYW1lIiwib3BlcmF0b3IiLCJwYXJzZVBzZXVkbyIsImNzc1BzZXVkbyIsInBzZXVkb05hbWUiLCJwYXJzZUNzc1J1bGUiLCJjc3NSdWxlIiwibmVzdGluZ09wZXJhdG9yIiwidWlBdXRvbWF0b3JTZWxlY3RvciIsInRhZ05hbWUiLCJhbmRyb2lkQ2xhc3MiLCJjbGFzc05hbWVzIiwiY3NzQ2xhc3NOYW1lcyIsInB1c2giLCJpZCIsImF0dHJzIiwiYXR0ciIsInBzZXVkb3MiLCJwc2V1ZG8iLCJydWxlIiwicGFyc2VDc3NPYmplY3QiLCJ0eXBlIiwic2VsZWN0b3JzIiwidG9VaUF1dG9tYXRvclNlbGVjdG9yIiwiY3NzT2JqIiwicGFyc2UiLCJlIiwiZXJyb3JzIiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi9saWIvY3NzLWNvbnZlcnRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDc3NTZWxlY3RvclBhcnNlciB9IGZyb20gJ2Nzcy1zZWxlY3Rvci1wYXJzZXInO1xuaW1wb3J0IHsgZXNjYXBlUmVnRXhwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBwYXJzZXIgPSBuZXcgQ3NzU2VsZWN0b3JQYXJzZXIoKTtcbnBhcnNlci5yZWdpc3RlclNlbGVjdG9yUHNldWRvcygnaGFzJyk7XG5wYXJzZXIucmVnaXN0ZXJOZXN0aW5nT3BlcmF0b3JzKCc+JywgJysnLCAnficpO1xucGFyc2VyLnJlZ2lzdGVyQXR0ckVxdWFsaXR5TW9kcygnXicsICckJywgJyonLCAnficpO1xucGFyc2VyLmVuYWJsZVN1YnN0aXR1dGVzKCk7XG5cbmNvbnN0IFJFU09VUkNFX0lEID0gJ3Jlc291cmNlLWlkJztcbmNvbnN0IElEX0xPQ0FUT1JfUEFUVEVSTiA9IC9eW2EtekEtWl9dW2EtekEtWjAtOS5fXSo6aWRcXC9bXFxTXSskLztcblxuY29uc3QgQk9PTEVBTl9BVFRSUyA9IFtcbiAgJ2NoZWNrYWJsZScsICdjaGVja2VkJywgJ2NsaWNrYWJsZScsICdlbmFibGVkJywgJ2ZvY3VzYWJsZScsXG4gICdmb2N1c2VkJywgJ2xvbmctY2xpY2thYmxlJywgJ3Njcm9sbGFibGUnLCAnc2VsZWN0ZWQnLFxuXTtcblxuY29uc3QgTlVNRVJJQ19BVFRSUyA9IFtcbiAgJ2luZGV4JywgJ2luc3RhbmNlJyxcbl07XG5cbmNvbnN0IFNUUl9BVFRSUyA9IFtcbiAgJ2Rlc2NyaXB0aW9uJywgUkVTT1VSQ0VfSUQsICd0ZXh0JywgJ2NsYXNzLW5hbWUnLCAncGFja2FnZS1uYW1lJ1xuXTtcblxuY29uc3QgQUxMX0FUVFJTID0gW1xuICAuLi5CT09MRUFOX0FUVFJTLFxuICAuLi5OVU1FUklDX0FUVFJTLFxuICAuLi5TVFJfQVRUUlMsXG5dO1xuXG5jb25zdCBBVFRSSUJVVEVfQUxJQVNFUyA9IFtcbiAgW1JFU09VUkNFX0lELCBbJ2lkJ11dLFxuICBbJ2Rlc2NyaXB0aW9uJywgW1xuICAgICdjb250ZW50LWRlc2NyaXB0aW9uJywgJ2NvbnRlbnQtZGVzYycsXG4gICAgJ2Rlc2MnLCAnYWNjZXNzaWJpbGl0eS1pZCcsXG4gIF1dLFxuICBbJ2luZGV4JywgWydudGgtY2hpbGQnXV0sXG5dO1xuXG4vKipcbiAqIENvbnZlcnQgaHlwaGVuIHNlcGFyYXRlZCB3b3JkIHRvIHNuYWtlIGNhc2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaHlwaGVuIHNlcGFyYXRlZCB3b3JkIHRyYW5zbGF0ZWQgdG8gc25ha2UgY2FzZVxuICovXG5mdW5jdGlvbiB0b1NuYWtlQ2FzZSAoc3RyKSB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHRva2VucyA9IHN0ci5zcGxpdCgnLScpLm1hcCgoc3RyKSA9PiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IG91dCA9IHRva2Vucy5qb2luKCcnKTtcbiAgcmV0dXJuIG91dC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIG91dC5zbGljZSgxKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDc3NOYW1lVmFsdWVPYmplY3RcbiAqIEBwcm9wZXJ0eSB7P25hbWV9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIENTUyBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBDU1Mgb2JqZWN0XG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGJvb2xlYW4gZnJvbSBhIENTUyBvYmplY3QuIElmIGVtcHR5LCByZXR1cm4gdHJ1ZS4gSWYgbm90IHRydWUvZmFsc2UvZW1wdHksIHRocm93IGV4Y2VwdGlvblxuICpcbiAqIEBwYXJhbSB7Q3NzTmFtZVZhbHVlT2JqZWN0fSBjc3MgQSBDU1Mgb2JqZWN0IHRoYXQgaGFzICduYW1lJyBhbmQgJ3ZhbHVlJ1xuICogQHJldHVybnMge3N0cmluZ30gRWl0aGVyICd0cnVlJyBvciAnZmFsc2UnLiBJZiB2YWx1ZSBpcyBlbXB0eSwgcmV0dXJuICd0cnVlJ1xuICovXG5mdW5jdGlvbiBhc3NlcnRHZXRCb29sIChjc3MpIHtcbiAgY29uc3QgdmFsID0gY3NzLnZhbHVlPy50b0xvd2VyQ2FzZSgpIHx8ICd0cnVlJzsgLy8gYW4gb21pdHRlZCBib29sZWFuIGF0dHJpYnV0ZSBtZWFucyAndHJ1ZScgKGUuZy46IGlucHV0W2NoZWNrZWRdIG1lYW5zIGNoZWNrZWQgaXMgdHJ1ZSlcbiAgaWYgKFsndHJ1ZScsICdmYWxzZSddLmluY2x1ZGVzKHZhbCkpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJyR7Y3NzLm5hbWV9JyBtdXN0IGJlIHRydWUsIGZhbHNlIG9yIGVtcHR5LiBGb3VuZCAnJHtjc3MudmFsdWV9J2ApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY2Fub25pY2FsIGZvcm0gb2YgYSBDU1MgYXR0cmlidXRlIG5hbWVcbiAqXG4gKiBDb252ZXJ0cyB0byBsb3dlcmNhc2UgYW5kIGlmIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIGFuIGFsaWFzIGZvciBzb21ldGhpbmcgZWxzZSwgcmV0dXJuXG4gKiB3aGF0IGl0IGlzIGFuIGFsaWFzIGZvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjc3MgQ1NTIG9iamVjdFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNhbm9uaWNhbCBhdHRyaWJ1dGUgbmFtZVxuICovXG5mdW5jdGlvbiBhc3NlcnRHZXRBdHRyTmFtZSAoY3NzKSB7XG4gIGNvbnN0IGF0dHJOYW1lID0gY3NzLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAvLyBDaGVjayBpZiBpdCdzIHN1cHBvcnRlZCBhbmQgaWYgaXQgaXMsIHJldHVybiBpdFxuICBpZiAoQUxMX0FUVFJTLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgIHJldHVybiBhdHRyTmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLy8gSWYgYXR0ck5hbWUgaXMgYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBlbHNlLCByZXR1cm4gdGhhdFxuICBmb3IgKGNvbnN0IFtvZmZpY2lhbEF0dHIsIGFsaWFzQXR0cnNdIG9mIEFUVFJJQlVURV9BTElBU0VTKSB7XG4gICAgaWYgKGFsaWFzQXR0cnMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gb2ZmaWNpYWxBdHRyO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYCcke2F0dHJOYW1lfScgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlLiBgICtcbiAgICBgU3VwcG9ydGVkIGF0dHJpYnV0ZXMgYXJlICcke0FMTF9BVFRSUy5qb2luKCcsICcpfSdgKTtcbn1cblxuLyoqXG4gKiBHZXQgYSByZWdleCB0aGF0IG1hdGNoZXMgYSB3aG9sZSB3b3JkLiBGb3IgdGhlIH49IENTUyBhdHRyaWJ1dGUgc2VsZWN0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgcmVnZXggXCJ3b3JkXCIgbWF0Y2hlclxuICovXG5mdW5jdGlvbiBnZXRXb3JkTWF0Y2hlclJlZ2V4ICh3b3JkKSB7XG4gIHJldHVybiBgXFxcXGIoXFxcXHcqJHtlc2NhcGVSZWdFeHAod29yZCl9XFxcXHcqKVxcXFxiYDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDc3NBdHRyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlVHlwZSBUeXBlIG9mIGF0dHJpYnV0ZSAobXVzdCBiZSBzdHJpbmcgb3IgZW1wdHkpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlIFZhbHVlIG9mIHRoZSBhdHRyaWJ1dGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIGJldHdlZW4gdmFsdWUgYW5kIHZhbHVlIHR5cGUgKD0sICo9LCAsIF49LCAkPSlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc1J1bGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbmVzdGluZ09wZXJhdG9yIFRoZSBuZXN0aW5nIG9wZXJhdG9yIChha2E6IGNvbWJpbmF0b3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19TZWxlY3RvcnMpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRhZ05hbWUgVGhlIHRhZyBuYW1lIChha2E6IHR5cGUgc2VsZWN0b3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL1R5cGVfc2VsZWN0b3JzKVxuICogQHByb3BlcnR5IHs/c3RyaW5nW119IGNsYXNzTmFtZXMgQW4gYXJyYXkgb2YgQ1NTIGNsYXNzIG5hbWVzXG4gKiBAcHJvcGVydHkgez9Dc3NBdHRyW119IGF0dHJzIEFuIGFycmF5IG9mIENTUyBhdHRyaWJ1dGVzXG4gKiBAcHJvcGVydHkgez9Dc3NQc2V1ZG9bXX0gYXR0cnMgQW4gYXJyYXkgb2YgQ1NTIHBzZXVkb3NcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWQgQ1NTIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P0Nzc1J1bGV9IHJ1bGUgQSBkZXNjZW5kYW50IG9mIHRoaXMgQ1NTIHJ1bGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc09iamVjdFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB0eXBlIFR5cGUgb2YgQ1NTIG9iamVjdC4gJ3J1bGUnLCAncnVsZXNldCcgb3IgJ3NlbGVjdG9ycydcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc1BzZXVkb1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZVR5cGUgVGhlIHR5cGUgb2YgQ1NTIHBzZXVkbyBzZWxlY3RvciAoaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvY3NzLXNlbGVjdG9yLXBhcnNlciBmb3IgcmVmZXJlbmNlKVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwc2V1ZG8gc2VsZWN0b3JcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwc2V1ZG8gc2VsZWN0b3JcbiAqL1xuXG5jbGFzcyBDc3NDb252ZXJ0ZXIge1xuXG4gIGNvbnN0cnVjdG9yIChzZWxlY3RvciwgcGtnKSB7XG4gICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgIHRoaXMucGtnID0gcGtnO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBgPHBrZ05hbWU+OmlkL2AgcHJlZml4IHRvIGJlZ2lubmluZyBvZiBzdHJpbmcgaWYgaXQncyBub3QgdGhlcmUgYWxyZWFkeVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRvciBUaGUgaW5pdGlhbCBsb2NhdG9yXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyB3aXRoIGA8cGtnTmFtZT46aWQvYCBwcmVwZW5kZWQgKGlmIGl0IHdhc24ndCBhbHJlYWR5KVxuICAgKi9cbiAgZm9ybWF0SWRMb2NhdG9yIChsb2NhdG9yKSB7XG4gICAgcmV0dXJuIElEX0xPQ0FUT1JfUEFUVEVSTi50ZXN0KGxvY2F0b3IpXG4gICAgICA/IGxvY2F0b3JcbiAgICAgIDogYCR7dGhpcy5wa2cgfHwgJ2FuZHJvaWQnfTppZC8ke2xvY2F0b3J9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgQ1NTIGF0dHJpYnV0ZSBpbnRvIGEgVWlTZWxlY3RvciBtZXRob2QgY2FsbFxuICAgKlxuICAgKiBAcGFyYW0ge0Nzc0F0dHJ9IGNzc0F0dHIgQ1NTIGF0dHJpYnV0ZSBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gQ1NTIGF0dHJpYnV0ZSBwYXJzZWQgYXMgVWlTZWxlY3RvclxuICAgKi9cbiAgcGFyc2VBdHRyIChjc3NBdHRyKSB7XG4gICAgaWYgKGNzc0F0dHIudmFsdWVUeXBlICYmIGNzc0F0dHIudmFsdWVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3NBdHRyLm5hbWV9PSR7Y3NzQXR0ci52YWx1ZX0nIGlzIGFuIGludmFsaWQgYXR0cmlidXRlLiBgICtcbiAgICAgICAgYE9ubHkgJ3N0cmluZycgYW5kIGVtcHR5IGF0dHJpYnV0ZSB0eXBlcyBhcmUgc3VwcG9ydGVkLiBGb3VuZCAnJHtjc3NBdHRyLnZhbHVlVHlwZX0nYCk7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJOYW1lID0gYXNzZXJ0R2V0QXR0ck5hbWUoY3NzQXR0cik7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHRvU25ha2VDYXNlKGF0dHJOYW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgaXQncyBhIHN1cHBvcnRlZCBhdHRyaWJ1dGVcbiAgICBpZiAoIVNUUl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkgJiYgIUJPT0xFQU5fQVRUUlMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2F0dHJOYW1lfScgaXMgbm90IHN1cHBvcnRlZC4gU3VwcG9ydGVkIGF0dHJpYnV0ZXMgYXJlIGAgK1xuICAgICAgICBgJyR7Wy4uLlNUUl9BVFRSUywgLi4uQk9PTEVBTl9BVFRSU10uam9pbignLCAnKX0nYCk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgYm9vbGVhbiwgaWYgaXQncyBhIGJvb2xlYW4gYXR0cmlidXRlXG4gICAgaWYgKEJPT0xFQU5fQVRUUlMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9KCR7YXNzZXJ0R2V0Qm9vbChjc3NBdHRyKX0pYDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UgcGFyc2UgYXMgc3RyaW5nXG4gICAgbGV0IHZhbHVlID0gY3NzQXR0ci52YWx1ZSB8fCAnJztcbiAgICBpZiAoYXR0ck5hbWUgPT09IFJFU09VUkNFX0lEKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0SWRMb2NhdG9yKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCJcIilgO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY3NzQXR0ci5vcGVyYXRvcikge1xuICAgICAgY2FzZSAnPSc6XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX0oXCIke3ZhbHVlfVwiKWA7XG4gICAgICBjYXNlICcqPSc6XG4gICAgICAgIGlmIChbJ2Rlc2NyaXB0aW9uJywgJ3RleHQnXS5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9Q29udGFpbnMoXCIke3ZhbHVlfVwiKWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCIke2VzY2FwZVJlZ0V4cCh2YWx1ZSl9XCIpYDtcbiAgICAgIGNhc2UgJ149JzpcbiAgICAgICAgaWYgKFsnZGVzY3JpcHRpb24nLCAndGV4dCddLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1TdGFydHNXaXRoKFwiJHt2YWx1ZX1cIilgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1NYXRjaGVzKFwiXiR7ZXNjYXBlUmVnRXhwKHZhbHVlKX1cIilgO1xuICAgICAgY2FzZSAnJD0nOlxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIiR7ZXNjYXBlUmVnRXhwKHZhbHVlKX0kXCIpYDtcbiAgICAgIGNhc2UgJ349JzpcbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCIke2dldFdvcmRNYXRjaGVyUmVnZXgodmFsdWUpfVwiKWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBVbnJlYWNoYWJsZSwgYnV0IGFkZGluZyBlcnJvciBpbiBjYXNlIGEgbmV3IENTUyBhdHRyaWJ1dGUgaXMgYWRkZWQuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQ1NTIGF0dHJpYnV0ZSBvcGVyYXRvciAnJHtjc3NBdHRyLm9wZXJhdG9yfScuIGAgK1xuICAgICAgICAgIGAgJz0nLCAnKj0nLCAnXj0nLCAnJD0nIGFuZCAnfj0nIGFyZSBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1MgcHNldWRvIGNsYXNzIHRvIGEgVWlTZWxlY3RvclxuICAgKlxuICAgKiBAcGFyYW0ge0Nzc1BzZXVkb30gY3NzUHNldWRvIENTUyBQc2V1ZG8gY2xhc3NcbiAgICogQHJldHVybnMge3N0cmluZ30gUHNldWRvIHNlbGVjdG9yIHBhcnNlZCBhcyBVaVNlbGVjdG9yXG4gICAqL1xuICBwYXJzZVBzZXVkbyAoY3NzUHNldWRvKSB7XG4gICAgaWYgKGNzc1BzZXVkby52YWx1ZVR5cGUgJiYgY3NzUHNldWRvLnZhbHVlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7Y3NzUHNldWRvLm5hbWV9PSR7Y3NzUHNldWRvLnZhbHVlfScuIGAgK1xuICAgICAgICBgVW5zdXBwb3J0ZWQgY3NzIHBzZXVkbyBjbGFzcyB2YWx1ZSB0eXBlOiAnJHtjc3NQc2V1ZG8udmFsdWVUeXBlfScuIE9ubHkgJ3N0cmluZycgdHlwZSBvciBlbXB0eSBpcyBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHNldWRvTmFtZSA9IGFzc2VydEdldEF0dHJOYW1lKGNzc1BzZXVkbyk7XG5cbiAgICBpZiAoQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhwc2V1ZG9OYW1lKSkge1xuICAgICAgcmV0dXJuIGAuJHt0b1NuYWtlQ2FzZShwc2V1ZG9OYW1lKX0oJHthc3NlcnRHZXRCb29sKGNzc1BzZXVkbyl9KWA7XG4gICAgfVxuXG4gICAgaWYgKE5VTUVSSUNfQVRUUlMuaW5jbHVkZXMocHNldWRvTmFtZSkpIHtcbiAgICAgIHJldHVybiBgLiR7cHNldWRvTmFtZX0oJHtjc3NQc2V1ZG8udmFsdWV9KWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1MgcnVsZSB0byBhIFVpU2VsZWN0b3JcbiAgICogQHBhcmFtIHtDc3NSdWxlfSBjc3NSdWxlIENTUyBydWxlIGRlZmluaXRpb25cbiAgICovXG4gIHBhcnNlQ3NzUnVsZSAoY3NzUnVsZSkge1xuICAgIGNvbnN0IHsgbmVzdGluZ09wZXJhdG9yIH0gPSBjc3NSdWxlO1xuICAgIGlmIChuZXN0aW5nT3BlcmF0b3IgJiYgbmVzdGluZ09wZXJhdG9yICE9PSAnICcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmVzdGluZ09wZXJhdG9yfScgaXMgbm90IGEgc3VwcG9ydGVkIGNvbWJpbmF0b3IuIGAgK1xuICAgICAgICBgT25seSBjaGlsZCBjb21iaW5hdG9yICg+KSBhbmQgZGVzY2VuZGFudCBjb21iaW5hdG9yIGFyZSBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgbGV0IHVpQXV0b21hdG9yU2VsZWN0b3IgPSAnbmV3IFVpU2VsZWN0b3IoKSc7XG4gICAgaWYgKGNzc1J1bGUudGFnTmFtZSAmJiBjc3NSdWxlLnRhZ05hbWUgIT09ICcqJykge1xuICAgICAgbGV0IGFuZHJvaWRDbGFzcyA9IFtjc3NSdWxlLnRhZ05hbWVdO1xuICAgICAgaWYgKGNzc1J1bGUuY2xhc3NOYW1lcykge1xuICAgICAgICBmb3IgKGNvbnN0IGNzc0NsYXNzTmFtZXMgb2YgY3NzUnVsZS5jbGFzc05hbWVzKSB7XG4gICAgICAgICAgYW5kcm9pZENsYXNzLnB1c2goY3NzQ2xhc3NOYW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLmNsYXNzTmFtZShcIiR7YW5kcm9pZENsYXNzLmpvaW4oJy4nKX1cIilgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLmNsYXNzTmFtZU1hdGNoZXMoXCIke2Nzc1J1bGUudGFnTmFtZX1cIilgO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3NzUnVsZS5jbGFzc05hbWVzKSB7XG4gICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lTWF0Y2hlcyhcIiR7Y3NzUnVsZS5jbGFzc05hbWVzLmpvaW4oJ1xcXFwuJyl9XCIpYDtcbiAgICB9XG4gICAgaWYgKGNzc1J1bGUuaWQpIHtcbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5yZXNvdXJjZUlkKFwiJHt0aGlzLmZvcm1hdElkTG9jYXRvcihjc3NSdWxlLmlkKX1cIilgO1xuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5hdHRycykge1xuICAgICAgZm9yIChjb25zdCBhdHRyIG9mIGNzc1J1bGUuYXR0cnMpIHtcbiAgICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSB0aGlzLnBhcnNlQXR0cihhdHRyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNzc1J1bGUucHNldWRvcykge1xuICAgICAgZm9yIChjb25zdCBwc2V1ZG8gb2YgY3NzUnVsZS5wc2V1ZG9zKSB7XG4gICAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gdGhpcy5wYXJzZVBzZXVkbyhwc2V1ZG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5ydWxlKSB7XG4gICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2hpbGRTZWxlY3Rvcigke3RoaXMucGFyc2VDc3NSdWxlKGNzc1J1bGUucnVsZSl9KWA7XG4gICAgfVxuICAgIHJldHVybiB1aUF1dG9tYXRvclNlbGVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgQ1NTIG9iamVjdCB0byBVaUF1dG9tYXRvcjIgc2VsZWN0b3JcbiAgICogQHBhcmFtIHtDc3NPYmplY3R9IGNzcyBDU1Mgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBDU1Mgb2JqZWN0IHBhcnNlZCBhcyBhIFVpU2VsZWN0b3JcbiAgICovXG4gIHBhcnNlQ3NzT2JqZWN0IChjc3MpIHtcbiAgICBzd2l0Y2ggKGNzcy50eXBlKSB7XG4gICAgICBjYXNlICdydWxlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VDc3NSdWxlKGNzcyk7XG4gICAgICBjYXNlICdydWxlU2V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VDc3NPYmplY3QoY3NzLnJ1bGUpO1xuICAgICAgY2FzZSAnc2VsZWN0b3JzJzpcbiAgICAgICAgcmV0dXJuIGNzcy5zZWxlY3RvcnMubWFwKChzZWxlY3RvcikgPT4gdGhpcy5wYXJzZUNzc09iamVjdChzZWxlY3RvcikpLmpvaW4oJzsgJyk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFRoaXMgaXMgbmV2ZXIgcmVhY2hhYmxlLCBidXQgaWYgaXQgZXZlciBpcyBkbyB0aGlzLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVpQXV0b21hdG9yIGRvZXMgbm90IHN1cHBvcnQgJyR7Y3NzLnR5cGV9JyBjc3MuIE9ubHkgc3VwcG9ydHMgJ3J1bGUnLCAncnVsZVNldCcsICdzZWxlY3RvcnMnIGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgQ1NTIHNlbGVjdG9yIHRvIGEgVWlBdXRvbWF0b3IyIHNlbGVjdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBDU1Mgc2VsZWN0b3IgY29udmVydGVkIHRvIGEgVWlTZWxlY3RvclxuICAgKi9cbiAgdG9VaUF1dG9tYXRvclNlbGVjdG9yICgpIHtcbiAgICBsZXQgY3NzT2JqO1xuICAgIHRyeSB7XG4gICAgICBjc3NPYmogPSBwYXJzZXIucGFyc2UodGhpcy5zZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkU2VsZWN0b3JFcnJvcihgSW52YWxpZCBDU1Mgc2VsZWN0b3IgJyR7dGhpcy5zZWxlY3Rvcn0nLiBSZWFzb246ICcke2V9J2ApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VDc3NPYmplY3QoY3NzT2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKGBVbnN1cHBvcnRlZCBDU1Mgc2VsZWN0b3IgJyR7dGhpcy5zZWxlY3Rvcn0nLiBSZWFzb246ICcke2V9J2ApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDc3NDb252ZXJ0ZXI7Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUEsTUFBTUEsTUFBTSxHQUFHLElBQUlDLG9DQUFpQixFQUFFO0FBQ3RDRCxNQUFNLENBQUNFLHVCQUF1QixDQUFDLEtBQUssQ0FBQztBQUNyQ0YsTUFBTSxDQUFDRyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUM5Q0gsTUFBTSxDQUFDSSx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDbkRKLE1BQU0sQ0FBQ0ssaUJBQWlCLEVBQUU7QUFFMUIsTUFBTUMsV0FBVyxHQUFHLGFBQWE7QUFDakMsTUFBTUMsa0JBQWtCLEdBQUcscUNBQXFDO0FBRWhFLE1BQU1DLGFBQWEsR0FBRyxDQUNwQixXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUMzRCxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FDdEQ7QUFFRCxNQUFNQyxhQUFhLEdBQUcsQ0FDcEIsT0FBTyxFQUFFLFVBQVUsQ0FDcEI7QUFFRCxNQUFNQyxTQUFTLEdBQUcsQ0FDaEIsYUFBYSxFQUFFSixXQUFXLEVB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
|
|
181
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3NzU2VsZWN0b3JQYXJzZXIiLCJyZXF1aXJlIiwiX2xvZGFzaCIsIl9kcml2ZXIiLCJwYXJzZXIiLCJDc3NTZWxlY3RvclBhcnNlciIsInJlZ2lzdGVyU2VsZWN0b3JQc2V1ZG9zIiwicmVnaXN0ZXJOZXN0aW5nT3BlcmF0b3JzIiwicmVnaXN0ZXJBdHRyRXF1YWxpdHlNb2RzIiwiZW5hYmxlU3Vic3RpdHV0ZXMiLCJSRVNPVVJDRV9JRCIsIklEX0xPQ0FUT1JfUEFUVEVSTiIsIkJPT0xFQU5fQVRUUlMiLCJOVU1FUklDX0FUVFJTIiwiU1RSX0FUVFJTIiwiQUxMX0FUVFJTIiwiQVRUUklCVVRFX0FMSUFTRVMiLCJ0b1NuYWtlQ2FzZSIsInN0ciIsInRva2VucyIsInNwbGl0IiwibWFwIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwib3V0Iiwiam9pbiIsImFzc2VydEdldEJvb2wiLCJjc3MiLCJfY3NzJHZhbHVlIiwidmFsIiwidmFsdWUiLCJpbmNsdWRlcyIsIkVycm9yIiwibmFtZSIsImFzc2VydEdldEF0dHJOYW1lIiwiYXR0ck5hbWUiLCJvZmZpY2lhbEF0dHIiLCJhbGlhc0F0dHJzIiwiZ2V0V29yZE1hdGNoZXJSZWdleCIsIndvcmQiLCJlc2NhcGVSZWdFeHAiLCJDc3NDb252ZXJ0ZXIiLCJjb25zdHJ1Y3RvciIsInNlbGVjdG9yIiwicGtnIiwiZm9ybWF0SWRMb2NhdG9yIiwibG9jYXRvciIsInRlc3QiLCJwYXJzZUF0dHIiLCJjc3NBdHRyIiwidmFsdWVUeXBlIiwibWV0aG9kTmFtZSIsIm9wZXJhdG9yIiwicGFyc2VQc2V1ZG8iLCJjc3NQc2V1ZG8iLCJwc2V1ZG9OYW1lIiwicGFyc2VDc3NSdWxlIiwiY3NzUnVsZSIsIm5lc3RpbmdPcGVyYXRvciIsInVpQXV0b21hdG9yU2VsZWN0b3IiLCJ0YWdOYW1lIiwiYW5kcm9pZENsYXNzIiwiY2xhc3NOYW1lcyIsImNzc0NsYXNzTmFtZXMiLCJwdXNoIiwiaWQiLCJhdHRycyIsImF0dHIiLCJwc2V1ZG9zIiwicHNldWRvIiwicnVsZSIsInBhcnNlQ3NzT2JqZWN0IiwidHlwZSIsInNlbGVjdG9ycyIsInRvVWlBdXRvbWF0b3JTZWxlY3RvciIsImNzc09iaiIsInBhcnNlIiwiZSIsImVycm9ycyIsIkludmFsaWRTZWxlY3RvckVycm9yIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jc3MtY29udmVydGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENzc1NlbGVjdG9yUGFyc2VyIH0gZnJvbSAnY3NzLXNlbGVjdG9yLXBhcnNlcic7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IHBhcnNlciA9IG5ldyBDc3NTZWxlY3RvclBhcnNlcigpO1xucGFyc2VyLnJlZ2lzdGVyU2VsZWN0b3JQc2V1ZG9zKCdoYXMnKTtcbnBhcnNlci5yZWdpc3Rlck5lc3RpbmdPcGVyYXRvcnMoJz4nLCAnKycsICd+Jyk7XG5wYXJzZXIucmVnaXN0ZXJBdHRyRXF1YWxpdHlNb2RzKCdeJywgJyQnLCAnKicsICd+Jyk7XG5wYXJzZXIuZW5hYmxlU3Vic3RpdHV0ZXMoKTtcblxuY29uc3QgUkVTT1VSQ0VfSUQgPSAncmVzb3VyY2UtaWQnO1xuY29uc3QgSURfTE9DQVRPUl9QQVRURVJOID0gL15bYS16QS1aX11bYS16QS1aMC05Ll9dKjppZFxcL1tcXFNdKyQvO1xuXG5jb25zdCBCT09MRUFOX0FUVFJTID0gW1xuICAnY2hlY2thYmxlJywgJ2NoZWNrZWQnLCAnY2xpY2thYmxlJywgJ2VuYWJsZWQnLCAnZm9jdXNhYmxlJyxcbiAgJ2ZvY3VzZWQnLCAnbG9uZy1jbGlja2FibGUnLCAnc2Nyb2xsYWJsZScsICdzZWxlY3RlZCcsXG5dO1xuXG5jb25zdCBOVU1FUklDX0FUVFJTID0gW1xuICAnaW5kZXgnLCAnaW5zdGFuY2UnLFxuXTtcblxuY29uc3QgU1RSX0FUVFJTID0gW1xuICAnZGVzY3JpcHRpb24nLCBSRVNPVVJDRV9JRCwgJ3RleHQnLCAnY2xhc3MtbmFtZScsICdwYWNrYWdlLW5hbWUnXG5dO1xuXG5jb25zdCBBTExfQVRUUlMgPSBbXG4gIC4uLkJPT0xFQU5fQVRUUlMsXG4gIC4uLk5VTUVSSUNfQVRUUlMsXG4gIC4uLlNUUl9BVFRSUyxcbl07XG5cbmNvbnN0IEFUVFJJQlVURV9BTElBU0VTID0gW1xuICBbUkVTT1VSQ0VfSUQsIFsnaWQnXV0sXG4gIFsnZGVzY3JpcHRpb24nLCBbXG4gICAgJ2NvbnRlbnQtZGVzY3JpcHRpb24nLCAnY29udGVudC1kZXNjJyxcbiAgICAnZGVzYycsICdhY2Nlc3NpYmlsaXR5LWlkJyxcbiAgXV0sXG4gIFsnaW5kZXgnLCBbJ250aC1jaGlsZCddXSxcbl07XG5cbi8qKlxuICogQ29udmVydCBoeXBoZW4gc2VwYXJhdGVkIHdvcmQgdG8gc25ha2UgY2FzZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoeXBoZW4gc2VwYXJhdGVkIHdvcmQgdHJhbnNsYXRlZCB0byBzbmFrZSBjYXNlXG4gKi9cbmZ1bmN0aW9uIHRvU25ha2VDYXNlIChzdHIpIHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgdG9rZW5zID0gc3RyLnNwbGl0KCctJykubWFwKChzdHIpID0+IHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKTtcbiAgY29uc3Qgb3V0ID0gdG9rZW5zLmpvaW4oJycpO1xuICByZXR1cm4gb3V0LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgb3V0LnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc05hbWVWYWx1ZU9iamVjdFxuICogQHByb3BlcnR5IHs/bmFtZX0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgQ1NTIG9iamVjdFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIENTUyBvYmplY3RcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgYm9vbGVhbiBmcm9tIGEgQ1NTIG9iamVjdC4gSWYgZW1wdHksIHJldHVybiB0cnVlLiBJZiBub3QgdHJ1ZS9mYWxzZS9lbXB0eSwgdGhyb3cgZXhjZXB0aW9uXG4gKlxuICogQHBhcmFtIHtDc3NOYW1lVmFsdWVPYmplY3R9IGNzcyBBIENTUyBvYmplY3QgdGhhdCBoYXMgJ25hbWUnIGFuZCAndmFsdWUnXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBFaXRoZXIgJ3RydWUnIG9yICdmYWxzZScuIElmIHZhbHVlIGlzIGVtcHR5LCByZXR1cm4gJ3RydWUnXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEdldEJvb2wgKGNzcykge1xuICBjb25zdCB2YWwgPSBjc3MudmFsdWU/LnRvTG93ZXJDYXNlKCkgfHwgJ3RydWUnOyAvLyBhbiBvbWl0dGVkIGJvb2xlYW4gYXR0cmlidXRlIG1lYW5zICd0cnVlJyAoZS5nLjogaW5wdXRbY2hlY2tlZF0gbWVhbnMgY2hlY2tlZCBpcyB0cnVlKVxuICBpZiAoWyd0cnVlJywgJ2ZhbHNlJ10uaW5jbHVkZXModmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3MubmFtZX0nIG11c3QgYmUgdHJ1ZSwgZmFsc2Ugb3IgZW1wdHkuIEZvdW5kICcke2Nzcy52YWx1ZX0nYCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjYW5vbmljYWwgZm9ybSBvZiBhIENTUyBhdHRyaWJ1dGUgbmFtZVxuICpcbiAqIENvbnZlcnRzIHRvIGxvd2VyY2FzZSBhbmQgaWYgYW4gYXR0cmlidXRlIG5hbWUgaXMgYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBlbHNlLCByZXR1cm5cbiAqIHdoYXQgaXQgaXMgYW4gYWxpYXMgZm9yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNzcyBDU1Mgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2Fub25pY2FsIGF0dHJpYnV0ZSBuYW1lXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEdldEF0dHJOYW1lIChjc3MpIHtcbiAgY29uc3QgYXR0ck5hbWUgPSBjc3MubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIENoZWNrIGlmIGl0J3Mgc3VwcG9ydGVkIGFuZCBpZiBpdCBpcywgcmV0dXJuIGl0XG4gIGlmIChBTExfQVRUUlMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgcmV0dXJuIGF0dHJOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvLyBJZiBhdHRyTmFtZSBpcyBhbiBhbGlhcyBmb3Igc29tZXRoaW5nIGVsc2UsIHJldHVybiB0aGF0XG4gIGZvciAoY29uc3QgW29mZmljaWFsQXR0ciwgYWxpYXNBdHRyc10gb2YgQVRUUklCVVRFX0FMSUFTRVMpIHtcbiAgICBpZiAoYWxpYXNBdHRycy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBvZmZpY2lhbEF0dHI7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJyR7YXR0ck5hbWV9JyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUuIGAgK1xuICAgIGBTdXBwb3J0ZWQgYXR0cmlidXRlcyBhcmUgJyR7QUxMX0FUVFJTLmpvaW4oJywgJyl9J2ApO1xufVxuXG4vKipcbiAqIEdldCBhIHJlZ2V4IHRoYXQgbWF0Y2hlcyBhIHdob2xlIHdvcmQuIEZvciB0aGUgfj0gQ1NTIGF0dHJpYnV0ZSBzZWxlY3Rvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICogQHJldHVybnMge3N0cmluZ30gQSByZWdleCBcIndvcmRcIiBtYXRjaGVyXG4gKi9cbmZ1bmN0aW9uIGdldFdvcmRNYXRjaGVyUmVnZXggKHdvcmQpIHtcbiAgcmV0dXJuIGBcXFxcYihcXFxcdyoke2VzY2FwZVJlZ0V4cCh3b3JkKX1cXFxcdyopXFxcXGJgO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc0F0dHJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWVUeXBlIFR5cGUgb2YgYXR0cmlidXRlIChtdXN0IGJlIHN0cmluZyBvciBlbXB0eSlcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWUgVmFsdWUgb2YgdGhlIGF0dHJpYnV0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgYmV0d2VlbiB2YWx1ZSBhbmQgdmFsdWUgdHlwZSAoPSwgKj0sICwgXj0sICQ9KVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzUnVsZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBuZXN0aW5nT3BlcmF0b3IgVGhlIG5lc3Rpbmcgb3BlcmF0b3IgKGFrYTogY29tYmluYXRvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ1NTX1NlbGVjdG9ycylcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdGFnTmFtZSBUaGUgdGFnIG5hbWUgKGFrYTogdHlwZSBzZWxlY3RvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvVHlwZV9zZWxlY3RvcnMpXG4gKiBAcHJvcGVydHkgez9zdHJpbmdbXX0gY2xhc3NOYW1lcyBBbiBhcnJheSBvZiBDU1MgY2xhc3MgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P0Nzc0F0dHJbXX0gYXR0cnMgQW4gYXJyYXkgb2YgQ1NTIGF0dHJpYnV0ZXNcbiAqIEBwcm9wZXJ0eSB7P0Nzc1BzZXVkb1tdfSBhdHRycyBBbiBhcnJheSBvZiBDU1MgcHNldWRvc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpZCBDU1MgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/Q3NzUnVsZX0gcnVsZSBBIGRlc2NlbmRhbnQgb2YgdGhpcyBDU1MgcnVsZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzT2JqZWN0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHR5cGUgVHlwZSBvZiBDU1Mgb2JqZWN0LiAncnVsZScsICdydWxlc2V0JyBvciAnc2VsZWN0b3JzJ1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzUHNldWRvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlVHlwZSBUaGUgdHlwZSBvZiBDU1MgcHNldWRvIHNlbGVjdG9yIChodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9jc3Mtc2VsZWN0b3ItcGFyc2VyIGZvciByZWZlcmVuY2UpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICovXG5cbmNsYXNzIENzc0NvbnZlcnRlciB7XG5cbiAgY29uc3RydWN0b3IgKHNlbGVjdG9yLCBwa2cpIHtcbiAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgdGhpcy5wa2cgPSBwa2c7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGA8cGtnTmFtZT46aWQvYCBwcmVmaXggdG8gYmVnaW5uaW5nIG9mIHN0cmluZyBpZiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdG9yIFRoZSBpbml0aWFsIGxvY2F0b3JcbiAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHdpdGggYDxwa2dOYW1lPjppZC9gIHByZXBlbmRlZCAoaWYgaXQgd2Fzbid0IGFscmVhZHkpXG4gICAqL1xuICBmb3JtYXRJZExvY2F0b3IgKGxvY2F0b3IpIHtcbiAgICByZXR1cm4gSURfTE9DQVRPUl9QQVRURVJOLnRlc3QobG9jYXRvcilcbiAgICAgID8gbG9jYXRvclxuICAgICAgOiBgJHt0aGlzLnBrZyB8fCAnYW5kcm9pZCd9OmlkLyR7bG9jYXRvcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1MgYXR0cmlidXRlIGludG8gYSBVaVNlbGVjdG9yIG1ldGhvZCBjYWxsXG4gICAqXG4gICAqIEBwYXJhbSB7Q3NzQXR0cn0gY3NzQXR0ciBDU1MgYXR0cmlidXRlIG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDU1MgYXR0cmlidXRlIHBhcnNlZCBhcyBVaVNlbGVjdG9yXG4gICAqL1xuICBwYXJzZUF0dHIgKGNzc0F0dHIpIHtcbiAgICBpZiAoY3NzQXR0ci52YWx1ZVR5cGUgJiYgY3NzQXR0ci52YWx1ZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Nzc0F0dHIubmFtZX09JHtjc3NBdHRyLnZhbHVlfScgaXMgYW4gaW52YWxpZCBhdHRyaWJ1dGUuIGAgK1xuICAgICAgICBgT25seSAnc3RyaW5nJyBhbmQgZW1wdHkgYXR0cmlidXRlIHR5cGVzIGFyZSBzdXBwb3J0ZWQuIEZvdW5kICcke2Nzc0F0dHIudmFsdWVUeXBlfSdgKTtcbiAgICB9XG4gICAgY29uc3QgYXR0ck5hbWUgPSBhc3NlcnRHZXRBdHRyTmFtZShjc3NBdHRyKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gdG9TbmFrZUNhc2UoYXR0ck5hbWUpO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBpdCdzIGEgc3VwcG9ydGVkIGF0dHJpYnV0ZVxuICAgIGlmICghU1RSX0FUVFJTLmluY2x1ZGVzKGF0dHJOYW1lKSAmJiAhQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7YXR0ck5hbWV9JyBpcyBub3Qgc3VwcG9ydGVkLiBTdXBwb3J0ZWQgYXR0cmlidXRlcyBhcmUgYCArXG4gICAgICAgIGAnJHtbLi4uU1RSX0FUVFJTLCAuLi5CT09MRUFOX0FUVFJTXS5qb2luKCcsICcpfSdgKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBib29sZWFuLCBpZiBpdCdzIGEgYm9vbGVhbiBhdHRyaWJ1dGVcbiAgICBpZiAoQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX0oJHthc3NlcnRHZXRCb29sKGNzc0F0dHIpfSlgO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSBwYXJzZSBhcyBzdHJpbmdcbiAgICBsZXQgdmFsdWUgPSBjc3NBdHRyLnZhbHVlIHx8ICcnO1xuICAgIGlmIChhdHRyTmFtZSA9PT0gUkVTT1VSQ0VfSUQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5mb3JtYXRJZExvY2F0b3IodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIlwiKWA7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjc3NBdHRyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfShcIiR7dmFsdWV9XCIpYDtcbiAgICAgIGNhc2UgJyo9JzpcbiAgICAgICAgaWYgKFsnZGVzY3JpcHRpb24nLCAndGV4dCddLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1Db250YWlucyhcIiR7dmFsdWV9XCIpYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIiR7ZXNjYXBlUmVnRXhwKHZhbHVlKX1cIilgO1xuICAgICAgY2FzZSAnXj0nOlxuICAgICAgICBpZiAoWydkZXNjcmlwdGlvbicsICd0ZXh0J10uaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfVN0YXJ0c1dpdGgoXCIke3ZhbHVlfVwiKWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCJeJHtlc2NhcGVSZWdFeHAodmFsdWUpfVwiKWA7XG4gICAgICBjYXNlICckPSc6XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1NYXRjaGVzKFwiJHtlc2NhcGVSZWdFeHAodmFsdWUpfSRcIilgO1xuICAgICAgY2FzZSAnfj0nOlxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIiR7Z2V0V29yZE1hdGNoZXJSZWdleCh2YWx1ZSl9XCIpYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFVucmVhY2hhYmxlLCBidXQgYWRkaW5nIGVycm9yIGluIGNhc2UgYSBuZXcgQ1NTIGF0dHJpYnV0ZSBpcyBhZGRlZC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBDU1MgYXR0cmlidXRlIG9wZXJhdG9yICcke2Nzc0F0dHIub3BlcmF0b3J9Jy4gYCArXG4gICAgICAgICAgYCAnPScsICcqPScsICdePScsICckPScgYW5kICd+PScgYXJlIHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBwc2V1ZG8gY2xhc3MgdG8gYSBVaVNlbGVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Q3NzUHNldWRvfSBjc3NQc2V1ZG8gQ1NTIFBzZXVkbyBjbGFzc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBQc2V1ZG8gc2VsZWN0b3IgcGFyc2VkIGFzIFVpU2VsZWN0b3JcbiAgICovXG4gIHBhcnNlUHNldWRvIChjc3NQc2V1ZG8pIHtcbiAgICBpZiAoY3NzUHNldWRvLnZhbHVlVHlwZSAmJiBjc3NQc2V1ZG8udmFsdWVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3NQc2V1ZG8ubmFtZX09JHtjc3NQc2V1ZG8udmFsdWV9Jy4gYCArXG4gICAgICAgIGBVbnN1cHBvcnRlZCBjc3MgcHNldWRvIGNsYXNzIHZhbHVlIHR5cGU6ICcke2Nzc1BzZXVkby52YWx1ZVR5cGV9Jy4gT25seSAnc3RyaW5nJyB0eXBlIG9yIGVtcHR5IGlzIHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwc2V1ZG9OYW1lID0gYXNzZXJ0R2V0QXR0ck5hbWUoY3NzUHNldWRvKTtcblxuICAgIGlmIChCT09MRUFOX0FUVFJTLmluY2x1ZGVzKHBzZXVkb05hbWUpKSB7XG4gICAgICByZXR1cm4gYC4ke3RvU25ha2VDYXNlKHBzZXVkb05hbWUpfSgke2Fzc2VydEdldEJvb2woY3NzUHNldWRvKX0pYDtcbiAgICB9XG5cbiAgICBpZiAoTlVNRVJJQ19BVFRSUy5pbmNsdWRlcyhwc2V1ZG9OYW1lKSkge1xuICAgICAgcmV0dXJuIGAuJHtwc2V1ZG9OYW1lfSgke2Nzc1BzZXVkby52YWx1ZX0pYDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBydWxlIHRvIGEgVWlTZWxlY3RvclxuICAgKiBAcGFyYW0ge0Nzc1J1bGV9IGNzc1J1bGUgQ1NTIHJ1bGUgZGVmaW5pdGlvblxuICAgKi9cbiAgcGFyc2VDc3NSdWxlIChjc3NSdWxlKSB7XG4gICAgY29uc3QgeyBuZXN0aW5nT3BlcmF0b3IgfSA9IGNzc1J1bGU7XG4gICAgaWYgKG5lc3RpbmdPcGVyYXRvciAmJiBuZXN0aW5nT3BlcmF0b3IgIT09ICcgJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuZXN0aW5nT3BlcmF0b3J9JyBpcyBub3QgYSBzdXBwb3J0ZWQgY29tYmluYXRvci4gYCArXG4gICAgICAgIGBPbmx5IGNoaWxkIGNvbWJpbmF0b3IgKD4pIGFuZCBkZXNjZW5kYW50IGNvbWJpbmF0b3IgYXJlIHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBsZXQgdWlBdXRvbWF0b3JTZWxlY3RvciA9ICduZXcgVWlTZWxlY3RvcigpJztcbiAgICBpZiAoY3NzUnVsZS50YWdOYW1lICYmIGNzc1J1bGUudGFnTmFtZSAhPT0gJyonKSB7XG4gICAgICBsZXQgYW5kcm9pZENsYXNzID0gW2Nzc1J1bGUudGFnTmFtZV07XG4gICAgICBpZiAoY3NzUnVsZS5jbGFzc05hbWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3NzQ2xhc3NOYW1lcyBvZiBjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICAgICAgICBhbmRyb2lkQ2xhc3MucHVzaChjc3NDbGFzc05hbWVzKTtcbiAgICAgICAgfVxuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lKFwiJHthbmRyb2lkQ2xhc3Muam9pbignLicpfVwiKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lTWF0Y2hlcyhcIiR7Y3NzUnVsZS50YWdOYW1lfVwiKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jbGFzc05hbWVNYXRjaGVzKFwiJHtjc3NSdWxlLmNsYXNzTmFtZXMuam9pbignXFxcXC4nKX1cIilgO1xuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5pZCkge1xuICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLnJlc291cmNlSWQoXCIke3RoaXMuZm9ybWF0SWRMb2NhdG9yKGNzc1J1bGUuaWQpfVwiKWA7XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLmF0dHJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgY3NzUnVsZS5hdHRycykge1xuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IHRoaXMucGFyc2VBdHRyKGF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5wc2V1ZG9zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBzZXVkbyBvZiBjc3NSdWxlLnBzZXVkb3MpIHtcbiAgICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSB0aGlzLnBhcnNlUHNldWRvKHBzZXVkbyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLnJ1bGUpIHtcbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jaGlsZFNlbGVjdG9yKCR7dGhpcy5wYXJzZUNzc1J1bGUoY3NzUnVsZS5ydWxlKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIHVpQXV0b21hdG9yU2VsZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBDU1Mgb2JqZWN0IHRvIFVpQXV0b21hdG9yMiBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0Nzc09iamVjdH0gY3NzIENTUyBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIENTUyBvYmplY3QgcGFyc2VkIGFzIGEgVWlTZWxlY3RvclxuICAgKi9cbiAgcGFyc2VDc3NPYmplY3QgKGNzcykge1xuICAgIHN3aXRjaCAoY3NzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3J1bGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc1J1bGUoY3NzKTtcbiAgICAgIGNhc2UgJ3J1bGVTZXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc09iamVjdChjc3MucnVsZSk7XG4gICAgICBjYXNlICdzZWxlY3RvcnMnOlxuICAgICAgICByZXR1cm4gY3NzLnNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yKSA9PiB0aGlzLnBhcnNlQ3NzT2JqZWN0KHNlbGVjdG9yKSkuam9pbignOyAnKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVGhpcyBpcyBuZXZlciByZWFjaGFibGUsIGJ1dCBpZiBpdCBldmVyIGlzIGRvIHRoaXMuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVWlBdXRvbWF0b3IgZG9lcyBub3Qgc3VwcG9ydCAnJHtjc3MudHlwZX0nIGNzcy4gT25seSBzdXBwb3J0cyAncnVsZScsICdydWxlU2V0JywgJ3NlbGVjdG9ycycgYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1Mgc2VsZWN0b3IgdG8gYSBVaUF1dG9tYXRvcjIgc2VsZWN0b3JcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIENTUyBzZWxlY3RvciBjb252ZXJ0ZWQgdG8gYSBVaVNlbGVjdG9yXG4gICAqL1xuICB0b1VpQXV0b21hdG9yU2VsZWN0b3IgKCkge1xuICAgIGxldCBjc3NPYmo7XG4gICAgdHJ5IHtcbiAgICAgIGNzc09iaiA9IHBhcnNlci5wYXJzZSh0aGlzLnNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKGBJbnZhbGlkIENTUyBzZWxlY3RvciAnJHt0aGlzLnNlbGVjdG9yfScuIFJlYXNvbjogJyR7ZX0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc09iamVjdChjc3NPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYFVuc3VwcG9ydGVkIENTUyBzZWxlY3RvciAnJHt0aGlzLnNlbGVjdG9yfScuIFJlYXNvbjogJyR7ZX0nYCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENzc0NvbnZlcnRlcjsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxrQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBRUEsTUFBTUcsTUFBTSxHQUFHLElBQUlDLG9DQUFpQixFQUFFO0FBQ3RDRCxNQUFNLENBQUNFLHVCQUF1QixDQUFDLEtBQUssQ0FBQztBQUNyQ0YsTUFBTSxDQUFDRyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUM5Q0gsTUFBTSxDQUFDSSx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDbkRKLE1BQU0sQ0FBQ0ssaUJBQWlCLEVBQUU7QUFFMUIsTUFBTUMsV0FBVyxHQUFHLGFBQWE7QUFDakMsTUFBTUMsa0JBQWtCLEdBQUcscUNBQXFDO0FBRWhFLE1BQU1DLGFBQWEsR0FBRyxDQUNwQixXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUMzRCxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FDdEQ7QUFFRCxNQUFNQyxhQUFhLEdBQUcsQ0FDcEIsT0FBTyxFQUFFLFVBQVUsQ0FDcEI7QUFFRCxNQUFNQyxTQUFTLEdBQUcsQ0FDaEIsYUFBYSxFQUFFSixXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQ2pFO0FBRUQsTUFBTUssU0FBUyxHQUFHLENBQ2hCLEdBQUdILGFBQWEsRUFDaEIsR0FBR0MsYUFBYSxFQUNoQixHQUFHQyxTQUFTLENBQ2I7QUFFRCxNQUFNRSxpQkFBaUIsR0FBRyxDQUN4QixDQUFDTixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNyQixDQUFDLGFBQWEsRUFBRSxDQUNkLHFCQUFxQixFQUFFLGNBQWMsRUFDckMsTUFBTSxFQUFFLGtCQUFrQixDQUMzQixDQUFDLEVBQ0YsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUN6QjtBQVFELFNBQVNPLFdBQVdBLENBQUVDLEdBQUcsRUFBRTtFQUN6QixJQUFJLENBQUNBLEdBQUcsRUFBRTtJQUNSLE9BQU8sRUFBRTtFQUNYO0VBQ0EsTUFBTUMsTUFBTSxHQUFHRCxHQUFHLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsR0FBRyxDQUFFSCxHQUFHLElBQUtBLEdBQUcsQ0FBQ0ksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEVBQUUsR0FBR0wsR0FBRyxDQUFDTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsRUFBRSxDQUFDO0VBQ3BHLE1BQU1DLEdBQUcsR0FBR1AsTUFBTSxDQUFDUSxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQzNCLE9BQU9ELEdBQUcsQ0FBQ0osTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxXQUFXLEVBQUUsR0FBR0MsR0FBRyxDQUFDRixLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25EO0FBY0EsU0FBU0ksYUFBYUEsQ0FBRUMsR0FBRyxFQUFFO0VBQUEsSUFBQUMsVUFBQTtFQUMzQixNQUFNQyxHQUFHLEdBQUcsRUFBQUQsVUFBQSxHQUFBRCxHQUFHLENBQUNHLEtBQUssY0FBQUYsVUFBQSx1QkFBVEEsVUFBQSxDQUFXTCxXQUFXLEVBQUUsS0FBSSxNQUFNO0VBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUNRLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDLEVBQUU7SUFDbkMsT0FBT0EsR0FBRztFQUNaO0VBQ0EsTUFBTSxJQUFJRyxLQUFLLENBQUUsSUFBR0wsR0FBRyxDQUFDTSxJQUFLLDBDQUF5Q04sR0FBRyxDQUFDRyxLQUFNLEdBQUUsQ0FBQztBQUNyRjtBQVdBLFNBQVNJLGlCQUFpQkEsQ0FBRVAsR0FBRyxFQUFFO0VBQy9CLE1BQU1RLFFBQVEsR0FBR1IsR0FBRyxDQUFDTSxJQUFJLENBQUNWLFdBQVcsRUFBRTtFQUd2QyxJQUFJVixTQUFTLENBQUNrQixRQUFRLENBQUNJLFFBQVEsQ0FBQyxFQUFFO0lBQ2hDLE9BQU9BLFFBQVEsQ0FBQ1osV0FBVyxFQUFFO0VBQy9CO0VBR0EsS0FBSyxNQUFNLENBQUNhLFlBQVksRUFBRUMsVUFBVSxDQUFDLElBQUl2QixpQkFBaUIsRUFBRTtJQUMxRCxJQUFJdUIsVUFBVSxDQUFDTixRQUFRLENBQUNJLFFBQVEsQ0FBQyxFQUFFO01BQ2pDLE9BQU9DLFlBQVk7SUFDckI7RUFDRjtFQUNBLE1BQU0sSUFBSUosS0FBSyxDQUFFLElBQUdHLFFBQVMsOEJBQTZCLEdBQ3ZELDZCQUE0QnRCLFNBQVMsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBRSxHQUFFLENBQUM7QUFDekQ7QUFRQSxTQUFTYSxtQkFBbUJBLENBQUVDLElBQUksRUFBRTtFQUNsQyxPQUFRLFdBQVUsSUFBQUMsb0JBQVksRUFBQ0QsSUFBSSxDQUFFLFVBQVM7QUFDaEQ7QUFnQ0EsTUFBTUUsWUFBWSxDQUFDO0VBRWpCQyxXQUFXQSxDQUFFQyxRQUFRLEVBQUVDLEdBQUcsRUFBRTtJQUMxQixJQUFJLENBQUNELFFBQVEsR0FBR0EsUUFBUTtJQUN4QixJQUFJLENBQUNDLEdBQUcsR0FBR0EsR0FBRztFQUNoQjtFQVFBQyxlQUFlQSxDQUFFQyxPQUFPLEVBQUU7SUFDeEIsT0FBT3JDLGtCQUFrQixDQUFDc0MsSUFBSSxDQUFDRCxPQUFPLENBQUMsR0FDbkNBLE9BQU8sR0FDTixHQUFFLElBQUksQ0FBQ0YsR0FBRyxJQUFJLFNBQVUsT0FBTUUsT0FBUSxFQUFDO0VBQzlDO0VBUUFFLFNBQVNBLENBQUVDLE9BQU8sRUFBRTtJQUNsQixJQUFJQSxPQUFPLENBQUNDLFNBQVMsSUFBSUQsT0FBTyxDQUFDQyxTQUFTLEtBQUssUUFBUSxFQUFFO01BQ3ZELE1BQU0sSUFBSWxCLEtBQUssQ0FBRSxJQUFHaUIsT0FBTyxDQUFDaEIsSUFBSyxJQUFHZ0IsT0FBTyxDQUFDbkIsS0FBTSw2QkFBNEIsR0FDM0UsaUVBQWdFbUIsT0FBTyxDQUFDQyxTQUFVLEdBQUUsQ0FBQztJQUMxRjtJQUNBLE1BQU1mLFFBQVEsR0FBR0QsaUJBQWlCLENBQUNlLE9BQU8sQ0FBQztJQUMzQyxNQUFNRSxVQUFVLEdBQUdwQyxXQUFXLENBQUNvQixRQUFRLENBQUM7SUFHeEMsSUFBSSxDQUFDdkIsU0FBUyxDQUFDbUIsUUFBUSxDQUFDSSxRQUFRLENBQUMsSUFBSSxDQUFDekIsYUFBYSxDQUFDcUIsUUFBUSxDQUFDSSxRQUFRLENBQUMsRUFBRTtNQUN0RSxNQUFNLElBQUlILEtBQUssQ0FBRSxJQUFHRyxRQUFTLCtDQUE4QyxHQUN4RSxJQUFHLENBQUMsR0FBR3ZCLFNBQVMsRUFBRSxHQUFHRixhQUFhLENBQUMsQ0FBQ2UsSUFBSSxDQUFDLElBQUksQ0FBRSxHQUFFLENBQUM7SUFDdkQ7SUFHQSxJQUFJZixhQUFhLENBQUNxQixRQUFRLENBQUNJLFFBQVEsQ0FBQyxFQUFFO01BQ3BDLE9BQVEsSUFBR2dCLFVBQVcsSUFBR3pCLGFBQWEsQ0FBQ3VCLE9BQU8sQ0FBRSxHQUFFO0lBQ3BEO0lBR0EsSUFBSW5CLEtBQUssR0FBR21CLE9BQU8sQ0FBQ25CLEtBQUssSUFBSSxFQUFFO0lBQy9CLElBQUlLLFFBQVEsS0FBSzNCLFdBQVcsRUFBRTtNQUM1QnNCLEtBQUssR0FBRyxJQUFJLENBQUNlLGVBQWUsQ0FBQ2YsS0FBSyxDQUFDO0lBQ3JDO0lBQ0EsSUFBSUEsS0FBSyxLQUFLLEVBQUUsRUFBRTtNQUNoQixPQUFRLElBQUdxQixVQUFXLGFBQVk7SUFDcEM7SUFFQSxRQUFRRixPQUFPLENBQUNHLFFBQVE7TUFDdEIsS0FBSyxHQUFHO1FBQ04sT0FBUSxJQUFHRCxVQUFXLEtBQUlyQixLQUFNLElBQUc7TUFDckMsS0FBSyxJQUFJO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQ0MsUUFBUSxDQUFDSSxRQUFRLENBQUMsRUFBRTtVQUM5QyxPQUFRLElBQUdnQixVQUFXLGFBQVlyQixLQUFNLElBQUc7UUFDN0M7UUFDQSxPQUFRLElBQUdxQixVQUFXLFlBQVcsSUFBQVgsb0JBQVksRUFBQ1YsS0FBSyxDQUFFLElBQUc7TUFDMUQsS0FBSyxJQUFJO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQ0MsUUFBUSxDQUFDSSxRQUFRLENBQUMsRUFBRTtVQUM5QyxPQUFRLElBQUdnQixVQUFXLGVBQWNyQixLQUFNLElBQUc7UUFDL0M7UUFDQSxPQUFRLElBQUdxQixVQUFXLGFBQVksSUFBQVgsb0JBQVksRUFBQ1YsS0FBSyxDQUFFLElBQUc7TUFDM0QsS0FBSyxJQUFJO1FBQ1AsT0FBUSxJQUFHcUIsVUFBVyxZQUFXLElBQUFYLG9CQUFZLEVBQUNWLEtBQUssQ0FBRSxLQUFJO01BQzNELEtBQUssSUFBSTtRQUNQLE9BQVEsSUFBR3FCLFVBQVcsWUFBV2IsbUJBQW1CLENBQUNSLEtBQUssQ0FBRSxJQUFHO01BQ2pFO1FBRUUsTUFBTSxJQUFJRSxLQUFLLENBQUUsdUNBQXNDaUIsT0FBTyxDQUFDRyxRQUFTLEtBQUksR0FDekUsZ0RBQStDLENBQUM7SUFBQztFQUUxRDtFQVFBQyxXQUFXQSxDQUFFQyxTQUFTLEVBQUU7SUFDdEIsSUFBSUEsU0FBUyxDQUFDSixTQUFTLElBQUlJLFNBQVMsQ0FBQ0osU0FBUyxLQUFLLFFBQVEsRUFBRTtNQUMzRCxNQUFNLElBQUlsQixLQUFLLENBQUUsSUFBR3NCLFNBQVMsQ0FBQ3JCLElBQUssSUFBR3FCLFNBQVMsQ0FBQ3hCLEtBQU0sS0FBSSxHQUN2RCw2Q0FBNEN3QixTQUFTLENBQUNKLFNBQVUsOENBQTZDLENBQUM7SUFDbkg7SUFFQSxNQUFNSyxVQUFVLEdBQUdyQixpQkFBaUIsQ0FBQ29CLFNBQVMsQ0FBQztJQUUvQyxJQUFJNUMsYUFBYSxDQUFDcUIsUUFBUSxDQUFDd0IsVUFBVSxDQUFDLEVBQUU7TUFDdEMsT0FBUSxJQUFHeEMsV0FBVyxDQUFDd0MsVUFBVSxDQUFFLElBQUc3QixhQUFhLENBQUM0QixTQUFTLENBQUUsR0FBRTtJQUNuRTtJQUVBLElBQUkzQyxhQUFhLENBQUNvQixRQUFRLENBQUN3QixVQUFVLENBQUMsRUFBRTtNQUN0QyxPQUFRLElBQUdBLFVBQVcsSUFBR0QsU0FBUyxDQUFDeEIsS0FBTSxHQUFFO0lBQzdDO0VBQ0Y7RUFNQTBCLFlBQVlBLENBQUVDLE9BQU8sRUFBRTtJQUNyQixNQUFNO01BQUVDO0lBQWdCLENBQUMsR0FBR0QsT0FBTztJQUNuQyxJQUFJQyxlQUFlLElBQUlBLGVBQWUsS0FBSyxHQUFHLEVBQUU7TUFDOUMsTUFBTSxJQUFJMUIsS0FBSyxDQUFFLElBQUcwQixlQUFnQixtQ0FBa0MsR0FDbkUsb0VBQW1FLENBQUM7SUFDekU7SUFFQSxJQUFJQyxtQkFBbUIsR0FBRyxrQkFBa0I7SUFDNUMsSUFBSUYsT0FBTyxDQUFDRyxPQUFPLElBQUlILE9BQU8sQ0FBQ0csT0FBTyxLQUFLLEdBQUcsRUFBRTtNQUM5QyxJQUFJQyxZQUFZLEdBQUcsQ0FBQ0osT0FBTyxDQUFDRyxPQUFPLENBQUM7TUFDcEMsSUFBSUgsT0FBTyxDQUFDSyxVQUFVLEVBQUU7UUFDdEIsS0FBSyxNQUFNQyxhQUFhLElBQUlOLE9BQU8sQ0FBQ0ssVUFBVSxFQUFFO1VBQzlDRCxZQUFZLENBQUNHLElBQUksQ0FBQ0QsYUFBYSxDQUFDO1FBQ2xDO1FBQ0FKLG1CQUFtQixJQUFLLGVBQWNFLFlBQVksQ0FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUUsSUFBRztNQUNsRSxDQUFDLE1BQU07UUFDTGtDLG1CQUFtQixJQUFLLHNCQUFxQkYsT0FBTyxDQUFDRyxPQUFRLElBQUc7TUFDbEU7SUFDRixDQUFDLE1BQU0sSUFBSUgsT0FBTyxDQUFDSyxVQUFVLEVBQUU7TUFDN0JILG1CQUFtQixJQUFLLHNCQUFxQkYsT0FBTyxDQUFDSyxVQUFVLENBQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFFLElBQUc7SUFDakY7SUFDQSxJQUFJZ0MsT0FBTyxDQUFDUSxFQUFFLEVBQUU7TUFDZE4sbUJBQW1CLElBQUssZ0JBQWUsSUFBSSxDQUFDZCxlQUFlLENBQUNZLE9BQU8sQ0FBQ1EsRUFBRSxDQUFFLElBQUc7SUFDN0U7SUFDQSxJQUFJUixPQUFPLENBQUNTLEtBQUssRUFBRTtNQUNqQixLQUFLLE1BQU1DLElBQUksSUFBSVYsT0FBTyxDQUFDUyxLQUFLLEVBQUU7UUFDaENQLG1CQUFtQixJQUFJLElBQUksQ0FBQ1gsU0FBUyxDQUFDbUIsSUFBSSxDQUFDO01BQzdDO0lBQ0Y7SUFDQSxJQUFJVixPQUFPLENBQUNXLE9BQU8sRUFBRTtNQUNuQixLQUFLLE1BQU1DLE1BQU0sSUFBSVosT0FBTyxDQUFDVyxPQUFPLEVBQUU7UUFDcENULG1CQUFtQixJQUFJLElBQUksQ0FBQ04sV0FBVyxDQUFDZ0IsTUFBTSxDQUFDO01BQ2pEO0lBQ0Y7SUFDQSxJQUFJWixPQUFPLENBQUNhLElBQUksRUFBRTtNQUNoQlgsbUJBQW1CLElBQUssa0JBQWlCLElBQUksQ0FBQ0gsWUFBWSxDQUFDQyxPQUFPLENBQUNhLElBQUksQ0FBRSxHQUFFO0lBQzdFO0lBQ0EsT0FBT1gsbUJBQW1CO0VBQzVCO0VBT0FZLGNBQWNBLENBQUU1QyxHQUFHLEVBQUU7SUFDbkIsUUFBUUEsR0FBRyxDQUFDNkMsSUFBSTtNQUNkLEtBQUssTUFBTTtRQUNULE9BQU8sSUFBSSxDQUFDaEIsWUFBWSxDQUFDN0IsR0FBRyxDQUFDO01BQy9CLEtBQUssU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDNEMsY0FBYyxDQUFDNUMsR0FBRyxDQUFDMkMsSUFBSSxDQUFDO01BQ3RDLEtBQUssV0FBVztRQUNkLE9BQU8zQyxHQUFHLENBQUM4QyxTQUFTLENBQUN0RCxHQUFHLENBQUV3QixRQUFRLElBQUssSUFBSSxDQUFDNEIsY0FBYyxDQUFDNUIsUUFBUSxDQUFDLENBQUMsQ0FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUM7TUFFbEY7UUFFRSxNQUFNLElBQUlPLEtBQUssQ0FBRSxpQ0FBZ0NMLEdBQUcsQ0FBQzZDLElBQUssc0RBQXFELENBQUM7SUFBQztFQUV2SDtFQU9BRSxxQkFBcUJBLENBQUEsRUFBSTtJQUN2QixJQUFJQyxNQUFNO0lBQ1YsSUFBSTtNQUNGQSxNQUFNLEdBQUd6RSxNQUFNLENBQUMwRSxLQUFLLENBQUMsSUFBSSxDQUFDakMsUUFBUSxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxPQUFPa0MsQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJQyxjQUFNLENBQUNDLG9CQUFvQixDQUFFLHlCQUF3QixJQUFJLENBQUNwQyxRQUFTLGVBQWNrQyxDQUFFLEdBQUUsQ0FBQztJQUNsRztJQUNBLElBQUk7TUFDRixPQUFPLElBQUksQ0FBQ04sY0FBYyxDQUFDSSxNQUFNLENBQUM7SUFDcEMsQ0FBQyxDQUFDLE9BQU9FLENBQUMsRUFBRTtNQUNWLE1BQU0sSUFBSUMsY0FBTSxDQUFDQyxvQkFBb0IsQ0FBRSw2QkFBNEIsSUFBSSxDQUFDcEMsUUFBUyxlQUFja0MsQ0FBRSxHQUFFLENBQUM7SUFDdEc7RUFDRjtBQUNGO0FBQUMsSUFBQUcsUUFBQSxHQUVjdkMsWUFBWTtBQUFBd0MsT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
|