New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

partial.lenses

Package Overview
Dependencies
Maintainers
1
Versions
180
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

partial.lenses - npm Package Compare versions

Comparing version 3.9.2 to 3.9.3

.nyc_output/0253213ad96e4375aa7a775854b68689.json

10

bench/bench.js

@@ -6,4 +6,14 @@ const L = require("../lib/partial.lenses")

const xs = [1,2,3]
const nested = [{x: 1}]
const bs = [
'L.get(L.compose(0, "x"), nested)',
'L.set(L.compose(0, "x"), 2, nested)',
'L.get(L.defaults(1), undefined)',
'L.get(L.defaults(1), 2)',
'L.get(L.define(1), undefined)',
'L.get(L.define(1), 2)',
'L.get(L.valueOr(1), undefined)',
'L.get(L.valueOr(1), null)',
'L.get(L.valueOr(1), 2)',
'L.remove(1, xs)',

@@ -10,0 +20,0 @@ 'L.remove("y", xyz)',

225

lib/partial.lenses.js

@@ -6,9 +6,11 @@ "use strict";

});
exports.fromArrayBy = exports.toRamda = exports.fromRamda = exports.optional = exports.sequence = exports.log = exports.props = exports.identity = exports.pick = exports.augment = exports.filter = exports.append = exports.index = exports.findWith = exports.find = exports.prop = exports.normalize = exports.valueOr = exports.define = exports.required = exports.defaults = exports.replace = exports.choice = exports.orElse = exports.nothing = exports.choose = exports.just = exports.chain = exports.collect = exports.get = exports.set = exports.modify = exports.lens = exports.removeAll = exports.remove = exports.compose = undefined;
exports.fromArrayBy = exports.toRamda = exports.fromRamda = exports.optional = exports.sequence = exports.log = exports.props = exports.identity = exports.pick = exports.augment = exports.filter = exports.append = exports.index = exports.findWith = exports.find = exports.prop = exports.normalize = exports.valueOr = exports.define = exports.required = exports.defaults = exports.replace = exports.choice = exports.orElse = exports.nothing = exports.choose = exports.just = exports.chain = exports.collect = exports.get = exports.set = exports.modify = exports.lens = exports.remove = exports.removeAll = undefined;
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.compose = compose;

@@ -21,4 +23,2 @@ var _ramda = require("ramda");

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); } }
//

@@ -191,23 +191,34 @@

