Socket
Socket
Sign inDemoInstall

optimal-select

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

optimal-select - npm Package Compare versions

Comparing version 3.2.0 to 3.3.0

lib/common.js

12

CHANGELOG.md

@@ -0,1 +1,11 @@

## [v3.3.0]
> October 7, 2016
- fix missing pass options to `getSingleSelector` ([#16](https://github.com/Autarc/optimal-select/pull/16), by [@Zhuoqing](https://github.com/Zhuoqing))
- fix optimization of child selectors with multiple classnames
- apply optimizations on simple selectors
- add default options and parameter checks for public API
- improve `getMultiSelector` for matching nested descendants
## [v3.2.0]

@@ -23,3 +33,3 @@ > June 18, 2016

- improve whitespace matching in classnames (thanks [@paulborges](https://github.com/Autarc/optimal-select/pull/6))
- improve whitespace matching in classnames ([#6](https://github.com/Autarc/optimal-select/pull/6) by [@paulborges](https://github.com/pauloborges))
- enable simplified ignore patterns based on strings/regex

@@ -26,0 +36,0 @@ - fix matching ignored classes as attributes

832

dist/optimal-select.js

@@ -62,3 +62,3 @@ (function webpackUniversalModuleDefinition(root, factory) {

});
exports.default = exports.optimize = exports.select = undefined;
exports.default = exports.common = exports.optimize = exports.select = undefined;

@@ -73,2 +73,8 @@ var _select2 = __webpack_require__(1);

var _common2 = __webpack_require__(5);
var _common = _interopRequireWildcard(_common2);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -78,2 +84,3 @@

exports.optimize = _optimize3.default;
exports.common = _common;
exports.default = _select3.default;

@@ -114,12 +121,17 @@

var _common = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
/**
* Choose action depending on the input (single/multi)
* @param {HTMLElement|Array} input - [description]
* @param {Object} options - [description]
* @return {string} - [description]
*
* @param {HTMLElement|Array.<HTMLElement>} input - [description]
* @param {Object} options - [description]
* @return {string} - [description]
*/
function getQuerySelector(input) {
var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

@@ -134,10 +146,13 @@ if (Array.isArray(input)) {

* Get a selector for the provided element
*
* @param {HTMLElement} element - [description]
* @param {Object} options - [description]
* @return {String} - [description]
* @return {string} - [description]
*/
function getSingleSelector(element, options) {
function getSingleSelector(element) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (element.nodeType === 3) {
return getSingleSelector(element.parentNode);
element = element.parentNode;
}

@@ -155,4 +170,4 @@ if (element.nodeType !== 1) {

// console.log(`
// selector: ${selector}
// optimized:${optimized}
// selector: ${selector}
// optimized: ${optimized}
// `)

@@ -168,65 +183,87 @@

/**
* Get a selector to match multiple children from a parent
* @param {Array} elements - [description]
* @param {Object} options - [description]
* @return {string} - [description]
* Get a selector to match multiple descendants from an ancestor
*
* @param {Array.<HTMLElement>} elements - [description]
* @param {Object} options - [description]
* @return {string} - [description]
*/
function getMultiSelector(elements, options) {
var commonParentNode = null;
var commonClassName = null;
var commonAttribute = null;
var commonTagName = null;
function getMultiSelector(elements) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
for (var i = 0, l = elements.length; i < l; i++) {
var element = elements[i];
if (!commonParentNode) {
// 1st entry
commonParentNode = element.parentNode;
commonClassName = element.className;
// commonAttribute = element.attributes
commonTagName = element.tagName;
} else if (commonParentNode !== element.parentNode) {
return console.log('Can\'t be efficiently mapped. It probably best to use multiple single selectors instead!');
}
if (element.className !== commonClassName) {
var classNames = [];
var longer, shorter;
if (element.className.length > commonClassName.length) {
longer = element.className;
shorter = commonClassName;
} else {
longer = commonClassName;
shorter = element.className;
}
shorter.split(' ').forEach(function (name) {
if (longer.indexOf(name) > -1) {
classNames.push(name);
}
});
commonClassName = classNames.join(' ');
}
// TODO:
// - check attributes
// if (element.attributes !== commonAttribute) {
//
// }
if (element.tagName !== commonTagName) {
commonTagName = null;
}
if (elements.some(function (element) {
return element.nodeType !== 1;
})) {
throw new Error('Invalid input - only an Array of HTMLElements or representations of them is supported!');
}
var selector = getSingleSelector(commonParentNode, options);
console.log(selector, commonClassName, commonAttribute, commonTagName);
var globalModified = (0, _adapt2.default)(elements[0], options);
if (commonClassName) {
return selector + ' > .' + commonClassName.replace(/ /g, '.');
var ancestor = (0, _common.getCommonAncestor)(elements, options);
var ancestorSelector = getSingleSelector(ancestor, options);
// TODO: consider usage of multiple selectors + parent-child relation
var commonSelectors = getCommonSelectors(elements);
var descendantSelector = commonSelectors[0];
var selector = ancestorSelector + ' ' + descendantSelector;
var selectorMatches = [].concat(_toConsumableArray(document.querySelectorAll(selector)));
if (!elements.every(function (element) {
return selectorMatches.some(function (entry) {
return entry === element;
});
})) {
// TODO: cluster matches to split into similar groups for sub selections
return console.warn('\n The selected elements can\'t be efficiently mapped.\n Its probably best to use multiple single selectors instead!\n ', elements);
}
// if (commonAttribute) {
//
// }
if (commonTagName) {
return selector + ' > ' + commonTagName.toLowerCase();
if (globalModified) {
delete global.document;
}
return selector + ' > *';
return selector;
}
/**
* Get selectors to describe a set of elements
*
* @param {Array.<HTMLElements>} elements - [description]
* @return {string} - [description]
*/
function getCommonSelectors(elements) {
var _getCommonProperties = (0, _common.getCommonProperties)(elements);
var classes = _getCommonProperties.classes;
var attributes = _getCommonProperties.attributes;
var tag = _getCommonProperties.tag;
var selectorPath = [];
if (tag) {
selectorPath.push(tag);
}
if (classes) {
var classSelector = classes.map(function (name) {
return '.' + name;
}).join('');
selectorPath.push(classSelector);
}
if (attributes) {
var attributeSelector = Object.keys(attributes).reduce(function (parts, name) {
parts.push('[' + name + '="' + attributes[name] + '"]');
return parts;
}, []).join('');
selectorPath.push(attributeSelector);
}
if (selectorPath.length) {
// TODO: check for parent-child relation
}
return [selectorPath.join('')];
}
/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

@@ -259,6 +296,7 @@

/**
* [adapt description]
* @param {[type]} element [description]
* @param {[type]} options [description]
* @return {[type]} [description]
* Modify the context based on the environment
*
* @param {HTMLELement} element - [description]
* @param {Object} options - [description]
* @return {boolean} - [description]
*/

@@ -417,5 +455,6 @@ function adapt(element, options) {

/**
* [getInstructions description]
* @param {[type]} selectors [description]
* @return {[type]} [description]
* Retrieve transformation steps
*
* @param {Array.<string>} selectors - [description]
* @return {Array.<Function>} - [description]
*/

@@ -437,143 +476,145 @@ function getInstructions(selectors) {

switch (true) {
(function () {
switch (true) {
// child: '>'
case />/.test(type):
instruction = function checkParent(node) {
return function (validate) {
return validate(node.parent) && node.parent;
// child: '>'
case />/.test(type):
instruction = function checkParent(node) {
return function (validate) {
return validate(node.parent) && node.parent;
};
};
};
break;
break;
// class: '.'
case /^\./.test(type):
var names = type.substr(1).split('.');
validate = function validate(node) {
var nodeClassName = node.attribs.class;
return nodeClassName && names.every(function (name) {
return nodeClassName.indexOf(name) > -1;
});
};
instruction = function checkClass(node, root) {
if (discover) {
return node.getElementsByClassName(names.join(' '));
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// class: '.'
case /^\./.test(type):
var names = type.substr(1).split('.');
validate = function validate(node) {
var nodeClassName = node.attribs.class;
return nodeClassName && names.every(function (name) {
return nodeClassName.indexOf(name) > -1;
});
};
instruction = function checkClass(node, root) {
if (discover) {
return node.getElementsByClassName(names.join(' '));
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// attribute: '[key="value"]'
case /^\[/.test(type):
var _type$replace$split = type.replace(/\[|\]|"/g, '').split('=');
// attribute: '[key="value"]'
case /^\[/.test(type):
var _type$replace$split = type.replace(/\[|\]|"/g, '').split('=');
var _type$replace$split2 = _slicedToArray(_type$replace$split, 2);
var _type$replace$split2 = _slicedToArray(_type$replace$split, 2);
var attributeKey = _type$replace$split2[0];
var attributeValue = _type$replace$split2[1];
var attributeKey = _type$replace$split2[0];
var attributeValue = _type$replace$split2[1];
validate = function validate(node) {
var hasAttribute = Object.keys(node.attribs).indexOf(attributeKey) > -1;
if (hasAttribute) {
// regard optional attributeValue
if (!attributeValue || node.attribs[attributeKey] === attributeValue) {
return true;
validate = function validate(node) {
var hasAttribute = Object.keys(node.attribs).indexOf(attributeKey) > -1;
if (hasAttribute) {
// regard optional attributeValue
if (!attributeValue || node.attribs[attributeKey] === attributeValue) {
return true;
}
}
}
return false;
};
instruction = function checkAttribute(node, root) {
if (discover) {
var _ret = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
return false;
};
instruction = function checkAttribute(node, root) {
if (discover) {
var _ret2 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// id: '#'
case /^#/.test(type):
var id = type.substr(1);
validate = function validate(node) {
return node.attribs.id === id;
};
instruction = function checkId(node, root) {
if (discover) {
var _ret2 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant, done) {
if (validate(descendant)) {
NodeList.push(descendant);
done();
}
});
return {
v: NodeList
};
}();
// id: '#'
case /^#/.test(type):
var id = type.substr(1);
validate = function validate(node) {
return node.attribs.id === id;
};
instruction = function checkId(node, root) {
if (discover) {
var _ret3 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant, done) {
if (validate(descendant)) {
NodeList.push(descendant);
done();
}
});
return {
v: NodeList
};
}();
if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// universal: '*'
case /\*/.test(type):
validate = function validate(node) {
return true;
};
instruction = function checkUniversal(node, root) {
if (discover) {
var _ret3 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
return NodeList.push(descendant);
});
return {
v: NodeList
};
}();
// universal: '*'
case /\*/.test(type):
validate = function validate(node) {
return true;
};
instruction = function checkUniversal(node, root) {
if (discover) {
var _ret4 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
return NodeList.push(descendant);
});
return {
v: NodeList
};
}();
if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
if ((typeof _ret4 === 'undefined' ? 'undefined' : _typeof(_ret4)) === "object") return _ret4.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// tag: '...'
default:
validate = function validate(node) {
return node.name === type;
};
instruction = function checkTag(node, root) {
if (discover) {
var _ret4 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
// tag: '...'
default:
validate = function validate(node) {
return node.name === type;
};
instruction = function checkTag(node, root) {
if (discover) {
var _ret5 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
if ((typeof _ret4 === 'undefined' ? 'undefined' : _typeof(_ret4)) === "object") return _ret4.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
}
if ((typeof _ret5 === 'undefined' ? 'undefined' : _typeof(_ret5)) === "object") return _ret5.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
}
})();

@@ -620,6 +661,6 @@ if (!pseudo) {

/**
* Recursive walki
* @param {[type]} nodes [description]
* @param {[type]} handler [description]
* @return {[type]} [description]
* Walking recursive to invoke callbacks
*
* @param {Array.<HTMLElement>} nodes - [description]
* @param {Function} handler - [description]
*/

@@ -639,7 +680,8 @@ function traverseDescendants(nodes, handler) {

/**
* [getAncestor description]
* @param {[type]} node [description]
* @param {[type]} root [description]
* @param {[type]} validate [description]
* @return {[type]} [description]
* Bubble up from bottom to top
*
* @param {HTMLELement} node - [description]
* @param {HTMLELement} root - [description]
* @param {Function} validate - [description]
* @return {HTMLELement} - [description]
*/

@@ -685,11 +727,8 @@ function getAncestor(node, root, validate) {

* Get the path of the element
*
* @param {HTMLElement} node - [description]
* @param {Object} options - [description]
* @return {String} - [description]
* @return {string} - [description]
*/
function match(node, options) {
var path = [];
var element = node;
var length = path.length;
var _options$root = options.root;

@@ -703,2 +742,6 @@ var root = _options$root === undefined ? document : _options$root;

var path = [];
var element = node;
var length = path.length;
var skipCompare = skip && (Array.isArray(skip) ? skip : [skip]).map(function (entry) {

@@ -789,7 +832,8 @@ if (typeof entry !== 'function') {

/**
* [checkClassGlobal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkClass' with global data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -801,7 +845,8 @@ function checkClassGlobal(element, path, ignore, root) {

/**
* [checkClassLocal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkClass' with local data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -813,7 +858,8 @@ function checkClassLocal(element, path, ignore) {

/**
* [checkClassChild description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkChild' with class data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -829,7 +875,8 @@ function checkClassChild(element, path, ignore) {

/**
* [checkAttributeGlobal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkAttribute' with global data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -841,7 +888,8 @@ function checkAttributeGlobal(element, path, ignore, root) {

/**
* [checkAttributeLocal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkAttribute' with local data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -853,7 +901,8 @@ function checkAttributeLocal(element, path, ignore) {

/**
* [checkAttributeChild description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkChild' with attribute data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -875,7 +924,8 @@ function checkAttributeChild(element, path, ignore) {

/**
* [checkTagGlobal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkTag' with global data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -887,7 +937,8 @@ function checkTagGlobal(element, path, ignore, root) {

/**
* [checkTagLocal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkTag' with local data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -899,7 +950,8 @@ function checkTagLocal(element, path, ignore) {

/**
* [checkTabChildren description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkChild' with tag data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -915,7 +967,8 @@ function checkTagChild(element, path, ignore) {

/**
* [checkId description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Lookup unique identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -932,8 +985,9 @@ function checkId(element, path, ignore) {

/**
* [checkClass description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {Boolean} - [description]
* Lookup class identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {boolean} - [description]
*/

@@ -954,8 +1008,9 @@ function checkClass(element, path, ignore, parent) {

/**
* [checkAttribute description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {Boolean} - [description]
* Lookup attribute identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {boolean} - [description]
*/

@@ -981,8 +1036,9 @@ function checkAttribute(element, path, ignore, parent) {

/**
* [checkTag description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {HTMLElement} parent - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Lookup tag identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {HTMLElement} parent - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -1003,8 +1059,10 @@ function checkTag(element, path, ignore, parent) {

/**
* [checkChild description]
* Lookup child identfier
*
* Note: childTags is a custom property to use a view filter for tags on for virutal elements
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {String} selector - [description]
* @return {Boolean} - [description]
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {String} selector - [description]
* @return {boolean} - [description]
*/

@@ -1024,8 +1082,9 @@ function checkChild(element, path, selector) {

/**
* [checkIgnore description]
* @param {Function} predicate [description]
* @param {string} name [description]
* @param {string} value [description]
* @param {Function} defaultPredicate [description]
* @return {boolean} [description]
* Validate with custom and default functions
*
* @param {Function} predicate - [description]
* @param {string} name - [description]
* @param {string} value - [description]
* @param {Function} defaultPredicate - [description]
* @return {boolean} - [description]
*/

@@ -1063,2 +1122,3 @@ function checkIgnore(predicate, name, value, defaultPredicate) {

* Apply different optimization techniques
*
* @param {string} selector - [description]

@@ -1069,5 +1129,9 @@ * @param {HTMLElement} element - [description]

function optimize(selector, element) {
var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
if (!element || element.nodeType !== 1) {
throw new Error('Invalid input - to compare HTMLElements its necessary to provide a reference of the node! (missing "element")');
}
var globalModified = (0, _adapt2.default)(element, options);

@@ -1079,3 +1143,3 @@

if (path.length < 3) {
return selector;
return optimizePart('', selector, '', element);
}

@@ -1111,2 +1175,3 @@

* Improve a chunk of the selector
*
* @param {string} prePart - [description]

@@ -1182,4 +1247,7 @@ * @param {string} current - [description]

while (names.length) {
var partial = current.replace(names.shift(), '');
var partial = current.replace(names.shift(), '').trim();
var pattern = '' + prePart + partial + postPart;
if (!pattern || partial === '>') {
break;
}
var matches = document.querySelectorAll(pattern);

@@ -1214,2 +1282,178 @@ if (matches.length === 1 && matches[0] === element) {

/***/ },
/* 5 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getCommonAncestor = getCommonAncestor;
exports.getCommonProperties = getCommonProperties;
/**
* # Common
*
* Group similars
*/
/**
* Find the last common ancestor of elements
*
* @param {Array.<HTMLElements>} elements - [description]
* @return {HTMLElement} - [description]
*/
function getCommonAncestor(elements) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _options$root = options.root;
var root = _options$root === undefined ? document : _options$root;
var _options$skip = options.skip;
var skip = _options$skip === undefined ? null : _options$skip;
var _options$ignore = options.ignore;
var ignore = _options$ignore === undefined ? {} : _options$ignore;
var ancestors = [];
elements.forEach(function (element, index) {
var parents = [];
while (element !== root) {
element = element.parentNode;
parents.unshift(element);
}
ancestors[index] = parents;
});
ancestors.sort(function (curr, next) {
return curr.length - next.length;
});
var shallowAncestor = ancestors.shift();
var ancestor = null;
var _loop = function _loop() {
var parent = shallowAncestor[i];
var missing = ancestors.some(function (otherParents) {
return !otherParents.some(function (otherParent) {
return otherParent === parent;
});
});
if (missing) {
// TODO: find similar sub-parents, not the top root, e.g. sharing a class selector
return 'break';
}
ancestor = parent;
};
for (var i = 0, l = shallowAncestor.length; i < l; i++) {
var _ret = _loop();
if (_ret === 'break') break;
}
return ancestor;
}
/**
* Get a set of common properties of elements
*
* @param {Array.<HTMLElement>} elements - [description]
* @return {Object} - [description]
*/
function getCommonProperties(elements) {
var commonProperties = {
classes: [],
attributes: {},
tag: null
};
elements.forEach(function (element) {
var commonClasses = commonProperties.classes;
var commonAttributes = commonProperties.attributes;
var commonTag = commonProperties.tag;
// ~ classes
if (commonClasses !== undefined) {
(function () {
var classes = element.getAttribute('class').trim().split(' ');
// TODO: restructure, cleanup, 2x set, 2x delete || always replacing with new collection instead modify
if (classes.length) {
if (!commonClasses.length) {
commonProperties.classes = classes;
} else {
commonClasses = commonClasses.filter(function (entry) {
return classes.some(function (name) {
return name === entry;
});
});
if (commonClasses.length) {
commonProperties.classes = commonClasses;
} else {
delete commonProperties.classes;
}
}
} else {
delete commonProperties.classes;
}
})();
}
// ~ attributes
if (commonAttributes !== undefined) {
(function () {
var elementAttributes = element.attributes;
var attributes = Object.keys(elementAttributes).reduce(function (attributes, key) {
var attribute = elementAttributes[key];
var attributeName = attribute.name;
if (attributeName !== 'class') {
attributes[attributeName] = attribute.value;
}
return attributes;
}, {});
var attributesNames = Object.keys(attributes);
var commonAttributesNames = Object.keys(commonAttributes);
if (attributesNames.length) {
if (!commonAttributesNames.length) {
commonProperties.attributes = attributes;
} else {
commonAttributes = commonAttributesNames.reduce(function (nextCommonAttributes, name) {
var value = commonAttributes[name];
if (valeu === attributes[name]) {
nextCommonAttributes[name] = value;
}
return nextCommonAttributes;
}, {});
if (Object.keys(commonAttributes).length) {
commonProperties.attributes = commonAttributes;
} else {
delete commonProperties.attributes;
}
}
} else {
delete commonProperties.attributes;
}
})();
}
// ~ tag
if (commonTag !== undefined) {
var tag = element.tagName.toLowerCase();
if (!commonTag) {
commonProperties.tag = tag;
} else if (tag !== commonTag) {
delete commonProperties.tag;
}
}
});
return commonProperties;
}
/***/ }

@@ -1216,0 +1460,0 @@ /******/ ])

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.OptimalSelect=e():t.OptimalSelect=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={exports:{},id:r,loaded:!1};return t[r].call(u.exports,u,u.exports,e),u.loaded=!0,u.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.optimize=e.select=void 0;var u=n(4),i=r(u),o=n(2),a=r(o);e.select=i.default,e.optimize=a.default,e.default=i.default},function(t,e){(function(n){"use strict";function r(t){return Array.isArray(t)?t:Array.from(t)}function u(t,e){if(n.document)return!1;var u=e.context;n.document=u||function(){for(var e=t;e.parent;)e=e.parent;return e}();var a=Object.getPrototypeOf(n.document);return Object.getOwnPropertyDescriptor(a,"childTags")||Object.defineProperty(a,"childTags",{enumerable:!0,get:function(){return this.children.filter(function(t){return"tag"===t.type||"script"===t.type||"style"===t.type})}}),Object.getOwnPropertyDescriptor(a,"attributes")||Object.defineProperty(a,"attributes",{enumerable:!0,get:function(){var t=this.attribs,e=Object.keys(t),n=e.reduce(function(e,n,r){return e[r]={name:n,value:t[n]},e},{});return Object.defineProperty(n,"length",{enumerable:!1,configurable:!1,value:e.length}),n}}),a.getAttribute||(a.getAttribute=function(t){return this.attribs[t]||null}),a.getElementsByTagName||(a.getElementsByTagName=function(t){var e=[];return o(this.childTags,function(n){n.name!==t&&"*"!==t||e.push(n)}),e}),a.getElementsByClassName||(a.getElementsByClassName=function(t){var e=t.trim().replace(/\s+/g," ").split(" "),n=[];return o([this],function(t){var r=t.attribs.class;r&&e.every(function(t){return r.indexOf(t)>-1})&&n.push(t)}),n}),a.querySelectorAll||(a.querySelectorAll=function(t){var e=this;t=t.replace(/(>)(\S)/g,"$1 $2").trim();var n=i(t),u=r(n),o=u[0],a=u.slice(1),f=a.length;return o(this).filter(function(t){for(var n=0;f>n;){if(t=a[n](t,e),!t)return!1;n+=1}return!0})}),a.contains||(a.contains=function(t){var e=!1;return o([this],function(n,r){n===t&&(e=!0,r())}),e}),!0}function i(t){return t.split(" ").reverse().map(function(t,e){var n=0===e,r=t.split(":"),u=c(r,2),i=u[0],l=u[1],s=null,d=null;switch(!0){case/>/.test(i):d=function(t){return function(e){return e(t.parent)&&t.parent}};break;case/^\./.test(i):var p=i.substr(1).split(".");s=function(t){var e=t.attribs.class;return e&&p.every(function(t){return e.indexOf(t)>-1})},d=function(t,e){return n?t.getElementsByClassName(p.join(" ")):"function"==typeof t?t(s):a(t,e,s)};break;case/^\[/.test(i):var v=i.replace(/\[|\]|"/g,"").split("="),y=c(v,2),h=y[0],g=y[1];s=function(t){var e=Object.keys(t.attribs).indexOf(h)>-1;return e&&(!g||t.attribs[h]===g)},d=function(t,e){if(n){var r=function(){var e=[];return o([t],function(t){s(t)&&e.push(t)}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":f(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)};break;case/^#/.test(i):var m=i.substr(1);s=function(t){return t.attribs.id===m},d=function(t,e){if(n){var r=function(){var e=[];return o([t],function(t,n){s(t)&&(e.push(t),n())}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":f(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)};break;case/\*/.test(i):s=function(t){return!0},d=function(t,e){if(n){var r=function(){var e=[];return o([t],function(t){return e.push(t)}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":f(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)};break;default:s=function(t){return t.name===i},d=function(t,e){if(n){var r=function(){var e=[];return o([t],function(t){s(t)&&e.push(t)}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":f(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)}}if(!l)return d;var b=l.match(/-(child|type)\((\d+)\)$/),j=b[1],S=parseInt(b[2],10)-1,O=function(t){if(t){var e=t.parent.childTags;"type"===j&&(e=e.filter(s));var n=e.findIndex(function(e){return e===t});if(n===S)return!0}return!1};return function(t){var e=d(t);return n?e.reduce(function(t,e){return O(e)&&t.push(e),t},[]):O(e)&&e}})}function o(t,e){t.forEach(function(t){var n=!0;e(t,function(){return n=!1}),t.childTags&&n&&o(t.childTags,e)})}function a(t,e,n){for(;t.parent;){if(t=t.parent,n(t))return t;if(t===e)break}return null}Object.defineProperty(e,"__esModule",{value:!0});var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},c=function(){function t(t,e){var n=[],r=!0,u=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(r=(o=a.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(f){u=!0,i=f}finally{try{!r&&a.return&&a.return()}finally{if(u)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();e.default=u,t.exports=e.default}).call(e,function(){return this}())},function(t,e,n){(function(r){"use strict";function u(t){return t&&t.__esModule?t:{"default":t}}function i(t,e){var n=arguments.length<=2||void 0===arguments[2]?{}:arguments[2],u=(0,f.default)(e,n),i=t.replace(/> /g,">").split(/\s+(?=(?:(?:[^"]*"){2})*[^"]*$)/);if(i.length<3)return t;for(var a=[i.pop()];i.length>1;){var c=i.pop(),l=i.join(" "),s=a.join(" "),d=l+" "+s,p=document.querySelectorAll(d);1!==p.length&&a.unshift(o(l,c,s,e))}return a.unshift(i[0]),i=a,i[0]=o("",i[0],i.slice(1).join(" "),e),i[i.length-1]=o(i.slice(0,-1).join(" "),i[i.length-1],"",e),u&&delete r.document,i.join(" ").replace(/>/g,"> ").trim()}function o(t,e,n,r){if(t.length&&(t+=" "),n.length&&(n=" "+n),/\[*\]/.test(e)){var u=e.replace(/=.*$/,"]"),i=""+t+u+n,o=document.querySelectorAll(i);if(1===o.length&&o[0]===r)e=u;else for(var a=document.querySelectorAll(""+t+u),f=0,c=a.length;c>f;f++)if(a[f].contains(r)){var l=a[f].tagName.toLowerCase(),i=""+t+l+n,o=document.querySelectorAll(i);1===o.length&&o[0]===r&&(e=l);break}}if(/>/.test(e)){var s=e.replace(/>/,""),i=""+t+s+n,o=document.querySelectorAll(i);1===o.length&&o[0]===r&&(e=s)}if(/:nth-child/.test(e)){var d=e.replace(/nth-child/g,"nth-of-type"),i=""+t+d+n,o=document.querySelectorAll(i);1===o.length&&o[0]===r&&(e=d)}if(/\.\S+\.\S+/.test(e)){for(var p=e.trim().split(".").slice(1).map(function(t){return"."+t}).sort(function(t,e){return t.length-e.length});p.length;){var v=e.replace(p.shift(),""),i=""+t+v+n,o=document.querySelectorAll(i);1===o.length&&o[0]===r&&(e=v)}if(e&&e.match(/\./g).length>2)for(var y=document.querySelectorAll(""+t+e),f=0,c=y.length;c>f;f++)if(y[f].contains(r)){var h=y[f].tagName.toLowerCase(),i=""+t+h+n,o=document.querySelectorAll(i);1===o.length&&o[0]===r&&(e=h);break}}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=i;var a=n(1),f=u(a);t.exports=e.default}).call(e,function(){return this}())},function(t,e){"use strict";function n(t,e){var n=[],p=t,v=n.length,y=e.root,h=void 0===y?document:y,g=e.skip,m=void 0===g?null:g,b=e.ignore,j=void 0===b?{}:b,S=m&&(Array.isArray(m)?m:[m]).map(function(t){return"function"!=typeof t?function(e){return e===t}:t}),O=function(t){return m&&S.some(function(e){return e(t)})},A=!1;for(Object.keys(j).forEach(function(t){"class"===t&&(A=!0);var e=j[t];"function"!=typeof e&&("number"==typeof e&&(e=e.toString()),"string"==typeof e&&(e=new RegExp(e)),j[t]=e.test.bind(e))}),A&&!function(){var t=j.attribute;j.attribute=function(e,n,r){return j.class(n)||t&&t(e,n,r)}}();p!==h;){if(O(p)!==!0){if(d(p,n,j))break;if(r(p,n,j,h))break;if(o(p,n,j,h))break;if(c(p,n,j,h))break;u(p,n,j),n.length===v&&a(p,n,j),n.length===v&&l(p,n,j),n.length===v&&i(p,n,j),n.length===v&&f(p,n,j),n.length===v&&s(p,n,j)}p=p.parentNode,v=n.length}return p===h&&n.unshift("*"),n.join(" ")}function r(t,e,n,r){return p(t,e,n,r)}function u(t,e,n){return p(t,e,n,t.parentNode)}function i(t,e,n){var r=t.getAttribute("class");return g(n.class,r)?!1:h(t,e,"."+r.trim().replace(/\s+/g,"."))}function o(t,e,n,r){return v(t,e,n,r)}function a(t,e,n){return v(t,e,n,t.parentNode)}function f(t,e,n){var r=t.attributes;return Object.keys(r).some(function(u){var i=r[u],o=i.name,a=i.value;if(g(n.attribute,o,a,m.attribute))return!1;var f="["+o+'="'+a+'"]';return h(t,e,f)})}function c(t,e,n,r){return y(t,e,n,r)}function l(t,e,n){return y(t,e,n,t.parentNode)}function s(t,e,n){var r=t.tagName.toLowerCase();return g(n.tag,r)?!1:h(t,e,r)}function d(t,e,n){var r=t.getAttribute("id");return g(n.id,r)?!1:(e.unshift("#"+r),!0)}function p(t,e,n,r){var u=t.getAttribute("class");if(g(n.class,u))return!1;var i=r.getElementsByClassName(u);return 1===i.length?(e.unshift("."+u.trim().replace(/\s+/g,".")),!0):!1}function v(t,e,n,r){var u=t.attributes;return Object.keys(u).some(function(t){var i=u[t],o=i.name,a=i.value;if(g(n.attribute,o,a,m.attribute))return!1;var f="["+o+'="'+a+'"]',c=r.querySelectorAll(f);return 1===c.length?(e.unshift(f),!0):void 0})}function y(t,e,n,r){var u=t.tagName.toLowerCase();if(g(n.tag,u))return!1;var i=r.getElementsByTagName(u);return 1===i.length?(e.unshift(u),!0):!1}function h(t,e,n){for(var r=t.parentNode,u=r.childTags||r.children,i=0,o=u.length;o>i;i++)if(u[i]===t)return e.unshift("> "+n+":nth-child("+(i+1)+")"),!0;return!1}function g(t,e,n,r){if(!e)return!0;var u=t||r;return u?u(e,n||e,r):!1}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var m={attribute:function(t){return["style","data-reactid","data-react-checksum"].indexOf(t)>-1}};t.exports=e.default},function(t,e,n){(function(t){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function u(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return Array.isArray(t)?o(t,e):i(t,e)}function i(e,n){if(3===e.nodeType)return i(e.parentNode);if(1!==e.nodeType)throw new Error('Invalid input - only HTMLElements or representations of them are supported! (not "'+("undefined"==typeof e?"undefined":a(e))+'")');var r=(0,c.default)(e,n),u=(0,s.default)(e,n),o=(0,p.default)(u,e,n);return r&&delete t.document,o}function o(t,e){for(var n=null,r=null,u=null,o=null,a=0,f=t.length;f>a;a++){var c=t[a];if(n){if(n!==c.parentNode)return console.log("Can't be efficiently mapped. It probably best to use multiple single selectors instead!")}else n=c.parentNode,r=c.className,o=c.tagName;if(c.className!==r){var l,s,d=[];c.className.length>r.length?(l=c.className,s=r):(l=r,s=c.className),s.split(" ").forEach(function(t){l.indexOf(t)>-1&&d.push(t)}),r=d.join(" ")}c.tagName!==o&&(o=null)}var p=i(n,e);return console.log(p,r,u,o),r?p+" > ."+r.replace(/ /g,"."):o?p+" > "+o.toLowerCase():p+" > *"}Object.defineProperty(e,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};e.default=u,e.getSingleSelector=i,e.getMultiSelector=o;var f=n(1),c=r(f),l=n(3),s=r(l),d=n(2),p=r(d)}).call(e,function(){return this}())}])});
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.OptimalSelect=e():t.OptimalSelect=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={exports:{},id:r,loaded:!1};return t[r].call(u.exports,u,u.exports,e),u.loaded=!0,u.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function u(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.common=e.optimize=e.select=void 0;var o=n(5),i=u(o),a=n(3),c=u(a),f=n(2),l=r(f);e.select=i.default,e.optimize=c.default,e.common=l,e.default=i.default},function(t,e){(function(n){"use strict";function r(t){return Array.isArray(t)?t:Array.from(t)}function u(t,e){if(n.document)return!1;var u=e.context;n.document=u||function(){for(var e=t;e.parent;)e=e.parent;return e}();var a=Object.getPrototypeOf(n.document);return Object.getOwnPropertyDescriptor(a,"childTags")||Object.defineProperty(a,"childTags",{enumerable:!0,get:function(){return this.children.filter(function(t){return"tag"===t.type||"script"===t.type||"style"===t.type})}}),Object.getOwnPropertyDescriptor(a,"attributes")||Object.defineProperty(a,"attributes",{enumerable:!0,get:function(){var t=this.attribs,e=Object.keys(t),n=e.reduce(function(e,n,r){return e[r]={name:n,value:t[n]},e},{});return Object.defineProperty(n,"length",{enumerable:!1,configurable:!1,value:e.length}),n}}),a.getAttribute||(a.getAttribute=function(t){return this.attribs[t]||null}),a.getElementsByTagName||(a.getElementsByTagName=function(t){var e=[];return i(this.childTags,function(n){n.name!==t&&"*"!==t||e.push(n)}),e}),a.getElementsByClassName||(a.getElementsByClassName=function(t){var e=t.trim().replace(/\s+/g," ").split(" "),n=[];return i([this],function(t){var r=t.attribs.class;r&&e.every(function(t){return r.indexOf(t)>-1})&&n.push(t)}),n}),a.querySelectorAll||(a.querySelectorAll=function(t){var e=this;t=t.replace(/(>)(\S)/g,"$1 $2").trim();var n=o(t),u=r(n),i=u[0],a=u.slice(1),c=a.length;return i(this).filter(function(t){for(var n=0;n<c;){if(t=a[n](t,e),!t)return!1;n+=1}return!0})}),a.contains||(a.contains=function(t){var e=!1;return i([this],function(n,r){n===t&&(e=!0,r())}),e}),!0}function o(t){return t.split(" ").reverse().map(function(t,e){var n=0===e,r=t.split(":"),u=f(r,2),o=u[0],l=u[1],s=null,d=null;if(function(){switch(!0){case/>/.test(o):d=function(t){return function(e){return e(t.parent)&&t.parent}};break;case/^\./.test(o):var t=o.substr(1).split(".");s=function(e){var n=e.attribs.class;return n&&t.every(function(t){return n.indexOf(t)>-1})},d=function(e,r){return n?e.getElementsByClassName(t.join(" ")):"function"==typeof e?e(s):a(e,r,s)};break;case/^\[/.test(o):var e=o.replace(/\[|\]|"/g,"").split("="),r=f(e,2),u=r[0],l=r[1];s=function(t){var e=Object.keys(t.attribs).indexOf(u)>-1;return!(!e||l&&t.attribs[u]!==l)},d=function(t,e){if(n){var r=function(){var e=[];return i([t],function(t){s(t)&&e.push(t)}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":c(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)};break;case/^#/.test(o):var p=o.substr(1);s=function(t){return t.attribs.id===p},d=function(t,e){if(n){var r=function(){var e=[];return i([t],function(t,n){s(t)&&(e.push(t),n())}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":c(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)};break;case/\*/.test(o):s=function(t){return!0},d=function(t,e){if(n){var r=function(){var e=[];return i([t],function(t){return e.push(t)}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":c(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)};break;default:s=function(t){return t.name===o},d=function(t,e){if(n){var r=function(){var e=[];return i([t],function(t){s(t)&&e.push(t)}),{v:e}}();if("object"===("undefined"==typeof r?"undefined":c(r)))return r.v}return"function"==typeof t?t(s):a(t,e,s)}}}(),!l)return d;var p=l.match(/-(child|type)\((\d+)\)$/),v=p[1],y=parseInt(p[2],10)-1,h=function(t){if(t){var e=t.parent.childTags;"type"===v&&(e=e.filter(s));var n=e.findIndex(function(e){return e===t});if(n===y)return!0}return!1};return function(t){var e=d(t);return n?e.reduce(function(t,e){return h(e)&&t.push(e),t},[]):h(e)&&e}})}function i(t,e){t.forEach(function(t){var n=!0;e(t,function(){return n=!1}),t.childTags&&n&&i(t.childTags,e)})}function a(t,e,n){for(;t.parent;){if(t=t.parent,n(t))return t;if(t===e)break}return null}Object.defineProperty(e,"__esModule",{value:!0});var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},f=function(){function t(t,e){var n=[],r=!0,u=!1,o=void 0;try{for(var i,a=t[Symbol.iterator]();!(r=(i=a.next()).done)&&(n.push(i.value),!e||n.length!==e);r=!0);}catch(c){u=!0,o=c}finally{try{!r&&a.return&&a.return()}finally{if(u)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();e.default=u,t.exports=e.default}).call(e,function(){return this}())},function(t,e){"use strict";function n(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.root,r=void 0===n?document:n,u=(e.skip,e.ignore,[]);t.forEach(function(t,e){for(var n=[];t!==r;)t=t.parentNode,n.unshift(t);u[e]=n}),u.sort(function(t,e){return t.length-e.length});for(var o=u.shift(),i=null,a=function(){var t=o[c],e=u.some(function(e){return!e.some(function(e){return e===t})});return e?"break":void(i=t)},c=0,f=o.length;c<f;c++){var l=a();if("break"===l)break}return i}function r(t){var e={classes:[],attributes:{},tag:null};return t.forEach(function(t){var n=e.classes,r=e.attributes,u=e.tag;if(void 0!==n&&!function(){var r=t.getAttribute("class").trim().split(" ");r.length?n.length?(n=n.filter(function(t){return r.some(function(e){return e===t})}),n.length?e.classes=n:delete e.classes):e.classes=r:delete e.classes}(),void 0!==r&&!function(){var n=t.attributes,u=Object.keys(n).reduce(function(t,e){var r=n[e],u=r.name;return"class"!==u&&(t[u]=r.value),t},{}),o=Object.keys(u),i=Object.keys(r);o.length?i.length?(r=i.reduce(function(t,e){var n=r[e];return valeu===u[e]&&(t[e]=n),t},{}),Object.keys(r).length?e.attributes=r:delete e.attributes):e.attributes=u:delete e.attributes}(),void 0!==u){var o=t.tagName.toLowerCase();u?o!==u&&delete e.tag:e.tag=o}}),e}Object.defineProperty(e,"__esModule",{value:!0}),e.getCommonAncestor=n,e.getCommonProperties=r},function(t,e,n){(function(r){"use strict";function u(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e||1!==e.nodeType)throw new Error('Invalid input - to compare HTMLElements its necessary to provide a reference of the node! (missing "element")');var u=(0,c.default)(e,n),o=t.replace(/> /g,">").split(/\s+(?=(?:(?:[^"]*"){2})*[^"]*$)/);if(o.length<3)return i("",t,"",e);for(var a=[o.pop()];o.length>1;){var f=o.pop(),l=o.join(" "),s=a.join(" "),d=l+" "+s,p=document.querySelectorAll(d);1!==p.length&&a.unshift(i(l,f,s,e))}return a.unshift(o[0]),o=a,o[0]=i("",o[0],o.slice(1).join(" "),e),o[o.length-1]=i(o.slice(0,-1).join(" "),o[o.length-1],"",e),u&&delete r.document,o.join(" ").replace(/>/g,"> ").trim()}function i(t,e,n,r){if(t.length&&(t+=" "),n.length&&(n=" "+n),/\[*\]/.test(e)){var u=e.replace(/=.*$/,"]"),o=""+t+u+n,i=document.querySelectorAll(o);if(1===i.length&&i[0]===r)e=u;else for(var a=document.querySelectorAll(""+t+u),c=0,f=a.length;c<f;c++)if(a[c].contains(r)){var l=a[c].tagName.toLowerCase(),o=""+t+l+n,i=document.querySelectorAll(o);1===i.length&&i[0]===r&&(e=l);break}}if(/>/.test(e)){var s=e.replace(/>/,""),o=""+t+s+n,i=document.querySelectorAll(o);1===i.length&&i[0]===r&&(e=s)}if(/:nth-child/.test(e)){var d=e.replace(/nth-child/g,"nth-of-type"),o=""+t+d+n,i=document.querySelectorAll(o);1===i.length&&i[0]===r&&(e=d)}if(/\.\S+\.\S+/.test(e)){for(var p=e.trim().split(".").slice(1).map(function(t){return"."+t}).sort(function(t,e){return t.length-e.length});p.length;){var v=e.replace(p.shift(),"").trim(),o=""+t+v+n;if(!o||">"===v)break;var i=document.querySelectorAll(o);1===i.length&&i[0]===r&&(e=v)}if(e&&e.match(/\./g).length>2)for(var y=document.querySelectorAll(""+t+e),c=0,f=y.length;c<f;c++)if(y[c].contains(r)){var h=y[c].tagName.toLowerCase(),o=""+t+h+n,i=document.querySelectorAll(o);1===i.length&&i[0]===r&&(e=h);break}}return e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var a=n(1),c=u(a);t.exports=e.default}).call(e,function(){return this}())},function(t,e){"use strict";function n(t,e){var n=e.root,p=void 0===n?document:n,v=e.skip,y=void 0===v?null:v,h=e.ignore,m=void 0===h?{}:h,g=[],b=t,j=g.length,A=y&&(Array.isArray(y)?y:[y]).map(function(t){return"function"!=typeof t?function(e){return e===t}:t}),O=function(t){return y&&A.some(function(e){return e(t)})},S=!1;for(Object.keys(m).forEach(function(t){"class"===t&&(S=!0);var e=m[t];"function"!=typeof e&&("number"==typeof e&&(e=e.toString()),"string"==typeof e&&(e=new RegExp(e)),m[t]=e.test.bind(e))}),S&&!function(){var t=m.attribute;m.attribute=function(e,n,r){return m.class(n)||t&&t(e,n,r)}}();b!==p;){if(O(b)!==!0){if(d(b,g,m))break;if(r(b,g,m,p))break;if(i(b,g,m,p))break;if(f(b,g,m,p))break;u(b,g,m),g.length===j&&a(b,g,m),g.length===j&&l(b,g,m),g.length===j&&o(b,g,m),g.length===j&&c(b,g,m),g.length===j&&s(b,g,m)}b=b.parentNode,j=g.length}return b===p&&g.unshift("*"),g.join(" ")}function r(t,e,n,r){return p(t,e,n,r)}function u(t,e,n){return p(t,e,n,t.parentNode)}function o(t,e,n){var r=t.getAttribute("class");return!m(n.class,r)&&h(t,e,"."+r.trim().replace(/\s+/g,"."))}function i(t,e,n,r){return v(t,e,n,r)}function a(t,e,n){return v(t,e,n,t.parentNode)}function c(t,e,n){var r=t.attributes;return Object.keys(r).some(function(u){var o=r[u],i=o.name,a=o.value;if(m(n.attribute,i,a,g.attribute))return!1;var c="["+i+'="'+a+'"]';return h(t,e,c)})}function f(t,e,n,r){return y(t,e,n,r)}function l(t,e,n){return y(t,e,n,t.parentNode)}function s(t,e,n){var r=t.tagName.toLowerCase();return!m(n.tag,r)&&h(t,e,r)}function d(t,e,n){var r=t.getAttribute("id");return!m(n.id,r)&&(e.unshift("#"+r),!0)}function p(t,e,n,r){var u=t.getAttribute("class");if(m(n.class,u))return!1;var o=r.getElementsByClassName(u);return 1===o.length&&(e.unshift("."+u.trim().replace(/\s+/g,".")),!0)}function v(t,e,n,r){var u=t.attributes;return Object.keys(u).some(function(t){var o=u[t],i=o.name,a=o.value;if(m(n.attribute,i,a,g.attribute))return!1;var c="["+i+'="'+a+'"]',f=r.querySelectorAll(c);return 1===f.length?(e.unshift(c),!0):void 0})}function y(t,e,n,r){var u=t.tagName.toLowerCase();if(m(n.tag,u))return!1;var o=r.getElementsByTagName(u);return 1===o.length&&(e.unshift(u),!0)}function h(t,e,n){for(var r=t.parentNode,u=r.childTags||r.children,o=0,i=u.length;o<i;o++)if(u[o]===t)return e.unshift("> "+n+":nth-child("+(o+1)+")"),!0;return!1}function m(t,e,n,r){if(!e)return!0;var u=t||r;return!!u&&u(e,n||e,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=n;var g={attribute:function(t){return["style","data-reactid","data-react-checksum"].indexOf(t)>-1}};t.exports=e.default},function(t,e,n){(function(t){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function u(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function o(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Array.isArray(t)?a(t,e):i(t,e)}function i(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(3===e.nodeType&&(e=e.parentNode),1!==e.nodeType)throw new Error('Invalid input - only HTMLElements or representations of them are supported! (not "'+("undefined"==typeof e?"undefined":f(e))+'")');var r=(0,s.default)(e,n),u=(0,p.default)(e,n),o=(0,y.default)(u,e,n);return r&&delete t.document,o}function a(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e.some(function(t){return 1!==t.nodeType}))throw new Error("Invalid input - only an Array of HTMLElements or representations of them is supported!");var r=(0,s.default)(e[0],n),o=(0,h.getCommonAncestor)(e,n),a=i(o,n),f=c(e),l=f[0],d=a+" "+l,p=[].concat(u(document.querySelectorAll(d)));return e.every(function(t){return p.some(function(e){return e===t})})?(r&&delete t.document,d):console.warn("\n The selected elements can't be efficiently mapped.\n Its probably best to use multiple single selectors instead!\n ",e)}function c(t){var e=(0,h.getCommonProperties)(t),n=e.classes,r=e.attributes,u=e.tag,o=[];if(u&&o.push(u),n){var i=n.map(function(t){return"."+t}).join("");o.push(i)}if(r){var a=Object.keys(r).reduce(function(t,e){return t.push("["+e+'="'+r[e]+'"]'),t},[]).join("");o.push(a)}return o.length,[o.join("")]}Object.defineProperty(e,"__esModule",{value:!0});var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};e.default=o,e.getSingleSelector=i,e.getMultiSelector=a;var l=n(1),s=r(l),d=n(4),p=r(d),v=n(3),y=r(v),h=n(2)}).call(e,function(){return this}())}])});
//# sourceMappingURL=optimal-select.min.js.map

@@ -22,6 +22,7 @@ 'use strict';

/**
* [adapt description]
* @param {[type]} element [description]
* @param {[type]} options [description]
* @return {[type]} [description]
* Modify the context based on the environment
*
* @param {HTMLELement} element - [description]
* @param {Object} options - [description]
* @return {boolean} - [description]
*/

@@ -180,5 +181,6 @@ function adapt(element, options) {

/**
* [getInstructions description]
* @param {[type]} selectors [description]
* @return {[type]} [description]
* Retrieve transformation steps
*
* @param {Array.<string>} selectors - [description]
* @return {Array.<Function>} - [description]
*/

@@ -200,143 +202,145 @@ function getInstructions(selectors) {

switch (true) {
(function () {
switch (true) {
// child: '>'
case />/.test(type):
instruction = function checkParent(node) {
return function (validate) {
return validate(node.parent) && node.parent;
// child: '>'
case />/.test(type):
instruction = function checkParent(node) {
return function (validate) {
return validate(node.parent) && node.parent;
};
};
};
break;
break;
// class: '.'
case /^\./.test(type):
var names = type.substr(1).split('.');
validate = function validate(node) {
var nodeClassName = node.attribs.class;
return nodeClassName && names.every(function (name) {
return nodeClassName.indexOf(name) > -1;
});
};
instruction = function checkClass(node, root) {
if (discover) {
return node.getElementsByClassName(names.join(' '));
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// class: '.'
case /^\./.test(type):
var names = type.substr(1).split('.');
validate = function validate(node) {
var nodeClassName = node.attribs.class;
return nodeClassName && names.every(function (name) {
return nodeClassName.indexOf(name) > -1;
});
};
instruction = function checkClass(node, root) {
if (discover) {
return node.getElementsByClassName(names.join(' '));
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// attribute: '[key="value"]'
case /^\[/.test(type):
var _type$replace$split = type.replace(/\[|\]|"/g, '').split('=');
// attribute: '[key="value"]'
case /^\[/.test(type):
var _type$replace$split = type.replace(/\[|\]|"/g, '').split('=');
var _type$replace$split2 = _slicedToArray(_type$replace$split, 2);
var _type$replace$split2 = _slicedToArray(_type$replace$split, 2);
var attributeKey = _type$replace$split2[0];
var attributeValue = _type$replace$split2[1];
var attributeKey = _type$replace$split2[0];
var attributeValue = _type$replace$split2[1];
validate = function validate(node) {
var hasAttribute = Object.keys(node.attribs).indexOf(attributeKey) > -1;
if (hasAttribute) {
// regard optional attributeValue
if (!attributeValue || node.attribs[attributeKey] === attributeValue) {
return true;
validate = function validate(node) {
var hasAttribute = Object.keys(node.attribs).indexOf(attributeKey) > -1;
if (hasAttribute) {
// regard optional attributeValue
if (!attributeValue || node.attribs[attributeKey] === attributeValue) {
return true;
}
}
}
return false;
};
instruction = function checkAttribute(node, root) {
if (discover) {
var _ret = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
return false;
};
instruction = function checkAttribute(node, root) {
if (discover) {
var _ret2 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// id: '#'
case /^#/.test(type):
var id = type.substr(1);
validate = function validate(node) {
return node.attribs.id === id;
};
instruction = function checkId(node, root) {
if (discover) {
var _ret2 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant, done) {
if (validate(descendant)) {
NodeList.push(descendant);
done();
}
});
return {
v: NodeList
};
}();
// id: '#'
case /^#/.test(type):
var id = type.substr(1);
validate = function validate(node) {
return node.attribs.id === id;
};
instruction = function checkId(node, root) {
if (discover) {
var _ret3 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant, done) {
if (validate(descendant)) {
NodeList.push(descendant);
done();
}
});
return {
v: NodeList
};
}();
if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// universal: '*'
case /\*/.test(type):
validate = function validate(node) {
return true;
};
instruction = function checkUniversal(node, root) {
if (discover) {
var _ret3 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
return NodeList.push(descendant);
});
return {
v: NodeList
};
}();
// universal: '*'
case /\*/.test(type):
validate = function validate(node) {
return true;
};
instruction = function checkUniversal(node, root) {
if (discover) {
var _ret4 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
return NodeList.push(descendant);
});
return {
v: NodeList
};
}();
if ((typeof _ret3 === 'undefined' ? 'undefined' : _typeof(_ret3)) === "object") return _ret3.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
if ((typeof _ret4 === 'undefined' ? 'undefined' : _typeof(_ret4)) === "object") return _ret4.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
break;
// tag: '...'
default:
validate = function validate(node) {
return node.name === type;
};
instruction = function checkTag(node, root) {
if (discover) {
var _ret4 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
// tag: '...'
default:
validate = function validate(node) {
return node.name === type;
};
instruction = function checkTag(node, root) {
if (discover) {
var _ret5 = function () {
var NodeList = [];
traverseDescendants([node], function (descendant) {
if (validate(descendant)) {
NodeList.push(descendant);
}
});
return {
v: NodeList
};
}();
if ((typeof _ret4 === 'undefined' ? 'undefined' : _typeof(_ret4)) === "object") return _ret4.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
}
if ((typeof _ret5 === 'undefined' ? 'undefined' : _typeof(_ret5)) === "object") return _ret5.v;
}
return typeof node === 'function' ? node(validate) : getAncestor(node, root, validate);
};
}
})();

@@ -383,6 +387,6 @@ if (!pseudo) {

/**
* Recursive walki
* @param {[type]} nodes [description]
* @param {[type]} handler [description]
* @return {[type]} [description]
* Walking recursive to invoke callbacks
*
* @param {Array.<HTMLElement>} nodes - [description]
* @param {Function} handler - [description]
*/

@@ -402,7 +406,8 @@ function traverseDescendants(nodes, handler) {

/**
* [getAncestor description]
* @param {[type]} node [description]
* @param {[type]} root [description]
* @param {[type]} validate [description]
* @return {[type]} [description]
* Bubble up from bottom to top
*
* @param {HTMLELement} node - [description]
* @param {HTMLELement} root - [description]
* @param {Function} validate - [description]
* @return {HTMLELement} - [description]
*/

@@ -422,2 +427,2 @@ function getAncestor(node, root, validate) {

module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,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U0FBTCxJQUFrQixRQUF0QixFQUFnQztBQUM5QiwwQkFBb0IsS0FBSyxTQUF6QixFQUFvQyxPQUFwQztBQUNEO0FBQ0YsR0FORDtBQU9EOzs7Ozs7Ozs7QUFTRCxTQUFTLFdBQVQsQ0FBc0IsSUFBdEIsRUFBNEIsSUFBNUIsRUFBa0MsUUFBbEMsRUFBNEM7QUFDMUMsU0FBTyxLQUFLLE1BQVosRUFBb0I7QUFDbEIsV0FBTyxLQUFLLE1BQVo7QUFDQSxRQUFJLFNBQVMsSUFBVCxDQUFKLEVBQW9CO0FBQ2xCLGFBQU8sSUFBUDtBQUNEO0FBQ0QsUUFBSSxTQUFTLElBQWIsRUFBbUI7QUFDakI7QUFDRDtBQUNGO0FBQ0QsU0FBTyxJQUFQO0FBQ0QiLCJmaWxlIjoiYWRhcHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICMgVW5pdmVyc2FsXG4gKlxuICogQ2hlY2sgYW5kIGV4dGVuZCB0aGUgZW52aXJvbm1lbnQgZm9yIHVuaXZlcnNhbCB1c2FnZVxuICovXG5cbi8qKlxuICogW2FkYXB0IGRlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7W3R5cGVdfSBlbGVtZW50IFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gb3B0aW9ucyBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGFwdCAoZWxlbWVudCwgb3B0aW9ucykge1xuXG4gIC8vIGRldGVjdCBlbnZpcm9ubWVudCBzZXR1cFxuICBpZiAoZ2xvYmFsLmRvY3VtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB7IGNvbnRleHQgfSA9IG9wdGlvbnNcblxuICBnbG9iYWwuZG9jdW1lbnQgPSBjb250ZXh0IHx8ICgoKSA9PiB7XG4gICAgdmFyIHJvb3QgPSBlbGVtZW50XG4gICAgd2hpbGUgKHJvb3QucGFyZW50KSB7XG4gICAgICByb290ID0gcm9vdC5wYXJlbnRcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RcbiAgfSkoKVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYjU1L2RvbWhhbmRsZXIvYmxvYi9tYXN0ZXIvaW5kZXguanMjTDc1XG4gIGNvbnN0IEVsZW1lbnRQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsLmRvY3VtZW50KVxuXG4gIC8vIGFsdGVybmF0aXZlIGRlc2NyaXB0b3IgdG8gYWNjZXNzIGVsZW1lbnRzIHdpdGggZmlsdGVyaW5nIGludmFsaWQgZWxlbWVudHMgKGUuZy4gdGV4dG5vZGVzKVxuICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkVGFncycpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnRQcm90b3R5cGUsICdjaGlsZFRhZ3MnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZiNTUvZG9tZWxlbWVudHR5cGUvYmxvYi9tYXN0ZXIvaW5kZXguanMjTDEyXG4gICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ3RhZycgfHwgbm9kZS50eXBlID09PSAnc2NyaXB0JyB8fCBub2RlLnR5cGUgPT09ICdzdHlsZSdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEVsZW1lbnRQcm90b3R5cGUsICdhdHRyaWJ1dGVzJykpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRyaWJ1dGVzXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hbWVkTm9kZU1hcFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50UHJvdG90eXBlLCAnYXR0cmlidXRlcycsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQgKCkge1xuICAgICAgICBjb25zdCB7IGF0dHJpYnMgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgYXR0cmlidXRlc05hbWVzID0gT2JqZWN0LmtleXMoYXR0cmlicylcbiAgICAgICAgY29uc3QgTmFtZWROb2RlTWFwID0gYXR0cmlidXRlc05hbWVzLnJlZHVjZSgoYXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzW2luZGV4XSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGF0dHJpYnV0ZU5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogYXR0cmlic1thdHRyaWJ1dGVOYW1lXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgICAgICB9LCB7IH0pXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYW1lZE5vZGVNYXAsICdsZW5ndGgnLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogYXR0cmlidXRlc05hbWVzLmxlbmd0aFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gTmFtZWROb2RlTWFwXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGlmICghRWxlbWVudFByb3RvdHlwZS5nZXRBdHRyaWJ1dGUpIHtcbiAgICAvLyBodHRwczovL2RvY3Mud2VicGxhdGZvcm0ub3JnL3dpa2kvZG9tL0VsZW1lbnQvZ2V0QXR0cmlidXRlXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0QXR0cmlidXRlXG4gICAgRWxlbWVudFByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlic1tuYW1lXSB8fCBudWxsXG4gICAgfVxuICB9XG5cbiAgaWYgKCFFbGVtZW50UHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLndlYnBsYXRmb3JtLm9yZy93aWtpL2RvbS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5VGFnTmFtZVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2dldEVsZW1lbnRzQnlUYWdOYW1lXG4gICAgRWxlbWVudFByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XG4gICAgICBjb25zdCBIVE1MQ29sbGVjdGlvbiA9IFtdXG4gICAgICB0cmF2ZXJzZURlc2NlbmRhbnRzKHRoaXMuY2hpbGRUYWdzLCAoZGVzY2VuZGFudCkgPT4ge1xuICAgICAgICBpZiAoZGVzY2VuZGFudC5uYW1lID09PSB0YWdOYW1lIHx8IHRhZ05hbWUgPT09ICcqJykge1xuICAgICAgICAgIEhUTUxDb2xsZWN0aW9uLnB1c2goZGVzY2VuZGFudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBIVE1MQ29sbGVjdGlvblxuICAgIH1cbiAgfVxuXG4gIGlmICghRWxlbWVudFByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLndlYnBsYXRmb3JtLm9yZy93aWtpL2RvbS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxuICAgIEVsZW1lbnRQcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gY2xhc3NOYW1lLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJykuc3BsaXQoJyAnKVxuICAgICAgY29uc3QgSFRNTENvbGxlY3Rpb24gPSBbXVxuICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhbdGhpc10sIChkZXNjZW5kYW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRDbGFzc05hbWUgPSBkZXNjZW5kYW50LmF0dHJpYnMuY2xhc3NcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRDbGFzc05hbWUgJiYgbmFtZXMuZXZlcnkoKG5hbWUpID0+IGRlc2NlbmRhbnRDbGFzc05hbWUuaW5kZXhPZihuYW1lKSA+IC0xKSkge1xuICAgICAgICAgIEhUTUxDb2xsZWN0aW9uLnB1c2goZGVzY2VuZGFudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBIVE1MQ29sbGVjdGlvblxuICAgIH1cbiAgfVxuXG4gIGlmICghRWxlbWVudFByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLndlYnBsYXRmb3JtLm9yZy93aWtpL2Nzcy9zZWxlY3RvcnNfYXBpL3F1ZXJ5U2VsZWN0b3JBbGxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9xdWVyeVNlbGVjdG9yQWxsXG4gICAgRWxlbWVudFByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsID0gZnVuY3Rpb24gKHNlbGVjdG9ycykge1xuICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzLnJlcGxhY2UoLyg+KShcXFMpL2csICckMSAkMicpLnRyaW0oKSAvLyBhZGQgc3BhY2UgZm9yICc+JyBzZWxlY3RvclxuXG4gICAgICAvLyB1c2luZyByaWdodCB0byBsZWZ0IGV4ZWN1dGlvbiA9PiBodHRwczovL2dpdGh1Yi5jb20vZmI1NS9jc3Mtc2VsZWN0I2hvdy1kb2VzLWl0LXdvcmtcbiAgICAgIGNvbnN0IFtkaXNjb3ZlciwgLi4uYXNjZW5kaW5nc10gPSBnZXRJbnN0cnVjdGlvbnMoc2VsZWN0b3JzKVxuICAgICAgY29uc3QgdG90YWwgPSBhc2NlbmRpbmdzLmxlbmd0aFxuICAgICAgcmV0dXJuIGRpc2NvdmVyKHRoaXMpLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgICB2YXIgc3RlcCA9IDBcbiAgICAgICAgd2hpbGUgKHN0ZXAgPCB0b3RhbCkge1xuICAgICAgICAgIG5vZGUgPSBhc2NlbmRpbmdzW3N0ZXBdKG5vZGUsIHRoaXMpXG4gICAgICAgICAgaWYgKCFub2RlKSB7IC8vIGhpZXJhcmNoeSBkb2Vzbid0IG1hdGNoXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcCArPSAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKCFFbGVtZW50UHJvdG90eXBlLmNvbnRhaW5zKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvY29udGFpbnNcbiAgICBFbGVtZW50UHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHZhciBpbmNsdXNpdmUgPSBmYWxzZVxuICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhbdGhpc10sIChkZXNjZW5kYW50LCBkb25lKSA9PiB7XG4gICAgICAgIGlmIChkZXNjZW5kYW50ID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgaW5jbHVzaXZlID0gdHJ1ZVxuICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuIGluY2x1c2l2ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogW2dldEluc3RydWN0aW9ucyBkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gc2VsZWN0b3JzIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge1t0eXBlXX0gICAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gZ2V0SW5zdHJ1Y3Rpb25zIChzZWxlY3RvcnMpIHtcbiAgcmV0dXJuIHNlbGVjdG9ycy5zcGxpdCgnICcpLnJldmVyc2UoKS5tYXAoKHNlbGVjdG9yLCBzdGVwKSA9PiB7XG4gICAgY29uc3QgZGlzY292ZXIgPSBzdGVwID09PSAwXG4gICAgY29uc3QgW3R5cGUsIHBzZXVkb10gPSBzZWxlY3Rvci5zcGxpdCgnOicpXG5cbiAgICB2YXIgdmFsaWRhdGUgPSBudWxsXG4gICAgdmFyIGluc3RydWN0aW9uID0gbnVsbFxuXG4gICAgc3dpdGNoICh0cnVlKSB7XG5cbiAgICAgIC8vIGNoaWxkOiAnPidcbiAgICAgIGNhc2UgLz4vLnRlc3QodHlwZSk6XG4gICAgICAgIGluc3RydWN0aW9uID0gZnVuY3Rpb24gY2hlY2tQYXJlbnQgKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gKHZhbGlkYXRlKSA9PiB2YWxpZGF0ZShub2RlLnBhcmVudCkgJiYgbm9kZS5wYXJlbnRcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICAvLyBjbGFzczogJy4nXG4gICAgICBjYXNlIC9eXFwuLy50ZXN0KHR5cGUpOlxuICAgICAgICBjb25zdCBuYW1lcyA9IHR5cGUuc3Vic3RyKDEpLnNwbGl0KCcuJylcbiAgICAgICAgdmFsaWRhdGUgPSAobm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGVDbGFzc05hbWUgPSBub2RlLmF0dHJpYnMuY2xhc3NcbiAgICAgICAgICByZXR1cm4gbm9kZUNsYXNzTmFtZSAmJiBuYW1lcy5ldmVyeSgobmFtZSkgPT4gbm9kZUNsYXNzTmFtZS5pbmRleE9mKG5hbWUpID4gLTEpXG4gICAgICAgIH1cbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiBjaGVja0NsYXNzIChub2RlLCByb290KSB7XG4gICAgICAgICAgaWYgKGRpc2NvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG5hbWVzLmpvaW4oJyAnKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh0eXBlb2Ygbm9kZSA9PT0gJ2Z1bmN0aW9uJykgPyBub2RlKHZhbGlkYXRlKSA6IGdldEFuY2VzdG9yKG5vZGUsIHJvb3QsIHZhbGlkYXRlKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIC8vIGF0dHJpYnV0ZTogJ1trZXk9XCJ2YWx1ZVwiXSdcbiAgICAgIGNhc2UgL15cXFsvLnRlc3QodHlwZSk6XG4gICAgICAgIGNvbnN0IFthdHRyaWJ1dGVLZXksIGF0dHJpYnV0ZVZhbHVlXSA9IHR5cGUucmVwbGFjZSgvXFxbfFxcXXxcIi9nLCAnJykuc3BsaXQoJz0nKVxuICAgICAgICB2YWxpZGF0ZSA9IChub2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFzQXR0cmlidXRlID0gT2JqZWN0LmtleXMobm9kZS5hdHRyaWJzKS5pbmRleE9mKGF0dHJpYnV0ZUtleSkgPiAtMVxuICAgICAgICAgIGlmIChoYXNBdHRyaWJ1dGUpIHsgLy8gcmVnYXJkIG9wdGlvbmFsIGF0dHJpYnV0ZVZhbHVlXG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlIHx8IChub2RlLmF0dHJpYnNbYXR0cmlidXRlS2V5XSA9PT0gYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGluc3RydWN0aW9uID0gZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGUgKG5vZGUsIHJvb3QpIHtcbiAgICAgICAgICBpZiAoZGlzY292ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IE5vZGVMaXN0ID0gW11cbiAgICAgICAgICAgIHRyYXZlcnNlRGVzY2VuZGFudHMoW25vZGVdLCAoZGVzY2VuZGFudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsaWRhdGUoZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgICAgICBOb2RlTGlzdC5wdXNoKGRlc2NlbmRhbnQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gTm9kZUxpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh0eXBlb2Ygbm9kZSA9PT0gJ2Z1bmN0aW9uJykgPyBub2RlKHZhbGlkYXRlKSA6IGdldEFuY2VzdG9yKG5vZGUsIHJvb3QsIHZhbGlkYXRlKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIC8vIGlkOiAnIydcbiAgICAgIGNhc2UgL14jLy50ZXN0KHR5cGUpOlxuICAgICAgICBjb25zdCBpZCA9IHR5cGUuc3Vic3RyKDEpXG4gICAgICAgIHZhbGlkYXRlID0gKG5vZGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5hdHRyaWJzLmlkID09PSBpZFxuICAgICAgICB9XG4gICAgICAgIGluc3RydWN0aW9uID0gZnVuY3Rpb24gY2hlY2tJZCAobm9kZSwgcm9vdCkge1xuICAgICAgICAgIGlmIChkaXNjb3Zlcikge1xuICAgICAgICAgICAgY29uc3QgTm9kZUxpc3QgPSBbXVxuICAgICAgICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhbbm9kZV0sIChkZXNjZW5kYW50LCBkb25lKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0ZShkZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgICAgIE5vZGVMaXN0LnB1c2goZGVzY2VuZGFudClcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBOb2RlTGlzdFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHR5cGVvZiBub2RlID09PSAnZnVuY3Rpb24nKSA/IG5vZGUodmFsaWRhdGUpIDogZ2V0QW5jZXN0b3Iobm9kZSwgcm9vdCwgdmFsaWRhdGUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgLy8gdW5pdmVyc2FsOiAnKidcbiAgICAgIGNhc2UgL1xcKi8udGVzdCh0eXBlKTpcbiAgICAgICAgdmFsaWRhdGUgPSAobm9kZSkgPT4gdHJ1ZVxuICAgICAgICBpbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIGNoZWNrVW5pdmVyc2FsIChub2RlLCByb290KSB7XG4gICAgICAgICAgaWYgKGRpc2NvdmVyKSB7XG4gICAgICAgICAgICBjb25zdCBOb2RlTGlzdCA9IFtdXG4gICAgICAgICAgICB0cmF2ZXJzZURlc2NlbmRhbnRzKFtub2RlXSwgKGRlc2NlbmRhbnQpID0+IE5vZGVMaXN0LnB1c2goZGVzY2VuZGFudCkpXG4gICAgICAgICAgICByZXR1cm4gTm9kZUxpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh0eXBlb2Ygbm9kZSA9PT0gJ2Z1bmN0aW9uJykgPyBub2RlKHZhbGlkYXRlKSA6IGdldEFuY2VzdG9yKG5vZGUsIHJvb3QsIHZhbGlkYXRlKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIC8vIHRhZzogJy4uLidcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhbGlkYXRlID0gKG5vZGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5uYW1lID09PSB0eXBlXG4gICAgICAgIH1cbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiBjaGVja1RhZyAobm9kZSwgcm9vdCkge1xuICAgICAgICAgIGlmIChkaXNjb3Zlcikge1xuICAgICAgICAgICAgY29uc3QgTm9kZUxpc3QgPSBbXVxuICAgICAgICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhbbm9kZV0sIChkZXNjZW5kYW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0ZShkZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgICAgIE5vZGVMaXN0LnB1c2goZGVzY2VuZGFudClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBOb2RlTGlzdFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHR5cGVvZiBub2RlID09PSAnZnVuY3Rpb24nKSA/IG5vZGUodmFsaWRhdGUpIDogZ2V0QW5jZXN0b3Iobm9kZSwgcm9vdCwgdmFsaWRhdGUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBzZXVkbykge1xuICAgICAgcmV0dXJuIGluc3RydWN0aW9uXG4gICAgfVxuXG4gICAgY29uc3QgcnVsZSA9IHBzZXVkby5tYXRjaCgvLShjaGlsZHx0eXBlKVxcKChcXGQrKVxcKSQvKVxuICAgIGNvbnN0IGtpbmQgPSBydWxlWzFdXG4gICAgY29uc3QgaW5kZXggPSBwYXJzZUludChydWxlWzJdLCAxMCkgLSAxXG5cbiAgICBjb25zdCB2YWxpZGF0ZVBzZXVkbyA9IChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICB2YXIgY29tcGFyZVNldCA9IG5vZGUucGFyZW50LmNoaWxkVGFnc1xuICAgICAgICBpZiAoa2luZCA9PT0gJ3R5cGUnKSB7XG4gICAgICAgICAgY29tcGFyZVNldCA9IGNvbXBhcmVTZXQuZmlsdGVyKHZhbGlkYXRlKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGVJbmRleCA9IGNvbXBhcmVTZXQuZmluZEluZGV4KChjaGlsZCkgPT4gY2hpbGQgPT09IG5vZGUpXG4gICAgICAgIGlmIChub2RlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGVuaGFuY2VJbnN0cnVjdGlvbiAobm9kZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBpbnN0cnVjdGlvbihub2RlKVxuICAgICAgaWYgKGRpc2NvdmVyKSB7XG4gICAgICAgIHJldHVybiBtYXRjaC5yZWR1Y2UoKE5vZGVMaXN0LCBtYXRjaGVkTm9kZSkgPT4ge1xuICAgICAgICAgIGlmICh2YWxpZGF0ZVBzZXVkbyhtYXRjaGVkTm9kZSkpIHtcbiAgICAgICAgICAgIE5vZGVMaXN0LnB1c2gobWF0Y2hlZE5vZGUpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBOb2RlTGlzdFxuICAgICAgICB9LCBbXSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0ZVBzZXVkbyhtYXRjaCkgJiYgbWF0Y2hcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogUmVjdXJzaXZlIHdhbGtpXG4gKiBAcGFyYW0gIHtbdHlwZV19IG5vZGVzICAgW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7W3R5cGVdfSBoYW5kbGVyIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge1t0eXBlXX0gICAgICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlRGVzY2VuZGFudHMgKG5vZGVzLCBoYW5kbGVyKSB7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICB2YXIgcHJvZ3Jlc3MgPSB0cnVlXG4gICAgaGFuZGxlcihub2RlLCAoKSA9PiBwcm9ncmVzcyA9IGZhbHNlKVxuICAgIGlmIChub2RlLmNoaWxkVGFncyAmJiBwcm9ncmVzcykge1xuICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhub2RlLmNoaWxkVGFncywgaGFuZGxlcilcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogW2dldEFuY2VzdG9yIGRlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7W3R5cGVdfSBub2RlICAgICBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtbdHlwZV19IHJvb3QgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gdmFsaWRhdGUgW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7W3R5cGVdfSAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldEFuY2VzdG9yIChub2RlLCByb290LCB2YWxpZGF0ZSkge1xuICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAgICBub2RlID0gbm9kZS5wYXJlbnRcbiAgICBpZiAodmFsaWRhdGUobm9kZSkpIHtcbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuICAgIGlmIChub2RlID09PSByb290KSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9
//# sourceMappingURL=data:application/json;base64,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akI7QUFBQSxLQUFkO0FBQ0EsUUFBSSxLQUFLLFNBQUwsSUFBa0IsUUFBdEIsRUFBZ0M7QUFDOUIsMEJBQW9CLEtBQUssU0FBekIsRUFBb0MsT0FBcEM7QUFDRDtBQUNGLEdBTkQ7QUFPRDs7Ozs7Ozs7OztBQVVELFNBQVMsV0FBVCxDQUFzQixJQUF0QixFQUE0QixJQUE1QixFQUFrQyxRQUFsQyxFQUE0QztBQUMxQyxTQUFPLEtBQUssTUFBWixFQUFvQjtBQUNsQixXQUFPLEtBQUssTUFBWjtBQUNBLFFBQUksU0FBUyxJQUFULENBQUosRUFBb0I7QUFDbEIsYUFBTyxJQUFQO0FBQ0Q7QUFDRCxRQUFJLFNBQVMsSUFBYixFQUFtQjtBQUNqQjtBQUNEO0FBQ0Y7QUFDRCxTQUFPLElBQVA7QUFDRCIsImZpbGUiOiJhZGFwdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIyBVbml2ZXJzYWxcbiAqXG4gKiBDaGVjayBhbmQgZXh0ZW5kIHRoZSBlbnZpcm9ubWVudCBmb3IgdW5pdmVyc2FsIHVzYWdlXG4gKi9cblxuLyoqXG4gKiBNb2RpZnkgdGhlIGNvbnRleHQgYmFzZWQgb24gdGhlIGVudmlyb25tZW50XG4gKlxuICogQHBhcmFtICB7SFRNTEVMZW1lbnR9IGVsZW1lbnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgb3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGFwdCAoZWxlbWVudCwgb3B0aW9ucykge1xuXG4gIC8vIGRldGVjdCBlbnZpcm9ubWVudCBzZXR1cFxuICBpZiAoZ2xvYmFsLmRvY3VtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB7IGNvbnRleHQgfSA9IG9wdGlvbnNcblxuICBnbG9iYWwuZG9jdW1lbnQgPSBjb250ZXh0IHx8ICgoKSA9PiB7XG4gICAgdmFyIHJvb3QgPSBlbGVtZW50XG4gICAgd2hpbGUgKHJvb3QucGFyZW50KSB7XG4gICAgICByb290ID0gcm9vdC5wYXJlbnRcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RcbiAgfSkoKVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYjU1L2RvbWhhbmRsZXIvYmxvYi9tYXN0ZXIvaW5kZXguanMjTDc1XG4gIGNvbnN0IEVsZW1lbnRQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsLmRvY3VtZW50KVxuXG4gIC8vIGFsdGVybmF0aXZlIGRlc2NyaXB0b3IgdG8gYWNjZXNzIGVsZW1lbnRzIHdpdGggZmlsdGVyaW5nIGludmFsaWQgZWxlbWVudHMgKGUuZy4gdGV4dG5vZGVzKVxuICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkVGFncycpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnRQcm90b3R5cGUsICdjaGlsZFRhZ3MnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZiNTUvZG9tZWxlbWVudHR5cGUvYmxvYi9tYXN0ZXIvaW5kZXguanMjTDEyXG4gICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ3RhZycgfHwgbm9kZS50eXBlID09PSAnc2NyaXB0JyB8fCBub2RlLnR5cGUgPT09ICdzdHlsZSdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEVsZW1lbnRQcm90b3R5cGUsICdhdHRyaWJ1dGVzJykpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRyaWJ1dGVzXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hbWVkTm9kZU1hcFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50UHJvdG90eXBlLCAnYXR0cmlidXRlcycsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQgKCkge1xuICAgICAgICBjb25zdCB7IGF0dHJpYnMgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgYXR0cmlidXRlc05hbWVzID0gT2JqZWN0LmtleXMoYXR0cmlicylcbiAgICAgICAgY29uc3QgTmFtZWROb2RlTWFwID0gYXR0cmlidXRlc05hbWVzLnJlZHVjZSgoYXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzW2luZGV4XSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGF0dHJpYnV0ZU5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogYXR0cmlic1thdHRyaWJ1dGVOYW1lXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgICAgICB9LCB7IH0pXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYW1lZE5vZGVNYXAsICdsZW5ndGgnLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogYXR0cmlidXRlc05hbWVzLmxlbmd0aFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gTmFtZWROb2RlTWFwXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGlmICghRWxlbWVudFByb3RvdHlwZS5nZXRBdHRyaWJ1dGUpIHtcbiAgICAvLyBodHRwczovL2RvY3Mud2VicGxhdGZvcm0ub3JnL3dpa2kvZG9tL0VsZW1lbnQvZ2V0QXR0cmlidXRlXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0QXR0cmlidXRlXG4gICAgRWxlbWVudFByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlic1tuYW1lXSB8fCBudWxsXG4gICAgfVxuICB9XG5cbiAgaWYgKCFFbGVtZW50UHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLndlYnBsYXRmb3JtLm9yZy93aWtpL2RvbS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5VGFnTmFtZVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2dldEVsZW1lbnRzQnlUYWdOYW1lXG4gICAgRWxlbWVudFByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XG4gICAgICBjb25zdCBIVE1MQ29sbGVjdGlvbiA9IFtdXG4gICAgICB0cmF2ZXJzZURlc2NlbmRhbnRzKHRoaXMuY2hpbGRUYWdzLCAoZGVzY2VuZGFudCkgPT4ge1xuICAgICAgICBpZiAoZGVzY2VuZGFudC5uYW1lID09PSB0YWdOYW1lIHx8IHRhZ05hbWUgPT09ICcqJykge1xuICAgICAgICAgIEhUTUxDb2xsZWN0aW9uLnB1c2goZGVzY2VuZGFudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBIVE1MQ29sbGVjdGlvblxuICAgIH1cbiAgfVxuXG4gIGlmICghRWxlbWVudFByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLndlYnBsYXRmb3JtLm9yZy93aWtpL2RvbS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxuICAgIEVsZW1lbnRQcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gY2xhc3NOYW1lLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJykuc3BsaXQoJyAnKVxuICAgICAgY29uc3QgSFRNTENvbGxlY3Rpb24gPSBbXVxuICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhbdGhpc10sIChkZXNjZW5kYW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRDbGFzc05hbWUgPSBkZXNjZW5kYW50LmF0dHJpYnMuY2xhc3NcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRDbGFzc05hbWUgJiYgbmFtZXMuZXZlcnkoKG5hbWUpID0+IGRlc2NlbmRhbnRDbGFzc05hbWUuaW5kZXhPZihuYW1lKSA+IC0xKSkge1xuICAgICAgICAgIEhUTUxDb2xsZWN0aW9uLnB1c2goZGVzY2VuZGFudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBIVE1MQ29sbGVjdGlvblxuICAgIH1cbiAgfVxuXG4gIGlmICghRWxlbWVudFByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLndlYnBsYXRmb3JtLm9yZy93aWtpL2Nzcy9zZWxlY3RvcnNfYXBpL3F1ZXJ5U2VsZWN0b3JBbGxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9xdWVyeVNlbGVjdG9yQWxsXG4gICAgRWxlbWVudFByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsID0gZnVuY3Rpb24gKHNlbGVjdG9ycykge1xuICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzLnJlcGxhY2UoLyg+KShcXFMpL2csICckMSAkMicpLnRyaW0oKSAvLyBhZGQgc3BhY2UgZm9yICc+JyBzZWxlY3RvclxuXG4gICAgICAvLyB1c2luZyByaWdodCB0byBsZWZ0IGV4ZWN1dGlvbiA9PiBodHRwczovL2dpdGh1Yi5jb20vZmI1NS9jc3Mtc2VsZWN0I2hvdy1kb2VzLWl0LXdvcmtcbiAgICAgIGNvbnN0IFtkaXNjb3ZlciwgLi4uYXNjZW5kaW5nc10gPSBnZXRJbnN0cnVjdGlvbnMoc2VsZWN0b3JzKVxuICAgICAgY29uc3QgdG90YWwgPSBhc2NlbmRpbmdzLmxlbmd0aFxuICAgICAgcmV0dXJuIGRpc2NvdmVyKHRoaXMpLmZpbHRlcigobm9kZSkgPT4ge1xuICAgICAgICB2YXIgc3RlcCA9IDBcbiAgICAgICAgd2hpbGUgKHN0ZXAgPCB0b3RhbCkge1xuICAgICAgICAgIG5vZGUgPSBhc2NlbmRpbmdzW3N0ZXBdKG5vZGUsIHRoaXMpXG4gICAgICAgICAgaWYgKCFub2RlKSB7IC8vIGhpZXJhcmNoeSBkb2Vzbid0IG1hdGNoXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcCArPSAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKCFFbGVtZW50UHJvdG90eXBlLmNvbnRhaW5zKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvY29udGFpbnNcbiAgICBFbGVtZW50UHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHZhciBpbmNsdXNpdmUgPSBmYWxzZVxuICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhbdGhpc10sIChkZXNjZW5kYW50LCBkb25lKSA9PiB7XG4gICAgICAgIGlmIChkZXNjZW5kYW50ID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgaW5jbHVzaXZlID0gdHJ1ZVxuICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuIGluY2x1c2l2ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogUmV0cmlldmUgdHJhbnNmb3JtYXRpb24gc3RlcHNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gICBzZWxlY3RvcnMgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtBcnJheS48RnVuY3Rpb24+fSAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldEluc3RydWN0aW9ucyAoc2VsZWN0b3JzKSB7XG4gIHJldHVybiBzZWxlY3RvcnMuc3BsaXQoJyAnKS5yZXZlcnNlKCkubWFwKChzZWxlY3Rvciwgc3RlcCkgPT4ge1xuICAgIGNvbnN0IGRpc2NvdmVyID0gc3RlcCA9PT0gMFxuICAgIGNvbnN0IFt0eXBlLCBwc2V1ZG9dID0gc2VsZWN0b3Iuc3BsaXQoJzonKVxuXG4gICAgdmFyIHZhbGlkYXRlID0gbnVsbFxuICAgIHZhciBpbnN0cnVjdGlvbiA9IG51bGxcblxuICAgIHN3aXRjaCAodHJ1ZSkge1xuXG4gICAgICAvLyBjaGlsZDogJz4nXG4gICAgICBjYXNlIC8+Ly50ZXN0KHR5cGUpOlxuICAgICAgICBpbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIGNoZWNrUGFyZW50IChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuICh2YWxpZGF0ZSkgPT4gdmFsaWRhdGUobm9kZS5wYXJlbnQpICYmIG5vZGUucGFyZW50XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgLy8gY2xhc3M6ICcuJ1xuICAgICAgY2FzZSAvXlxcLi8udGVzdCh0eXBlKTpcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0eXBlLnN1YnN0cigxKS5zcGxpdCgnLicpXG4gICAgICAgIHZhbGlkYXRlID0gKG5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlQ2xhc3NOYW1lID0gbm9kZS5hdHRyaWJzLmNsYXNzXG4gICAgICAgICAgcmV0dXJuIG5vZGVDbGFzc05hbWUgJiYgbmFtZXMuZXZlcnkoKG5hbWUpID0+IG5vZGVDbGFzc05hbWUuaW5kZXhPZihuYW1lKSA+IC0xKVxuICAgICAgICB9XG4gICAgICAgIGluc3RydWN0aW9uID0gZnVuY3Rpb24gY2hlY2tDbGFzcyAobm9kZSwgcm9vdCkge1xuICAgICAgICAgIGlmIChkaXNjb3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuYW1lcy5qb2luKCcgJykpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAodHlwZW9mIG5vZGUgPT09ICdmdW5jdGlvbicpID8gbm9kZSh2YWxpZGF0ZSkgOiBnZXRBbmNlc3Rvcihub2RlLCByb290LCB2YWxpZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICAvLyBhdHRyaWJ1dGU6ICdba2V5PVwidmFsdWVcIl0nXG4gICAgICBjYXNlIC9eXFxbLy50ZXN0KHR5cGUpOlxuICAgICAgICBjb25zdCBbYXR0cmlidXRlS2V5LCBhdHRyaWJ1dGVWYWx1ZV0gPSB0eXBlLnJlcGxhY2UoL1xcW3xcXF18XCIvZywgJycpLnNwbGl0KCc9JylcbiAgICAgICAgdmFsaWRhdGUgPSAobm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0F0dHJpYnV0ZSA9IE9iamVjdC5rZXlzKG5vZGUuYXR0cmlicykuaW5kZXhPZihhdHRyaWJ1dGVLZXkpID4gLTFcbiAgICAgICAgICBpZiAoaGFzQXR0cmlidXRlKSB7IC8vIHJlZ2FyZCBvcHRpb25hbCBhdHRyaWJ1dGVWYWx1ZVxuICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZSB8fCAobm9kZS5hdHRyaWJzW2F0dHJpYnV0ZUtleV0gPT09IGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIGNoZWNrQXR0cmlidXRlIChub2RlLCByb290KSB7XG4gICAgICAgICAgaWYgKGRpc2NvdmVyKSB7XG4gICAgICAgICAgICBjb25zdCBOb2RlTGlzdCA9IFtdXG4gICAgICAgICAgICB0cmF2ZXJzZURlc2NlbmRhbnRzKFtub2RlXSwgKGRlc2NlbmRhbnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlKGRlc2NlbmRhbnQpKSB7XG4gICAgICAgICAgICAgICAgTm9kZUxpc3QucHVzaChkZXNjZW5kYW50KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIE5vZGVMaXN0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAodHlwZW9mIG5vZGUgPT09ICdmdW5jdGlvbicpID8gbm9kZSh2YWxpZGF0ZSkgOiBnZXRBbmNlc3Rvcihub2RlLCByb290LCB2YWxpZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICAvLyBpZDogJyMnXG4gICAgICBjYXNlIC9eIy8udGVzdCh0eXBlKTpcbiAgICAgICAgY29uc3QgaWQgPSB0eXBlLnN1YnN0cigxKVxuICAgICAgICB2YWxpZGF0ZSA9IChub2RlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuYXR0cmlicy5pZCA9PT0gaWRcbiAgICAgICAgfVxuICAgICAgICBpbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIGNoZWNrSWQgKG5vZGUsIHJvb3QpIHtcbiAgICAgICAgICBpZiAoZGlzY292ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IE5vZGVMaXN0ID0gW11cbiAgICAgICAgICAgIHRyYXZlcnNlRGVzY2VuZGFudHMoW25vZGVdLCAoZGVzY2VuZGFudCwgZG9uZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsaWRhdGUoZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgICAgICBOb2RlTGlzdC5wdXNoKGRlc2NlbmRhbnQpXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gTm9kZUxpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh0eXBlb2Ygbm9kZSA9PT0gJ2Z1bmN0aW9uJykgPyBub2RlKHZhbGlkYXRlKSA6IGdldEFuY2VzdG9yKG5vZGUsIHJvb3QsIHZhbGlkYXRlKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIC8vIHVuaXZlcnNhbDogJyonXG4gICAgICBjYXNlIC9cXCovLnRlc3QodHlwZSk6XG4gICAgICAgIHZhbGlkYXRlID0gKG5vZGUpID0+IHRydWVcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiBjaGVja1VuaXZlcnNhbCAobm9kZSwgcm9vdCkge1xuICAgICAgICAgIGlmIChkaXNjb3Zlcikge1xuICAgICAgICAgICAgY29uc3QgTm9kZUxpc3QgPSBbXVxuICAgICAgICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhbbm9kZV0sIChkZXNjZW5kYW50KSA9PiBOb2RlTGlzdC5wdXNoKGRlc2NlbmRhbnQpKVxuICAgICAgICAgICAgcmV0dXJuIE5vZGVMaXN0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAodHlwZW9mIG5vZGUgPT09ICdmdW5jdGlvbicpID8gbm9kZSh2YWxpZGF0ZSkgOiBnZXRBbmNlc3Rvcihub2RlLCByb290LCB2YWxpZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICAvLyB0YWc6ICcuLi4nXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YWxpZGF0ZSA9IChub2RlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUubmFtZSA9PT0gdHlwZVxuICAgICAgICB9XG4gICAgICAgIGluc3RydWN0aW9uID0gZnVuY3Rpb24gY2hlY2tUYWcgKG5vZGUsIHJvb3QpIHtcbiAgICAgICAgICBpZiAoZGlzY292ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IE5vZGVMaXN0ID0gW11cbiAgICAgICAgICAgIHRyYXZlcnNlRGVzY2VuZGFudHMoW25vZGVdLCAoZGVzY2VuZGFudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsaWRhdGUoZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgICAgICBOb2RlTGlzdC5wdXNoKGRlc2NlbmRhbnQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gTm9kZUxpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh0eXBlb2Ygbm9kZSA9PT0gJ2Z1bmN0aW9uJykgPyBub2RlKHZhbGlkYXRlKSA6IGdldEFuY2VzdG9yKG5vZGUsIHJvb3QsIHZhbGlkYXRlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwc2V1ZG8pIHtcbiAgICAgIHJldHVybiBpbnN0cnVjdGlvblxuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSBwc2V1ZG8ubWF0Y2goLy0oY2hpbGR8dHlwZSlcXCgoXFxkKylcXCkkLylcbiAgICBjb25zdCBraW5kID0gcnVsZVsxXVxuICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQocnVsZVsyXSwgMTApIC0gMVxuXG4gICAgY29uc3QgdmFsaWRhdGVQc2V1ZG8gPSAobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgdmFyIGNvbXBhcmVTZXQgPSBub2RlLnBhcmVudC5jaGlsZFRhZ3NcbiAgICAgICAgaWYgKGtpbmQgPT09ICd0eXBlJykge1xuICAgICAgICAgIGNvbXBhcmVTZXQgPSBjb21wYXJlU2V0LmZpbHRlcih2YWxpZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub2RlSW5kZXggPSBjb21wYXJlU2V0LmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkID09PSBub2RlKVxuICAgICAgICBpZiAobm9kZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBlbmhhbmNlSW5zdHJ1Y3Rpb24gKG5vZGUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gaW5zdHJ1Y3Rpb24obm9kZSlcbiAgICAgIGlmIChkaXNjb3Zlcikge1xuICAgICAgICByZXR1cm4gbWF0Y2gucmVkdWNlKChOb2RlTGlzdCwgbWF0Y2hlZE5vZGUpID0+IHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVQc2V1ZG8obWF0Y2hlZE5vZGUpKSB7XG4gICAgICAgICAgICBOb2RlTGlzdC5wdXNoKG1hdGNoZWROb2RlKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gTm9kZUxpc3RcbiAgICAgICAgfSwgW10pXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGVQc2V1ZG8obWF0Y2gpICYmIG1hdGNoXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIFdhbGtpbmcgcmVjdXJzaXZlIHRvIGludm9rZSBjYWxsYmFja3NcbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxIVE1MRWxlbWVudD59IG5vZGVzICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSAgICAgICAgICAgIGhhbmRsZXIgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlRGVzY2VuZGFudHMgKG5vZGVzLCBoYW5kbGVyKSB7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICB2YXIgcHJvZ3Jlc3MgPSB0cnVlXG4gICAgaGFuZGxlcihub2RlLCAoKSA9PiBwcm9ncmVzcyA9IGZhbHNlKVxuICAgIGlmIChub2RlLmNoaWxkVGFncyAmJiBwcm9ncmVzcykge1xuICAgICAgdHJhdmVyc2VEZXNjZW5kYW50cyhub2RlLmNoaWxkVGFncywgaGFuZGxlcilcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogQnViYmxlIHVwIGZyb20gYm90dG9tIHRvIHRvcFxuICpcbiAqIEBwYXJhbSAge0hUTUxFTGVtZW50fSBub2RlICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFTGVtZW50fSByb290ICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgICB2YWxpZGF0ZSAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge0hUTUxFTGVtZW50fSAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gZ2V0QW5jZXN0b3IgKG5vZGUsIHJvb3QsIHZhbGlkYXRlKSB7XG4gIHdoaWxlIChub2RlLnBhcmVudCkge1xuICAgIG5vZGUgPSBub2RlLnBhcmVudFxuICAgIGlmICh2YWxpZGF0ZShub2RlKSkge1xuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=

@@ -6,3 +6,3 @@ 'use strict';

});
exports.default = exports.optimize = exports.select = undefined;
exports.default = exports.common = exports.optimize = exports.select = undefined;

@@ -17,2 +17,8 @@ var _select2 = require('./select');

var _common2 = require('./common');
var _common = _interopRequireWildcard(_common2);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -22,3 +28,4 @@

exports.optimize = _optimize3.default;
exports.common = _common;
exports.default = _select3.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBQU8sTTtRQUNBLFE7UUFFQSxPIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHNlbGVjdCBmcm9tICcuL3NlbGVjdCdcbmV4cG9ydCBvcHRpbWl6ZSBmcm9tICcuL29wdGltaXplJ1xuXG5leHBvcnQgZGVmYXVsdCBmcm9tICcuL3NlbGVjdCdcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBQU8sTTtRQUNBLFE7UUFDSyxNO1FBRUwsTyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBzZWxlY3QgZnJvbSAnLi9zZWxlY3QnXG5leHBvcnQgb3B0aW1pemUgZnJvbSAnLi9vcHRpbWl6ZSdcbmV4cG9ydCAqIGFzIGNvbW1vbiBmcm9tICcuL2NvbW1vbidcblxuZXhwb3J0IGRlZmF1bHQgZnJvbSAnLi9zZWxlY3QnXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=

@@ -21,11 +21,8 @@ 'use strict';

* Get the path of the element
*
* @param {HTMLElement} node - [description]
* @param {Object} options - [description]
* @return {String} - [description]
* @return {string} - [description]
*/
function match(node, options) {
var path = [];
var element = node;
var length = path.length;
var _options$root = options.root;

@@ -39,2 +36,6 @@ var root = _options$root === undefined ? document : _options$root;

var path = [];
var element = node;
var length = path.length;
var skipCompare = skip && (Array.isArray(skip) ? skip : [skip]).map(function (entry) {

@@ -125,7 +126,8 @@ if (typeof entry !== 'function') {

/**
* [checkClassGlobal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkClass' with global data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -137,7 +139,8 @@ function checkClassGlobal(element, path, ignore, root) {

/**
* [checkClassLocal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkClass' with local data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -149,7 +152,8 @@ function checkClassLocal(element, path, ignore) {

/**
* [checkClassChild description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkChild' with class data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -165,7 +169,8 @@ function checkClassChild(element, path, ignore) {

/**
* [checkAttributeGlobal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkAttribute' with global data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -177,7 +182,8 @@ function checkAttributeGlobal(element, path, ignore, root) {

/**
* [checkAttributeLocal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkAttribute' with local data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -189,7 +195,8 @@ function checkAttributeLocal(element, path, ignore) {

/**
* [checkAttributeChild description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkChild' with attribute data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -211,7 +218,8 @@ function checkAttributeChild(element, path, ignore) {

/**
* [checkTagGlobal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkTag' with global data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -223,7 +231,8 @@ function checkTagGlobal(element, path, ignore, root) {

/**
* [checkTagLocal description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkTag' with local data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -235,7 +244,8 @@ function checkTagLocal(element, path, ignore) {

/**
* [checkTabChildren description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Preset 'checkChild' with tag data
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -251,7 +261,8 @@ function checkTagChild(element, path, ignore) {

/**
* [checkId description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Lookup unique identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -268,8 +279,9 @@ function checkId(element, path, ignore) {

/**
* [checkClass description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {Boolean} - [description]
* Lookup class identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {boolean} - [description]
*/

@@ -290,8 +302,9 @@ function checkClass(element, path, ignore, parent) {

/**
* [checkAttribute description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {Boolean} - [description]
* Lookup attribute identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {Object} ignore - [description]
* @param {HTMLElement} parent - [description]
* @return {boolean} - [description]
*/

@@ -317,8 +330,9 @@ function checkAttribute(element, path, ignore, parent) {

/**
* [checkTag description]
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {HTMLElement} parent - [description]
* @param {Object} ignore - [description]
* @return {Boolean} - [description]
* Lookup tag identifier
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {HTMLElement} parent - [description]
* @param {Object} ignore - [description]
* @return {boolean} - [description]
*/

@@ -339,8 +353,10 @@ function checkTag(element, path, ignore, parent) {

/**
* [checkChild description]
* Lookup child identfier
*
* Note: childTags is a custom property to use a view filter for tags on for virutal elements
* @param {HTMLElement} element - [description]
* @param {Array} path - [description]
* @param {String} selector - [description]
* @return {Boolean} - [description]
*
* @param {HTMLElement} element - [description]
* @param {Array.<string>} path - [description]
* @param {String} selector - [description]
* @return {boolean} - [description]
*/

@@ -360,8 +376,9 @@ function checkChild(element, path, selector) {

/**
* [checkIgnore description]
* @param {Function} predicate [description]
* @param {string} name [description]
* @param {string} value [description]
* @param {Function} defaultPredicate [description]
* @return {boolean} [description]
* Validate with custom and default functions
*
* @param {Function} predicate - [description]
* @param {string} name - [description]
* @param {string} value - [description]
* @param {Function} defaultPredicate - [description]
* @return {boolean} - [description]
*/

@@ -379,2 +396,2 @@ function checkIgnore(predicate, name, value, defaultPredicate) {

module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,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QTNCO0FBQ0EsTUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLFdBQU8sS0FBUDtBQUNEO0FBQ0QsU0FBTyxNQUFNLElBQU4sRUFBWSxTQUFTLElBQXJCLEVBQTJCLGdCQUEzQixDQUFQO0FBQ0QiLCJmaWxlIjoibWF0Y2guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICMgTWF0Y2hcbiAqXG4gKiBSZXRyaWV2ZXMgc2VsZWN0b3JcbiAqL1xuXG5jb25zdCBkZWZhdWx0SWdub3JlID0ge1xuICBhdHRyaWJ1dGUgKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3N0eWxlJyxcbiAgICAgICdkYXRhLXJlYWN0aWQnLFxuICAgICAgJ2RhdGEtcmVhY3QtY2hlY2tzdW0nXG4gICAgXS5pbmRleE9mKGF0dHJpYnV0ZU5hbWUpID4gLTFcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgcGF0aCBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IG5vZGUgICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgb3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXRjaCAobm9kZSwgb3B0aW9ucykge1xuICBjb25zdCBwYXRoID0gW11cbiAgdmFyIGVsZW1lbnQgPSBub2RlXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aFxuXG4gIGNvbnN0IHtcbiAgICByb290ID0gZG9jdW1lbnQsXG4gICAgc2tpcCA9IG51bGwsXG4gICAgaWdub3JlID0ge31cbiAgfSA9IG9wdGlvbnNcblxuICBjb25zdCBza2lwQ29tcGFyZSA9IHNraXAgJiYgKEFycmF5LmlzQXJyYXkoc2tpcCkgPyBza2lwIDogW3NraXBdKS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIChlbGVtZW50KSA9PiBlbGVtZW50ID09PSBlbnRyeVxuICAgIH1cbiAgICByZXR1cm4gZW50cnlcbiAgfSlcblxuICBjb25zdCBza2lwQ2hlY2tzID0gKGVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gc2tpcCAmJiBza2lwQ29tcGFyZS5zb21lKChjb21wYXJlKSA9PiBjb21wYXJlKGVsZW1lbnQpKVxuICB9XG5cbiAgdmFyIGlnbm9yZUNsYXNzID0gZmFsc2VcblxuICBPYmplY3Qua2V5cyhpZ25vcmUpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ2NsYXNzJykge1xuICAgICAgaWdub3JlQ2xhc3MgPSB0cnVlXG4gICAgfVxuICAgIHZhciBwcmVkaWNhdGUgPSBpZ25vcmVbdHlwZV1cbiAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuXG4gICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgPT09ICdudW1iZXInKSB7XG4gICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUudG9TdHJpbmcoKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByZWRpY2F0ZSA9IG5ldyBSZWdFeHAocHJlZGljYXRlKVxuICAgIH1cbiAgICAvLyBjaGVjayBjbGFzcy0vYXR0cmlidXRlbmFtZSBmb3IgcmVnZXhcbiAgICBpZ25vcmVbdHlwZV0gPSBwcmVkaWNhdGUudGVzdC5iaW5kKHByZWRpY2F0ZSlcbiAgfSlcblxuICBpZiAoaWdub3JlQ2xhc3MpIHtcbiAgICBjb25zdCBpZ25vcmVBdHRyaWJ1dGUgPSBpZ25vcmUuYXR0cmlidXRlXG4gICAgaWdub3JlLmF0dHJpYnV0ZSA9IChuYW1lLCB2YWx1ZSwgZGVmYXVsdFByZWRpY2F0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGlnbm9yZS5jbGFzcyh2YWx1ZSkgfHwgaWdub3JlQXR0cmlidXRlICYmIGlnbm9yZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgZGVmYXVsdFByZWRpY2F0ZSlcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoZWxlbWVudCAhPT0gcm9vdCkge1xuXG4gICAgaWYgKHNraXBDaGVja3MoZWxlbWVudCkgIT09IHRydWUpIHtcbiAgICAgIC8vIGdsb2JhbFxuICAgICAgaWYgKGNoZWNrSWQoZWxlbWVudCwgcGF0aCwgaWdub3JlKSkgYnJlYWtcbiAgICAgIGlmIChjaGVja0NsYXNzR2xvYmFsKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcm9vdCkpIGJyZWFrXG4gICAgICBpZiAoY2hlY2tBdHRyaWJ1dGVHbG9iYWwoZWxlbWVudCwgcGF0aCwgaWdub3JlLCByb290KSkgYnJlYWtcbiAgICAgIGlmIChjaGVja1RhZ0dsb2JhbChlbGVtZW50LCBwYXRoLCBpZ25vcmUsIHJvb3QpKSBicmVha1xuXG4gICAgICAvLyBsb2NhbFxuICAgICAgY2hlY2tDbGFzc0xvY2FsKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSlcblxuICAgICAgLy8gZGVmaW5lIG9ubHkgb25lIHNlbGVjdG9yIGVhY2ggaXRlcmF0aW9uXG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICBjaGVja0F0dHJpYnV0ZUxvY2FsKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSlcbiAgICAgIH1cbiAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIGNoZWNrVGFnTG9jYWwoZWxlbWVudCwgcGF0aCwgaWdub3JlKVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICBjaGVja0NsYXNzQ2hpbGQoZWxlbWVudCwgcGF0aCwgaWdub3JlKVxuICAgICAgfVxuICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSBsZW5ndGgpIHtcbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVDaGlsZChlbGVtZW50LCBwYXRoLCBpZ25vcmUpXG4gICAgICB9XG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICBjaGVja1RhZ0NoaWxkKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlXG4gICAgbGVuZ3RoID0gcGF0aC5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbGVtZW50ID09PSByb290KSB7XG4gICAgcGF0aC51bnNoaWZ0KCcqJylcbiAgfVxuXG4gIHJldHVybiBwYXRoLmpvaW4oJyAnKVxufVxuXG5cbi8qKlxuICogW2NoZWNrQ2xhc3NHbG9iYWwgZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tDbGFzc0dsb2JhbCAoZWxlbWVudCwgcGF0aCwgaWdub3JlLCByb290KSB7XG4gIHJldHVybiBjaGVja0NsYXNzKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcm9vdClcbn1cblxuLyoqXG4gKiBbY2hlY2tDbGFzc0xvY2FsIGRlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtBcnJheX0gICAgICAgcGF0aCAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge09iamVjdH0gICAgICBpZ25vcmUgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ2xhc3NMb2NhbCAoZWxlbWVudCwgcGF0aCwgaWdub3JlKSB7XG4gIHJldHVybiBjaGVja0NsYXNzKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG4vKipcbiAqIFtjaGVja0NsYXNzQ2hpbGQgZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tDbGFzc0NoaWxkIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgY29uc3QgY2xhc3NOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcbiAgaWYgKGNoZWNrSWdub3JlKGlnbm9yZS5jbGFzcywgY2xhc3NOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjaGVja0NoaWxkKGVsZW1lbnQsIHBhdGgsIGAuJHtjbGFzc05hbWUudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJy4nKX1gKVxufVxuXG4vKipcbiAqIFtjaGVja0F0dHJpYnV0ZUdsb2JhbCBkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXl9ICAgICAgIHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja0F0dHJpYnV0ZUdsb2JhbCAoZWxlbWVudCwgcGF0aCwgaWdub3JlLCByb290KSB7XG4gIHJldHVybiBjaGVja0F0dHJpYnV0ZShlbGVtZW50LCBwYXRoLCBpZ25vcmUsIHJvb3QpXG59XG5cbi8qKlxuICogW2NoZWNrQXR0cmlidXRlTG9jYWwgZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGVMb2NhbCAoZWxlbWVudCwgcGF0aCwgaWdub3JlKSB7XG4gIHJldHVybiBjaGVja0F0dHJpYnV0ZShlbGVtZW50LCBwYXRoLCBpZ25vcmUsIGVsZW1lbnQucGFyZW50Tm9kZSlcbn1cblxuLyoqXG4gKiBbY2hlY2tBdHRyaWJ1dGVDaGlsZCBkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXl9ICAgICAgIHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja0F0dHJpYnV0ZUNoaWxkIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcykuc29tZSgoa2V5KSA9PiB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1trZXldXG4gICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS5uYW1lXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUudmFsdWVcbiAgICBpZiAoY2hlY2tJZ25vcmUoaWdub3JlLmF0dHJpYnV0ZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUsIGRlZmF1bHRJZ25vcmUuYXR0cmlidXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHBhdHRlcm4gPSBgWyR7YXR0cmlidXRlTmFtZX09XCIke2F0dHJpYnV0ZVZhbHVlfVwiXWBcbiAgICByZXR1cm4gY2hlY2tDaGlsZChlbGVtZW50LCBwYXRoLCBwYXR0ZXJuKVxuICB9KVxufVxuXG4vKipcbiAqIFtjaGVja1RhZ0dsb2JhbCBkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXl9ICAgICAgIHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja1RhZ0dsb2JhbCAoZWxlbWVudCwgcGF0aCwgaWdub3JlLCByb290KSB7XG4gIHJldHVybiBjaGVja1RhZyhlbGVtZW50LCBwYXRoLCBpZ25vcmUsIHJvb3QpXG59XG5cbi8qKlxuICogW2NoZWNrVGFnTG9jYWwgZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tUYWdMb2NhbCAoZWxlbWVudCwgcGF0aCwgaWdub3JlKSB7XG4gIHJldHVybiBjaGVja1RhZyhlbGVtZW50LCBwYXRoLCBpZ25vcmUsIGVsZW1lbnQucGFyZW50Tm9kZSlcbn1cblxuLyoqXG4gKiBbY2hlY2tUYWJDaGlsZHJlbiBkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXl9ICAgICAgIHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja1RhZ0NoaWxkIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChjaGVja0lnbm9yZShpZ25vcmUudGFnLCB0YWdOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjaGVja0NoaWxkKGVsZW1lbnQsIHBhdGgsIHRhZ05hbWUpXG59XG5cbi8qKlxuICogW2NoZWNrSWQgZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tJZCAoZWxlbWVudCwgcGF0aCwgaWdub3JlKSB7XG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJylcbiAgaWYgKGNoZWNrSWdub3JlKGlnbm9yZS5pZCwgaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcGF0aC51bnNoaWZ0KGAjJHtpZH1gKVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIFtjaGVja0NsYXNzIGRlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtBcnJheX0gICAgICAgcGF0aCAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge09iamVjdH0gICAgICBpZ25vcmUgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IHBhcmVudCAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tDbGFzcyAoZWxlbWVudCwgcGF0aCwgaWdub3JlLCBwYXJlbnQpIHtcbiAgY29uc3QgY2xhc3NOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcbiAgaWYgKGNoZWNrSWdub3JlKGlnbm9yZS5jbGFzcywgY2xhc3NOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBwYXJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHBhdGgudW5zaGlmdChgLiR7Y2xhc3NOYW1lLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcuJyl9YClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIFtjaGVja0F0dHJpYnV0ZSBkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXl9ICAgICAgIHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBwYXJlbnQgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQXR0cmlidXRlIChlbGVtZW50LCBwYXRoLCBpZ25vcmUsIHBhcmVudCkge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5hdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5zb21lKChrZXkpID0+IHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2tleV1cbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLm5hbWVcbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZS52YWx1ZVxuICAgIGlmIChjaGVja0lnbm9yZShpZ25vcmUuYXR0cmlidXRlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSwgZGVmYXVsdElnbm9yZS5hdHRyaWJ1dGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgcGF0dGVybiA9IGBbJHthdHRyaWJ1dGVOYW1lfT1cIiR7YXR0cmlidXRlVmFsdWV9XCJdYFxuICAgIGNvbnN0IG1hdGNoZXMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbChwYXR0ZXJuKVxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcGF0aC51bnNoaWZ0KHBhdHRlcm4pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLyoqXG4gKiBbY2hlY2tUYWcgZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5fSAgICAgICBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IHBhcmVudCAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja1RhZyAoZWxlbWVudCwgcGF0aCwgaWdub3JlLCBwYXJlbnQpIHtcbiAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChjaGVja0lnbm9yZShpZ25vcmUudGFnLCB0YWdOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBwYXJlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSlcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgcGF0aC51bnNoaWZ0KHRhZ05hbWUpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBbY2hlY2tDaGlsZCBkZXNjcmlwdGlvbl1cbiAqIE5vdGU6IGNoaWxkVGFncyBpcyBhIGN1c3RvbSBwcm9wZXJ0eSB0byB1c2UgYSB2aWV3IGZpbHRlciBmb3IgdGFncyBvbiBmb3IgdmlydXRhbCBlbGVtZW50c1xuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXl9ICAgICAgIHBhdGggICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7U3RyaW5nfSAgICAgIHNlbGVjdG9yIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja0NoaWxkIChlbGVtZW50LCBwYXRoLCBzZWxlY3Rvcikge1xuICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGVcbiAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRUYWdzIHx8IHBhcmVudC5jaGlsZHJlblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChjaGlsZHJlbltpXSA9PT0gZWxlbWVudCkge1xuICAgICAgcGF0aC51bnNoaWZ0KGA+ICR7c2VsZWN0b3J9Om50aC1jaGlsZCgke2krMX0pYClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIFtjaGVja0lnbm9yZSBkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBwcmVkaWNhdGUgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge3N0cmluZ30gICBuYW1lICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge3N0cmluZ30gICB2YWx1ZSAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBkZWZhdWx0UHJlZGljYXRlIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tJZ25vcmUgKHByZWRpY2F0ZSwgbmFtZSwgdmFsdWUsIGRlZmF1bHRQcmVkaWNhdGUpIHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBjb25zdCBjaGVjayA9IHByZWRpY2F0ZSB8fCBkZWZhdWx0UHJlZGljYXRlXG4gIGlmICghY2hlY2spIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gY2hlY2sobmFtZSwgdmFsdWUgfHwgbmFtZSwgZGVmYXVsdFByZWRpY2F0ZSlcbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==
//# sourceMappingURL=data:application/json;base64,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TSxRQUFRLGFBQWEsZ0JBQTNCO0FBQ0EsTUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLFdBQU8sS0FBUDtBQUNEO0FBQ0QsU0FBTyxNQUFNLElBQU4sRUFBWSxTQUFTLElBQXJCLEVBQTJCLGdCQUEzQixDQUFQO0FBQ0QiLCJmaWxlIjoibWF0Y2guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICMgTWF0Y2hcbiAqXG4gKiBSZXRyaWV2ZXMgc2VsZWN0b3JcbiAqL1xuXG5jb25zdCBkZWZhdWx0SWdub3JlID0ge1xuICBhdHRyaWJ1dGUgKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3N0eWxlJyxcbiAgICAgICdkYXRhLXJlYWN0aWQnLFxuICAgICAgJ2RhdGEtcmVhY3QtY2hlY2tzdW0nXG4gICAgXS5pbmRleE9mKGF0dHJpYnV0ZU5hbWUpID4gLTFcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgcGF0aCBvZiB0aGUgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBub2RlICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgIG9wdGlvbnMgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWF0Y2ggKG5vZGUsIG9wdGlvbnMpIHtcblxuICBjb25zdCB7XG4gICAgcm9vdCA9IGRvY3VtZW50LFxuICAgIHNraXAgPSBudWxsLFxuICAgIGlnbm9yZSA9IHt9XG4gIH0gPSBvcHRpb25zXG5cbiAgY29uc3QgcGF0aCA9IFtdXG4gIHZhciBlbGVtZW50ID0gbm9kZVxuICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGhcblxuICBjb25zdCBza2lwQ29tcGFyZSA9IHNraXAgJiYgKEFycmF5LmlzQXJyYXkoc2tpcCkgPyBza2lwIDogW3NraXBdKS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIChlbGVtZW50KSA9PiBlbGVtZW50ID09PSBlbnRyeVxuICAgIH1cbiAgICByZXR1cm4gZW50cnlcbiAgfSlcblxuICBjb25zdCBza2lwQ2hlY2tzID0gKGVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gc2tpcCAmJiBza2lwQ29tcGFyZS5zb21lKChjb21wYXJlKSA9PiBjb21wYXJlKGVsZW1lbnQpKVxuICB9XG5cbiAgdmFyIGlnbm9yZUNsYXNzID0gZmFsc2VcblxuICBPYmplY3Qua2V5cyhpZ25vcmUpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ2NsYXNzJykge1xuICAgICAgaWdub3JlQ2xhc3MgPSB0cnVlXG4gICAgfVxuICAgIHZhciBwcmVkaWNhdGUgPSBpZ25vcmVbdHlwZV1cbiAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuXG4gICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgPT09ICdudW1iZXInKSB7XG4gICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUudG9TdHJpbmcoKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByZWRpY2F0ZSA9IG5ldyBSZWdFeHAocHJlZGljYXRlKVxuICAgIH1cbiAgICAvLyBjaGVjayBjbGFzcy0vYXR0cmlidXRlbmFtZSBmb3IgcmVnZXhcbiAgICBpZ25vcmVbdHlwZV0gPSBwcmVkaWNhdGUudGVzdC5iaW5kKHByZWRpY2F0ZSlcbiAgfSlcblxuICBpZiAoaWdub3JlQ2xhc3MpIHtcbiAgICBjb25zdCBpZ25vcmVBdHRyaWJ1dGUgPSBpZ25vcmUuYXR0cmlidXRlXG4gICAgaWdub3JlLmF0dHJpYnV0ZSA9IChuYW1lLCB2YWx1ZSwgZGVmYXVsdFByZWRpY2F0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGlnbm9yZS5jbGFzcyh2YWx1ZSkgfHwgaWdub3JlQXR0cmlidXRlICYmIGlnbm9yZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgZGVmYXVsdFByZWRpY2F0ZSlcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoZWxlbWVudCAhPT0gcm9vdCkge1xuXG4gICAgaWYgKHNraXBDaGVja3MoZWxlbWVudCkgIT09IHRydWUpIHtcbiAgICAgIC8vIGdsb2JhbFxuICAgICAgaWYgKGNoZWNrSWQoZWxlbWVudCwgcGF0aCwgaWdub3JlKSkgYnJlYWtcbiAgICAgIGlmIChjaGVja0NsYXNzR2xvYmFsKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcm9vdCkpIGJyZWFrXG4gICAgICBpZiAoY2hlY2tBdHRyaWJ1dGVHbG9iYWwoZWxlbWVudCwgcGF0aCwgaWdub3JlLCByb290KSkgYnJlYWtcbiAgICAgIGlmIChjaGVja1RhZ0dsb2JhbChlbGVtZW50LCBwYXRoLCBpZ25vcmUsIHJvb3QpKSBicmVha1xuXG4gICAgICAvLyBsb2NhbFxuICAgICAgY2hlY2tDbGFzc0xvY2FsKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSlcblxuICAgICAgLy8gZGVmaW5lIG9ubHkgb25lIHNlbGVjdG9yIGVhY2ggaXRlcmF0aW9uXG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICBjaGVja0F0dHJpYnV0ZUxvY2FsKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSlcbiAgICAgIH1cbiAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIGNoZWNrVGFnTG9jYWwoZWxlbWVudCwgcGF0aCwgaWdub3JlKVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICBjaGVja0NsYXNzQ2hpbGQoZWxlbWVudCwgcGF0aCwgaWdub3JlKVxuICAgICAgfVxuICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSBsZW5ndGgpIHtcbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVDaGlsZChlbGVtZW50LCBwYXRoLCBpZ25vcmUpXG4gICAgICB9XG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICBjaGVja1RhZ0NoaWxkKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlXG4gICAgbGVuZ3RoID0gcGF0aC5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbGVtZW50ID09PSByb290KSB7XG4gICAgcGF0aC51bnNoaWZ0KCcqJylcbiAgfVxuXG4gIHJldHVybiBwYXRoLmpvaW4oJyAnKVxufVxuXG5cbi8qKlxuICogUHJlc2V0ICdjaGVja0NsYXNzJyB3aXRoIGdsb2JhbCBkYXRhXG4gKlxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9ICAgIGVsZW1lbnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcGF0aCAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICBpZ25vcmUgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ2xhc3NHbG9iYWwgKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcm9vdCkge1xuICByZXR1cm4gY2hlY2tDbGFzcyhlbGVtZW50LCBwYXRoLCBpZ25vcmUsIHJvb3QpXG59XG5cbi8qKlxuICogUHJlc2V0ICdjaGVja0NsYXNzJyB3aXRoIGxvY2FsIGRhdGFcbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gICAgZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tDbGFzc0xvY2FsIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgcmV0dXJuIGNoZWNrQ2xhc3MoZWxlbWVudCwgcGF0aCwgaWdub3JlLCBlbGVtZW50LnBhcmVudE5vZGUpXG59XG5cbi8qKlxuICogUHJlc2V0ICdjaGVja0NoaWxkJyB3aXRoIGNsYXNzIGRhdGFcbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gICAgZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tDbGFzc0NoaWxkIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgY29uc3QgY2xhc3NOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcbiAgaWYgKGNoZWNrSWdub3JlKGlnbm9yZS5jbGFzcywgY2xhc3NOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjaGVja0NoaWxkKGVsZW1lbnQsIHBhdGgsIGAuJHtjbGFzc05hbWUudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJy4nKX1gKVxufVxuXG4vKipcbiAqIFByZXNldCAnY2hlY2tBdHRyaWJ1dGUnIHdpdGggZ2xvYmFsIGRhdGFcbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gICAgZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGVHbG9iYWwgKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcm9vdCkge1xuICByZXR1cm4gY2hlY2tBdHRyaWJ1dGUoZWxlbWVudCwgcGF0aCwgaWdub3JlLCByb290KVxufVxuXG4vKipcbiAqIFByZXNldCAnY2hlY2tBdHRyaWJ1dGUnIHdpdGggbG9jYWwgZGF0YVxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja0F0dHJpYnV0ZUxvY2FsIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgcmV0dXJuIGNoZWNrQXR0cmlidXRlKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG4vKipcbiAqIFByZXNldCAnY2hlY2tDaGlsZCcgd2l0aCBhdHRyaWJ1dGUgZGF0YVxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja0F0dHJpYnV0ZUNoaWxkIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcykuc29tZSgoa2V5KSA9PiB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1trZXldXG4gICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS5uYW1lXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUudmFsdWVcbiAgICBpZiAoY2hlY2tJZ25vcmUoaWdub3JlLmF0dHJpYnV0ZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUsIGRlZmF1bHRJZ25vcmUuYXR0cmlidXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHBhdHRlcm4gPSBgWyR7YXR0cmlidXRlTmFtZX09XCIke2F0dHJpYnV0ZVZhbHVlfVwiXWBcbiAgICByZXR1cm4gY2hlY2tDaGlsZChlbGVtZW50LCBwYXRoLCBwYXR0ZXJuKVxuICB9KVxufVxuXG4vKipcbiAqIFByZXNldCAnY2hlY2tUYWcnIHdpdGggZ2xvYmFsIGRhdGFcbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gICAgZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tUYWdHbG9iYWwgKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcm9vdCkge1xuICByZXR1cm4gY2hlY2tUYWcoZWxlbWVudCwgcGF0aCwgaWdub3JlLCByb290KVxufVxuXG4vKipcbiAqIFByZXNldCAnY2hlY2tUYWcnIHdpdGggbG9jYWwgZGF0YVxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja1RhZ0xvY2FsIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgcmV0dXJuIGNoZWNrVGFnKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG4vKipcbiAqIFByZXNldCAnY2hlY2tDaGlsZCcgd2l0aCB0YWcgZGF0YVxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja1RhZ0NoaWxkIChlbGVtZW50LCBwYXRoLCBpZ25vcmUpIHtcbiAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChjaGVja0lnbm9yZShpZ25vcmUudGFnLCB0YWdOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjaGVja0NoaWxkKGVsZW1lbnQsIHBhdGgsIHRhZ05hbWUpXG59XG5cbi8qKlxuICogTG9va3VwIHVuaXF1ZSBpZGVudGlmaWVyXG4gKlxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9ICAgIGVsZW1lbnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcGF0aCAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge09iamVjdH0gICAgICAgICBpZ25vcmUgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGNoZWNrSWQgKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSkge1xuICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpXG4gIGlmIChjaGVja0lnbm9yZShpZ25vcmUuaWQsIGlkKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHBhdGgudW5zaGlmdChgIyR7aWR9YClcbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBMb29rdXAgY2xhc3MgaWRlbnRpZmllclxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHBhdGggICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgaWdub3JlICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBwYXJlbnQgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ2xhc3MgKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcGFyZW50KSB7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpXG4gIGlmIChjaGVja0lnbm9yZShpZ25vcmUuY2xhc3MsIGNsYXNzTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gcGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKVxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICBwYXRoLnVuc2hpZnQoYC4ke2NsYXNzTmFtZS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnLicpfWApXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBMb29rdXAgYXR0cmlidXRlIGlkZW50aWZpZXJcbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gICAgZWxlbWVudCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwYXRoICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gICAgcGFyZW50ICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja0F0dHJpYnV0ZSAoZWxlbWVudCwgcGF0aCwgaWdub3JlLCBwYXJlbnQpIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcykuc29tZSgoa2V5KSA9PiB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1trZXldXG4gICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS5uYW1lXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUudmFsdWVcbiAgICBpZiAoY2hlY2tJZ25vcmUoaWdub3JlLmF0dHJpYnV0ZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUsIGRlZmF1bHRJZ25vcmUuYXR0cmlidXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHBhdHRlcm4gPSBgWyR7YXR0cmlidXRlTmFtZX09XCIke2F0dHJpYnV0ZVZhbHVlfVwiXWBcbiAgICBjb25zdCBtYXRjaGVzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGF0dGVybilcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHBhdGgudW5zaGlmdChwYXR0ZXJuKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogTG9va3VwIHRhZyBpZGVudGlmaWVyXG4gKlxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9ICAgIGVsZW1lbnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcGF0aCAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBwYXJlbnQgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgIGlnbm9yZSAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tUYWcgKGVsZW1lbnQsIHBhdGgsIGlnbm9yZSwgcGFyZW50KSB7XG4gIGNvbnN0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKVxuICBpZiAoY2hlY2tJZ25vcmUoaWdub3JlLnRhZywgdGFnTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gcGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHBhdGgudW5zaGlmdCh0YWdOYW1lKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogTG9va3VwIGNoaWxkIGlkZW50ZmllclxuICpcbiAqIE5vdGU6IGNoaWxkVGFncyBpcyBhIGN1c3RvbSBwcm9wZXJ0eSB0byB1c2UgYSB2aWV3IGZpbHRlciBmb3IgdGFncyBvbiBmb3IgdmlydXRhbCBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgICBlbGVtZW50ICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwYXRoICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgICBzZWxlY3RvciAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gY2hlY2tDaGlsZCAoZWxlbWVudCwgcGF0aCwgc2VsZWN0b3IpIHtcbiAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlXG4gIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkVGFncyB8fCBwYXJlbnQuY2hpbGRyZW5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoY2hpbGRyZW5baV0gPT09IGVsZW1lbnQpIHtcbiAgICAgIHBhdGgudW5zaGlmdChgPiAke3NlbGVjdG9yfTpudGgtY2hpbGQoJHtpKzF9KWApXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB3aXRoIGN1c3RvbSBhbmQgZGVmYXVsdCBmdW5jdGlvbnNcbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gcHJlZGljYXRlICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge3N0cmluZ30gICBuYW1lICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7c3RyaW5nfSAgIHZhbHVlICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZGVmYXVsdFByZWRpY2F0ZSAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5mdW5jdGlvbiBjaGVja0lnbm9yZSAocHJlZGljYXRlLCBuYW1lLCB2YWx1ZSwgZGVmYXVsdFByZWRpY2F0ZSkge1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGNvbnN0IGNoZWNrID0gcHJlZGljYXRlIHx8IGRlZmF1bHRQcmVkaWNhdGVcbiAgaWYgKCFjaGVjaykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjaGVjayhuYW1lLCB2YWx1ZSB8fCBuYW1lLCBkZWZhdWx0UHJlZGljYXRlKVxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9

@@ -16,2 +16,3 @@ 'use strict';

* Apply different optimization techniques
*
* @param {string} selector - [description]

@@ -22,5 +23,9 @@ * @param {HTMLElement} element - [description]

function optimize(selector, element) {
var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
if (!element || element.nodeType !== 1) {
throw new Error('Invalid input - to compare HTMLElements its necessary to provide a reference of the node! (missing "element")');
}
var globalModified = (0, _adapt2.default)(element, options);

@@ -32,3 +37,3 @@

if (path.length < 3) {
return selector;
return optimizePart('', selector, '', element);
}

@@ -64,2 +69,3 @@

* Improve a chunk of the selector
*
* @param {string} prePart - [description]

@@ -135,4 +141,7 @@ * @param {string} current - [description]

while (names.length) {
var partial = current.replace(names.shift(), '');
var partial = current.replace(names.shift(), '').trim();
var pattern = '' + prePart + partial + postPart;
if (!pattern || partial === '>') {
break;
}
var matches = document.querySelectorAll(pattern);

@@ -165,2 +174,2 @@ if (matches.length === 1 && matches[0] === element) {

module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,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QTFCLENBQWQ7QUFDQSxjQUFJLFFBQVEsTUFBUixLQUFtQixDQUFuQixJQUF3QixRQUFRLENBQVIsTUFBZSxPQUEzQyxFQUFvRDtBQUNsRCxzQkFBVSxZQUFWO0FBQ0Q7QUFDRDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFNBQU8sT0FBUDtBQUNEIiwiZmlsZSI6Im9wdGltaXplLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAjIE9wdGltaXplXG4gKlxuICogMS4pIEltcHJvdmUgZWZmaWNpZW5jeSB0aHJvdWdoIHNob3J0ZXIgc2VsZWN0b3JzIGJ5IHJlbW92aW5nIHJlZHVuZGFuY3lcbiAqIDIuKSBJbXByb3ZlIHJvYnVzdG5lc3MgdGhyb3VnaCBzZWxlY3RvciB0cmFuc2Zvcm1hdGlvblxuICovXG5cbmltcG9ydCBhZGFwdCBmcm9tICcuL2FkYXB0J1xuXG4vKipcbiAqIEFwcGx5IGRpZmZlcmVudCBvcHRpbWl6YXRpb24gdGVjaG5pcXVlc1xuICogQHBhcmFtICB7c3RyaW5nfSAgICAgIHNlbGVjdG9yIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcHRpbWl6ZSAoc2VsZWN0b3IsIGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuXG4gIGNvbnN0IGdsb2JhbE1vZGlmaWVkID0gYWRhcHQoZWxlbWVudCwgb3B0aW9ucylcblxuICAvLyBjaHVuayBwYXJ0cyBvdXRzaWRlIG9mIHF1b3RlcyAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjU2NjM3MjkpXG4gIHZhciBwYXRoID0gc2VsZWN0b3IucmVwbGFjZSgvPiAvZywgJz4nKS5zcGxpdCgvXFxzKyg/PSg/Oig/OlteXCJdKlwiKXsyfSkqW15cIl0qJCkvKVxuXG4gIGlmIChwYXRoLmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4gc2VsZWN0b3JcbiAgfVxuXG4gIGNvbnN0IHNob3J0ZW5lZCA9IFtwYXRoLnBvcCgpXVxuICB3aGlsZSAocGF0aC5sZW5ndGggPiAxKSAge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBwYXRoLnBvcCgpXG4gICAgY29uc3QgcHJlUGFydCA9IHBhdGguam9pbignICcpXG4gICAgY29uc3QgcG9zdFBhcnQgPSBzaG9ydGVuZWQuam9pbignICcpXG5cbiAgICBjb25zdCBwYXR0ZXJuID0gYCR7cHJlUGFydH0gJHtwb3N0UGFydH1gXG4gICAgY29uc3QgbWF0Y2hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGF0dGVybilcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHNob3J0ZW5lZC51bnNoaWZ0KG9wdGltaXplUGFydChwcmVQYXJ0LCBjdXJyZW50LCBwb3N0UGFydCwgZWxlbWVudCkpXG4gICAgfVxuICB9XG4gIHNob3J0ZW5lZC51bnNoaWZ0KHBhdGhbMF0pXG4gIHBhdGggPSBzaG9ydGVuZWRcblxuICAvLyBvcHRpbWl6ZSBzdGFydCArIGVuZFxuICBwYXRoWzBdID0gb3B0aW1pemVQYXJ0KCcnLCBwYXRoWzBdLCBwYXRoLnNsaWNlKDEpLmpvaW4oJyAnKSwgZWxlbWVudClcbiAgcGF0aFtwYXRoLmxlbmd0aC0xXSA9IG9wdGltaXplUGFydChwYXRoLnNsaWNlKDAsIC0xKS5qb2luKCcgJyksIHBhdGhbcGF0aC5sZW5ndGgtMV0sICcnLCBlbGVtZW50KVxuXG4gIGlmIChnbG9iYWxNb2RpZmllZCkge1xuICAgIGRlbGV0ZSBnbG9iYWwuZG9jdW1lbnRcbiAgfVxuXG4gIHJldHVybiBwYXRoLmpvaW4oJyAnKS5yZXBsYWNlKC8+L2csICc+ICcpLnRyaW0oKVxufVxuXG4vKipcbiAqIEltcHJvdmUgYSBjaHVuayBvZiB0aGUgc2VsZWN0b3JcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICBwcmVQYXJ0ICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICBjdXJyZW50ICAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICBwb3N0UGFydCAtIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50ICAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZnVuY3Rpb24gb3B0aW1pemVQYXJ0IChwcmVQYXJ0LCBjdXJyZW50LCBwb3N0UGFydCwgZWxlbWVudCkge1xuICBpZiAocHJlUGFydC5sZW5ndGgpIHByZVBhcnQgPSBgJHtwcmVQYXJ0fSBgXG4gIGlmIChwb3N0UGFydC5sZW5ndGgpIHBvc3RQYXJ0ID0gYCAke3Bvc3RQYXJ0fWBcblxuICAvLyByb2J1c3RuZXNzOiBhdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZSAoZ2VuZXJhbGl6YXRpb24pXG4gIGlmICgvXFxbKlxcXS8udGVzdChjdXJyZW50KSkge1xuICAgIGNvbnN0IGtleSA9IGN1cnJlbnQucmVwbGFjZSgvPS4qJC8sICddJylcbiAgICB2YXIgcGF0dGVybiA9IGAke3ByZVBhcnR9JHtrZXl9JHtwb3N0UGFydH1gXG4gICAgdmFyIG1hdGNoZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBhdHRlcm4pXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxICYmIG1hdGNoZXNbMF0gPT09IGVsZW1lbnQpIHtcbiAgICAgIGN1cnJlbnQgPSBrZXlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcm9idXN0bmVzczogcmVwbGFjZSBzcGVjaWZpYyBrZXktdmFsdWUgd2l0aCB0YWcgKGhldXJpc3RpYylcbiAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAke3ByZVBhcnR9JHtrZXl9YClcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcmVmZXJlbmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZXNbaV0uY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJlZmVyZW5jZXNbaV0udGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgdmFyIHBhdHRlcm4gPSBgJHtwcmVQYXJ0fSR7ZGVzY3JpcHRpb259JHtwb3N0UGFydH1gXG4gICAgICAgICAgdmFyIG1hdGNoZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBhdHRlcm4pXG4gICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxICYmIG1hdGNoZXNbMF0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBkZXNjcmlwdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gcm9idXN0bmVzczogZGVzY2VuZGFudCBpbnN0ZWFkIGNoaWxkIChoZXVyaXN0aWMpXG4gIGlmICgvPi8udGVzdChjdXJyZW50KSkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnQgPSBjdXJyZW50LnJlcGxhY2UoLz4vLCAnJylcbiAgICB2YXIgcGF0dGVybiA9IGAke3ByZVBhcnR9JHtkZXNjZW5kYW50fSR7cG9zdFBhcnR9YFxuICAgIHZhciBtYXRjaGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXR0ZXJuKVxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBtYXRjaGVzWzBdID09PSBlbGVtZW50KSB7XG4gICAgICBjdXJyZW50ID0gZGVzY2VuZGFudFxuICAgIH1cbiAgfVxuXG4gIC8vIHJvYnVzdG5lc3M6ICdudGgtb2YtdHlwZScgaW5zdGVhZCAnbnRoLWNoaWxkJyAoaGV1cmlzdGljKVxuICBpZiAoLzpudGgtY2hpbGQvLnRlc3QoY3VycmVudCkpIHtcbiAgICAvLyBUT0RPOiBjb25zaWRlciBjb21wbGV0ZSBjb3ZlcmFnZSBvZiAnbnRoLW9mLXR5cGUnIHJlcGxhY2VtZW50XG4gICAgY29uc3QgdHlwZSA9IGN1cnJlbnQucmVwbGFjZSgvbnRoLWNoaWxkL2csICdudGgtb2YtdHlwZScpXG4gICAgdmFyIHBhdHRlcm4gPSBgJHtwcmVQYXJ0fSR7dHlwZX0ke3Bvc3RQYXJ0fWBcbiAgICB2YXIgbWF0Y2hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGF0dGVybilcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEgJiYgbWF0Y2hlc1swXSA9PT0gZWxlbWVudCkge1xuICAgICAgY3VycmVudCA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvLyBlZmZpY2llbmN5OiBjb21iaW5hdGlvbnMgb2YgY2xhc3NuYW1lIChwYXJ0aWFsIHBlcm11dGF0aW9ucylcbiAgaWYgKC9cXC5cXFMrXFwuXFxTKy8udGVzdChjdXJyZW50KSkge1xuICAgIGNvbnN0IG5hbWVzID0gY3VycmVudC50cmltKCkuc3BsaXQoJy4nKS5zbGljZSgxKS5tYXAoKG5hbWUpID0+IGAuJHtuYW1lfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChjdXJyLCBuZXh0KSA9PiBjdXJyLmxlbmd0aCAtIG5leHQubGVuZ3RoKVxuICAgIHdoaWxlIChuYW1lcy5sZW5ndGgpIHtcbiAgICAgIHZhciBwYXJ0aWFsID0gY3VycmVudC5yZXBsYWNlKG5hbWVzLnNoaWZ0KCksICcnKVxuICAgICAgdmFyIHBhdHRlcm4gPSBgJHtwcmVQYXJ0fSR7cGFydGlhbH0ke3Bvc3RQYXJ0fWBcbiAgICAgIHZhciBtYXRjaGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXR0ZXJuKVxuICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxICYmIG1hdGNoZXNbMF0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgY3VycmVudCA9IHBhcnRpYWxcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcm9idXN0bmVzczogZGVncmFkZSBjb21wbGV4IGNsYXNzbmFtZSAoaGV1cmlzdGljKVxuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQubWF0Y2goL1xcLi9nKS5sZW5ndGggPiAyKSB7XG4gICAgICBjb25zdCByZWZlcmVuY2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgJHtwcmVQYXJ0fSR7Y3VycmVudH1gKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSByZWZlcmVuY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocmVmZXJlbmNlc1tpXS5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICAgIC8vIFRPRE86XG4gICAgICAgICAgLy8gLSBjaGVjayB1c2luZyBhdHRyaWJ1dGVzICsgcmVnYXJkIGV4Y2x1ZGVzXG4gICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByZWZlcmVuY2VzW2ldLnRhZ05hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIHZhciBwYXR0ZXJuID0gYCR7cHJlUGFydH0ke2Rlc2NyaXB0aW9ufSR7cG9zdFBhcnR9YFxuICAgICAgICAgIHZhciBtYXRjaGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXR0ZXJuKVxuICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBtYXRjaGVzWzBdID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjdXJyZW50XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=
//# sourceMappingURL=data:application/json;base64,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R0FBOUMsRUFBbUQ7QUFDakQsWUFBSSxZQUFXLENBQVgsRUFBYyxRQUFkLENBQXVCLE9BQXZCLENBQUosRUFBcUM7OztBQUduQyxjQUFNLGVBQWMsWUFBVyxDQUFYLEVBQWMsT0FBZCxDQUFzQixXQUF0QixFQUFwQjtBQUNBLGNBQUksZUFBYSxPQUFiLEdBQXVCLFlBQXZCLEdBQXFDLFFBQXpDO0FBQ0EsY0FBSSxVQUFVLFNBQVMsZ0JBQVQsQ0FBMEIsT0FBMUIsQ0FBZDtBQUNBLGNBQUksUUFBUSxNQUFSLEtBQW1CLENBQW5CLElBQXdCLFFBQVEsQ0FBUixNQUFlLE9BQTNDLEVBQW9EO0FBQ2xELHNCQUFVLFlBQVY7QUFDRDtBQUNEO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBRUQsU0FBTyxPQUFQO0FBQ0QiLCJmaWxlIjoib3B0aW1pemUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICMgT3B0aW1pemVcbiAqXG4gKiAxLikgSW1wcm92ZSBlZmZpY2llbmN5IHRocm91Z2ggc2hvcnRlciBzZWxlY3RvcnMgYnkgcmVtb3ZpbmcgcmVkdW5kYW5jeVxuICogMi4pIEltcHJvdmUgcm9idXN0bmVzcyB0aHJvdWdoIHNlbGVjdG9yIHRyYW5zZm9ybWF0aW9uXG4gKi9cblxuaW1wb3J0IGFkYXB0IGZyb20gJy4vYWRhcHQnXG5cbi8qKlxuICogQXBwbHkgZGlmZmVyZW50IG9wdGltaXphdGlvbiB0ZWNobmlxdWVzXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgIHNlbGVjdG9yIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcHRpbWl6ZSAoc2VsZWN0b3IsIGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuXG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGlucHV0IC0gdG8gY29tcGFyZSBIVE1MRWxlbWVudHMgaXRzIG5lY2Vzc2FyeSB0byBwcm92aWRlIGEgcmVmZXJlbmNlIG9mIHRoZSBub2RlISAobWlzc2luZyBcImVsZW1lbnRcIilgKVxuICB9XG5cbiAgY29uc3QgZ2xvYmFsTW9kaWZpZWQgPSBhZGFwdChlbGVtZW50LCBvcHRpb25zKVxuXG4gIC8vIGNodW5rIHBhcnRzIG91dHNpZGUgb2YgcXVvdGVzIChodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNTY2MzcyOSlcbiAgdmFyIHBhdGggPSBzZWxlY3Rvci5yZXBsYWNlKC8+IC9nLCAnPicpLnNwbGl0KC9cXHMrKD89KD86KD86W15cIl0qXCIpezJ9KSpbXlwiXSokKS8pXG5cbiAgaWYgKHBhdGgubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiBvcHRpbWl6ZVBhcnQoJycsIHNlbGVjdG9yLCAnJywgZWxlbWVudClcbiAgfVxuXG4gIGNvbnN0IHNob3J0ZW5lZCA9IFtwYXRoLnBvcCgpXVxuICB3aGlsZSAocGF0aC5sZW5ndGggPiAxKSAge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBwYXRoLnBvcCgpXG4gICAgY29uc3QgcHJlUGFydCA9IHBhdGguam9pbignICcpXG4gICAgY29uc3QgcG9zdFBhcnQgPSBzaG9ydGVuZWQuam9pbignICcpXG5cbiAgICBjb25zdCBwYXR0ZXJuID0gYCR7cHJlUGFydH0gJHtwb3N0UGFydH1gXG4gICAgY29uc3QgbWF0Y2hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGF0dGVybilcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHNob3J0ZW5lZC51bnNoaWZ0KG9wdGltaXplUGFydChwcmVQYXJ0LCBjdXJyZW50LCBwb3N0UGFydCwgZWxlbWVudCkpXG4gICAgfVxuICB9XG4gIHNob3J0ZW5lZC51bnNoaWZ0KHBhdGhbMF0pXG4gIHBhdGggPSBzaG9ydGVuZWRcblxuICAvLyBvcHRpbWl6ZSBzdGFydCArIGVuZFxuICBwYXRoWzBdID0gb3B0aW1pemVQYXJ0KCcnLCBwYXRoWzBdLCBwYXRoLnNsaWNlKDEpLmpvaW4oJyAnKSwgZWxlbWVudClcbiAgcGF0aFtwYXRoLmxlbmd0aC0xXSA9IG9wdGltaXplUGFydChwYXRoLnNsaWNlKDAsIC0xKS5qb2luKCcgJyksIHBhdGhbcGF0aC5sZW5ndGgtMV0sICcnLCBlbGVtZW50KVxuXG4gIGlmIChnbG9iYWxNb2RpZmllZCkge1xuICAgIGRlbGV0ZSBnbG9iYWwuZG9jdW1lbnRcbiAgfVxuXG4gIHJldHVybiBwYXRoLmpvaW4oJyAnKS5yZXBsYWNlKC8+L2csICc+ICcpLnRyaW0oKVxufVxuXG4vKipcbiAqIEltcHJvdmUgYSBjaHVuayBvZiB0aGUgc2VsZWN0b3JcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgcHJlUGFydCAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgY3VycmVudCAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgcG9zdFBhcnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxlbWVudCAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIG9wdGltaXplUGFydCAocHJlUGFydCwgY3VycmVudCwgcG9zdFBhcnQsIGVsZW1lbnQpIHtcbiAgaWYgKHByZVBhcnQubGVuZ3RoKSBwcmVQYXJ0ID0gYCR7cHJlUGFydH0gYFxuICBpZiAocG9zdFBhcnQubGVuZ3RoKSBwb3N0UGFydCA9IGAgJHtwb3N0UGFydH1gXG5cbiAgLy8gcm9idXN0bmVzczogYXR0cmlidXRlIHdpdGhvdXQgdmFsdWUgKGdlbmVyYWxpemF0aW9uKVxuICBpZiAoL1xcWypcXF0vLnRlc3QoY3VycmVudCkpIHtcbiAgICBjb25zdCBrZXkgPSBjdXJyZW50LnJlcGxhY2UoLz0uKiQvLCAnXScpXG4gICAgdmFyIHBhdHRlcm4gPSBgJHtwcmVQYXJ0fSR7a2V5fSR7cG9zdFBhcnR9YFxuICAgIHZhciBtYXRjaGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXR0ZXJuKVxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBtYXRjaGVzWzBdID09PSBlbGVtZW50KSB7XG4gICAgICBjdXJyZW50ID0ga2V5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJvYnVzdG5lc3M6IHJlcGxhY2Ugc3BlY2lmaWMga2V5LXZhbHVlIHdpdGggdGFnIChoZXVyaXN0aWMpXG4gICAgICBjb25zdCByZWZlcmVuY2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgJHtwcmVQYXJ0fSR7a2V5fWApXG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJlZmVyZW5jZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChyZWZlcmVuY2VzW2ldLmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByZWZlcmVuY2VzW2ldLnRhZ05hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIHZhciBwYXR0ZXJuID0gYCR7cHJlUGFydH0ke2Rlc2NyaXB0aW9ufSR7cG9zdFBhcnR9YFxuICAgICAgICAgIHZhciBtYXRjaGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXR0ZXJuKVxuICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBtYXRjaGVzWzBdID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHJvYnVzdG5lc3M6IGRlc2NlbmRhbnQgaW5zdGVhZCBjaGlsZCAoaGV1cmlzdGljKVxuICBpZiAoLz4vLnRlc3QoY3VycmVudCkpIHtcbiAgICBjb25zdCBkZXNjZW5kYW50ID0gY3VycmVudC5yZXBsYWNlKC8+LywgJycpXG4gICAgdmFyIHBhdHRlcm4gPSBgJHtwcmVQYXJ0fSR7ZGVzY2VuZGFudH0ke3Bvc3RQYXJ0fWBcbiAgICB2YXIgbWF0Y2hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGF0dGVybilcbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEgJiYgbWF0Y2hlc1swXSA9PT0gZWxlbWVudCkge1xuICAgICAgY3VycmVudCA9IGRlc2NlbmRhbnRcbiAgICB9XG4gIH1cblxuICAvLyByb2J1c3RuZXNzOiAnbnRoLW9mLXR5cGUnIGluc3RlYWQgJ250aC1jaGlsZCcgKGhldXJpc3RpYylcbiAgaWYgKC86bnRoLWNoaWxkLy50ZXN0KGN1cnJlbnQpKSB7XG4gICAgLy8gVE9ETzogY29uc2lkZXIgY29tcGxldGUgY292ZXJhZ2Ugb2YgJ250aC1vZi10eXBlJyByZXBsYWNlbWVudFxuICAgIGNvbnN0IHR5cGUgPSBjdXJyZW50LnJlcGxhY2UoL250aC1jaGlsZC9nLCAnbnRoLW9mLXR5cGUnKVxuICAgIHZhciBwYXR0ZXJuID0gYCR7cHJlUGFydH0ke3R5cGV9JHtwb3N0UGFydH1gXG4gICAgdmFyIG1hdGNoZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBhdHRlcm4pXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxICYmIG1hdGNoZXNbMF0gPT09IGVsZW1lbnQpIHtcbiAgICAgIGN1cnJlbnQgPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLy8gZWZmaWNpZW5jeTogY29tYmluYXRpb25zIG9mIGNsYXNzbmFtZSAocGFydGlhbCBwZXJtdXRhdGlvbnMpXG4gIGlmICgvXFwuXFxTK1xcLlxcUysvLnRlc3QoY3VycmVudCkpIHtcbiAgICBjb25zdCBuYW1lcyA9IGN1cnJlbnQudHJpbSgpLnNwbGl0KCcuJykuc2xpY2UoMSkubWFwKChuYW1lKSA9PiBgLiR7bmFtZX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoY3VyciwgbmV4dCkgPT4gY3Vyci5sZW5ndGggLSBuZXh0Lmxlbmd0aClcbiAgICB3aGlsZSAobmFtZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IGN1cnJlbnQucmVwbGFjZShuYW1lcy5zaGlmdCgpLCAnJykudHJpbSgpXG4gICAgICB2YXIgcGF0dGVybiA9IGAke3ByZVBhcnR9JHtwYXJ0aWFsfSR7cG9zdFBhcnR9YFxuICAgICAgaWYgKCFwYXR0ZXJuIHx8IHBhcnRpYWwgPT09ICc+Jykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdmFyIG1hdGNoZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBhdHRlcm4pXG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEgJiYgbWF0Y2hlc1swXSA9PT0gZWxlbWVudCkge1xuICAgICAgICBjdXJyZW50ID0gcGFydGlhbFxuICAgICAgfVxuICAgIH1cbiAgICAvLyByb2J1c3RuZXNzOiBkZWdyYWRlIGNvbXBsZXggY2xhc3NuYW1lIChoZXVyaXN0aWMpXG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC5tYXRjaCgvXFwuL2cpLmxlbmd0aCA+IDIpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAke3ByZVBhcnR9JHtjdXJyZW50fWApXG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJlZmVyZW5jZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChyZWZlcmVuY2VzW2ldLmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgICAvLyAtIGNoZWNrIHVzaW5nIGF0dHJpYnV0ZXMgKyByZWdhcmQgZXhjbHVkZXNcbiAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJlZmVyZW5jZXNbaV0udGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgdmFyIHBhdHRlcm4gPSBgJHtwcmVQYXJ0fSR7ZGVzY3JpcHRpb259JHtwb3N0UGFydH1gXG4gICAgICAgICAgdmFyIG1hdGNoZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBhdHRlcm4pXG4gICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAxICYmIG1hdGNoZXNbMF0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBkZXNjcmlwdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnRcbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

@@ -30,12 +30,17 @@ 'use strict';

var _common = require('./common');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
/**
* Choose action depending on the input (single/multi)
* @param {HTMLElement|Array} input - [description]
* @param {Object} options - [description]
* @return {string} - [description]
*
* @param {HTMLElement|Array.<HTMLElement>} input - [description]
* @param {Object} options - [description]
* @return {string} - [description]
*/
function getQuerySelector(input) {
var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

@@ -50,10 +55,13 @@ if (Array.isArray(input)) {

* Get a selector for the provided element
*
* @param {HTMLElement} element - [description]
* @param {Object} options - [description]
* @return {String} - [description]
* @return {string} - [description]
*/
function getSingleSelector(element, options) {
function getSingleSelector(element) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (element.nodeType === 3) {
return getSingleSelector(element.parentNode);
element = element.parentNode;
}

@@ -71,4 +79,4 @@ if (element.nodeType !== 1) {

// console.log(`
// selector: ${selector}
// optimized:${optimized}
// selector: ${selector}
// optimized: ${optimized}
// `)

@@ -84,65 +92,87 @@

/**
* Get a selector to match multiple children from a parent
* @param {Array} elements - [description]
* @param {Object} options - [description]
* @return {string} - [description]
* Get a selector to match multiple descendants from an ancestor
*
* @param {Array.<HTMLElement>} elements - [description]
* @param {Object} options - [description]
* @return {string} - [description]
*/
function getMultiSelector(elements, options) {
var commonParentNode = null;
var commonClassName = null;
var commonAttribute = null;
var commonTagName = null;
function getMultiSelector(elements) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
for (var i = 0, l = elements.length; i < l; i++) {
var element = elements[i];
if (!commonParentNode) {
// 1st entry
commonParentNode = element.parentNode;
commonClassName = element.className;
// commonAttribute = element.attributes
commonTagName = element.tagName;
} else if (commonParentNode !== element.parentNode) {
return console.log('Can\'t be efficiently mapped. It probably best to use multiple single selectors instead!');
}
if (element.className !== commonClassName) {
var classNames = [];
var longer, shorter;
if (element.className.length > commonClassName.length) {
longer = element.className;
shorter = commonClassName;
} else {
longer = commonClassName;
shorter = element.className;
}
shorter.split(' ').forEach(function (name) {
if (longer.indexOf(name) > -1) {
classNames.push(name);
}
});
commonClassName = classNames.join(' ');
}
// TODO:
// - check attributes
// if (element.attributes !== commonAttribute) {
//
// }
if (element.tagName !== commonTagName) {
commonTagName = null;
}
if (elements.some(function (element) {
return element.nodeType !== 1;
})) {
throw new Error('Invalid input - only an Array of HTMLElements or representations of them is supported!');
}
var selector = getSingleSelector(commonParentNode, options);
console.log(selector, commonClassName, commonAttribute, commonTagName);
var globalModified = (0, _adapt2.default)(elements[0], options);
if (commonClassName) {
return selector + ' > .' + commonClassName.replace(/ /g, '.');
var ancestor = (0, _common.getCommonAncestor)(elements, options);
var ancestorSelector = getSingleSelector(ancestor, options);
// TODO: consider usage of multiple selectors + parent-child relation
var commonSelectors = getCommonSelectors(elements);
var descendantSelector = commonSelectors[0];
var selector = ancestorSelector + ' ' + descendantSelector;
var selectorMatches = [].concat(_toConsumableArray(document.querySelectorAll(selector)));
if (!elements.every(function (element) {
return selectorMatches.some(function (entry) {
return entry === element;
});
})) {
// TODO: cluster matches to split into similar groups for sub selections
return console.warn('\n The selected elements can\'t be efficiently mapped.\n Its probably best to use multiple single selectors instead!\n ', elements);
}
// if (commonAttribute) {
//
// }
if (commonTagName) {
return selector + ' > ' + commonTagName.toLowerCase();
if (globalModified) {
delete global.document;
}
return selector + ' > *';
return selector;
}
//# sourceMappingURL=data:application/json;base64,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LFVBQVEsR0FBUixDQUFZLFFBQVosRUFBc0IsZUFBdEIsRUFBdUMsZUFBdkMsRUFBd0QsYUFBeEQ7O0FBRUEsTUFBSSxlQUFKLEVBQXFCO0FBQ25CLFdBQVUsUUFBVixZQUF5QixnQkFBZ0IsT0FBaEIsQ0FBd0IsSUFBeEIsRUFBOEIsR0FBOUIsQ0FBekI7QUFDRDs7OztBQUlELE1BQUksYUFBSixFQUFtQjtBQUNqQixXQUFVLFFBQVYsV0FBd0IsY0FBYyxXQUFkLEVBQXhCO0FBQ0Q7QUFDRCxTQUFVLFFBQVY7QUFDRCIsImZpbGUiOiJzZWxlY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICMgU2VsZWN0XG4gKlxuICogQ29uc3RydWN0IGEgdW5pcXVlIENTUyBxdWVyeXNlbGVjdG9yIHRvIGFjY2VzcyB0aGUgc2VsZWN0ZWQgRE9NIGVsZW1lbnQocykuXG4gKiBBcHBsaWVzIGRpZmZlcmVudCBtYXRjaGluZyBhbmQgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgZm9yIGVmZmljaWVuY3kuXG4gKi9cblxuaW1wb3J0IGFkYXB0IGZyb20gJy4vYWRhcHQnXG5pbXBvcnQgbWF0Y2ggZnJvbSAnLi9tYXRjaCdcbmltcG9ydCBvcHRpbWl6ZSBmcm9tICcuL29wdGltaXplJ1xuXG4vKipcbiAqIENob29zZSBhY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCAoc2luZ2xlL211bHRpKVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR8QXJyYXl9IGlucHV0ICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgb3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRRdWVyeVNlbGVjdG9yIChpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBnZXRNdWx0aVNlbGVjdG9yKGlucHV0LCBvcHRpb25zKVxuICB9XG4gIHJldHVybiBnZXRTaW5nbGVTZWxlY3RvcihpbnB1dCwgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBHZXQgYSBzZWxlY3RvciBmb3IgdGhlIHByb3ZpZGVkIGVsZW1lbnRcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgIG9wdGlvbnMgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtTdHJpbmd9ICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpbmdsZVNlbGVjdG9yIChlbGVtZW50LCBvcHRpb25zKSB7XG5cbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IDMpIHtcbiAgICByZXR1cm4gZ2V0U2luZ2xlU2VsZWN0b3IoZWxlbWVudC5wYXJlbnROb2RlKVxuICB9XG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGlucHV0IC0gb25seSBIVE1MRWxlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIG9mIHRoZW0gYXJlIHN1cHBvcnRlZCEgKG5vdCBcIiR7dHlwZW9mIGVsZW1lbnR9XCIpYClcbiAgfVxuXG4gIGNvbnN0IGdsb2JhbE1vZGlmaWVkID0gYWRhcHQoZWxlbWVudCwgb3B0aW9ucylcblxuICBjb25zdCBzZWxlY3RvciA9IG1hdGNoKGVsZW1lbnQsIG9wdGlvbnMpXG4gIGNvbnN0IG9wdGltaXplZCA9IG9wdGltaXplKHNlbGVjdG9yLCBlbGVtZW50LCBvcHRpb25zKVxuXG4gIC8vIGRlYnVnXG4gIC8vIGNvbnNvbGUubG9nKGBcbiAgLy8gICBzZWxlY3RvcjogJHtzZWxlY3Rvcn1cbiAgLy8gICBvcHRpbWl6ZWQ6JHtvcHRpbWl6ZWR9XG4gIC8vIGApXG5cbiAgaWYgKGdsb2JhbE1vZGlmaWVkKSB7XG4gICAgZGVsZXRlIGdsb2JhbC5kb2N1bWVudFxuICB9XG5cbiAgcmV0dXJuIG9wdGltaXplZFxufVxuXG4vKipcbiAqIEdldCBhIHNlbGVjdG9yIHRvIG1hdGNoIG11bHRpcGxlIGNoaWxkcmVuIGZyb20gYSBwYXJlbnRcbiAqIEBwYXJhbSAge0FycmF5fSAgZWxlbWVudHMgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE11bHRpU2VsZWN0b3IgKGVsZW1lbnRzLCBvcHRpb25zKSB7XG4gIHZhciBjb21tb25QYXJlbnROb2RlID0gbnVsbFxuICB2YXIgY29tbW9uQ2xhc3NOYW1lID0gbnVsbFxuICB2YXIgY29tbW9uQXR0cmlidXRlID0gbnVsbFxuICB2YXIgY29tbW9uVGFnTmFtZSA9IG51bGxcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNbaV1cbiAgICBpZiAoIWNvbW1vblBhcmVudE5vZGUpIHsgLy8gMXN0IGVudHJ5XG4gICAgICBjb21tb25QYXJlbnROb2RlID0gZWxlbWVudC5wYXJlbnROb2RlXG4gICAgICBjb21tb25DbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZVxuICAgICAgLy8gY29tbW9uQXR0cmlidXRlID0gZWxlbWVudC5hdHRyaWJ1dGVzXG4gICAgICBjb21tb25UYWdOYW1lID0gZWxlbWVudC50YWdOYW1lXG4gICAgfSBlbHNlIGlmIChjb21tb25QYXJlbnROb2RlICE9PSBlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmxvZygnQ2FuXFwndCBiZSBlZmZpY2llbnRseSBtYXBwZWQuIEl0IHByb2JhYmx5IGJlc3QgdG8gdXNlIG11bHRpcGxlIHNpbmdsZSBzZWxlY3RvcnMgaW5zdGVhZCEnKVxuICAgIH1cbiAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgIT09IGNvbW1vbkNsYXNzTmFtZSkge1xuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBbXVxuICAgICAgdmFyIGxvbmdlciwgc2hvcnRlclxuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NOYW1lLmxlbmd0aCA+IGNvbW1vbkNsYXNzTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgbG9uZ2VyID0gZWxlbWVudC5jbGFzc05hbWVcbiAgICAgICAgc2hvcnRlciA9IGNvbW1vbkNsYXNzTmFtZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9uZ2VyID0gY29tbW9uQ2xhc3NOYW1lXG4gICAgICAgIHNob3J0ZXIgPSBlbGVtZW50LmNsYXNzTmFtZVxuICAgICAgfVxuICAgICAgc2hvcnRlci5zcGxpdCgnICcpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgaWYgKGxvbmdlci5pbmRleE9mKG5hbWUpID4gLTEpIHtcbiAgICAgICAgICBjbGFzc05hbWVzLnB1c2gobmFtZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGNvbW1vbkNsYXNzTmFtZSA9IGNsYXNzTmFtZXMuam9pbignICcpXG4gICAgfVxuICAgIC8vIFRPRE86XG4gICAgLy8gLSBjaGVjayBhdHRyaWJ1dGVzXG4gICAgLy8gaWYgKGVsZW1lbnQuYXR0cmlidXRlcyAhPT0gY29tbW9uQXR0cmlidXRlKSB7XG4gICAgLy9cbiAgICAvLyB9XG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZSAhPT0gY29tbW9uVGFnTmFtZSkge1xuICAgICAgY29tbW9uVGFnTmFtZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWxlY3RvciA9IGdldFNpbmdsZVNlbGVjdG9yKGNvbW1vblBhcmVudE5vZGUsIG9wdGlvbnMpXG4gIGNvbnNvbGUubG9nKHNlbGVjdG9yLCBjb21tb25DbGFzc05hbWUsIGNvbW1vbkF0dHJpYnV0ZSwgY29tbW9uVGFnTmFtZSlcblxuICBpZiAoY29tbW9uQ2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIGAke3NlbGVjdG9yfSA+IC4ke2NvbW1vbkNsYXNzTmFtZS5yZXBsYWNlKC8gL2csICcuJyl9YFxuICB9XG4gIC8vIGlmIChjb21tb25BdHRyaWJ1dGUpIHtcbiAgLy9cbiAgLy8gfVxuICBpZiAoY29tbW9uVGFnTmFtZSkge1xuICAgIHJldHVybiBgJHtzZWxlY3Rvcn0gPiAke2NvbW1vblRhZ05hbWUudG9Mb3dlckNhc2UoKX1gXG4gIH1cbiAgcmV0dXJuIGAke3NlbGVjdG9yfSA+ICpgXG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=
/**
* Get selectors to describe a set of elements
*
* @param {Array.<HTMLElements>} elements - [description]
* @return {string} - [description]
*/
function getCommonSelectors(elements) {
var _getCommonProperties = (0, _common.getCommonProperties)(elements);
var classes = _getCommonProperties.classes;
var attributes = _getCommonProperties.attributes;
var tag = _getCommonProperties.tag;
var selectorPath = [];
if (tag) {
selectorPath.push(tag);
}
if (classes) {
var classSelector = classes.map(function (name) {
return '.' + name;
}).join('');
selectorPath.push(classSelector);
}
if (attributes) {
var attributeSelector = Object.keys(attributes).reduce(function (parts, name) {
parts.push('[' + name + '="' + attributes[name] + '"]');
return parts;
}, []).join('');
selectorPath.push(attributeSelector);
}
if (selectorPath.length) {
// TODO: check for parent-child relation
}
return [selectorPath.join('')];
}
//# sourceMappingURL=data:application/json;base64,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QUFJLE9BQUosRUFBYTtBQUNYLFFBQU0sZ0JBQWdCLFFBQVEsR0FBUixDQUFZLFVBQUMsSUFBRDtBQUFBLG1CQUFjLElBQWQ7QUFBQSxLQUFaLEVBQWtDLElBQWxDLENBQXVDLEVBQXZDLENBQXRCO0FBQ0EsaUJBQWEsSUFBYixDQUFrQixhQUFsQjtBQUNEOztBQUVELE1BQUksVUFBSixFQUFnQjtBQUNkLFFBQU0sb0JBQW9CLE9BQU8sSUFBUCxDQUFZLFVBQVosRUFBd0IsTUFBeEIsQ0FBK0IsVUFBQyxLQUFELEVBQVEsSUFBUixFQUFpQjtBQUN4RSxZQUFNLElBQU4sT0FBZSxJQUFmLFVBQXdCLFdBQVcsSUFBWCxDQUF4QjtBQUNBLGFBQU8sS0FBUDtBQUNELEtBSHlCLEVBR3ZCLEVBSHVCLEVBR25CLElBSG1CLENBR2QsRUFIYyxDQUExQjtBQUlBLGlCQUFhLElBQWIsQ0FBa0IsaUJBQWxCO0FBQ0Q7O0FBRUQsTUFBSSxhQUFhLE1BQWpCLEVBQXlCOztBQUV4Qjs7QUFFRCxTQUFPLENBQ0wsYUFBYSxJQUFiLENBQWtCLEVBQWxCLENBREssQ0FBUDtBQUdEIiwiZmlsZSI6InNlbGVjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIyBTZWxlY3RcbiAqXG4gKiBDb25zdHJ1Y3QgYSB1bmlxdWUgQ1NTIHF1ZXJ5c2VsZWN0b3IgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBET00gZWxlbWVudChzKS5cbiAqIEFwcGxpZXMgZGlmZmVyZW50IG1hdGNoaW5nIGFuZCBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBmb3IgZWZmaWNpZW5jeS5cbiAqL1xuXG5pbXBvcnQgYWRhcHQgZnJvbSAnLi9hZGFwdCdcbmltcG9ydCBtYXRjaCBmcm9tICcuL21hdGNoJ1xuaW1wb3J0IG9wdGltaXplIGZyb20gJy4vb3B0aW1pemUnXG5pbXBvcnQgeyBnZXRDb21tb25BbmNlc3RvciwgZ2V0Q29tbW9uUHJvcGVydGllcyB9IGZyb20gJy4vY29tbW9uJ1xuXG4vKipcbiAqIENob29zZSBhY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCAoc2luZ2xlL211bHRpKVxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fEFycmF5LjxIVE1MRWxlbWVudD59IGlucHV0ICAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIC0gW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UXVlcnlTZWxlY3RvciAoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gZ2V0TXVsdGlTZWxlY3RvcihpbnB1dCwgb3B0aW9ucylcbiAgfVxuICByZXR1cm4gZ2V0U2luZ2xlU2VsZWN0b3IoaW5wdXQsIG9wdGlvbnMpXG59XG5cbi8qKlxuICogR2V0IGEgc2VsZWN0b3IgZm9yIHRoZSBwcm92aWRlZCBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgb3B0aW9ucyAtIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgIC0gW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2luZ2xlU2VsZWN0b3IgKGVsZW1lbnQsIG9wdGlvbnMgPSB7fSkge1xuXG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlID09PSAzKSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZVxuICB9XG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGlucHV0IC0gb25seSBIVE1MRWxlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIG9mIHRoZW0gYXJlIHN1cHBvcnRlZCEgKG5vdCBcIiR7dHlwZW9mIGVsZW1lbnR9XCIpYClcbiAgfVxuXG4gIGNvbnN0IGdsb2JhbE1vZGlmaWVkID0gYWRhcHQoZWxlbWVudCwgb3B0aW9ucylcblxuICBjb25zdCBzZWxlY3RvciA9IG1hdGNoKGVsZW1lbnQsIG9wdGlvbnMpXG4gIGNvbnN0IG9wdGltaXplZCA9IG9wdGltaXplKHNlbGVjdG9yLCBlbGVtZW50LCBvcHRpb25zKVxuXG4gIC8vIGRlYnVnXG4gIC8vIGNvbnNvbGUubG9nKGBcbiAgLy8gICBzZWxlY3RvcjogICR7c2VsZWN0b3J9XG4gIC8vICAgb3B0aW1pemVkOiAke29wdGltaXplZH1cbiAgLy8gYClcblxuICBpZiAoZ2xvYmFsTW9kaWZpZWQpIHtcbiAgICBkZWxldGUgZ2xvYmFsLmRvY3VtZW50XG4gIH1cblxuICByZXR1cm4gb3B0aW1pemVkXG59XG5cbi8qKlxuICogR2V0IGEgc2VsZWN0b3IgdG8gbWF0Y2ggbXVsdGlwbGUgZGVzY2VuZGFudHMgZnJvbSBhbiBhbmNlc3RvclxuICpcbiAqIEBwYXJhbSAge0FycmF5LjxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgICAgICAgICAgb3B0aW9ucyAgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAtIFtkZXNjcmlwdGlvbl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE11bHRpU2VsZWN0b3IgKGVsZW1lbnRzLCBvcHRpb25zID0ge30pIHtcblxuICBpZiAoZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC5ub2RlVHlwZSAhPT0gMSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW5wdXQgLSBvbmx5IGFuIEFycmF5IG9mIEhUTUxFbGVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgb2YgdGhlbSBpcyBzdXBwb3J0ZWQhYClcbiAgfVxuXG4gIGNvbnN0IGdsb2JhbE1vZGlmaWVkID0gYWRhcHQoZWxlbWVudHNbMF0sIG9wdGlvbnMpXG5cbiAgY29uc3QgYW5jZXN0b3IgPSBnZXRDb21tb25BbmNlc3RvcihlbGVtZW50cywgb3B0aW9ucylcbiAgY29uc3QgYW5jZXN0b3JTZWxlY3RvciA9IGdldFNpbmdsZVNlbGVjdG9yKGFuY2VzdG9yLCBvcHRpb25zKVxuXG4gIC8vIFRPRE86IGNvbnNpZGVyIHVzYWdlIG9mIG11bHRpcGxlIHNlbGVjdG9ycyArIHBhcmVudC1jaGlsZCByZWxhdGlvblxuICBjb25zdCBjb21tb25TZWxlY3RvcnMgPSBnZXRDb21tb25TZWxlY3RvcnMoZWxlbWVudHMpXG4gIGNvbnN0IGRlc2NlbmRhbnRTZWxlY3RvciA9IGNvbW1vblNlbGVjdG9yc1swXVxuXG4gIGNvbnN0IHNlbGVjdG9yID0gYCR7YW5jZXN0b3JTZWxlY3Rvcn0gJHtkZXNjZW5kYW50U2VsZWN0b3J9YFxuICBjb25zdCBzZWxlY3Rvck1hdGNoZXMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcildXG5cbiAgaWYgKCFlbGVtZW50cy5ldmVyeSgoZWxlbWVudCkgPT4gc2VsZWN0b3JNYXRjaGVzLnNvbWUoKGVudHJ5KSA9PiBlbnRyeSA9PT0gZWxlbWVudCkgKSkge1xuICAgIC8vIFRPRE86IGNsdXN0ZXIgbWF0Y2hlcyB0byBzcGxpdCBpbnRvIHNpbWlsYXIgZ3JvdXBzIGZvciBzdWIgc2VsZWN0aW9uc1xuICAgIHJldHVybiBjb25zb2xlLndhcm4oYFxuICAgICAgVGhlIHNlbGVjdGVkIGVsZW1lbnRzIGNhblxcJ3QgYmUgZWZmaWNpZW50bHkgbWFwcGVkLlxuICAgICAgSXRzIHByb2JhYmx5IGJlc3QgdG8gdXNlIG11bHRpcGxlIHNpbmdsZSBzZWxlY3RvcnMgaW5zdGVhZCFcbiAgICBgLCBlbGVtZW50cylcbiAgfVxuXG4gIGlmIChnbG9iYWxNb2RpZmllZCkge1xuICAgIGRlbGV0ZSBnbG9iYWwuZG9jdW1lbnRcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvclxufVxuXG4vKipcbiAqIEdldCBzZWxlY3RvcnMgdG8gZGVzY3JpYmUgYSBzZXQgb2YgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheS48SFRNTEVsZW1lbnRzPn0gZWxlbWVudHMgLSBbZGVzY3JpcHRpb25dXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAgLSBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldENvbW1vblNlbGVjdG9ycyAoZWxlbWVudHMpIHtcblxuICBjb25zdCB7IGNsYXNzZXMsIGF0dHJpYnV0ZXMsIHRhZyB9ID0gZ2V0Q29tbW9uUHJvcGVydGllcyhlbGVtZW50cylcblxuICBjb25zdCBzZWxlY3RvclBhdGggPSBbXVxuXG4gICBpZiAodGFnKSB7XG4gICAgIHNlbGVjdG9yUGF0aC5wdXNoKHRhZylcbiAgIH1cblxuICAgaWYgKGNsYXNzZXMpIHtcbiAgICAgY29uc3QgY2xhc3NTZWxlY3RvciA9IGNsYXNzZXMubWFwKChuYW1lKSA9PiBgLiR7bmFtZX1gKS5qb2luKCcnKVxuICAgICBzZWxlY3RvclBhdGgucHVzaChjbGFzc1NlbGVjdG9yKVxuICAgfVxuXG4gICBpZiAoYXR0cmlidXRlcykge1xuICAgICBjb25zdCBhdHRyaWJ1dGVTZWxlY3RvciA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLnJlZHVjZSgocGFydHMsIG5hbWUpID0+IHtcbiAgICAgICBwYXJ0cy5wdXNoKGBbJHtuYW1lfT1cIiR7YXR0cmlidXRlc1tuYW1lXX1cIl1gKVxuICAgICAgIHJldHVybiBwYXJ0c1xuICAgICB9LCBbXSkuam9pbignJylcbiAgICAgc2VsZWN0b3JQYXRoLnB1c2goYXR0cmlidXRlU2VsZWN0b3IpXG4gICB9XG5cbiAgIGlmIChzZWxlY3RvclBhdGgubGVuZ3RoKSB7XG4gICAgIC8vIFRPRE86IGNoZWNrIGZvciBwYXJlbnQtY2hpbGQgcmVsYXRpb25cbiAgIH1cblxuICAgcmV0dXJuIFtcbiAgICAgc2VsZWN0b3JQYXRoLmpvaW4oJycpXG4gICBdXG4gfVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9
{
"name": "optimal-select",
"description": "Get efficient & robust CSS selectors for HTML elements",
"version": "3.2.0",
"version": "3.3.0",
"author": "Stefan Dühring | Autarc <autarc@gmail.com>",

@@ -10,8 +10,8 @@ "bugs": {

"devDependencies": {
"babel-loader": "^6.2.4",
"babel-loader": "^6.2.5",
"babel-plugin-add-module-exports": "^0.2.1",
"babel-preset-es2015": "^6.9.0",
"babel-preset-stage-0": "^6.5.0",
"babel-register": "^6.9.0",
"cheerio": "^0.20.0",
"babel-preset-es2015": "^6.16.0",
"babel-preset-stage-0": "^6.16.0",
"babel-register": "^6.16.3",
"cheerio": "^0.22.0",
"deep-merge": "^1.0.0",

@@ -21,10 +21,10 @@ "fs-extra": "^0.30.0",

"gulp-babel": "^6.1.2",
"gulp-load-plugins": "^1.2.4",
"gulp-load-plugins": "^1.3.0",
"gulp-plumber": "^1.1.0",
"gulp-sourcemaps": "^1.6.0",
"gulp-util": "^3.0.7",
"gulp-watch": "^4.3.6",
"gulp-watch": "^4.3.10",
"http-server": "^0.9.0",
"open-url": "^2.0.2",
"webpack": "^1.13.1"
"webpack": "^1.13.2"
},

@@ -44,2 +44,3 @@ "homepage": "https://github.com/Autarc/optimal-select",

"scripts": {
"prepublish": "npm run build",
"build": "NODE_ENV=production node build",

@@ -46,0 +47,0 @@ "check": "npm outdated -depth 0",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc