@preply/ds-visual-coverage-core
Advanced tools
Comparing version 0.99.1-beta.22520120a5c75760a7e3556443f375b03c4fe7c1.0 to 0.99.1-beta.6fcddb3f3b82fb62293b4c54958750a8ce252183.0
@@ -1,2 +0,2 @@ | ||
import type { Bitmap, ChildData, CoverageMode, Logger, Milliseconds, PixelByPixelType, PixelCounts, Rect, WeightByComponentName } from '../types'; | ||
import type { Bitmap, ChildData, Logger, Milliseconds, PixelByPixelType, PixelCounts, Rect, WeightByComponentName } from '../types'; | ||
type Params = { | ||
@@ -13,11 +13,2 @@ logger: Logger; | ||
weightByComponentName: WeightByComponentName; | ||
/** | ||
* When perimeters count, the bigger the component the more important it is for the coverage. | ||
* But bigger components are containers, while smaller components are DS and generic UI ones. | ||
* `countComponents` solves this problem by drawing just some pixels for every component. | ||
* On the paper, this sounds like just counting the DOM elements, and weighting them by the | ||
* component weight, but in reality it also consider the depth (even if it's not perfect since | ||
* it's not the CSS one). Look at the tests to better understand it. | ||
*/ | ||
coverageMode: CoverageMode; | ||
}; | ||
@@ -24,0 +15,0 @@ type CountPixelsResult = { |
@@ -8,3 +8,3 @@ import { createBitmap } from '../bitmap/createBitmap.js'; | ||
function countPixels(params) { | ||
const { logger, offset, elementRect, childrenData, coverageMode, printAsciiArt, pixelByPixelType, weightByComponentName, } = params; | ||
const { logger, offset, elementRect, childrenData, printAsciiArt, pixelByPixelType, weightByComponentName, } = params; | ||
const start = Date.now(); | ||
@@ -68,4 +68,3 @@ const bitmap = createBitmap(getRectCoordinate(elementRect, 'height'), getRectCoordinate(elementRect, 'width')); | ||
const noMoreHorizontalLinesToDraw = topRowCrossedHalfHeight; | ||
const pixelsMustRemainInsideComponentArea = coverageMode === 'countPerimeters'; | ||
if (pixelsMustRemainInsideComponentArea && noMoreHorizontalLinesToDraw) | ||
if (noMoreHorizontalLinesToDraw) | ||
break; | ||
@@ -101,5 +100,2 @@ // This is the loop condition, here it's more readable | ||
}); | ||
if (coverageMode === 'countComponents') | ||
// The goal is write one pixel for every row | ||
break; | ||
} | ||
@@ -134,5 +130,2 @@ // "Draw" the bottom row | ||
for (let currentTop = Math.floor(rectTop - offsetTop);; currentTop++) { | ||
if (coverageMode === 'countComponents') | ||
// The goal is write one pixel for every row | ||
break; | ||
// Happens when the weight is higher than half the height of the element, and so top and bottom flip. Look at noMoreHorizontalLinesToDraw's comment | ||
@@ -233,2 +226,2 @@ const noMoreVerticalLinesToDraw = left > right; | ||
export { countPixels }; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRQaXhlbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2NvdW50UGl4ZWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUJpdG1hcCB9IGZyb20gJy4uL2JpdG1hcC9jcmVhdGVCaXRtYXAnO1xuaW1wb3J0IHsgbG9nQml0bWFwIH0gZnJvbSAnLi4vYml0bWFwL2xvZ0JpdG1hcCc7XG5pbXBvcnQgeyBzZXRCaXRtYXBQaXhlbCB9IGZyb20gJy4uL2JpdG1hcC9zZXRCaXRtYXBQaXhlbCc7XG5pbXBvcnQgeyBnZXRSZWN0Q29vcmRpbmF0ZSB9IGZyb20gJy4uL3JlY3QvcmVjdFByb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJpdG1hcCxcbiAgICBDaGlsZERhdGEsXG4gICAgQ29tcG9uZW50VHlwZSxcbiAgICBDb3ZlcmFnZU1vZGUsXG4gICAgTG9nZ2VyLFxuICAgIE1pbGxpc2Vjb25kcyxcbiAgICBQaXhlbEJ5UGl4ZWxUeXBlLFxuICAgIFBpeGVsQ291bnRzLFxuICAgIFJlY3QsXG4gICAgV2VpZ2h0QnlDb21wb25lbnROYW1lLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBpeGVsQ291bnRzIH0gZnJvbSAnLi9jcmVhdGVQaXhlbENvdW50cyc7XG5cbnR5cGUgUGFyYW1zID0ge1xuICAgIGxvZ2dlcjogTG9nZ2VyO1xuICAgIGVsZW1lbnRSZWN0OiBSZWN0O1xuICAgIHByaW50QXNjaWlBcnQ6IGJvb2xlYW47XG4gICAgY2hpbGRyZW5EYXRhOiBDaGlsZERhdGFbXTtcbiAgICBwaXhlbEJ5UGl4ZWxUeXBlOiBQaXhlbEJ5UGl4ZWxUeXBlO1xuICAgIG9mZnNldDogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XG4gICAgd2VpZ2h0QnlDb21wb25lbnROYW1lOiBXZWlnaHRCeUNvbXBvbmVudE5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBlcmltZXRlcnMgY291bnQsIHRoZSBiaWdnZXIgdGhlIGNvbXBvbmVudCB0aGUgbW9yZSBpbXBvcnRhbnQgaXQgaXMgZm9yIHRoZSBjb3ZlcmFnZS5cbiAgICAgKiBCdXQgYmlnZ2VyIGNvbXBvbmVudHMgYXJlIGNvbnRhaW5lcnMsIHdoaWxlIHNtYWxsZXIgY29tcG9uZW50cyBhcmUgRFMgYW5kIGdlbmVyaWMgVUkgb25lcy5cbiAgICAgKiBgY291bnRDb21wb25lbnRzYCBzb2x2ZXMgdGhpcyBwcm9ibGVtIGJ5IGRyYXdpbmcganVzdCBzb21lIHBpeGVscyBmb3IgZXZlcnkgY29tcG9uZW50LlxuICAgICAqIE9uIHRoZSBwYXBlciwgdGhpcyBzb3VuZHMgbGlrZSBqdXN0IGNvdW50aW5nIHRoZSBET00gZWxlbWVudHMsIGFuZCB3ZWlnaHRpbmcgdGhlbSBieSB0aGVcbiAgICAgKiBjb21wb25lbnQgd2VpZ2h0LCBidXQgaW4gcmVhbGl0eSBpdCBhbHNvIGNvbnNpZGVyIHRoZSBkZXB0aCAoZXZlbiBpZiBpdCdzIG5vdCBwZXJmZWN0IHNpbmNlXG4gICAgICogaXQncyBub3QgdGhlIENTUyBvbmUpLiBMb29rIGF0IHRoZSB0ZXN0cyB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdC5cbiAgICAgKi9cbiAgICBjb3ZlcmFnZU1vZGU6IENvdmVyYWdlTW9kZTtcbn07XG5cbnR5cGUgQ291bnRQaXhlbHNSZXN1bHQgPSB7XG4gICAgYml0bWFwOiBCaXRtYXA7XG4gICAgcGl4ZWxDb3VudHM6IFBpeGVsQ291bnRzO1xuICAgIGR1cmF0aW9uOiBNaWxsaXNlY29uZHM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY291bnRQaXhlbHMocGFyYW1zOiBQYXJhbXMpOiBDb3VudFBpeGVsc1Jlc3VsdCB7XG4gICAgY29uc3Qge1xuICAgICAgICBsb2dnZXIsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgZWxlbWVudFJlY3QsXG4gICAgICAgIGNoaWxkcmVuRGF0YSxcbiAgICAgICAgY292ZXJhZ2VNb2RlLFxuICAgICAgICBwcmludEFzY2lpQXJ0LFxuICAgICAgICBwaXhlbEJ5UGl4ZWxUeXBlLFxuICAgICAgICB3ZWlnaHRCeUNvbXBvbmVudE5hbWUsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIGNvbnN0IHN0YXJ0OiBNaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgYml0bWFwID0gY3JlYXRlQml0bWFwKFxuICAgICAgICBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ2hlaWdodCcpLFxuICAgICAgICBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBuID0gY2hpbGRyZW5EYXRhLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBjaGlsZHJlbkRhdGFbaV07XG4gICAgICAgIGlmICghY2hpbGREYXRhKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjaGlsZERhdGEgYXQgJHtpfSAodGhpcyBzaG91bGQgYmUgYSBUUy1vbmx5IHByb3RlY3Rpb24pYCk7XG5cbiAgICAgICAgY29uc3QgeyByZWN0LCBkc0NvbXBvbmVudFR5cGUsIGlzQ2hpbGRPZlVpRHNDb21wb25lbnQsIGRzQ29tcG9uZW50TmFtZSB9ID0gY2hpbGREYXRhO1xuXG4gICAgICAgIGNvbnN0IGFkanVzdGVkU3NDb21wb25lbnRUeXBlOiBDb21wb25lbnRUeXBlID0gaXNDaGlsZE9mVWlEc0NvbXBvbmVudFxuICAgICAgICAgICAgPyAndW5rbm93bkRzQ29tcG9uZW50JyAvLyBjaGlsZHJlbiBvZiB1aSBjb21wb25lbnRzIGFyZSB0cmVhdGVkIGFzIERTIGNvbXBvbmVudHMgdG9vXG4gICAgICAgICAgICA6IGRzQ29tcG9uZW50VHlwZTtcblxuICAgICAgICBjb25zdCBwaXhlbCA9IHBpeGVsQnlQaXhlbFR5cGVbYWRqdXN0ZWRTc0NvbXBvbmVudFR5cGVdO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IG9mZnNldC50b3A7XG4gICAgICAgIGNvbnN0IG9mZnNldExlZnQgPSBvZmZzZXQubGVmdDtcblxuICAgICAgICBjb25zdCByZWN0VG9wID0gZ2V0UmVjdENvb3JkaW5hdGUocmVjdCwgJ3RvcCcpO1xuICAgICAgICBjb25zdCByZWN0TGVmdCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICdsZWZ0Jyk7XG4gICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICd3aWR0aCcpO1xuICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gZ2V0UmVjdENvb3JkaW5hdGUocmVjdCwgJ2hlaWdodCcpO1xuICAgICAgICBjb25zdCByb3dMZW5ndGggPSBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ2hlaWdodCcpO1xuICAgICAgICBjb25zdCBjb2x1bW5MZW5ndGggPSBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyk7XG5cbiAgICAgICAgY29uc3Qgd2VpZ2h0ID0gd2VpZ2h0QnlDb21wb25lbnROYW1lW2RzQ29tcG9uZW50TmFtZSA/PyAnbm9uRHNDb21wb25lbnQnXTtcblxuICAgICAgICBpZiAod2VpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gd2VpZ2h0IGZvciAke2VsZW1lbnRSZWN0fSAodGhpcyBzaG91bGQgYmUgYSBUUy1vbmx5IHByb3RlY3Rpb24pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCB3ZWlnaHRMaW5lID0gMDsgd2VpZ2h0TGluZSA8IHdlaWdodDsgd2VpZ2h0TGluZSsrKSB7XG4gICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgcm93cyBpbiBiaXRtYXBcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IE1hdGguZmxvb3IocmVjdFRvcCAtIG9mZnNldFRvcCArIHdlaWdodExpbmUpO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gTWF0aC5mbG9vcihyZWN0VG9wIC0gb2Zmc2V0VG9wICsgcmVjdEhlaWdodCAtIDEgLSB3ZWlnaHRMaW5lKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgY3VycmVudExlZnQgPSBNYXRoLmZsb29yKHJlY3RMZWZ0IC0gb2Zmc2V0TGVmdCk7IDsgY3VycmVudExlZnQrKykge1xuICAgICAgICAgICAgICAgIC8vIEhhcHBlbnMgd2hlbiB0aGUgd2VpZ2h0IGlzIGhpZ2hlciB0aGFuIGhhbGYgdGhlIGhlaWdodCBvZiB0aGUgZWxlbWVudCwgYW5kIHNvIHRvcCBhbmQgYm90dG9tIGZsaXBcbiAgICAgICAgICAgICAgICAvLyBFeC4gZmlyc3QgbG9vcCB3aXRoIHdlaWdodCA9IDVcbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCB0b3BcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIGJvdHRvbVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICAvLyBzZWNvbmQgaXRlcmF0aW9uIHdpdGggd2VpZ2h0ID0gNVxuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIHRvcFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggYm90dG9tXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgICAgICAgIC8vIHRoaXJkIGl0ZXJhdGlvbiB3aXRoIHdlaWdodCA9IDUgKHRoZSBsb29wIG11c3QgYnJlYWspXG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggYm90dG9tXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCB0b3BcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyBdXG5cbiAgICAgICAgICAgICAgICBjb25zdCB0b3BSb3dDcm9zc2VkSGFsZkhlaWdodCA9IHRvcCA+IGJvdHRvbTtcbiAgICAgICAgICAgICAgICBjb25zdCBub01vcmVIb3Jpem9udGFsTGluZXNUb0RyYXcgPSB0b3BSb3dDcm9zc2VkSGFsZkhlaWdodDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsc011c3RSZW1haW5JbnNpZGVDb21wb25lbnRBcmVhID0gY292ZXJhZ2VNb2RlID09PSAnY291bnRQZXJpbWV0ZXJzJztcblxuICAgICAgICAgICAgICAgIGlmIChwaXhlbHNNdXN0UmVtYWluSW5zaWRlQ29tcG9uZW50QXJlYSAmJiBub01vcmVIb3Jpem9udGFsTGluZXNUb0RyYXcpIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbG9vcCBjb25kaXRpb24sIGhlcmUgaXQncyBtb3JlIHJlYWRhYmxlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdFRoZVJpZ2h0T2ZUaGVWaWV3cG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZWZ0ID49IHJlY3RMZWZ0IC0gb2Zmc2V0TGVmdCArIHJlY3RXaWR0aCB8fCBjdXJyZW50TGVmdCA+PSBjb2x1bW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXRUaGVSaWdodE9mVGhlVmlld3BvcnQpIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdFRoZUxlZnRPZlRoZVZpZXdwb3J0ID0gY3VycmVudExlZnQgPCAwOyAvLyBjYW4gaGFwcGVuIGZvciBlbGVtZW50cyBwbGFjZWQgb3V0c2lkZSB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgICAgICBpZiAoaXNBdFRoZUxlZnRPZlRoZVZpZXdwb3J0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIC8vIFwiRHJhd1wiIHRoZSB0b3Agcm93XG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICDwn5GJ8J+RifCfkYkgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCwgLCAsICxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgICAgICAgIGNvbnN0IHRvcFJvd0lzSW5zaWRlVGhlVmlld3BvcnQgPSB0b3AgPj0gMCAmJiB0b3AgPCByb3dMZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKHRvcFJvd0lzSW5zaWRlVGhlVmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Qml0bWFwUGl4ZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogY3VycmVudExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGl4ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY292ZXJhZ2VNb2RlID09PSAnY291bnRDb21wb25lbnRzJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBnb2FsIGlzIHdyaXRlIG9uZSBwaXhlbCBmb3IgZXZlcnkgcm93XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgYm90dG9tIHJvd1xuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLCAsICwgLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAg8J+RifCfkYnwn5GJIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICBjb25zdCBib3R0b21Sb3dJc0luc2lkZVRoZVZpZXdwb3J0ID0gYm90dG9tID49IDAgJiYgYm90dG9tIDwgcm93TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChib3R0b21Sb3dJc0luc2lkZVRoZVZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJpdG1hcFBpeGVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogYm90dG9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogY3VycmVudExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGl4ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFwiRHJhd1wiIHRoZSBjb2x1bW5zIGluIGJpdG1hcFxuICAgICAgICAgICAgY29uc3QgbGVmdCA9IE1hdGguZmxvb3IocmVjdExlZnQgLSBvZmZzZXRMZWZ0ICsgd2VpZ2h0TGluZSk7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IE1hdGguZmxvb3IocmVjdExlZnQgLSBvZmZzZXRMZWZ0ICsgcmVjdFdpZHRoIC0gMSAtIHdlaWdodExpbmUpO1xuICAgICAgICAgICAgZm9yIChsZXQgY3VycmVudFRvcCA9IE1hdGguZmxvb3IocmVjdFRvcCAtIG9mZnNldFRvcCk7IDsgY3VycmVudFRvcCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdmVyYWdlTW9kZSA9PT0gJ2NvdW50Q29tcG9uZW50cycpXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBnb2FsIGlzIHdyaXRlIG9uZSBwaXhlbCBmb3IgZXZlcnkgcm93XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gSGFwcGVucyB3aGVuIHRoZSB3ZWlnaHQgaXMgaGlnaGVyIHRoYW4gaGFsZiB0aGUgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LCBhbmQgc28gdG9wIGFuZCBib3R0b20gZmxpcC4gTG9vayBhdCBub01vcmVIb3Jpem9udGFsTGluZXNUb0RyYXcncyBjb21tZW50XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9Nb3JlVmVydGljYWxMaW5lc1RvRHJhdyA9IGxlZnQgPiByaWdodDtcbiAgICAgICAgICAgICAgICBpZiAobm9Nb3JlVmVydGljYWxMaW5lc1RvRHJhdykgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBsb29wIGNvbmRpdGlvbiwgaGVyZSBpdCdzIG1vcmUgcmVhZGFibGVcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VGhlQm90dG9tT2ZUaGVWaWV3cG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb3AgPj0gcmVjdFRvcCAtIG9mZnNldFRvcCArIHJlY3RIZWlnaHQgLSAxIHx8IGN1cnJlbnRUb3AgPiByb3dMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNBdFRoZUJvdHRvbU9mVGhlVmlld3BvcnQpIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdFRoZVRvcE9mVGhlVmlld3BvcnQgPSBjdXJyZW50VG9wIDwgMDsgLy8gY2FuIGhhcHBlbiBmb3IgZWxlbWVudHMgcGxhY2VkIG91dHNpZGUgdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGlzQXRUaGVUb3BPZlRoZVZpZXdwb3J0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIC8vIFwiRHJhd1wiIHRoZSBsZWZ0IGNvbHVtblxuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYdcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYdcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYdcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLCAsICwgLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg8J+RhlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg8J+RhlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg8J+RhlxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0Q29sdW1uSXNJbnNpZGVUaGVWaWV3cG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPj0gMCAmJiBjdXJyZW50VG9wIDwgcm93TGVuZ3RoICYmIGxlZnQgPCBjb2x1bW5MZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBpZiAobGVmdENvbHVtbklzSW5zaWRlVGhlVmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Qml0bWFwUGl4ZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogY3VycmVudFRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwaXhlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFwiRHJhd1wiIHRoZSByaWdodCBjb2x1bW5cbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYdcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+Rh1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCwgLCAsICxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+RhlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GGXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgY29uc3QgcmlndGh0Q29sdW1uSXNJbnNpZGVUaGVWaWV3cG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID49IDAgJiYgY3VycmVudFRvcCA8IHJvd0xlbmd0aCAmJiByaWdodCA8IGNvbHVtbkxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAocmlndGh0Q29sdW1uSXNJbnNpZGVUaGVWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCaXRtYXBQaXhlbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGN1cnJlbnRUb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiByaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwaXhlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRSZWN0Q29vcmRpbmF0ZShlbGVtZW50UmVjdCwgJ3dpZHRoJyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBpeGVsQ291bnRzID0gY3JlYXRlUGl4ZWxDb3VudHMoKTtcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGJpdG1hcC5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGl4ZWxBc051bWJlciA9IGJpdG1hcFtpXTtcbiAgICAgICAgaWYgKHBpeGVsQXNOdW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBwaXhlbCBhdCAke2l9ICh0aGlzIHNob3VsZCBiZSBhIFRTLW9ubHkgcHJvdGVjdGlvbilgKTtcbiAgICAgICAgfVxuICAgICAgICBwaXhlbENvdW50c1twaXhlbEFzTnVtYmVyXSsrO1xuICAgIH1cblxuICAgIGlmIChwcmludEFzY2lpQXJ0KSB7XG4gICAgICAgIGxvZ0JpdG1hcCh7XG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBiaXRtYXAsXG4gICAgICAgICAgICB3aWR0aDogZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBiaXRtYXAsXG4gICAgICAgIHBpeGVsQ291bnRzLFxuICAgICAgICBkdXJhdGlvbjogRGF0ZS5ub3coKSAtIHN0YXJ0LFxuICAgIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBNkNNLFNBQVUsV0FBVyxDQUFDLE1BQWMsRUFBQTtBQUN0QyxJQUFBLE1BQU0sRUFDRixNQUFNLEVBQ04sTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIscUJBQXFCLEdBQ3hCLEdBQUcsTUFBTSxDQUFDO0FBRVgsSUFBQSxNQUFNLEtBQUssR0FBaUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXZDLElBQUEsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUN2QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQ3hDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FDMUMsQ0FBQztBQUVGLElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRCxRQUFBLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FB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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRQaXhlbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2NvdW50UGl4ZWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUJpdG1hcCB9IGZyb20gJy4uL2JpdG1hcC9jcmVhdGVCaXRtYXAnO1xuaW1wb3J0IHsgbG9nQml0bWFwIH0gZnJvbSAnLi4vYml0bWFwL2xvZ0JpdG1hcCc7XG5pbXBvcnQgeyBzZXRCaXRtYXBQaXhlbCB9IGZyb20gJy4uL2JpdG1hcC9zZXRCaXRtYXBQaXhlbCc7XG5pbXBvcnQgeyBnZXRSZWN0Q29vcmRpbmF0ZSB9IGZyb20gJy4uL3JlY3QvcmVjdFByb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJpdG1hcCxcbiAgICBDaGlsZERhdGEsXG4gICAgQ29tcG9uZW50VHlwZSxcbiAgICBMb2dnZXIsXG4gICAgTWlsbGlzZWNvbmRzLFxuICAgIFBpeGVsQnlQaXhlbFR5cGUsXG4gICAgUGl4ZWxDb3VudHMsXG4gICAgUmVjdCxcbiAgICBXZWlnaHRCeUNvbXBvbmVudE5hbWUsXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGl4ZWxDb3VudHMgfSBmcm9tICcuL2NyZWF0ZVBpeGVsQ291bnRzJztcblxudHlwZSBQYXJhbXMgPSB7XG4gICAgbG9nZ2VyOiBMb2dnZXI7XG4gICAgZWxlbWVudFJlY3Q6IFJlY3Q7XG4gICAgcHJpbnRBc2NpaUFydDogYm9vbGVhbjtcbiAgICBjaGlsZHJlbkRhdGE6IENoaWxkRGF0YVtdO1xuICAgIHBpeGVsQnlQaXhlbFR5cGU6IFBpeGVsQnlQaXhlbFR5cGU7XG4gICAgb2Zmc2V0OiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfTtcbiAgICB3ZWlnaHRCeUNvbXBvbmVudE5hbWU6IFdlaWdodEJ5Q29tcG9uZW50TmFtZTtcbn07XG5cbnR5cGUgQ291bnRQaXhlbHNSZXN1bHQgPSB7XG4gICAgYml0bWFwOiBCaXRtYXA7XG4gICAgcGl4ZWxDb3VudHM6IFBpeGVsQ291bnRzO1xuICAgIGR1cmF0aW9uOiBNaWxsaXNlY29uZHM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY291bnRQaXhlbHMocGFyYW1zOiBQYXJhbXMpOiBDb3VudFBpeGVsc1Jlc3VsdCB7XG4gICAgY29uc3Qge1xuICAgICAgICBsb2dnZXIsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgZWxlbWVudFJlY3QsXG4gICAgICAgIGNoaWxkcmVuRGF0YSxcbiAgICAgICAgcHJpbnRBc2NpaUFydCxcbiAgICAgICAgcGl4ZWxCeVBpeGVsVHlwZSxcbiAgICAgICAgd2VpZ2h0QnlDb21wb25lbnROYW1lLFxuICAgIH0gPSBwYXJhbXM7XG5cbiAgICBjb25zdCBzdGFydDogTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGNyZWF0ZUJpdG1hcChcbiAgICAgICAgZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICdoZWlnaHQnKSxcbiAgICAgICAgZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGNoaWxkcmVuRGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGREYXRhID0gY2hpbGRyZW5EYXRhW2ldO1xuICAgICAgICBpZiAoIWNoaWxkRGF0YSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY2hpbGREYXRhIGF0ICR7aX0gKHRoaXMgc2hvdWxkIGJlIGEgVFMtb25seSBwcm90ZWN0aW9uKWApO1xuXG4gICAgICAgIGNvbnN0IHsgcmVjdCwgZHNDb21wb25lbnRUeXBlLCBpc0NoaWxkT2ZVaURzQ29tcG9uZW50LCBkc0NvbXBvbmVudE5hbWUgfSA9IGNoaWxkRGF0YTtcblxuICAgICAgICBjb25zdCBhZGp1c3RlZFNzQ29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZSA9IGlzQ2hpbGRPZlVpRHNDb21wb25lbnRcbiAgICAgICAgICAgID8gJ3Vua25vd25Ec0NvbXBvbmVudCcgLy8gY2hpbGRyZW4gb2YgdWkgY29tcG9uZW50cyBhcmUgdHJlYXRlZCBhcyBEUyBjb21wb25lbnRzIHRvb1xuICAgICAgICAgICAgOiBkc0NvbXBvbmVudFR5cGU7XG5cbiAgICAgICAgY29uc3QgcGl4ZWwgPSBwaXhlbEJ5UGl4ZWxUeXBlW2FkanVzdGVkU3NDb21wb25lbnRUeXBlXTtcblxuICAgICAgICBjb25zdCBvZmZzZXRUb3AgPSBvZmZzZXQudG9wO1xuICAgICAgICBjb25zdCBvZmZzZXRMZWZ0ID0gb2Zmc2V0LmxlZnQ7XG5cbiAgICAgICAgY29uc3QgcmVjdFRvcCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICd0b3AnKTtcbiAgICAgICAgY29uc3QgcmVjdExlZnQgPSBnZXRSZWN0Q29vcmRpbmF0ZShyZWN0LCAnbGVmdCcpO1xuICAgICAgICBjb25zdCByZWN0V2lkdGggPSBnZXRSZWN0Q29vcmRpbmF0ZShyZWN0LCAnd2lkdGgnKTtcbiAgICAgICAgY29uc3QgcmVjdEhlaWdodCA9IGdldFJlY3RDb29yZGluYXRlKHJlY3QsICdoZWlnaHQnKTtcbiAgICAgICAgY29uc3Qgcm93TGVuZ3RoID0gZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICdoZWlnaHQnKTtcbiAgICAgICAgY29uc3QgY29sdW1uTGVuZ3RoID0gZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpO1xuXG4gICAgICAgIGNvbnN0IHdlaWdodCA9IHdlaWdodEJ5Q29tcG9uZW50TmFtZVtkc0NvbXBvbmVudE5hbWUgPz8gJ25vbkRzQ29tcG9uZW50J107XG5cbiAgICAgICAgaWYgKHdlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHdlaWdodCBmb3IgJHtlbGVtZW50UmVjdH0gKHRoaXMgc2hvdWxkIGJlIGEgVFMtb25seSBwcm90ZWN0aW9uKWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgd2VpZ2h0TGluZSA9IDA7IHdlaWdodExpbmUgPCB3ZWlnaHQ7IHdlaWdodExpbmUrKykge1xuICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIHJvd3MgaW4gYml0bWFwXG4gICAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLmZsb29yKHJlY3RUb3AgLSBvZmZzZXRUb3AgKyB3ZWlnaHRMaW5lKTtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGguZmxvb3IocmVjdFRvcCAtIG9mZnNldFRvcCArIHJlY3RIZWlnaHQgLSAxIC0gd2VpZ2h0TGluZSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGN1cnJlbnRMZWZ0ID0gTWF0aC5mbG9vcihyZWN0TGVmdCAtIG9mZnNldExlZnQpOyA7IGN1cnJlbnRMZWZ0KyspIHtcbiAgICAgICAgICAgICAgICAvLyBIYXBwZW5zIHdoZW4gdGhlIHdlaWdodCBpcyBoaWdoZXIgdGhhbiBoYWxmIHRoZSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQsIGFuZCBzbyB0b3AgYW5kIGJvdHRvbSBmbGlwXG4gICAgICAgICAgICAgICAgLy8gRXguIGZpcnN0IGxvb3Agd2l0aCB3ZWlnaHQgPSA1XG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggdG9wXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCBib3R0b21cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kIGl0ZXJhdGlvbiB3aXRoIHdlaWdodCA9IDVcbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiCB0b3BcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIGJvdHRvbVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICAvLyB0aGlyZCBpdGVyYXRpb24gd2l0aCB3ZWlnaHQgPSA1ICh0aGUgbG9vcCBtdXN0IGJyZWFrKVxuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSwg8J+RiPCfkYjwn5GIIGJvdHRvbVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYggdG9wXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gXVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wUm93Q3Jvc3NlZEhhbGZIZWlnaHQgPSB0b3AgPiBib3R0b207XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9Nb3JlSG9yaXpvbnRhbExpbmVzVG9EcmF3ID0gdG9wUm93Q3Jvc3NlZEhhbGZIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICBpZiAobm9Nb3JlSG9yaXpvbnRhbExpbmVzVG9EcmF3KSBicmVhaztcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvb3AgY29uZGl0aW9uLCBoZXJlIGl0J3MgbW9yZSByZWFkYWJsZVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUaGVSaWdodE9mVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGVmdCA+PSByZWN0TGVmdCAtIG9mZnNldExlZnQgKyByZWN0V2lkdGggfHwgY3VycmVudExlZnQgPj0gY29sdW1uTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChpc0F0VGhlUmlnaHRPZlRoZVZpZXdwb3J0KSBicmVhaztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUaGVMZWZ0T2ZUaGVWaWV3cG9ydCA9IGN1cnJlbnRMZWZ0IDwgMDsgLy8gY2FuIGhhcHBlbiBmb3IgZWxlbWVudHMgcGxhY2VkIG91dHNpZGUgdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGlzQXRUaGVMZWZ0T2ZUaGVWaWV3cG9ydCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgdG9wIHJvd1xuICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAg8J+RifCfkYnwn5GJIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sIPCfkYjwn5GI8J+RiFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsICwgLCAsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vIF1cbiAgICAgICAgICAgICAgICBjb25zdCB0b3BSb3dJc0luc2lkZVRoZVZpZXdwb3J0ID0gdG9wID49IDAgJiYgdG9wIDwgcm93TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICh0b3BSb3dJc0luc2lkZVRoZVZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJpdG1hcFBpeGVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGN1cnJlbnRMZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGdldFJlY3RDb29yZGluYXRlKGVsZW1lbnRSZWN0LCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gXCJEcmF3XCIgdGhlIGJvdHRvbSByb3dcbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIFsgLCAsICwgLCAsTCwgLCAsICxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgIPCfkYnwn5GJ8J+RiSBbICwgLCAsICwgLEwsTCxMLEwsTCxdLCDwn5GI8J+RiPCfkYhcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgY29uc3QgYm90dG9tUm93SXNJbnNpZGVUaGVWaWV3cG9ydCA9IGJvdHRvbSA+PSAwICYmIGJvdHRvbSA8IHJvd0xlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoYm90dG9tUm93SXNJbnNpZGVUaGVWaWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCaXRtYXBQaXhlbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGN1cnJlbnRMZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGdldFJlY3RDb29yZGluYXRlKGVsZW1lbnRSZWN0LCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgY29sdW1ucyBpbiBiaXRtYXBcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3RMZWZ0IC0gb2Zmc2V0TGVmdCArIHdlaWdodExpbmUpO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLmZsb29yKHJlY3RMZWZ0IC0gb2Zmc2V0TGVmdCArIHJlY3RXaWR0aCAtIDEgLSB3ZWlnaHRMaW5lKTtcbiAgICAgICAgICAgIGZvciAobGV0IGN1cnJlbnRUb3AgPSBNYXRoLmZsb29yKHJlY3RUb3AgLSBvZmZzZXRUb3ApOyA7IGN1cnJlbnRUb3ArKykge1xuICAgICAgICAgICAgICAgIC8vIEhhcHBlbnMgd2hlbiB0aGUgd2VpZ2h0IGlzIGhpZ2hlciB0aGFuIGhhbGYgdGhlIGhlaWdodCBvZiB0aGUgZWxlbWVudCwgYW5kIHNvIHRvcCBhbmQgYm90dG9tIGZsaXAuIExvb2sgYXQgbm9Nb3JlSG9yaXpvbnRhbExpbmVzVG9EcmF3J3MgY29tbWVudFxuICAgICAgICAgICAgICAgIGNvbnN0IG5vTW9yZVZlcnRpY2FsTGluZXNUb0RyYXcgPSBsZWZ0ID4gcmlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKG5vTW9yZVZlcnRpY2FsTGluZXNUb0RyYXcpIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbG9vcCBjb25kaXRpb24sIGhlcmUgaXQncyBtb3JlIHJlYWRhYmxlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdFRoZUJvdHRvbU9mVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9wID49IHJlY3RUb3AgLSBvZmZzZXRUb3AgKyByZWN0SGVpZ2h0IC0gMSB8fCBjdXJyZW50VG9wID4gcm93TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXRUaGVCb3R0b21PZlRoZVZpZXdwb3J0KSBicmVhaztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUaGVUb3BPZlRoZVZpZXdwb3J0ID0gY3VycmVudFRvcCA8IDA7IC8vIGNhbiBoYXBwZW4gZm9yIGVsZW1lbnRzIHBsYWNlZCBvdXRzaWRlIHRoZSB2aWV3cG9ydFxuICAgICAgICAgICAgICAgIGlmIChpc0F0VGhlVG9wT2ZUaGVWaWV3cG9ydCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgbGVmdCBjb2x1bW5cbiAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsTCxMLEwsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCwgLCAsICxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdENvbHVtbklzSW5zaWRlVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICBsZWZ0ID49IDAgJiYgY3VycmVudFRvcCA8IHJvd0xlbmd0aCAmJiBsZWZ0IDwgY29sdW1uTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxlZnRDb2x1bW5Jc0luc2lkZVRoZVZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJpdG1hcFBpeGVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGN1cnJlbnRUb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGl4ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBcIkRyYXdcIiB0aGUgcmlnaHQgY29sdW1uXG4gICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GHXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYdcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+Rh1xuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICxMLEwsTCxMLEwsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLEwsICwgLCAsTCxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsTCxMLEwsTCxMLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgWyAsICwgLCAsICwgLCAsICwgLCAsXSxcbiAgICAgICAgICAgICAgICAvLyAgICBbICwgLCAsICwgLCAsICwgLCAsICxdLFxuICAgICAgICAgICAgICAgIC8vICAgIFsgLCAsICwgLCAsICwgLCAsICwgLF0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIPCfkYZcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg8J+RhlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICDwn5GGXG4gICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ3RodENvbHVtbklzSW5zaWRlVGhlVmlld3BvcnQgPVxuICAgICAgICAgICAgICAgICAgICByaWdodCA+PSAwICYmIGN1cnJlbnRUb3AgPCByb3dMZW5ndGggJiYgcmlnaHQgPCBjb2x1bW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKHJpZ3RodENvbHVtbklzSW5zaWRlVGhlVmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Qml0bWFwUGl4ZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjdXJyZW50VG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogcmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGl4ZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0UmVjdENvb3JkaW5hdGUoZWxlbWVudFJlY3QsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwaXhlbENvdW50cyA9IGNyZWF0ZVBpeGVsQ291bnRzKCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBiaXRtYXAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBpeGVsQXNOdW1iZXIgPSBiaXRtYXBbaV07XG4gICAgICAgIGlmIChwaXhlbEFzTnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGl4ZWwgYXQgJHtpfSAodGhpcyBzaG91bGQgYmUgYSBUUy1vbmx5IHByb3RlY3Rpb24pYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGl4ZWxDb3VudHNbcGl4ZWxBc051bWJlcl0rKztcbiAgICB9XG5cbiAgICBpZiAocHJpbnRBc2NpaUFydCkge1xuICAgICAgICBsb2dCaXRtYXAoe1xuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgYml0bWFwLFxuICAgICAgICAgICAgd2lkdGg6IGdldFJlY3RDb29yZGluYXRlKGVsZW1lbnRSZWN0LCAnd2lkdGgnKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYml0bWFwLFxuICAgICAgICBwaXhlbENvdW50cyxcbiAgICAgICAgZHVyYXRpb246IERhdGUubm93KCkgLSBzdGFydCxcbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWtDTSxTQUFVLFdBQVcsQ0FBQyxNQUFjLEVBQUE7QUFDdEMsSUFBQSxNQUFNLEVBQ0YsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEVBQ1gsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIscUJBQXFCLEdBQ3hCLEdBQUcsTUFBTSxDQUFDO0FBRVgsSUFBQSxNQUFNLEtBQUssR0FBaUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXZDLElBQUEsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUN2QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQ3hDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FDMUMsQ0FBQztBQUVGLElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRCxRQUFBLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxTQUFTO0FBQ1YsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUEsc0NBQUEsQ0FBd0MsQ0FBQyxDQUFDO1FBRWxGLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUVyRixNQUFNLHVCQUF1QixHQUFrQixzQkFBc0I7Y0FDL0Qsb0JB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 |
@@ -1,2 +0,2 @@ | ||
export type { Rect, Pixel, Bitmap, Logger, ChildData, PixelCounts, Milliseconds, CoverageMode, ComponentType, HighestNumber, ColorByPixelType, PixelByPixelType, CoverageContainer, ReadableCharByPixel, WeightByComponentName, DsVisualCoverageResult, DsVisualCoverageRunResult, CoverageContainerDomAttributeValue, DsVisualCoverageDeNormalizedResult, } from './types'; | ||
export type { Rect, Pixel, Bitmap, Logger, ChildData, PixelCounts, Milliseconds, ComponentType, HighestNumber, ColorByPixelType, PixelByPixelType, CoverageContainer, ReadableCharByPixel, WeightByComponentName, DsVisualCoverageResult, DsVisualCoverageRunResult, CoverageContainerDomAttributeValue, DsVisualCoverageDeNormalizedResult, } from './types'; | ||
export { logBitmap } from './bitmap/logBitmap'; | ||
@@ -3,0 +3,0 @@ export { countPixels } from './core/countPixels'; |
@@ -50,6 +50,2 @@ import type { ComponentNames } from '@preply/ds-visual-coverage-component-names'; | ||
export type Coverage = Percentage; | ||
/** | ||
* See countPixels for the differences between the two modes. | ||
*/ | ||
export type CoverageMode = 'countComponents' | 'countPerimeters'; | ||
export type DsVisualCoverageDeNormalizedResult = DsVisualCoverageResult & { | ||
@@ -56,0 +52,0 @@ team: string; |
{ | ||
"name": "@preply/ds-visual-coverage-core", | ||
"version": "0.99.1-beta.22520120a5c75760a7e3556443f375b03c4fe7c1.0+2252012", | ||
"version": "0.99.1-beta.6fcddb3f3b82fb62293b4c54958750a8ce252183.0+6fcddb3", | ||
"type": "module", | ||
@@ -22,3 +22,3 @@ "publishConfig": { | ||
"dependencies": { | ||
"@preply/ds-visual-coverage-component-names": "^0.99.1-beta.22520120a5c75760a7e3556443f375b03c4fe7c1.0+2252012" | ||
"@preply/ds-visual-coverage-component-names": "^0.99.1-beta.6fcddb3f3b82fb62293b4c54958750a8ce252183.0+6fcddb3" | ||
}, | ||
@@ -28,3 +28,3 @@ "peerDependencies": { | ||
}, | ||
"gitHead": "22520120a5c75760a7e3556443f375b03c4fe7c1" | ||
"gitHead": "6fcddb3f3b82fb62293b4c54958750a8ce252183" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
202749
1760