var lift = function lift(l) {
if (isProp(l)) return liftProp(l);
if (isIndex(l)) return liftIndex(l);
return lifted(l);
switch (typeof l === "undefined" ? "undefined" : _typeof(l)) {
case "string":
return liftProp(l);
case "number":
return liftIndex(l);
default:
return lifted(l);
}
};
var compose = exports.compose = function compose() {
for (var _len = arguments.length, ls = Array(_len), _key = 0; _key < _len; _key++) {
ls[_key] = arguments[_key];
function compose() {
var _arguments = arguments;
switch (arguments.length) {
case 0:
return identity;
case 1:
return arguments[0];
default:
return function (toCat) {
return function (x) {
var i = _arguments.length;
var r = lift(_arguments[--i])(toCat)(x);
do {
r = lift(_arguments[--i])(toCat)(r);
} while (0 < i);
return r;
};
};
}
}
return ls.length === 0 ? identity : ls.length === 1 ? ls[0] : function (toCat) {
return R.compose.apply(R, _toConsumableArray(ls.map(function (l) {
return lift(l)(toCat);
})));
};
};
var remove = exports.remove = curry2(function (l, s) {
return setI(lift(l), undefined, s);
});
var removeAll = exports.removeAll = curry2(function (lens, data) {

@@ -221,16 +232,37 @@ warn("`removeAll` is deprecated and will be removed in next major version --- use a different approach.");

var setI = function setI(l, x, s) {
return l(Ident)(function () {
return Ident(x);
})(s).value;
switch (typeof l === "undefined" ? "undefined" : _typeof(l)) {
case "string":
return setProp(l, x, s);
case "number":
return setIndex(l, x, s);
default:
return lifted(l)(Ident)(function () {
return Ident(x);
})(s).value;
}
};
var getI = function getI(l, s) {
return l(Const)(Const)(s).value;
switch (typeof l === "undefined" ? "undefined" : _typeof(l)) {
case "string":
return getProp(l, s);
case "number":
return getIndex(l, s);
default:
return lifted(l)(Const)(Const)(s).value;
}
};
var modifyI = function modifyI(l, x2x, s) {
return l(Ident)(function (y) {
return Ident(x2x(y));
})(s).value;
switch (typeof l === "undefined" ? "undefined" : _typeof(l)) {
case "string":
return setProp(l, x2x(getProp(l, s)), s);
case "number":
return setIndex(l, x2x(getIndex(l, s)), s);
default:
return lifted(l)(Ident)(function (y) {
return Ident(x2x(y));
})(s).value;
}
};
var lensI = function lensI(getter, setter) {
return function (_constructor) {
return function (_c) {
return function (inner) {

@@ -249,12 +281,9 @@ return function (target) {

var remove = exports.remove = curry2(function (l, s) {
return setI(l, undefined, s);
});
var lens = exports.lens = curry2(lensI);
var modify = exports.modify = curry3(function (l, x2y, s) {
return modifyI(lift(l), x2y, s);
});
var set = exports.set = curry3(function (l, x, s) {
return setI(lift(l), x, s);
});
var get = exports.get = curry2(function (l, s) {
return getI(lift(l), s);
});
var modify = exports.modify = curry3(modifyI);
var set = exports.set = curry3(setI);
var get = exports.get = curry2(getI);
var collect = exports.collect = curry2(function (l, s) {

@@ -288,3 +317,3 @@ return warn("`collect` is experimental and might be removed, renamed or changed semantically before next major release") || mkArray(filtered(collectI(lift(l), s)));

return choose(function (x) {
return getI(lift(l), x) !== undefined ? l : d;
return getI(l, x) !== undefined ? l : d;
});

@@ -294,4 +323,4 @@ });

var choice = exports.choice = function choice() {
for (var _len2 = arguments.length, ls = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
ls[_key2] = arguments[_key2];
for (var _len = arguments.length, ls = Array(_len), _key = 0; _key < _len; _key++) {
ls[_key] = arguments[_key];
}

@@ -301,3 +330,3 @@

var i = ls.findIndex(function (l) {
return getI(lift(l), x) !== undefined;
return getI(l, x) !== undefined;
});

@@ -314,10 +343,30 @@ return 0 <= i ? ls[i] : nothing;

var normalizer = function normalizer(fn) {
return lensI(fn, fn);
return function (_c) {
return function (inner) {
return function (x) {
return inner(fn(x)).map(fn);
};
};
};
};
var replace = exports.replace = curry2(function (inn, out) {
return lensI(replacer(inn, out), replacer(out, inn));
return function (_c) {
return function (inner) {
return function (x) {
return inner(replacer(inn, out)(x)).map(replacer(out, inn));
};
};
};
});
var defaults = exports.defaults = replace(undefined);
var defaults = exports.defaults = function defaults(out) {
return function (_c) {
return function (inner) {
return function (x) {
return inner(x === undefined ? out : x).map(replacer(out, undefined));
};
};
};
};
var required = exports.required = function required(inn) {

@@ -327,9 +376,15 @@ return replace(inn, undefined);

var define = exports.define = function define(v) {
return normalizer(replacer(undefined, v));
return normalizer(function (x) {
return x === undefined ? v : x;
});
};
var valueOr = exports.valueOr = function valueOr(v) {
return lensI(function (x) {
return x === undefined || x === null ? v : x;
}, id);
return function (_c) {
return function (inner) {
return function (x) {
return inner(x === undefined || x === null ? v : x);
};
};
};
};

@@ -347,2 +402,9 @@

var getProp = function getProp(k, o) {
return isObject(o) ? o[k] : undefined;
};
var setProp = function setProp(k, v, o) {
var oOut = isObject(o) ? o : empty;
return v === undefined ? deleteKey(k, oOut) : setKey(k, v, oOut);
};
var liftProp = function liftProp(k) {

@@ -352,5 +414,4 @@ return function (_c) {

return function (o) {
return inner(isObject(o) ? o[k] : undefined).map(function (v) {
var oOut = isObject(o) ? o : empty;
return v === undefined ? deleteKey(k, oOut) : setKey(k, v, oOut);
return inner(getProp(k, o)).map(function (v) {
return setProp(k, v, o);
});

@@ -386,2 +447,20 @@ };

var getIndex = function getIndex(i, xs) {
return isArray(xs) ? xs[i] : undefined;
};
var setIndex = function setIndex(i, x, xs) {
if (x === undefined) {
if (!isArray(xs)) return undefined;
if (xs.length <= i) return dropped(xs);
var ys = xs.slice(0);
ys.splice(i, 1);
return dropped(ys);
} else {
if (!isArray(xs)) return Array(i).concat([x]);
if (xs.length <= i) return xs.concat(Array(i - xs.length), [x]);
var _ys = xs.slice(0);
_ys[i] = x;
return _ys;
}
};
var liftIndex = function liftIndex(i) {

@@ -391,16 +470,4 @@ return function (_c) {

return function (xs) {
return inner(isArray(xs) ? xs[i] : undefined).map(function (x) {
if (x === undefined) {
if (!isArray(xs)) return undefined;
if (xs.length <= i) return dropped(xs);
var ys = xs.slice(0);
ys.splice(i, 1);
return dropped(ys);
} else {
if (!isArray(xs)) return Array(i).concat([x]);
if (xs.length <= i) return xs.concat(Array(i - xs.length), [x]);
var _ys = xs.slice(0);
_ys[i] = x;
return _ys;
}
return inner(getIndex(i, xs)).map(function (x) {
return setIndex(i, x, xs);
});

@@ -464,3 +531,3 @@ };

for (var k in template) {
var v = getI(lift(template[k]), c);
var v = getI(template[k], c);
if (v !== undefined) {

@@ -478,3 +545,3 @@ if (r === undefined) r = {};

for (var k in template) {
c = setI(lift(template[k]), o[k], c);
c = setI(template[k], o[k], c);
}return c;

@@ -484,7 +551,11 @@ });

var identity = exports.identity = lensI(id, id);
var identity = exports.identity = function identity(_c) {
return function (inner) {
return inner;
};
};
var props = exports.props = function props() {
for (var _len3 = arguments.length, ks = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
ks[_key3] = arguments[_key3];
for (var _len2 = arguments.length, ks = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
ks[_key2] = arguments[_key2];
}

@@ -496,4 +567,4 @@

var show = function show() {
for (var _len4 = arguments.length, labels = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
labels[_key4] = arguments[_key4];
for (var _len3 = arguments.length, labels = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
labels[_key3] = arguments[_key3];
}

@@ -509,4 +580,4 @@

var log = exports.log = function log() {
for (var _len5 = arguments.length, labels = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
labels[_key5] = arguments[_key5];
for (var _len4 = arguments.length, labels = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
labels[_key4] = arguments[_key4];
}

@@ -535,3 +606,3 @@

var fromRamda = exports.fromRamda = function fromRamda(l) {
return function (_constructor) {
return function (_c) {
return l;

@@ -563,2 +634,2 @@ };

exports.default = compose;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6WyJSIiwiSWRlbnRpdHkiLCJ2YWx1ZSIsIklkZW50IiwieCIsInByb3RvdHlwZSIsIm1hcCIsIngyeSIsIm9mIiwiYXAiLCJDb25zdGFudCIsIkNvbnN0IiwiU2luZ2xlIiwiY29uY2F0Iiwid2FybiIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm5lZCIsIm1lc3NhZ2UiLCJjb25zb2xlIiwiY3VycnkyIiwiYSIsImIiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmbiIsImN1cnJ5MyIsImMiLCJpc0FycmF5IiwiY29uc3RydWN0b3IiLCJBcnJheSIsImlzT2JqZWN0IiwiT2JqZWN0IiwidW5BcnJheSIsInVuZGVmaW5lZCIsIm1rQXJyYXkiLCJpZCIsInNuZCIsIl8iLCJjaGVjayIsImV4cGVjdGVkIiwicHJlZGljYXRlIiwiRXJyb3IiLCJhc3NlcnQiLCJkcm9wcGVkIiwieHMiLCJlbXB0eSIsImRlbGV0ZUtleSIsImsiLCJvIiwiciIsImFzc2lnbiIsInNldEtleSIsInYiLCJ0b1BhcnRpYWwiLCJ0cmFuc2Zvcm0iLCJmaWx0ZXJlZCIsImZpbHRlciIsInNlZW1zTGVucyIsImxpZnRlZCIsImxpZnQiLCJpc1Byb3AiLCJsIiwibGlmdFByb3AiLCJpc0luZGV4IiwibGlmdEluZGV4IiwiY29tcG9zZSIsImxzIiwiaWRlbnRpdHkiLCJ0b0NhdCIsInJlbW92ZSIsInMiLCJzZXRJIiwicmVtb3ZlQWxsIiwibGVucyIsImRhdGEiLCJnZXQiLCJnZXRJIiwibW9kaWZ5SSIsIngyeCIsInkiLCJsZW5zSSIsImdldHRlciIsInNldHRlciIsImlubmVyIiwidGFyZ2V0IiwiZm9jdXMiLCJjb2xsZWN0SSIsIm1vZGlmeSIsInNldCIsImNvbGxlY3QiLCJjaGFpbiIsIngyeUwiLCJ4TCIsImNob29zZSIsInhPIiwibm90aGluZyIsImp1c3QiLCJhbHdheXMiLCJvckVsc2UiLCJkIiwiY2hvaWNlIiwiaSIsImZpbmRJbmRleCIsInJlcGxhY2VyIiwiaW5uIiwib3V0IiwiZXF1YWxzIiwibm9ybWFsaXplciIsInJlcGxhY2UiLCJkZWZhdWx0cyIsInJlcXVpcmVkIiwiZGVmaW5lIiwidmFsdWVPciIsIm5vcm1hbGl6ZSIsInByb3AiLCJvT3V0IiwiZmluZCIsImFwcGVuZCIsImZpbmRXaXRoIiwibGxzIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5kZXgiLCJ5cyIsInNsaWNlIiwic3BsaWNlIiwicCIsImF1Z21lbnQiLCJ6IiwidGVtcGxhdGUiLCJjSW4iLCJwaWNrIiwicHJvcHMiLCJrcyIsInppcE9iaiIsInNob3ciLCJsYWJlbHMiLCJsb2ciLCJzZXF1ZW5jZSIsInRyYXZlcnNlIiwib3B0aW9uYWwiLCJmcm9tUmFtZGEiLCJmYW50YXN5IiwidG9SYW1kYSIsImZyb21BcnJheUJ5IiwibiIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztJQUFZQSxDOzs7Ozs7QUFFWjs7QUFFQSxTQUFTQyxRQUFULENBQWtCQyxLQUFsQixFQUF5QjtBQUFDLE9BQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUFtQjtBQUM3QyxJQUFNQyxRQUFRLFNBQVJBLEtBQVE7QUFBQSxTQUFLLElBQUlGLFFBQUosQ0FBYUcsQ0FBYixDQUFMO0FBQUEsQ0FBZDtBQUNBSCxTQUFTSSxTQUFULENBQW1CQyxHQUFuQixHQUF5QixVQUFVQyxHQUFWLEVBQWU7QUFBQyxTQUFPLElBQUlOLFFBQUosQ0FBYU0sSUFBSSxLQUFLTCxLQUFULENBQWIsQ0FBUDtBQUFxQyxDQUE5RTtBQUNBRCxTQUFTSSxTQUFULENBQW1CRyxFQUFuQixHQUF3QkwsS0FBeEI7QUFDQUYsU0FBU0ksU0FBVCxDQUFtQkksRUFBbkIsR0FBd0IsVUFBVUwsQ0FBVixFQUFhO0FBQUMsU0FBTyxJQUFJSCxRQUFKLENBQWEsS0FBS0MsS0FBTCxDQUFXRSxFQUFFRixLQUFiLENBQWIsQ0FBUDtBQUF5QyxDQUEvRTs7QUFFQTs7QUFFQSxTQUFT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IFwicmFtZGFcIlxuXG4vL1xuXG5mdW5jdGlvbiBJZGVudGl0eSh2YWx1ZSkge3RoaXMudmFsdWUgPSB2YWx1ZX1cbmNvbnN0IElkZW50ID0geCA9PiBuZXcgSWRlbnRpdHkoeClcbklkZW50aXR5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoeDJ5KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh4MnkodGhpcy52YWx1ZSkpfVxuSWRlbnRpdHkucHJvdG90eXBlLm9mID0gSWRlbnRcbklkZW50aXR5LnByb3RvdHlwZS5hcCA9IGZ1bmN0aW9uICh4KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh0aGlzLnZhbHVlKHgudmFsdWUpKX1cblxuLy9cblxuZnVuY3Rpb24gQ29uc3RhbnQodmFsdWUpIHt0aGlzLnZhbHVlID0gdmFsdWV9XG5jb25zdCBDb25zdCA9IHggPT4gbmV3IENvbnN0YW50KHgpXG5jb25zdCBTaW5nbGUgPSB4ID0+IENvbnN0KFt4XSlcbkNvbnN0YW50LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXN9XG5Db25zdGFudC5wcm90b3R5cGUub2YgPSBDb25zdFxuQ29uc3RhbnQucHJvdG90eXBlLmFwID0gZnVuY3Rpb24gKHgpIHtyZXR1cm4gbmV3IENvbnN0KFIuY29uY2F0KHRoaXMudmFsdWUsIHgudmFsdWUpKX1cblxuLy9cblxuY29uc3Qgd2FybiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IHt9IDogKCgpID0+IHtcbiAgY29uc3Qgd2FybmVkID0ge31cblxuICByZXR1cm4gbWVzc2FnZSA9PiB7XG4gICAgaWYgKCEobWVzc2FnZSBpbiB3YXJuZWQpKSB7XG4gICAgICB3YXJuZWRbbWVzc2FnZV0gPSBtZXNzYWdlXG4gICAgICBjb25zb2xlLndhcm4oXCJwYXJ0aWFsLmxlbnNlczpcIiwgbWVzc2FnZSlcbiAgICB9XG4gIH1cbn0pKClcblxuLy9cblxuY29uc3QgY3VycnkyID0gZm4gPT4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiAgcmV0dXJuIGIgPT4gZm4oYSwgYilcbiAgICBkZWZhdWx0OiByZXR1cm4gZm4oYSwgYilcbiAgfVxufVxuXG5jb25zdCBjdXJyeTMgPSBmbiA9PiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6ICByZXR1cm4gY3VycnkyKChiLCBjKSA9PiBmbihhLCBiLCBjKSlcbiAgICBjYXNlIDI6ICByZXR1cm4gYyA9PiBmbihhLCBiLCBjKVxuICAgIGRlZmF1bHQ6IHJldHVybiBmbihhLCBiLCBjKVxuICB9XG59XG5cbi8vXG5cbmNvbnN0IGlzQXJyYXkgID0geCA9PiB4ICYmIHguY29uc3RydWN0b3IgPT09IEFycmF5XG5jb25zdCBpc09iamVjdCA9IHggPT4geCAmJiB4LmNvbnN0cnVjdG9yID09PSBPYmplY3RcblxuY29uc3QgdW5BcnJheSAgPSB4ID0+ICBpc0FycmF5KHgpID8geCA6IHVuZGVmaW5lZFxuXG5jb25zdCBta0FycmF5ID0geCA9PiBpc0FycmF5KHgpID8geCA6IFtdXG5cbi8vXG5cbmNvbnN0IGlkID0geCA9PiB4XG5jb25zdCBzbmQgPSAoXywgYykgPT4gY1xuXG4vL1xuXG5jb25zdCBjaGVjayA9IChleHBlY3RlZCwgcHJlZGljYXRlKSA9PiB4ID0+IHtcbiAgaWYgKHByZWRpY2F0ZSh4KSlcbiAgICByZXR1cm4geFxuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgYnV0IGdvdCAke3h9LmApXG59XG5cbmNvbnN0IGFzc2VydCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IGlkIDogY2hlY2tcblxuLy9cblxuY29uc3QgZHJvcHBlZCA9IHhzID0+IHtcbiAgZm9yIChjb25zdCBfIGluIHhzKVxuICAgIHJldHVybiB4c1xuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8vXG5cbmNvbnN0IGVtcHR5ID0ge31cblxuY29uc3QgZGVsZXRlS2V5ID0gKGssIG8pID0+IHtcbiAgY29uc3QgciA9IE9iamVjdC5hc3NpZ24oe30sIG8pXG4gIGRlbGV0ZSByW2tdXG4gIHJldHVybiBkcm9wcGVkKHIpXG59XG5cbmNvbnN0IHNldEtleSA9IChrLCB2LCBvKSA9PiB7XG4gIGNvbnN0IHIgPSBPYmplY3QuYXNzaWduKHt9LCBvKVxuICByW2tdID0gdlxuICByZXR1cm4gclxufVxuXG4vL1xuXG5jb25zdCB0b1BhcnRpYWwgPSB0cmFuc2Zvcm0gPT4geCA9PiB1bmRlZmluZWQgPT09IHggPyB4IDogdHJhbnNmb3JtKHgpXG5cbi8vXG5cbmNvbnN0IGZpbHRlcmVkID0gdG9QYXJ0aWFsKHhzID0+IGRyb3BwZWQoeHMuZmlsdGVyKHggPT4geCAhPT0gdW5kZWZpbmVkKSkpXG5cbi8vXG5cbmNvbnN0IHNlZW1zTGVucyA9IHggPT4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiAmJiB4Lmxlbmd0aCA9PT0gMVxuXG5jb25zdCBsaWZ0ZWQgPSBhc3NlcnQoXCJhIGxlbnNcIiwgc2VlbXNMZW5zKVxuXG5jb25zdCBsaWZ0ID0gbCA9PiB7XG4gIGlmIChpc1Byb3AobCkpICByZXR1cm4gbGlmdFByb3AobClcbiAgaWYgKGlzSW5kZXgobCkpIHJldHVybiBsaWZ0SW5kZXgobClcbiAgcmV0dXJuIGxpZnRlZChsKVxufVxuXG5leHBvcnQgY29uc3QgY29tcG9zZSA9ICguLi5scykgPT5cbiAgbHMubGVuZ3RoID09PSAwID8gaWRlbnRpdHkgOlxuICBscy5sZW5ndGggPT09IDEgPyBsc1swXSA6XG4gICh0b0NhdCA9PiBSLmNvbXBvc2UoLi4ubHMubWFwKGwgPT4gbGlmdChsKSh0b0NhdCkpKSlcblxuZXhwb3J0IGNvbnN0IHJlbW92ZSA9IGN1cnJ5MigobCwgcykgPT4gc2V0SShsaWZ0KGwpLCB1bmRlZmluZWQsIHMpKVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlQWxsID0gY3VycnkyKChsZW5zLCBkYXRhKSA9PiB7XG4gIHdhcm4oXCJgcmVtb3ZlQWxsYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uIC0tLSB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXCIpXG4gIHdoaWxlIChnZXQobGVucywgZGF0YSkgIT09IHVuZGVmaW5lZClcbiAgICBkYXRhID0gcmVtb3ZlKGxlbnMsIGRhdGEpXG4gIHJldHVybiBkYXRhXG59KVxuXG5jb25zdCBzZXRJID0gKGwsIHgsIHMpID0+IGwoSWRlbnQpKCgpID0+IElkZW50KHgpKShzKS52YWx1ZVxuY29uc3QgZ2V0SSA9IChsLCBzKSA9PiBsKENvbnN0KShDb25zdCkocykudmFsdWVcbmNvbnN0IG1vZGlmeUkgPSAobCwgeDJ4LCBzKSA9PiBsKElkZW50KSh5ID0+IElkZW50KHgyeCh5KSkpKHMpLnZhbHVlXG5jb25zdCBsZW5zSSA9IChnZXR0ZXIsIHNldHRlcikgPT4gX2NvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICBpbm5lcihnZXR0ZXIodGFyZ2V0KSkubWFwKGZvY3VzID0+IHNldHRlcihmb2N1cywgdGFyZ2V0KSlcbmNvbnN0IGNvbGxlY3RJID0gKGwsIHMpID0+IGwoQ29uc3QpKFNpbmdsZSkocykudmFsdWVcblxuZXhwb3J0IGNvbnN0IGxlbnMgPSBjdXJyeTIobGVuc0kpXG5leHBvcnQgY29uc3QgbW9kaWZ5ID0gY3VycnkzKChsLCB4MnksIHMpID0+IG1vZGlmeUkobGlmdChsKSwgeDJ5LCBzKSlcbmV4cG9ydCBjb25zdCBzZXQgPSBjdXJyeTMoKGwsIHgsIHMpID0+IHNldEkobGlmdChsKSwgeCwgcykpXG5leHBvcnQgY29uc3QgZ2V0ID0gY3VycnkyKChsLCBzKSA9PiBnZXRJKGxpZnQobCksIHMpKVxuZXhwb3J0IGNvbnN0IGNvbGxlY3QgPSBjdXJyeTIoKGwsIHMpID0+XG4gIHdhcm4oXCJgY29sbGVjdGAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgbWtBcnJheShmaWx0ZXJlZChjb2xsZWN0SShsaWZ0KGwpLCBzKSkpKVxuXG5leHBvcnQgY29uc3QgY2hhaW4gPSBjdXJyeTIoKHgyeUwsIHhMKSA9PlxuICBjb21wb3NlKHhMLCBjaG9vc2UoeE8gPT4geE8gPT09IHVuZGVmaW5lZCA/IG5vdGhpbmcgOiB4MnlMKHhPKSkpKVxuXG5leHBvcnQgY29uc3QganVzdCA9IHggPT4gbGVuc0koUi5hbHdheXMoeCksIHNuZClcblxuZXhwb3J0IGNvbnN0IGNob29zZSA9IHgyeUwgPT4gY29uc3RydWN0b3IgPT4gaW5uZXIgPT4gdGFyZ2V0ID0+XG4gIGxpZnQoeDJ5TCh0YXJnZXQpKShjb25zdHJ1Y3RvcikoaW5uZXIpKHRhcmdldClcblxuZXhwb3J0IGNvbnN0IG5vdGhpbmcgPSBsZW5zSShzbmQsIHNuZClcblxuZXhwb3J0IGNvbnN0IG9yRWxzZSA9XG4gIGN1cnJ5MigoZCwgbCkgPT4gY2hvb3NlKHggPT4gZ2V0SShsaWZ0KGwpLCB4KSAhPT0gdW5kZWZpbmVkID8gbCA6IGQpKVxuXG5leHBvcnQgY29uc3QgY2hvaWNlID0gKC4uLmxzKSA9PiBjaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGkgPSBscy5maW5kSW5kZXgobCA9PiBnZXRJKGxpZnQobCksIHgpICE9PSB1bmRlZmluZWQpXG4gIHJldHVybiAwIDw9IGkgPyBsc1tpXSA6IG5vdGhpbmdcbn0pXG5cbmNvbnN0IHJlcGxhY2VyID0gKGlubiwgb3V0KSA9PiB4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4XG5jb25zdCBub3JtYWxpemVyID0gZm4gPT4gbGVuc0koZm4sIGZuKVxuXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9IGN1cnJ5MigoaW5uLCBvdXQpID0+XG4gIGxlbnNJKHJlcGxhY2VyKGlubiwgb3V0KSwgcmVwbGFjZXIob3V0LCBpbm4pKSlcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0gcmVwbGFjZSh1bmRlZmluZWQpXG5leHBvcnQgY29uc3QgcmVxdWlyZWQgPSBpbm4gPT4gcmVwbGFjZShpbm4sIHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCBkZWZpbmUgPSB2ID0+IG5vcm1hbGl6ZXIocmVwbGFjZXIodW5kZWZpbmVkLCB2KSlcblxuZXhwb3J0IGNvbnN0IHZhbHVlT3IgPSB2ID0+XG4gIGxlbnNJKHggPT4geCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwgPyB2IDogeCwgaWQpXG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemUgPSB0cmFuc2Zvcm0gPT4gbm9ybWFsaXplcih0b1BhcnRpYWwodHJhbnNmb3JtKSlcblxuY29uc3QgaXNQcm9wID0geCA9PiB0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIlxuXG5leHBvcnQgY29uc3QgcHJvcCA9IGFzc2VydChcImEgc3RyaW5nXCIsIGlzUHJvcClcblxuY29uc3QgbGlmdFByb3AgPSBrID0+IF9jID0+IGlubmVyID0+IG8gPT4gaW5uZXIoaXNPYmplY3QobykgPyBvW2tdIDogdW5kZWZpbmVkKS5tYXAodiA9PiB7XG4gIGNvbnN0IG9PdXQgPSBpc09iamVjdChvKSA/IG8gOiBlbXB0eVxuICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gZGVsZXRlS2V5KGssIG9PdXQpIDogc2V0S2V5KGssIHYsIG9PdXQpXG59KVxuXG5leHBvcnQgY29uc3QgZmluZCA9IHByZWRpY2F0ZSA9PiBjaG9vc2UoeHMgPT4ge1xuICBpZiAoaXNBcnJheSh4cykpIHtcbiAgICBjb25zdCBpID0geHMuZmluZEluZGV4KHByZWRpY2F0ZSlcbiAgICByZXR1cm4gaSA8IDAgPyBhcHBlbmQgOiBpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFwcGVuZFxuICB9XG59KVxuXG5leHBvcnQgY29uc3QgZmluZFdpdGggPSAoLi4ubHMpID0+IHtcbiAgY29uc3QgbGxzID0gbGlmdChjb21wb3NlKC4uLmxzKSlcbiAgcmV0dXJuIGNvbXBvc2UoZmluZCh4ID0+IGdldEkobGxzLCB4KSAhPT0gdW5kZWZpbmVkKSwgbGxzKVxufVxuXG5jb25zdCBpc0luZGV4ID0geCA9PiBOdW1iZXIuaXNJbnRlZ2VyKHgpICYmIDAgPD0geFxuXG5leHBvcnQgY29uc3QgaW5kZXggPSBhc3NlcnQoXCJhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyXCIsIGlzSW5kZXgpXG5cbmNvbnN0IGxpZnRJbmRleCA9IGkgPT4gX2MgPT4gaW5uZXIgPT4geHMgPT4gaW5uZXIoaXNBcnJheSh4cykgPyB4c1tpXSA6IHVuZGVmaW5lZCkubWFwKHggPT4ge1xuICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc0FycmF5KHhzKSlcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoeHMubGVuZ3RoIDw9IGkpXG4gICAgICByZXR1cm4gZHJvcHBlZCh4cylcbiAgICBjb25zdCB5cyA9IHhzLnNsaWNlKDApXG4gICAgeXMuc3BsaWNlKGksIDEpXG4gICAgcmV0dXJuIGRyb3BwZWQoeXMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFpc0FycmF5KHhzKSlcbiAgICAgIHJldHVybiBBcnJheShpKS5jb25jYXQoW3hdKVxuICAgIGlmICh4cy5sZW5ndGggPD0gaSlcbiAgICAgIHJldHVybiB4cy5jb25jYXQoQXJyYXkoaSAtIHhzLmxlbmd0aCksIFt4XSlcbiAgICBjb25zdCB5cyA9IHhzLnNsaWNlKDApXG4gICAgeXNbaV0gPSB4XG4gICAgcmV0dXJuIHlzXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBhcHBlbmQgPSBsZW5zSShzbmQsICh4LCB4cykgPT5cbiAgeCA9PT0gdW5kZWZpbmVkID8gdW5BcnJheSh4cykgOiBpc0FycmF5KHhzKSA/IHhzLmNvbmNhdChbeF0pIDogW3hdKVxuXG5leHBvcnQgY29uc3QgZmlsdGVyID0gcCA9PiBsZW5zSSh4cyA9PiB1bkFycmF5KHhzKSAmJiB4cy5maWx0ZXIocCksICh5cywgeHMpID0+XG4gIGRyb3BwZWQobWtBcnJheSh5cykuY29uY2F0KG1rQXJyYXkoeHMpLmZpbHRlcih4ID0+ICFwKHgpKSkpKVxuXG5leHBvcnQgY29uc3QgYXVnbWVudCA9IHRlbXBsYXRlID0+IGxlbnNJKFxuICB4ID0+IHtcbiAgICBpZiAoaXNPYmplY3QoeCkpIHtcbiAgICAgIGNvbnN0IHogPSB7Li4ueH1cbiAgICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSlcbiAgICAgICAgeltrXSA9IHRlbXBsYXRlW2tdKHopXG4gICAgICByZXR1cm4gelxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuICAoeSwgY0luKSA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KHkpKSB7XG4gICAgICBjb25zdCBjID0gaXNPYmplY3QoY0luKSA/IGNJbiA6IGVtcHR5XG4gICAgICBsZXQgelxuICAgICAgY29uc3Qgc2V0ID0gKGssIHYpID0+IHtcbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0geilcbiAgICAgICAgICB6ID0ge31cbiAgICAgICAgeltrXSA9IHZcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgayBpbiB5KSB7XG4gICAgICAgIGlmICghKGsgaW4gdGVtcGxhdGUpKVxuICAgICAgICAgIHNldChrLCB5W2tdKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgaWYgKGsgaW4gYylcbiAgICAgICAgICAgIHNldChrLCBjW2tdKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHpcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfSlcblxuZXhwb3J0IGNvbnN0IHBpY2sgPSB0ZW1wbGF0ZSA9PiBsZW5zSShcbiAgYyA9PiB7XG4gICAgbGV0IHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IHYgPSBnZXRJKGxpZnQodGVtcGxhdGVba10pLCBjKVxuICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAociA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHIgPSB7fVxuICAgICAgICByW2tdID0gdlxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gclxuICB9LFxuICAobyA9IGVtcHR5LCBjSW4pID0+IHtcbiAgICBsZXQgYyA9IGNJblxuICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSlcbiAgICAgIGMgPSBzZXRJKGxpZnQodGVtcGxhdGVba10pLCBvW2tdLCBjKVxuICAgIHJldHVybiBjXG4gIH0pXG5cbmV4cG9ydCBjb25zdCBpZGVudGl0eSA9IGxlbnNJKGlkLCBpZClcblxuZXhwb3J0IGNvbnN0IHByb3BzID0gKC4uLmtzKSA9PiBwaWNrKFIuemlwT2JqKGtzLCBrcykpXG5cbmNvbnN0IHNob3cgPSAoLi4ubGFiZWxzKSA9PiB4ID0+IGNvbnNvbGUubG9nKC4uLmxhYmVscywgeCkgfHwgeFxuXG5leHBvcnQgY29uc3QgbG9nID0gKC4uLmxhYmVscykgPT5cbiAgbGVuc0koc2hvdyguLi5sYWJlbHMsIFwiZ2V0XCIpLCBzaG93KC4uLmxhYmVscywgXCJzZXRcIikpXG5cbmV4cG9ydCBjb25zdCBzZXF1ZW5jZSA9IGNvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICB3YXJuKFwiYHNlcXVlbmNlYCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBSLnRyYXZlcnNlKGNvbnN0cnVjdG9yLCBpbm5lciwgbWtBcnJheSh0YXJnZXQpKVxuICAubWFwKGZpbHRlcmVkKVxuXG5leHBvcnQgY29uc3Qgb3B0aW9uYWwgPVxuICBjb21wb3NlKGxlbnNJKHRvUGFydGlhbCh4ID0+IFt4XSksXG4gICAgICAgICAgICAgICAgdG9QYXJ0aWFsKChbeF0pID0+IHgpKSxcbiAgICAgICAgICBzZXF1ZW5jZSlcblxuZXhwb3J0IGNvbnN0IGZyb21SYW1kYSA9IGwgPT4gX2NvbnN0cnVjdG9yID0+IGxcbmNvbnN0IGZhbnRhc3kgPSAoKSA9PiB7dGhyb3cgbmV3IEVycm9yKFwiU29ycnksIGB0b1JhbWRhYCBpcyBvbmx5IGZhbnRhc3khXCIpfVxuZXhwb3J0IGNvbnN0IHRvUmFtZGEgPSBsID0+IGxpZnQobCkoZmFudGFzeSlcblxuZXhwb3J0IGNvbnN0IGZyb21BcnJheUJ5ID0gaWQgPT5cbiAgd2FybihcImBmcm9tQXJyYXlCeWAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgbGVuc0koeHMgPT4ge1xuICAgIGlmIChpc0FycmF5KHhzKSkge1xuICAgICAgY29uc3QgbyA9IHt9XG4gICAgICBmb3IgKGxldCBpPTAsIG49eHMubGVuZ3RoOyBpPG47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV1cbiAgICAgICAgb1t4W2lkXV0gPSB4XG4gICAgICB9XG4gICAgICByZXR1cm4gb1xuICAgIH1cbiAgfSxcbiAgbyA9PiBpc09iamVjdChvKSA/IFIudmFsdWVzKG8pIDogdW5kZWZpbmVkKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6WyJjb21wb3NlIiwiUiIsIklkZW50aXR5IiwidmFsdWUiLCJJZGVudCIsIngiLCJwcm90b3R5cGUiLCJtYXAiLCJ4MnkiLCJvZiIsImFwIiwiQ29uc3RhbnQiLCJDb25zdCIsIlNpbmdsZSIsImNvbmNhdCIsIndhcm4iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ3YXJuZWQiLCJtZXNzYWdlIiwiY29uc29sZSIsImN1cnJ5MiIsImEiLCJiIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm4iLCJjdXJyeTMiLCJjIiwiaXNBcnJheSIsImNvbnN0cnVjdG9yIiwiQXJyYXkiLCJpc09iamVjdCIsIk9iamVjdCIsInVuQXJyYXkiLCJ1bmRlZmluZWQiLCJta0FycmF5IiwiaWQiLCJzbmQiLCJfIiwiY2hlY2siLCJleHBlY3RlZCIsInByZWRpY2F0ZSIsIkVycm9yIiwiYXNzZXJ0IiwiZHJvcHBlZCIsInhzIiwiZW1wdHkiLCJkZWxldGVLZXkiLCJrIiwibyIsInIiLCJhc3NpZ24iLCJzZXRLZXkiLCJ2IiwidG9QYXJ0aWFsIiwidHJhbnNmb3JtIiwiZmlsdGVyZWQiLCJmaWx0ZXIiLCJzZWVtc0xlbnMiLCJsaWZ0ZWQiLCJsaWZ0IiwibCIsImxpZnRQcm9wIiwibGlmdEluZGV4IiwiaWRlbnRpdHkiLCJpIiwidG9DYXQiLCJyZW1vdmVBbGwiLCJsZW5zIiwiZGF0YSIsImdldCIsInJlbW92ZSIsInNldEkiLCJzIiwic2V0UHJvcCIsInNldEluZGV4IiwiZ2V0SSIsImdldFByb3AiLCJnZXRJbmRleCIsIm1vZGlmeUkiLCJ4MngiLCJ5IiwibGVuc0kiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJpbm5lciIsInRhcmdldCIsImZvY3VzIiwiY29sbGVjdEkiLCJtb2RpZnkiLCJzZXQiLCJjb2xsZWN0IiwiY2hhaW4iLCJ4MnlMIiwieEwiLCJjaG9vc2UiLCJ4TyIsIm5vdGhpbmciLCJqdXN0IiwiYWx3YXlzIiwib3JFbHNlIiwiZCIsImNob2ljZSIsImxzIiwiZmluZEluZGV4IiwicmVwbGFjZXIiLCJpbm4iLCJvdXQiLCJlcXVhbHMiLCJub3JtYWxpemVyIiwicmVwbGFjZSIsImRlZmF1bHRzIiwicmVxdWlyZWQiLCJkZWZpbmUiLCJ2YWx1ZU9yIiwibm9ybWFsaXplIiwiaXNQcm9wIiwicHJvcCIsIm9PdXQiLCJmaW5kIiwiYXBwZW5kIiwiZmluZFdpdGgiLCJsbHMiLCJpc0luZGV4IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5kZXgiLCJ5cyIsInNsaWNlIiwic3BsaWNlIiwicCIsImF1Z21lbnQiLCJ6IiwidGVtcGxhdGUiLCJjSW4iLCJwaWNrIiwicHJvcHMiLCJrcyIsInppcE9iaiIsInNob3ciLCJsYWJlbHMiLCJsb2ciLCJzZXF1ZW5jZSIsInRyYXZlcnNlIiwib3B0aW9uYWwiLCJmcm9tUmFtZGEiLCJmYW50YXN5IiwidG9SYW1kYSIsImZyb21BcnJheUJ5IiwibiIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztRQXdIZ0JBLE8sR0FBQUEsTzs7QUF4SGhCOztJQUFZQyxDOzs7O0FBRVo7O0FBRUEsU0FBU0MsUUFBVCxDQUFrQkMsS0FBbEIsRUFBeUI7QUFBQyxPQUFLQSxLQUFMLEdBQWFBLEtBQWI7QUFBbUI7QUFDN0MsSUFBTUMsUUFBUSxTQUFSQSxLQUFRO0FBQUEsU0FBSyxJQUFJRixRQUFKLENBQWFHLENBQWIsQ0FBTDtBQUFBLENBQWQ7QUFDQUgsU0FBU0ksU0FBVCxDQUFtQkMsR0FBbkIsR0FBeUIsVUFBVUMsR0FBVixFQUFlO0FBQUMsU0FBTyxJQUFJTixRQUFKLENBQWFNLElBQUksS0FBS0wsS0FBVCxDQUFiLENBQVA7QUFBcUMsQ0FBOUU7QUFDQUQsU0FBU0ksU0FBVCxDQUFtQkcsRUFBbkIsR0FBd0JMLEtBQXhCO0FBQ0FGLFNBQVNJLFNBQVQsQ0FBbUJJLEVBQW5CLEdBQXdCLFVBQVVMLENBQVYsRUFBYTtBQUFDLFNBQU8sSUFBSUgsUUFBSixDQUFhLEtBQUtD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QUNWLFFBQUl0RCxRQUFRaUIsRUFBUixDQUFKLEVBQWlCO0FBQ2YsVUFBTUksSUFBSSxFQUFWO0FBQ0EsV0FBSyxJQUFJZ0IsSUFBRSxDQUFOLEVBQVNvRixJQUFFeEcsR0FBR3JCLE1BQW5CLEVBQTJCeUMsSUFBRW9GLENBQTdCLEVBQWdDLEVBQUVwRixDQUFsQyxFQUFxQztBQUNuQyxZQUFNOUQsSUFBSTBDLEdBQUdvQixDQUFILENBQVY7QUFDQWhCLFVBQUU5QyxFQUFFaUMsRUFBRixDQUFGLElBQVdqQyxDQUFYO0FBQ0Q7QUFDRCxhQUFPOEMsQ0FBUDtBQUNEO0FBQ0YsR0FURCxFQVVBO0FBQUEsV0FBS2xCLFNBQVNrQixDQUFULElBQWNsRCxFQUFFdUosTUFBRixDQUFTckcsQ0FBVCxDQUFkLEdBQTRCZixTQUFqQztBQUFBLEdBVkEsQ0FGeUI7QUFBQSxDQUFwQjs7a0JBY1FwQyxPIiwiZmlsZSI6InBhcnRpYWwubGVuc2VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUiBmcm9tIFwicmFtZGFcIlxuXG4vL1xuXG5mdW5jdGlvbiBJZGVudGl0eSh2YWx1ZSkge3RoaXMudmFsdWUgPSB2YWx1ZX1cbmNvbnN0IElkZW50ID0geCA9PiBuZXcgSWRlbnRpdHkoeClcbklkZW50aXR5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoeDJ5KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh4MnkodGhpcy52YWx1ZSkpfVxuSWRlbnRpdHkucHJvdG90eXBlLm9mID0gSWRlbnRcbklkZW50aXR5LnByb3RvdHlwZS5hcCA9IGZ1bmN0aW9uICh4KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh0aGlzLnZhbHVlKHgudmFsdWUpKX1cblxuLy9cblxuZnVuY3Rpb24gQ29uc3RhbnQodmFsdWUpIHt0aGlzLnZhbHVlID0gdmFsdWV9XG5jb25zdCBDb25zdCA9IHggPT4gbmV3IENvbnN0YW50KHgpXG5jb25zdCBTaW5nbGUgPSB4ID0+IENvbnN0KFt4XSlcbkNvbnN0YW50LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXN9XG5Db25zdGFudC5wcm90b3R5cGUub2YgPSBDb25zdFxuQ29uc3RhbnQucHJvdG90eXBlLmFwID0gZnVuY3Rpb24gKHgpIHtyZXR1cm4gbmV3IENvbnN0KFIuY29uY2F0KHRoaXMudmFsdWUsIHgudmFsdWUpKX1cblxuLy9cblxuY29uc3Qgd2FybiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IHt9IDogKCgpID0+IHtcbiAgY29uc3Qgd2FybmVkID0ge31cblxuICByZXR1cm4gbWVzc2FnZSA9PiB7XG4gICAgaWYgKCEobWVzc2FnZSBpbiB3YXJuZWQpKSB7XG4gICAgICB3YXJuZWRbbWVzc2FnZV0gPSBtZXNzYWdlXG4gICAgICBjb25zb2xlLndhcm4oXCJwYXJ0aWFsLmxlbnNlczpcIiwgbWVzc2FnZSlcbiAgICB9XG4gIH1cbn0pKClcblxuLy9cblxuY29uc3QgY3VycnkyID0gZm4gPT4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiAgcmV0dXJuIGIgPT4gZm4oYSwgYilcbiAgICBkZWZhdWx0OiByZXR1cm4gZm4oYSwgYilcbiAgfVxufVxuXG5jb25zdCBjdXJyeTMgPSBmbiA9PiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6ICByZXR1cm4gY3VycnkyKChiLCBjKSA9PiBmbihhLCBiLCBjKSlcbiAgICBjYXNlIDI6ICByZXR1cm4gYyA9PiBmbihhLCBiLCBjKVxuICAgIGRlZmF1bHQ6IHJldHVybiBmbihhLCBiLCBjKVxuICB9XG59XG5cbi8vXG5cbmNvbnN0IGlzQXJyYXkgID0geCA9PiB4ICYmIHguY29uc3RydWN0b3IgPT09IEFycmF5XG5jb25zdCBpc09iamVjdCA9IHggPT4geCAmJiB4LmNvbnN0cnVjdG9yID09PSBPYmplY3RcblxuY29uc3QgdW5BcnJheSAgPSB4ID0+ICBpc0FycmF5KHgpID8geCA6IHVuZGVmaW5lZFxuXG5jb25zdCBta0FycmF5ID0geCA9PiBpc0FycmF5KHgpID8geCA6IFtdXG5cbi8vXG5cbmNvbnN0IGlkID0geCA9PiB4XG5jb25zdCBzbmQgPSAoXywgYykgPT4gY1xuXG4vL1xuXG5jb25zdCBjaGVjayA9IChleHBlY3RlZCwgcHJlZGljYXRlKSA9PiB4ID0+IHtcbiAgaWYgKHByZWRpY2F0ZSh4KSlcbiAgICByZXR1cm4geFxuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgYnV0IGdvdCAke3h9LmApXG59XG5cbmNvbnN0IGFzc2VydCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IGlkIDogY2hlY2tcblxuLy9cblxuY29uc3QgZHJvcHBlZCA9IHhzID0+IHtcbiAgZm9yIChjb25zdCBfIGluIHhzKVxuICAgIHJldHVybiB4c1xuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8vXG5cbmNvbnN0IGVtcHR5ID0ge31cblxuY29uc3QgZGVsZXRlS2V5ID0gKGssIG8pID0+IHtcbiAgY29uc3QgciA9IE9iamVjdC5hc3NpZ24oe30sIG8pXG4gIGRlbGV0ZSByW2tdXG4gIHJldHVybiBkcm9wcGVkKHIpXG59XG5cbmNvbnN0IHNldEtleSA9IChrLCB2LCBvKSA9PiB7XG4gIGNvbnN0IHIgPSBPYmplY3QuYXNzaWduKHt9LCBvKVxuICByW2tdID0gdlxuICByZXR1cm4gclxufVxuXG4vL1xuXG5jb25zdCB0b1BhcnRpYWwgPSB0cmFuc2Zvcm0gPT4geCA9PiB1bmRlZmluZWQgPT09IHggPyB4IDogdHJhbnNmb3JtKHgpXG5cbi8vXG5cbmNvbnN0IGZpbHRlcmVkID0gdG9QYXJ0aWFsKHhzID0+IGRyb3BwZWQoeHMuZmlsdGVyKHggPT4geCAhPT0gdW5kZWZpbmVkKSkpXG5cbi8vXG5cbmNvbnN0IHNlZW1zTGVucyA9IHggPT4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiAmJiB4Lmxlbmd0aCA9PT0gMVxuXG5jb25zdCBsaWZ0ZWQgPSBhc3NlcnQoXCJhIGxlbnNcIiwgc2VlbXNMZW5zKVxuXG5jb25zdCBsaWZ0ID0gbCA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIGwpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6IHJldHVybiBsaWZ0UHJvcChsKVxuICAgIGNhc2UgXCJudW1iZXJcIjogcmV0dXJuIGxpZnRJbmRleChsKVxuICAgIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsaWZ0ZWQobClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiAgcmV0dXJuIGlkZW50aXR5XG4gICAgY2FzZSAxOiAgcmV0dXJuIGFyZ3VtZW50c1swXVxuICAgIGRlZmF1bHQ6IHJldHVybiB0b0NhdCA9PiB4ID0+IHtcbiAgICAgIGxldCBpID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgbGV0IHIgPSBsaWZ0KGFyZ3VtZW50c1stLWldKSh0b0NhdCkoeClcbiAgICAgIGRvIHtcbiAgICAgICAgciA9IGxpZnQoYXJndW1lbnRzWy0taV0pKHRvQ2F0KShyKVxuICAgICAgfSB3aGlsZSAoMCA8IGkpXG4gICAgICByZXR1cm4gclxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlQWxsID0gY3VycnkyKChsZW5zLCBkYXRhKSA9PiB7XG4gIHdhcm4oXCJgcmVtb3ZlQWxsYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uIC0tLSB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXCIpXG4gIHdoaWxlIChnZXQobGVucywgZGF0YSkgIT09IHVuZGVmaW5lZClcbiAgICBkYXRhID0gcmVtb3ZlKGxlbnMsIGRhdGEpXG4gIHJldHVybiBkYXRhXG59KVxuXG5jb25zdCBzZXRJID0gKGwsIHgsIHMpID0+IHtcbiAgc3dpdGNoICh0eXBlb2YgbCkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIHNldFByb3AobCwgeCwgcylcbiAgICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiBzZXRJbmRleChsLCB4LCBzKVxuICAgIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsaWZ0ZWQobCkoSWRlbnQpKCgpID0+IElkZW50KHgpKShzKS52YWx1ZVxuICB9XG59XG5jb25zdCBnZXRJID0gKGwsIHMpID0+IHtcbiAgc3dpdGNoICh0eXBlb2YgbCkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIGdldFByb3AobCwgcylcbiAgICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiBnZXRJbmRleChsLCBzKVxuICAgIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsaWZ0ZWQobCkoQ29uc3QpKENvbnN0KShzKS52YWx1ZVxuICB9XG59XG5jb25zdCBtb2RpZnlJID0gKGwsIHgyeCwgcykgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBsKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOiByZXR1cm4gc2V0UHJvcChsLCB4MngoZ2V0UHJvcChsLCBzKSksIHMpXG4gICAgY2FzZSBcIm51bWJlclwiOiByZXR1cm4gc2V0SW5kZXgobCwgeDJ4KGdldEluZGV4KGwsIHMpKSwgcylcbiAgICBkZWZhdWx0OiAgICAgICByZXR1cm4gbGlmdGVkKGwpKElkZW50KSh5ID0+IElkZW50KHgyeCh5KSkpKHMpLnZhbHVlXG4gIH1cbn1cbmNvbnN0IGxlbnNJID0gKGdldHRlciwgc2V0dGVyKSA9PiBfYyA9PiBpbm5lciA9PiB0YXJnZXQgPT5cbiAgaW5uZXIoZ2V0dGVyKHRhcmdldCkpLm1hcChmb2N1cyA9PiBzZXR0ZXIoZm9jdXMsIHRhcmdldCkpXG5jb25zdCBjb2xsZWN0SSA9IChsLCBzKSA9PiBsKENvbnN0KShTaW5nbGUpKHMpLnZhbHVlXG5cbmV4cG9ydCBjb25zdCByZW1vdmUgPSBjdXJyeTIoKGwsIHMpID0+IHNldEkobCwgdW5kZWZpbmVkLCBzKSlcbmV4cG9ydCBjb25zdCBsZW5zID0gY3VycnkyKGxlbnNJKVxuZXhwb3J0IGNvbnN0IG1vZGlmeSA9IGN1cnJ5Myhtb2RpZnlJKVxuZXhwb3J0IGNvbnN0IHNldCA9IGN1cnJ5MyhzZXRJKVxuZXhwb3J0IGNvbnN0IGdldCA9IGN1cnJ5MihnZXRJKVxuZXhwb3J0IGNvbnN0IGNvbGxlY3QgPSBjdXJyeTIoKGwsIHMpID0+XG4gIHdhcm4oXCJgY29sbGVjdGAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgbWtBcnJheShmaWx0ZXJlZChjb2xsZWN0SShsaWZ0KGwpLCBzKSkpKVxuXG5leHBvcnQgY29uc3QgY2hhaW4gPSBjdXJyeTIoKHgyeUwsIHhMKSA9PlxuICBjb21wb3NlKHhMLCBjaG9vc2UoeE8gPT4geE8gPT09IHVuZGVmaW5lZCA/IG5vdGhpbmcgOiB4MnlMKHhPKSkpKVxuXG5leHBvcnQgY29uc3QganVzdCA9IHggPT4gbGVuc0koUi5hbHdheXMoeCksIHNuZClcblxuZXhwb3J0IGNvbnN0IGNob29zZSA9IHgyeUwgPT4gY29uc3RydWN0b3IgPT4gaW5uZXIgPT4gdGFyZ2V0ID0+XG4gIGxpZnQoeDJ5TCh0YXJnZXQpKShjb25zdHJ1Y3RvcikoaW5uZXIpKHRhcmdldClcblxuZXhwb3J0IGNvbnN0IG5vdGhpbmcgPSBsZW5zSShzbmQsIHNuZClcblxuZXhwb3J0IGNvbnN0IG9yRWxzZSA9XG4gIGN1cnJ5MigoZCwgbCkgPT4gY2hvb3NlKHggPT4gZ2V0SShsLCB4KSAhPT0gdW5kZWZpbmVkID8gbCA6IGQpKVxuXG5leHBvcnQgY29uc3QgY2hvaWNlID0gKC4uLmxzKSA9PiBjaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGkgPSBscy5maW5kSW5kZXgobCA9PiBnZXRJKGwsIHgpICE9PSB1bmRlZmluZWQpXG4gIHJldHVybiAwIDw9IGkgPyBsc1tpXSA6IG5vdGhpbmdcbn0pXG5cbmNvbnN0IHJlcGxhY2VyID0gKGlubiwgb3V0KSA9PiB4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4XG5jb25zdCBub3JtYWxpemVyID0gZm4gPT4gX2MgPT4gaW5uZXIgPT4geCA9PiBpbm5lcihmbih4KSkubWFwKGZuKVxuXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9IGN1cnJ5MigoaW5uLCBvdXQpID0+IF9jID0+IGlubmVyID0+IHggPT5cbiAgaW5uZXIocmVwbGFjZXIoaW5uLCBvdXQpKHgpKS5tYXAocmVwbGFjZXIob3V0LCBpbm4pKSlcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0gb3V0ID0+IF9jID0+IGlubmVyID0+IHggPT5cbiAgaW5uZXIoeCA9PT0gdW5kZWZpbmVkID8gb3V0IDogeCkubWFwKHJlcGxhY2VyKG91dCwgdW5kZWZpbmVkKSlcbmV4cG9ydCBjb25zdCByZXF1aXJlZCA9IGlubiA9PiByZXBsYWNlKGlubiwgdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGRlZmluZSA9IHYgPT4gbm9ybWFsaXplcih4ID0+IHggPT09IHVuZGVmaW5lZCA/IHYgOiB4KVxuXG5leHBvcnQgY29uc3QgdmFsdWVPciA9IHYgPT4gX2MgPT4gaW5uZXIgPT4geCA9PlxuICBpbm5lcih4ID09PSB1bmRlZmluZWQgfHwgeCA9PT0gbnVsbCA/IHYgOiB4KVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gdHJhbnNmb3JtID0+IG5vcm1hbGl6ZXIodG9QYXJ0aWFsKHRyYW5zZm9ybSkpXG5cbmNvbnN0IGlzUHJvcCA9IHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCJcblxuZXhwb3J0IGNvbnN0IHByb3AgPSBhc3NlcnQoXCJhIHN0cmluZ1wiLCBpc1Byb3ApXG5cbmNvbnN0IGdldFByb3AgPSAoaywgbykgPT4gaXNPYmplY3QobykgPyBvW2tdIDogdW5kZWZpbmVkXG5jb25zdCBzZXRQcm9wID0gKGssIHYsIG8pID0+IHtcbiAgY29uc3Qgb091dCA9IGlzT2JqZWN0KG8pID8gbyA6IGVtcHR5XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyBkZWxldGVLZXkoaywgb091dCkgOiBzZXRLZXkoaywgdiwgb091dClcbn1cbmNvbnN0IGxpZnRQcm9wID0gayA9PiBfYyA9PiBpbm5lciA9PiBvID0+XG4gIGlubmVyKGdldFByb3AoaywgbykpLm1hcCh2ID0+IHNldFByb3AoaywgdiwgbykpXG5cbmV4cG9ydCBjb25zdCBmaW5kID0gcHJlZGljYXRlID0+IGNob29zZSh4cyA9PiB7XG4gIGlmIChpc0FycmF5KHhzKSkge1xuICAgIGNvbnN0IGkgPSB4cy5maW5kSW5kZXgocHJlZGljYXRlKVxuICAgIHJldHVybiBpIDwgMCA/IGFwcGVuZCA6IGlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXBwZW5kXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBmaW5kV2l0aCA9ICguLi5scykgPT4ge1xuICBjb25zdCBsbHMgPSBsaWZ0KGNvbXBvc2UoLi4ubHMpKVxuICByZXR1cm4gY29tcG9zZShmaW5kKHggPT4gZ2V0SShsbHMsIHgpICE9PSB1bmRlZmluZWQpLCBsbHMpXG59XG5cbmNvbnN0IGlzSW5kZXggPSB4ID0+IE51bWJlci5pc0ludGVnZXIoeCkgJiYgMCA8PSB4XG5cbmV4cG9ydCBjb25zdCBpbmRleCA9IGFzc2VydChcImEgbm9uLW5lZ2F0aXZlIGludGVnZXJcIiwgaXNJbmRleClcblxuY29uc3QgZ2V0SW5kZXggPSAoaSwgeHMpID0+IGlzQXJyYXkoeHMpID8geHNbaV0gOiB1bmRlZmluZWRcbmNvbnN0IHNldEluZGV4ID0gKGksIHgsIHhzKSA9PiB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWlzQXJyYXkoeHMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICh4cy5sZW5ndGggPD0gaSlcbiAgICAgIHJldHVybiBkcm9wcGVkKHhzKVxuICAgIGNvbnN0IHlzID0geHMuc2xpY2UoMClcbiAgICB5cy5zcGxpY2UoaSwgMSlcbiAgICByZXR1cm4gZHJvcHBlZCh5cylcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWlzQXJyYXkoeHMpKVxuICAgICAgcmV0dXJuIEFycmF5KGkpLmNvbmNhdChbeF0pXG4gICAgaWYgKHhzLmxlbmd0aCA8PSBpKVxuICAgICAgcmV0dXJuIHhzLmNvbmNhdChBcnJheShpIC0geHMubGVuZ3RoKSwgW3hdKVxuICAgIGNvbnN0IHlzID0geHMuc2xpY2UoMClcbiAgICB5c1tpXSA9IHhcbiAgICByZXR1cm4geXNcbiAgfVxufVxuY29uc3QgbGlmdEluZGV4ID0gaSA9PiBfYyA9PiBpbm5lciA9PiB4cyA9PlxuICBpbm5lcihnZXRJbmRleChpLCB4cykpLm1hcCh4ID0+IHNldEluZGV4KGksIHgsIHhzKSlcblxuZXhwb3J0IGNvbnN0IGFwcGVuZCA9IGxlbnNJKHNuZCwgKHgsIHhzKSA9PlxuICB4ID09PSB1bmRlZmluZWQgPyB1bkFycmF5KHhzKSA6IGlzQXJyYXkoeHMpID8geHMuY29uY2F0KFt4XSkgOiBbeF0pXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXIgPSBwID0+IGxlbnNJKHhzID0+IHVuQXJyYXkoeHMpICYmIHhzLmZpbHRlcihwKSwgKHlzLCB4cykgPT5cbiAgZHJvcHBlZChta0FycmF5KHlzKS5jb25jYXQobWtBcnJheSh4cykuZmlsdGVyKHggPT4gIXAoeCkpKSkpXG5cbmV4cG9ydCBjb25zdCBhdWdtZW50ID0gdGVtcGxhdGUgPT4gbGVuc0koXG4gIHggPT4ge1xuICAgIGlmIChpc09iamVjdCh4KSkge1xuICAgICAgY29uc3QgeiA9IHsuLi54fVxuICAgICAgZm9yIChjb25zdCBrIGluIHRlbXBsYXRlKVxuICAgICAgICB6W2tdID0gdGVtcGxhdGVba10oeilcbiAgICAgIHJldHVybiB6XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG4gICh5LCBjSW4pID0+IHtcbiAgICBpZiAoaXNPYmplY3QoeSkpIHtcbiAgICAgIGNvbnN0IGMgPSBpc09iamVjdChjSW4pID8gY0luIDogZW1wdHlcbiAgICAgIGxldCB6XG4gICAgICBjb25zdCBzZXQgPSAoaywgdikgPT4ge1xuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB6KVxuICAgICAgICAgIHogPSB7fVxuICAgICAgICB6W2tdID0gdlxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrIGluIHkpIHtcbiAgICAgICAgaWYgKCEoayBpbiB0ZW1wbGF0ZSkpXG4gICAgICAgICAgc2V0KGssIHlba10pXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBpZiAoayBpbiBjKVxuICAgICAgICAgICAgc2V0KGssIGNba10pXG4gICAgICB9XG4gICAgICByZXR1cm4gelxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgcGljayA9IHRlbXBsYXRlID0+IGxlbnNJKFxuICBjID0+IHtcbiAgICBsZXQgclxuICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSkge1xuICAgICAgY29uc3QgdiA9IGdldEkodGVtcGxhdGVba10sIGMpXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgciA9IHt9XG4gICAgICAgIHJba10gPSB2XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByXG4gIH0sXG4gIChvID0gZW1wdHksIGNJbikgPT4ge1xuICAgIGxldCBjID0gY0luXG4gICAgZm9yIChjb25zdCBrIGluIHRlbXBsYXRlKVxuICAgICAgYyA9IHNldEkodGVtcGxhdGVba10sIG9ba10sIGMpXG4gICAgcmV0dXJuIGNcbiAgfSlcblxuZXhwb3J0IGNvbnN0IGlkZW50aXR5ID0gX2MgPT4gaW5uZXIgPT4gaW5uZXJcblxuZXhwb3J0IGNvbnN0IHByb3BzID0gKC4uLmtzKSA9PiBwaWNrKFIuemlwT2JqKGtzLCBrcykpXG5cbmNvbnN0IHNob3cgPSAoLi4ubGFiZWxzKSA9PiB4ID0+IGNvbnNvbGUubG9nKC4uLmxhYmVscywgeCkgfHwgeFxuXG5leHBvcnQgY29uc3QgbG9nID0gKC4uLmxhYmVscykgPT5cbiAgbGVuc0koc2hvdyguLi5sYWJlbHMsIFwiZ2V0XCIpLCBzaG93KC4uLmxhYmVscywgXCJzZXRcIikpXG5cbmV4cG9ydCBjb25zdCBzZXF1ZW5jZSA9IGNvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICB3YXJuKFwiYHNlcXVlbmNlYCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBSLnRyYXZlcnNlKGNvbnN0cnVjdG9yLCBpbm5lciwgbWtBcnJheSh0YXJnZXQpKVxuICAubWFwKGZpbHRlcmVkKVxuXG5leHBvcnQgY29uc3Qgb3B0aW9uYWwgPVxuICBjb21wb3NlKGxlbnNJKHRvUGFydGlhbCh4ID0+IFt4XSksXG4gICAgICAgICAgICAgICAgdG9QYXJ0aWFsKChbeF0pID0+IHgpKSxcbiAgICAgICAgICBzZXF1ZW5jZSlcblxuZXhwb3J0IGNvbnN0IGZyb21SYW1kYSA9IGwgPT4gX2MgPT4gbFxuY29uc3QgZmFudGFzeSA9ICgpID0+IHt0aHJvdyBuZXcgRXJyb3IoXCJTb3JyeSwgYHRvUmFtZGFgIGlzIG9ubHkgZmFudGFzeSFcIil9XG5leHBvcnQgY29uc3QgdG9SYW1kYSA9IGwgPT4gbGlmdChsKShmYW50YXN5KVxuXG5leHBvcnQgY29uc3QgZnJvbUFycmF5QnkgPSBpZCA9PlxuICB3YXJuKFwiYGZyb21BcnJheUJ5YCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBsZW5zSSh4cyA9PiB7XG4gICAgaWYgKGlzQXJyYXkoeHMpKSB7XG4gICAgICBjb25zdCBvID0ge31cbiAgICAgIGZvciAobGV0IGk9MCwgbj14cy5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXVxuICAgICAgICBvW3hbaWRdXSA9IHhcbiAgICAgIH1cbiAgICAgIHJldHVybiBvXG4gICAgfVxuICB9LFxuICBvID0+IGlzT2JqZWN0KG8pID8gUi52YWx1ZXMobykgOiB1bmRlZmluZWQpXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VcbiJdfQ==
{
"name": "partial.lenses",
"version": "3.9.2",
"version": "3.9.3",
"description": "Partial lenses",
"main": "lib/partial.lenses.js",
"scripts": {
"bench": "NODE_ENV=production node bench/bench.js",
"dist": "babel src --source-maps inline --out-dir lib",

@@ -8,0 +9,0 @@ "lint": "eslint src test",

@@ -114,14 +114,24 @@ import * as R from "ramda"

const lift = l => {
if (isProp(l)) return liftProp(l)
if (isIndex(l)) return liftIndex(l)
return lifted(l)
switch (typeof l) {
case "string": return liftProp(l)
case "number": return liftIndex(l)
default: return lifted(l)
}
}
export const compose = (...ls) =>
ls.length === 0 ? identity :
ls.length === 1 ? ls[0] :
(toCat => R.compose(...ls.map(l => lift(l)(toCat))))
export function compose() {
switch (arguments.length) {
case 0: return identity
case 1: return arguments[0]
default: return toCat => x => {
let i = arguments.length
let r = lift(arguments[--i])(toCat)(x)
do {
r = lift(arguments[--i])(toCat)(r)
} while (0 < i)
return r
}
}
}
export const remove = curry2((l, s) => setI(lift(l), undefined, s))
export const removeAll = curry2((lens, data) => {

@@ -134,13 +144,32 @@ warn("`removeAll` is deprecated and will be removed in next major version --- use a different approach.")

const setI = (l, x, s) => l(Ident)(() => Ident(x))(s).value
const getI = (l, s) => l(Const)(Const)(s).value
const modifyI = (l, x2x, s) => l(Ident)(y => Ident(x2x(y)))(s).value
const lensI = (getter, setter) => _constructor => inner => target =>
const setI = (l, x, s) => {
switch (typeof l) {
case "string": return setProp(l, x, s)
case "number": return setIndex(l, x, s)
default: return lifted(l)(Ident)(() => Ident(x))(s).value
}
}
const getI = (l, s) => {
switch (typeof l) {
case "string": return getProp(l, s)
case "number": return getIndex(l, s)
default: return lifted(l)(Const)(Const)(s).value
}
}
const modifyI = (l, x2x, s) => {
switch (typeof l) {
case "string": return setProp(l, x2x(getProp(l, s)), s)
case "number": return setIndex(l, x2x(getIndex(l, s)), s)
default: return lifted(l)(Ident)(y => Ident(x2x(y)))(s).value
}
}
const lensI = (getter, setter) => _c => inner => target =>
inner(getter(target)).map(focus => setter(focus, target))
const collectI = (l, s) => l(Const)(Single)(s).value
export const remove = curry2((l, s) => setI(l, undefined, s))
export const lens = curry2(lensI)
export const modify = curry3((l, x2y, s) => modifyI(lift(l), x2y, s))
export const set = curry3((l, x, s) => setI(lift(l), x, s))
export const get = curry2((l, s) => getI(lift(l), s))
export const modify = curry3(modifyI)
export const set = curry3(setI)
export const get = curry2(getI)
export const collect = curry2((l, s) =>

@@ -161,6 +190,6 @@ warn("`collect` is experimental and might be removed, renamed or changed semantically before next major release") ||

export const orElse =
curry2((d, l) => choose(x => getI(lift(l), x) !== undefined ? l : d))
curry2((d, l) => choose(x => getI(l, x) !== undefined ? l : d))
export const choice = (...ls) => choose(x => {
const i = ls.findIndex(l => getI(lift(l), x) !== undefined)
const i = ls.findIndex(l => getI(l, x) !== undefined)
return 0 <= i ? ls[i] : nothing

@@ -170,13 +199,14 @@ })

const replacer = (inn, out) => x => R.equals(x, inn) ? out : x
const normalizer = fn => lensI(fn, fn)
const normalizer = fn => _c => inner => x => inner(fn(x)).map(fn)
export const replace = curry2((inn, out) =>
lensI(replacer(inn, out), replacer(out, inn)))
export const replace = curry2((inn, out) => _c => inner => x =>
inner(replacer(inn, out)(x)).map(replacer(out, inn)))
export const defaults = replace(undefined)
export const defaults = out => _c => inner => x =>
inner(x === undefined ? out : x).map(replacer(out, undefined))
export const required = inn => replace(inn, undefined)
export const define = v => normalizer(replacer(undefined, v))
export const define = v => normalizer(x => x === undefined ? v : x)
export const valueOr = v =>
lensI(x => x === undefined || x === null ? v : x, id)
export const valueOr = v => _c => inner => x =>
inner(x === undefined || x === null ? v : x)

@@ -189,6 +219,9 @@ export const normalize = transform => normalizer(toPartial(transform))

const liftProp = k => _c => inner => o => inner(isObject(o) ? o[k] : undefined).map(v => {
const getProp = (k, o) => isObject(o) ? o[k] : undefined
const setProp = (k, v, o) => {
const oOut = isObject(o) ? o : empty
return v === undefined ? deleteKey(k, oOut) : setKey(k, v, oOut)
})
}
const liftProp = k => _c => inner => o =>
inner(getProp(k, o)).map(v => setProp(k, v, o))

@@ -213,3 +246,4 @@ export const find = predicate => choose(xs => {

const liftIndex = i => _c => inner => xs => inner(isArray(xs) ? xs[i] : undefined).map(x => {
const getIndex = (i, xs) => isArray(xs) ? xs[i] : undefined
const setIndex = (i, x, xs) => {
if (x === undefined) {

@@ -232,3 +266,5 @@ if (!isArray(xs))

}
})
}
const liftIndex = i => _c => inner => xs =>
inner(getIndex(i, xs)).map(x => setIndex(i, x, xs))

@@ -278,3 +314,3 @@ export const append = lensI(snd, (x, xs) =>

for (const k in template) {
const v = getI(lift(template[k]), c)
const v = getI(template[k], c)
if (v !== undefined) {

@@ -291,7 +327,7 @@ if (r === undefined)

for (const k in template)
c = setI(lift(template[k]), o[k], c)
c = setI(template[k], o[k], c)
return c
})
export const identity = lensI(id, id)
export const identity = _c => inner => inner

@@ -315,3 +351,3 @@ export const props = (...ks) => pick(R.zipObj(ks, ks))

export const fromRamda = l => _constructor => l
export const fromRamda = l => _c => l
const fantasy = () => {throw new Error("Sorry, `toRamda` is only fantasy!")}

@@ -318,0 +354,0 @@ export const toRamda = l => lift(l)(fantasy)

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