@datagrok-libraries/statistics 1.1.4 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "statistics",
7
- "version": "1.1.4",
7
+ "version": "1.1.5",
8
8
  "description": "",
9
9
  "dependencies": {
10
10
  "datagrok-api": "1.12.1",
@@ -1 +1 @@
1
- {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAWnD,oBAAY,SAAS,GAAG;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IACnC,gBAAgB,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IAEtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,4GAA4G;AAC5G,eAAO,MAAM,mBAAmB,EAAE,QAAQ,EAQzC,CAAC;AAQF,oBAAY,aAAa;IACvB,QAAQ,IAAA;IACR,YAAY,IAAA;CACb;AAGD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAM5C,oBAAY,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AA4CnD,eAAO,MAAM,YAAY,EAAE;IAAC,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAG/C,CAAC;AAGF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,aAAa,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAGD;;KAEK;AACL,wBAAgB,GAAG,CAAC,IAAI,EAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAC/B,MAAM,EAAE;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAC,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAC,EAAE,EACzD,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAC3D,UAAU,EAAE,aAAa,EACzB,eAAe,GAAE,MAAa,EAC9B,UAAU,GAAE,OAAc,GAAG,SAAS,CAuGzD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3D"}
1
+ {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAWnD,oBAAY,SAAS,GAAG;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IACnC,gBAAgB,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IAEtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,CAAC,EAAC,MAAM,KAAI,MAAM,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,4GAA4G;AAC5G,eAAO,MAAM,mBAAmB,EAAE,QAAQ,EAQzC,CAAC;AAQF,oBAAY,aAAa;IACvB,QAAQ,IAAA;IACR,YAAY,IAAA;CACb;AAGD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAM5C,oBAAY,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AA4CnD,eAAO,MAAM,YAAY,EAAE;IAAC,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAG/C,CAAC;AAGF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,aAAa,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAGD;;KAEK;AACL,wBAAgB,GAAG,CAAC,IAAI,EAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAC/B,MAAM,EAAE;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAC,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAC,EAAE,EACzD,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAC3D,UAAU,EAAE,aAAa,EACzB,eAAe,GAAE,MAAa,EAC9B,UAAU,GAAE,OAAc,GAAG,SAAS,CA2HzD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3D"}
@@ -68,6 +68,8 @@ export function fit(data, params, curveFunction, errorModel, confidenceLevel = 0
68
68
  break;
69
69
  }
70
70
  let iterations = 0;
71
+ let fixed = [];
72
+ let overLimits = true;
71
73
  let optimizable = {
72
74
  getValue: (parameters) => {
73
75
  return of(curveFunction, data, parameters).value;
@@ -76,12 +78,29 @@ export function fit(data, params, curveFunction, errorModel, confidenceLevel = 0
76
78
  const length = Object.keys(parameters).length;
77
79
  iterations++;
78
80
  for (let i = 0; i < parameters.length; i++)
79
- gradient[i] = getObjectiveDerivative(of, curveFunction, data, parameters, i);
81
+ gradient[i] = fixed.includes(i) ? 0 : getObjectiveDerivative(of, curveFunction, data, parameters, i);
80
82
  return gradient;
81
83
  }
82
84
  };
83
- limitedMemoryBFGS(optimizable, paramValues);
84
- limitedMemoryBFGS(optimizable, paramValues);
85
+ while (overLimits) {
86
+ limitedMemoryBFGS(optimizable, paramValues);
87
+ limitedMemoryBFGS(optimizable, paramValues);
88
+ overLimits = false;
89
+ for (let i = 0; i < paramValues.length; i++) {
90
+ if (params[i].max !== undefined && paramValues[i] > params[i].max) {
91
+ overLimits = true;
92
+ fixed.push(i);
93
+ paramValues[i] = params[i].max;
94
+ break;
95
+ }
96
+ if (params[i].min !== undefined && paramValues[i] < params[i].min) {
97
+ overLimits = true;
98
+ fixed.push(i);
99
+ paramValues[i] = params[i].min;
100
+ break;
101
+ }
102
+ }
103
+ }
85
104
  let fittedCurve = (x) => {
86
105
  return curveFunction(paramValues, x);
87
106
  };
@@ -241,4 +260,4 @@ function objectiveNormalProportional(targetFunc, data, params) {
241
260
  likelihood += residuesSquares[i] / sigmaSq + Math.log(2 * pi * sigmaSq);
242
261
  return { value: -likelihood, const: sigma, mult: 0 };
243
262
  }
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ25ELHNCQUFzQjtBQUN0QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBNkI1Qyw0R0FBNEc7QUFDNUcsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWU7SUFDN0MsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUMxRCxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3JELFFBQVEsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUM1RCxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3ZELFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDckQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxF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QUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2xpbWl0ZWRNZW1vcnlCRkdTfSBmcm9tIFwiLi4vLi4vbGJmZ3MvbGJmZ3NcIlxuLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcImRhdGFncm9rLWFwaS9zcmMvZW50aXRpZXNcIjtcbmltcG9ydCB7VFlQRX0gZnJvbSBcImRhdGFncm9rLWFwaS9zcmMvY29uc3RcIjtcblxuXG50eXBlIExpa2VsaWhvb2QgPSB7XG4gIHZhbHVlOiBudW1iZXIsXG4gIGNvbnN0OiBudW1iZXIsXG4gIG11bHQ6IG51bWJlclxufTtcblxuXG5leHBvcnQgdHlwZSBGaXRSZXN1bHQgPSB7XG4gIHBhcmFtZXRlcnM6IG51bWJlcltdLFxuICBmaXR0ZWRDdXJ2ZTogKHg6bnVtYmVyKT0+IG51bWJlcixcbiAgY29uZmlkZW5jZVRvcDogKHg6bnVtYmVyKT0+IG51bWJlcixcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6bnVtYmVyKT0+IG51bWJlcixcblxuICByU3F1YXJlZD86IG51bWJlcixcbiAgYXVjPzogbnVtYmVyLFxuICBpbnZlcnRlZD86ICh5Om51bWJlcik9PiBudW1iZXIsXG4gIGludmVydGVkVG9wPzogKHk6bnVtYmVyKT0+IG51bWJlcixcbiAgaW52ZXJ0ZWRCb3R0b20/OiAoeTpudW1iZXIpPT4gbnVtYmVyLFxuICBpbnRlcmNlcHRYOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMl1cbiAgaW50ZXJjZXB0WTogbnVtYmVyLCAvLyBmaXR0ZWRDdXJ2ZVtwYXJhbWV0ZXJzWzJdXVxuICBzbG9wZTogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzFdXG4gIHRvcDogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzBdXG4gIGJvdHRvbTogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzNdXG59O1xuXG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIEZpdFJlc3VsdH0uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFJlc3VsdFByb3BlcnRpZXM6IFByb3BlcnR5W10gPSBbXG4gIFByb3BlcnR5LmpzKCdyU3F1YXJlZCcsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdhdWMnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnaW50ZXJjZXB0WScsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdpbnRlcmNlcHRYJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ3Nsb3BlJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ3RvcCcsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdib3R0b20nLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuXTtcblxuXG50eXBlIE9iamVjdGl2ZUZ1bmN0aW9uID0gKHRhcmdldEZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sXG4gIHBhcmFtczogbnVtYmVyW10pID0+IExpa2VsaWhvb2Q7XG5cblxuZXhwb3J0IGVudW0gRml0RXJyb3JNb2RlbCB7XG4gIENvbnN0YW50LFxuICBQcm9wb3J0aW9uYWxcbn1cblxuXG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX1NJR01PSUQgPSAnU2lnbW9pZCc7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xJTkVBUiA9ICdMaW5lYXInO1xuXG4vLyBleHBvcnQgY29uc3QgRklUX1NUQVRTX1JTUVVBUkVEID0gJ3JTcXVhcmVkJztcbi8vIGV4cG9ydCBjb25zdCBGSVRfU1RBVFNfQVVDID0gJ2F1Yyc7XG5cblxuZXhwb3J0IHR5cGUgRml0RnVuY3Rpb25UeXBlID0gJ1NpZ21vaWQnIHwgJ0xpbmVhcic7XG5cbmFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuXG5jbGFzcyBMaW5lYXJGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7IH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93ICdOb3QgaW1wbGVtZW50ZWQnO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIHRocm93ICdOb3QgaW1wbGVtZW50ZWQnO1xuICB9XG59XG5cblxuY2xhc3MgU2lnbW9pZEZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7IH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdCb3R0b20nLCAnU2xvcGUnLCAnSUM1MCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93ICdOb3QgaW1wbGVtZW50ZWQnO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIHRocm93ICdOb3QgaW1wbGVtZW50ZWQnO1xuICB9XG59XG5cblxuZXhwb3J0IGNvbnN0IGZpdEZ1bmN0aW9uczoge1tpbmRleDogc3RyaW5nXTogYW55fSA9IHtcbiAgRklUX0ZVTkNUSU9OX0xJTkVBUjogbmV3IExpbmVhckZ1bmN0aW9uKCksXG4gIEZJVF9GVU5DVElPTl9TSUdNT0lEOiBuZXcgU2lnbW9pZEZ1bmN0aW9uKCksXG59O1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdE9wdGlvbnMge1xuICBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsO1xuICBjb25maWRlbmNlTGV2ZWw6IG51bWJlcjtcbiAgc3RhdGlzdGljczogYm9vbGVhbjtcbn1cblxuXG4vKipcbiAqIHN0YXRpc3RpY3MgLSB3aGV0aGVyIG9yIG5vdCB0byBjYWxjdWxhdGUgZml0IHN0YXRpc3RpY3MgKHBvdGVudGlhbGx5IGNvbXB1dGF0aW9uYWxseSBpbnRlbnNpdmUpXG4gKiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpdChkYXRhOnt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtwYXJhbXZhbHVlOiBudW1iZXIsIG1pbj86bnVtYmVyLCBtYXg/OiBudW1iZXJ9W10sXG4gICAgICAgICAgICAgICAgICAgIGN1cnZlRnVuY3Rpb246IChwYXJhbVZhbHVlczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0UmVzdWx0IHtcblxuICBsZXQgcGFyYW1WYWx1ZXMgPSBwYXJhbXMubWFwKHAgPT4gcC5wYXJhbXZhbHVlKTtcbiAgbGV0IG9mOiBPYmplY3RpdmVGdW5jdGlvbjtcbiAgc3dpdGNoKGVycm9yTW9kZWwpIHtcbiAgICBjYXNlIEZpdEVycm9yTW9kZWwuQ29uc3RhbnQ6XG4gICAgICBvZiA9IG9iamVjdGl2ZU5vcm1hbENvbnN0YW50O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBGaXRFcnJvck1vZGVsLlByb3BvcnRpb25hbDpcbiAgICAgIG9mID0gb2JqZWN0aXZlTm9ybWFsUHJvcG9ydGlvbmFsO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG9mID0gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGxldCBpdGVyYXRpb25zID0gMDtcblxuICBsZXQgb3B0aW1pemFibGUgPSB7XG4gICAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4ge1xuICAgICAgcmV0dXJuIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtZXRlcnMpLnZhbHVlO1xuICAgIH0sXG4gICAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiB7XG4gICAgICBjb25zdCBsZW5ndGggPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5sZW5ndGg7XG4gICAgICBpdGVyYXRpb25zKys7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKylcbiAgICAgICAgZ3JhZGllbnRbaV0gPSBnZXRPYmplY3RpdmVEZXJpdmF0aXZlKG9mLCBjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbWV0ZXJzLCBpKTtcblxuICAgICAgcmV0dXJuIGdyYWRpZW50O1xuICAgIH1cbiAgfTtcblxuICBsaW1pdGVkTWVtb3J5QkZHUyhvcHRpbWl6YWJsZSwgcGFyYW1WYWx1ZXMpO1xuICBsaW1pdGVkTWVtb3J5QkZHUyhvcHRpbWl6YWJsZSwgcGFyYW1WYWx1ZXMpO1xuXG4gIGxldCBmaXR0ZWRDdXJ2ZSA9ICh4OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gIH1cblxuICBsZXQgZXJyb3IgPSBlcnJvck1vZGVsID09IEZpdEVycm9yTW9kZWwuUHJvcG9ydGlvbmFsID9cbiAgb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1WYWx1ZXMpLm11bHQgOlxuICBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbVZhbHVlcykuY29uc3Q7XG5cbiAgbGV0IHN0dWRlbnRRID0galN0YXQuc3R1ZGVudHQuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgZGF0YS54Lmxlbmd0aCAtIHBhcmFtVmFsdWVzLmxlbmd0aCk7XG5cbiAgbGV0IHRvcCA9ICh4OiBudW1iZXIpID0+e1xuICAgIGxldCB2YWx1ZSA9IGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICAgIGlmIChlcnJvck1vZGVsID09IEZpdEVycm9yTW9kZWwuQ29uc3RhbnQpXG4gICAgICByZXR1cm4gIHZhbHVlICsgc3R1ZGVudFEqZXJyb3IvTWF0aC5zcXJ0KGRhdGEueC5sZW5ndGgpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiAgdmFsdWUgKyBzdHVkZW50USooTWF0aC5hYnModmFsdWUpKmVycm9yL01hdGguc3FydChkYXRhLngubGVuZ3RoKSk7XG4gIH1cblxuICBsZXQgYm90dG9tID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICAgIGlmIChlcnJvck1vZGVsID09IEZpdEVycm9yTW9kZWwuQ29uc3RhbnQpXG4gICAgICByZXR1cm4gIHZhbHVlIC0gc3R1ZGVudFEqZXJyb3IvTWF0aC5zcXJ0KGRhdGEueC5sZW5ndGgpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiAgdmFsdWUgLSBzdHVkZW50USooTWF0aC5hYnModmFsdWUpKmVycm9yL01hdGguc3FydChkYXRhLngubGVuZ3RoKSk7XG4gIH1cblxuICBsZXQgaW52OiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7cmV0dXJuIDA7fTtcbiAgbGV0IGludlRvcDogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge3JldHVybiAwO307XG4gIGxldCBpbnZCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtyZXR1cm4gMDt9O1xuXG4gIGlmIChzdGF0aXN0aWNzKSB7XG4gICAgaW52ID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgLy9zaG91bGQgY2hlY2sgaWYgbW9yZSB0aGFuIGJvdHRvbSBhbmQgbGVzcyB0aGFuIHRvcFxuICAgICAgcmV0dXJuIHBhcmFtVmFsdWVzWzJdL01hdGgucG93KChwYXJhbVZhbHVlc1swXSAtIHkpLyh5IC0gcGFyYW1WYWx1ZXNbM10pLCAxL3BhcmFtVmFsdWVzWzFdKTtcbiAgICB9O1xuXG4gICAgbGV0IGVycm9yID0gZ2V0SW52RXJyb3IoaW52LCBkYXRhKTtcblxuICAgIGludlRvcCA9ICh5OiBudW1iZXIpID0+e1xuICAgICAgbGV0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuICB2YWx1ZSArIHN0dWRlbnRRKmVycm9yL01hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpbnZCb3R0b20gPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gIHZhbHVlIC0gc3R1ZGVudFEqZXJyb3IvTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBmaXRSZXM6IEZpdFJlc3VsdCA9IHtcbiAgICBwYXJhbWV0ZXJzOiBwYXJhbVZhbHVlcyxcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgY29uZmlkZW5jZVRvcDogdG9wLFxuICAgIGNvbmZpZGVuY2VCb3R0b206IGJvdHRvbSxcbiAgICByU3F1YXJlZDogc3RhdGlzdGljcyA/IGdldERldENvZWZmKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBhdWM6IHN0YXRpc3RpY3MgPyBnZXRBdWMoZml0dGVkQ3VydmUsIGRhdGEpIDogdW5kZWZpbmVkLFxuICAgIGludmVydGVkOiBzdGF0aXN0aWNzID8gaW52IDogdW5kZWZpbmVkLFxuICAgIGludmVydGVkVG9wOiBzdGF0aXN0aWNzID8gaW52VG9wIDogdW5kZWZpbmVkLFxuICAgIGludmVydGVkQm90dG9tOiBzdGF0aXN0aWNzID8gaW52Qm90dG9tIDogdW5kZWZpbmVkLFxuICAgIGludGVyY2VwdFggOiBwYXJhbVZhbHVlc1syXSxcbiAgICBpbnRlcmNlcHRZIDogZml0dGVkQ3VydmUocGFyYW1WYWx1ZXNbMl0pLFxuICAgIHNsb3BlOiBwYXJhbVZhbHVlc1sxXSxcbiAgICB0b3A6IHBhcmFtVmFsdWVzWzBdLFxuICAgIGJvdHRvbTogcGFyYW1WYWx1ZXNbM11cbiAgfTtcblxuICByZXR1cm4gZml0UmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbW9pZChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBBID0gcGFyYW1zWzBdO1xuICBjb25zdCBCID0gcGFyYW1zWzFdO1xuICBjb25zdCBDID0gcGFyYW1zWzJdO1xuICBjb25zdCBEID0gcGFyYW1zWzNdO1xuICBjb25zdCByZXMgPSBEICsgKEEgLSBEKS8oMSArIE1hdGgucG93KDEwLCAoeCAtIEMpKkIpKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0T2JqZWN0aXZlRGVyaXZhdGl2ZShvZjogT2JqZWN0aXZlRnVuY3Rpb24sIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSwgc2VsZWN0ZWRQYXJhbTogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHN0ZXAgPSBwYXJhbXNbc2VsZWN0ZWRQYXJhbV0qMC4wMDAxO1xuICBzdGVwID0gc3RlcCA9PSAwID8gMC4wMDEgOiBzdGVwO1xuICBsZXQgcGFyYW1zVG9wOiBudW1iZXJbXSA9IFtdO1xuICBsZXQgcGFyYW1zQm90dG9tOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgIGlmKGkgPT0gc2VsZWN0ZWRQYXJhbSkge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldICsgc3RlcCk7XG4gICAgICBwYXJhbXNCb3R0b20ucHVzaChwYXJhbXNbaV0gLSBzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldKTtcbiAgICAgIHBhcmFtc0JvdHRvbS5wdXNoKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGRydlRvcCA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc1RvcCkudmFsdWU7XG4gIGNvbnN0IGRydkJvdHRvbSA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc0JvdHRvbSkudmFsdWU7XG5cbiAgcmV0dXJuIChkcnZUb3AgLSBkcnZCb3R0b20pLygyKnN0ZXApO1xufVxuXG5mdW5jdGlvbiBnZXRBdWMoZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICAgICAgICAgICAgICBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGxldCBhdWMgPSAwO1xuXG4gIGxldCBtaW4gPSBNYXRoLm1pbiguLi5kYXRhLngpO1xuICBsZXQgbWF4ID0gTWF0aC5tYXgoLi4uZGF0YS54KTtcbiAgY29uc3QgaW50ZWdyYXRpb25TdGVwID0gKG1heCAtIG1pbikvMTAwMDtcblxuICBmb3IobGV0IHggPSBtaW47IHggPCBtYXg7IHgrPSBpbnRlZ3JhdGlvblN0ZXApXG4gICAgYXVjICs9IGludGVncmF0aW9uU3RlcCpmaXR0ZWRDdXJ2ZSh4KTtcblxuICByZXR1cm4gYXVjO1xufVxuXG5mdW5jdGlvbiBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgc3NSZXMgPSAwO1xuICBsZXQgc3NUb3QgPSAwO1xuXG4gIGNvbnN0IHlNZWFuID0galN0YXQubWVhbihkYXRhLnkpO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBzc1JlcyArPSBNYXRoLnBvdyhkYXRhLnlbaV0gLSBmaXR0ZWRDdXJ2ZShkYXRhLnhbaV0pLCAyKTtcbiAgICBzc1RvdCArPSBNYXRoLnBvdyhkYXRhLnlbaV0gLSB5TWVhbiwgMik7XG4gIH1cblxuICByZXR1cm4gMSAtIHNzUmVzL3NzVG90O1xufVxuXG5mdW5jdGlvbiBnZXRJbnZFcnJvciAoXG4gIHRhcmdldEZ1bmM6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX1cbik6IG51bWJlciB7XG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuXG4gIGxldCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IobGV0IGkgPSAwOyBpIDwgZGF0YS55Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2JzID0gZGF0YS54W2ldO1xuICAgIGNvbnN0IHByZWQgPSB0YXJnZXRGdW5jKGRhdGEueVtpXSk7XG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIHJldHVybiBzaWdtYTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQgKFxuICB0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LFxuICBwYXJhbXM6IG51bWJlcltdXG4pOiBMaWtlbGlob29kIHtcbiAgLy9hc3N1cmUgb2JzZXJ2ZWQgYW5kIGFyZ3Mgc2FtZSBsZW5ndGhcbiAgY29uc3QgcGkgPSBNYXRoLlBJO1xuICBsZXQgc2lnbWEgPSAwO1xuICBsZXQgc2lnbWFTcSA9IDA7XG4gIGxldCBsaWtlbGlob29kID0gMDtcblxuICBsZXQgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueVtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhwYXJhbXMsIGRhdGEueFtpXSk7XG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgbGlrZWxpaG9vZCArPSByZXNpZHVlc1NxdWFyZXNbaV0vc2lnbWFTcSArIE1hdGgubG9nKDIgKiBwaSAqIHNpZ21hU3EpO1xuXG4gIHJldHVybiB7dmFsdWU6IC1saWtlbGlob29kLCBjb25zdDogc2lnbWEsIG11bHQ6IDB9O1xufVxuXG5mdW5jdGlvbiBvYmplY3RpdmVOb3JtYWxQcm9wb3J0aW9uYWwgKFxudGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sXG5wYXJhbXM6IG51bWJlcltdXG4pOiBMaWtlbGlob29kIHtcbiAgLy9hc3N1cmUgb2JzZXJ2ZWQgYW5kIGFyZ3Mgc2FtZSBsZW5ndGhcbiAgY29uc3QgcGkgPSBNYXRoLlBJO1xuICBsZXQgc2lnbWEgPSAwO1xuICBsZXQgc2lnbWFTcSA9IDA7XG4gIGxldCBsaWtlbGlob29kID0gMDtcblxuICBsZXQgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueVtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhwYXJhbXMsIGRhdGEueFtpXSlcbiAgICByZXNpZHVlc1NxdWFyZXNbaV0gPSBNYXRoLnBvdyhvYnMgLSBwcmVkLCAyKTtcbiAgfVxuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG4gIHNpZ21hU3EgLz0gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDtcbiAgc2lnbWEgPSBNYXRoLnNxcnQoc2lnbWFTcSk7XG5cbiAgZm9yKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXS9zaWdtYVNxICsgTWF0aC5sb2coMipwaSpzaWdtYVNxKTtcblxuICByZXR1cm4ge3ZhbHVlOiAtbGlrZWxpaG9vZCwgY29uc3Q6IHNpZ21hLCBtdWx0OiAwfTtcbn1cbiJdfQ==
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ25ELHNCQUFzQjtBQUN0QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBNkI1Qyw0R0FBNEc7QUFDNUcsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWU7SUFDN0MsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUMxRCxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3JELFFBQVEsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUM1RCxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3ZELFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDckQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxF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ZnJvbSBcIi4uLy4uL2xiZmdzL2xiZmdzXCJcbi8vQHRzLWlnbm9yZTogbm8gdHlwZXNcbmltcG9ydCAqIGFzIGpTdGF0IGZyb20gJ2pzdGF0JztcbmltcG9ydCB7UHJvcGVydHl9IGZyb20gXCJkYXRhZ3Jvay1hcGkvc3JjL2VudGl0aWVzXCI7XG5pbXBvcnQge1RZUEV9IGZyb20gXCJkYXRhZ3Jvay1hcGkvc3JjL2NvbnN0XCI7XG5cblxudHlwZSBMaWtlbGlob29kID0ge1xuICB2YWx1ZTogbnVtYmVyLFxuICBjb25zdDogbnVtYmVyLFxuICBtdWx0OiBudW1iZXJcbn07XG5cblxuZXhwb3J0IHR5cGUgRml0UmVzdWx0ID0ge1xuICBwYXJhbWV0ZXJzOiBudW1iZXJbXSxcbiAgZml0dGVkQ3VydmU6ICh4Om51bWJlcik9PiBudW1iZXIsXG4gIGNvbmZpZGVuY2VUb3A6ICh4Om51bWJlcik9PiBudW1iZXIsXG4gIGNvbmZpZGVuY2VCb3R0b206ICh4Om51bWJlcik9PiBudW1iZXIsXG5cbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW52ZXJ0ZWQ/OiAoeTpudW1iZXIpPT4gbnVtYmVyLFxuICBpbnZlcnRlZFRvcD86ICh5Om51bWJlcik9PiBudW1iZXIsXG4gIGludmVydGVkQm90dG9tPzogKHk6bnVtYmVyKT0+IG51bWJlcixcbiAgaW50ZXJjZXB0WDogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzJdXG4gIGludGVyY2VwdFk6IG51bWJlciwgLy8gZml0dGVkQ3VydmVbcGFyYW1ldGVyc1syXV1cbiAgc2xvcGU6IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A6IG51bWJlciwgLy8gcGFyYW1ldGVyc1swXVxuICBib3R0b206IG51bWJlciwgLy8gcGFyYW1ldGVyc1szXVxufTtcblxuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBGaXRSZXN1bHR9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBmaXRSZXN1bHRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW1xuICBQcm9wZXJ0eS5qcygnclNxdWFyZWQnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnYXVjJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2ludGVyY2VwdFknLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnaW50ZXJjZXB0WCcsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdzbG9wZScsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCd0b3AnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnYm90dG9tJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbl07XG5cblxudHlwZSBPYmplY3RpdmVGdW5jdGlvbiA9ICh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LFxuICBwYXJhbXM6IG51bWJlcltdKSA9PiBMaWtlbGlob29kO1xuXG5cbmV4cG9ydCBlbnVtIEZpdEVycm9yTW9kZWwge1xuICBDb25zdGFudCxcbiAgUHJvcG9ydGlvbmFsXG59XG5cblxuZXhwb3J0IGNvbnN0IEZJVF9GVU5DVElPTl9TSUdNT0lEID0gJ1NpZ21vaWQnO1xuZXhwb3J0IGNvbnN0IEZJVF9GVU5DVElPTl9MSU5FQVIgPSAnTGluZWFyJztcblxuLy8gZXhwb3J0IGNvbnN0IEZJVF9TVEFUU19SU1FVQVJFRCA9ICdyU3F1YXJlZCc7XG4vLyBleHBvcnQgY29uc3QgRklUX1NUQVRTX0FVQyA9ICdhdWMnO1xuXG5cbmV4cG9ydCB0eXBlIEZpdEZ1bmN0aW9uVHlwZSA9ICdTaWdtb2lkJyB8ICdMaW5lYXInO1xuXG5hYnN0cmFjdCBjbGFzcyBGaXRGdW5jdGlvbiB7XG4gIGFic3RyYWN0IGdldCBuYW1lKCk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCB5KHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcik6IG51bWJlcjtcbiAgYWJzdHJhY3QgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogbnVtYmVyW107XG59XG5cblxuY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7IHJldHVybiBGSVRfRlVOQ1RJT05fTElORUFSOyB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aHJvdyAnTm90IGltcGxlbWVudGVkJztcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICB0aHJvdyAnTm90IGltcGxlbWVudGVkJztcbiAgfVxufVxuXG5cbmNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIEZJVF9GVU5DVElPTl9TSUdNT0lEOyB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydUb3AnLCAnQm90dG9tJywgJ1Nsb3BlJywgJ0lDNTAnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aHJvdyAnTm90IGltcGxlbWVudGVkJztcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICB0aHJvdyAnTm90IGltcGxlbWVudGVkJztcbiAgfVxufVxuXG5cbmV4cG9ydCBjb25zdCBmaXRGdW5jdGlvbnM6IHtbaW5kZXg6IHN0cmluZ106IGFueX0gPSB7XG4gIEZJVF9GVU5DVElPTl9MSU5FQVI6IG5ldyBMaW5lYXJGdW5jdGlvbigpLFxuICBGSVRfRlVOQ1RJT05fU0lHTU9JRDogbmV3IFNpZ21vaWRGdW5jdGlvbigpLFxufTtcblxuXG5leHBvcnQgaW50ZXJmYWNlIElGaXRPcHRpb25zIHtcbiAgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbDtcbiAgY29uZmlkZW5jZUxldmVsOiBudW1iZXI7XG4gIHN0YXRpc3RpY3M6IGJvb2xlYW47XG59XG5cblxuLyoqXG4gKiBzdGF0aXN0aWNzIC0gd2hldGhlciBvciBub3QgdG8gY2FsY3VsYXRlIGZpdCBzdGF0aXN0aWNzIChwb3RlbnRpYWxseSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlKVxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXQoZGF0YTp7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7cGFyYW12YWx1ZTogbnVtYmVyLCBtaW4/Om51bWJlciwgbWF4PzogbnVtYmVyfVtdLFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1WYWx1ZXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LFxuICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzOiBib29sZWFuID0gdHJ1ZSk6IEZpdFJlc3VsdCB7XG5cbiAgbGV0IHBhcmFtVmFsdWVzID0gcGFyYW1zLm1hcChwID0+IHAucGFyYW12YWx1ZSk7XG4gIGxldCBvZjogT2JqZWN0aXZlRnVuY3Rpb247XG4gIHN3aXRjaChlcnJvck1vZGVsKSB7XG4gICAgY2FzZSBGaXRFcnJvck1vZGVsLkNvbnN0YW50OlxuICAgICAgb2YgPSBvYmplY3RpdmVOb3JtYWxDb25zdGFudDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRml0RXJyb3JNb2RlbC5Qcm9wb3J0aW9uYWw6XG4gICAgICBvZiA9IG9iamVjdGl2ZU5vcm1hbFByb3BvcnRpb25hbDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBvZiA9IG9iamVjdGl2ZU5vcm1hbENvbnN0YW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gIGxldCBmaXhlZDogbnVtYmVyW10gPSBbXTtcbiAgbGV0IG92ZXJMaW1pdHMgPSB0cnVlO1xuXG4gIGxldCBvcHRpbWl6YWJsZSA9IHtcbiAgICBnZXRWYWx1ZTogKHBhcmFtZXRlcnM6IG51bWJlcltdKSA9PiB7XG4gICAgICByZXR1cm4gb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1ldGVycykudmFsdWU7XG4gICAgfSxcbiAgICBnZXRHcmFkaWVudDogKHBhcmFtZXRlcnM6IG51bWJlcltdLCBncmFkaWVudDogbnVtYmVyW10pID0+IHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLmxlbmd0aDtcbiAgICAgIGl0ZXJhdGlvbnMrKztcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBncmFkaWVudFtpXSA9IGZpeGVkLmluY2x1ZGVzKGkpID8gMCA6IGdldE9iamVjdGl2ZURlcml2YXRpdmUob2YsIGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtZXRlcnMsIGkpO1xuXG4gICAgICByZXR1cm4gZ3JhZGllbnQ7XG4gICAgfVxuICB9O1xuXG4gIHdoaWxlIChvdmVyTGltaXRzKSB7XG4gICAgbGltaXRlZE1lbW9yeUJGR1Mob3B0aW1pemFibGUsIHBhcmFtVmFsdWVzKTtcbiAgICBsaW1pdGVkTWVtb3J5QkZHUyhvcHRpbWl6YWJsZSwgcGFyYW1WYWx1ZXMpO1xuXG4gICAgb3ZlckxpbWl0cyA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKHBhcmFtc1tpXS5tYXggIT09IHVuZGVmaW5lZCAmJiBwYXJhbVZhbHVlc1tpXSA+IHBhcmFtc1tpXS5tYXghKSB7XG4gICAgICAgIG92ZXJMaW1pdHMgPSB0cnVlO1xuICAgICAgICBmaXhlZC5wdXNoKGkpO1xuICAgICAgICBwYXJhbVZhbHVlc1tpXSA9IHBhcmFtc1tpXS5tYXghO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmKHBhcmFtc1tpXS5taW4gIT09IHVuZGVmaW5lZCAmJiBwYXJhbVZhbHVlc1tpXSA8IHBhcmFtc1tpXS5taW4hKSB7XG4gICAgICAgIG92ZXJMaW1pdHMgPSB0cnVlO1xuICAgICAgICBmaXhlZC5wdXNoKGkpO1xuICAgICAgICBwYXJhbVZhbHVlc1tpXSA9IHBhcmFtc1tpXS5taW4hO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgZml0dGVkQ3VydmUgPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICB9XG5cbiAgbGV0IGVycm9yID0gZXJyb3JNb2RlbCA9PSBGaXRFcnJvck1vZGVsLlByb3BvcnRpb25hbCA/XG4gIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtVmFsdWVzKS5tdWx0IDpcbiAgb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1WYWx1ZXMpLmNvbnN0O1xuXG4gIGxldCBzdHVkZW50USA9IGpTdGF0LnN0dWRlbnR0LmludigxIC0gY29uZmlkZW5jZUxldmVsLzIsIGRhdGEueC5sZW5ndGggLSBwYXJhbVZhbHVlcy5sZW5ndGgpO1xuXG4gIGxldCB0b3AgPSAoeDogbnVtYmVyKSA9PntcbiAgICBsZXQgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICBpZiAoZXJyb3JNb2RlbCA9PSBGaXRFcnJvck1vZGVsLkNvbnN0YW50KVxuICAgICAgcmV0dXJuICB2YWx1ZSArIHN0dWRlbnRRKmVycm9yL01hdGguc3FydChkYXRhLngubGVuZ3RoKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gIHZhbHVlICsgc3R1ZGVudFEqKE1hdGguYWJzKHZhbHVlKSplcnJvci9NYXRoLnNxcnQoZGF0YS54Lmxlbmd0aCkpO1xuICB9XG5cbiAgbGV0IGJvdHRvbSA9ICh4OiBudW1iZXIpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICBpZiAoZXJyb3JNb2RlbCA9PSBGaXRFcnJvck1vZGVsLkNvbnN0YW50KVxuICAgICAgcmV0dXJuICB2YWx1ZSAtIHN0dWRlbnRRKmVycm9yL01hdGguc3FydChkYXRhLngubGVuZ3RoKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gIHZhbHVlIC0gc3R1ZGVudFEqKE1hdGguYWJzKHZhbHVlKSplcnJvci9NYXRoLnNxcnQoZGF0YS54Lmxlbmd0aCkpO1xuICB9XG5cbiAgbGV0IGludjogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge3JldHVybiAwO307XG4gIGxldCBpbnZUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtyZXR1cm4gMDt9O1xuICBsZXQgaW52Qm90dG9tOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7cmV0dXJuIDA7fTtcblxuICBpZiAoc3RhdGlzdGljcykge1xuICAgIGludiA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIC8vc2hvdWxkIGNoZWNrIGlmIG1vcmUgdGhhbiBib3R0b20gYW5kIGxlc3MgdGhhbiB0b3BcbiAgICAgIHJldHVybiBwYXJhbVZhbHVlc1syXS9NYXRoLnBvdygocGFyYW1WYWx1ZXNbMF0gLSB5KS8oeSAtIHBhcmFtVmFsdWVzWzNdKSwgMS9wYXJhbVZhbHVlc1sxXSk7XG4gICAgfTtcblxuICAgIGxldCBlcnJvciA9IGdldEludkVycm9yKGludiwgZGF0YSk7XG5cbiAgICBpbnZUb3AgPSAoeTogbnVtYmVyKSA9PntcbiAgICAgIGxldCB2YWx1ZSA9IGludih5KTtcbiAgICAgIHJldHVybiAgdmFsdWUgKyBzdHVkZW50USplcnJvci9NYXRoLnNxcnQoZGF0YS55Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgaW52Qm90dG9tID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuICB2YWx1ZSAtIHN0dWRlbnRRKmVycm9yL01hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBsZXQgZml0UmVzOiBGaXRSZXN1bHQgPSB7XG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gICAgZml0dGVkQ3VydmU6IGZpdHRlZEN1cnZlLFxuICAgIGNvbmZpZGVuY2VUb3A6IHRvcCxcbiAgICBjb25maWRlbmNlQm90dG9tOiBib3R0b20sXG4gICAgclNxdWFyZWQ6IHN0YXRpc3RpY3MgPyBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgYXVjOiBzdGF0aXN0aWNzID8gZ2V0QXVjKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBpbnZlcnRlZDogc3RhdGlzdGljcyA/IGludiA6IHVuZGVmaW5lZCxcbiAgICBpbnZlcnRlZFRvcDogc3RhdGlzdGljcyA/IGludlRvcCA6IHVuZGVmaW5lZCxcbiAgICBpbnZlcnRlZEJvdHRvbTogc3RhdGlzdGljcyA/IGludkJvdHRvbSA6IHVuZGVmaW5lZCxcbiAgICBpbnRlcmNlcHRYIDogcGFyYW1WYWx1ZXNbMl0sXG4gICAgaW50ZXJjZXB0WSA6IGZpdHRlZEN1cnZlKHBhcmFtVmFsdWVzWzJdKSxcbiAgICBzbG9wZTogcGFyYW1WYWx1ZXNbMV0sXG4gICAgdG9wOiBwYXJhbVZhbHVlc1swXSxcbiAgICBib3R0b206IHBhcmFtVmFsdWVzWzNdXG4gIH07XG5cbiAgcmV0dXJuIGZpdFJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ21vaWQocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgY29uc3QgQyA9IHBhcmFtc1syXTtcbiAgY29uc3QgRCA9IHBhcmFtc1szXTtcbiAgY29uc3QgcmVzID0gRCArIChBIC0gRCkvKDEgKyBNYXRoLnBvdygxMCwgKHggLSBDKSpCKSk7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdGl2ZURlcml2YXRpdmUob2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtczogbnVtYmVyW10sIHNlbGVjdGVkUGFyYW06IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBzdGVwID0gcGFyYW1zW3NlbGVjdGVkUGFyYW1dKjAuMDAwMTtcbiAgc3RlcCA9IHN0ZXAgPT0gMCA/IDAuMDAxIDogc3RlcDtcbiAgbGV0IHBhcmFtc1RvcDogbnVtYmVyW10gPSBbXTtcbiAgbGV0IHBhcmFtc0JvdHRvbTogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZihpID09IHNlbGVjdGVkUGFyYW0pIHtcbiAgICAgIHBhcmFtc1RvcC5wdXNoKHBhcmFtc1tpXSArIHN0ZXApO1xuICAgICAgcGFyYW1zQm90dG9tLnB1c2gocGFyYW1zW2ldIC0gc3RlcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtc1RvcC5wdXNoKHBhcmFtc1tpXSk7XG4gICAgICBwYXJhbXNCb3R0b20ucHVzaChwYXJhbXNbaV0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBkcnZUb3AgPSBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbXNUb3ApLnZhbHVlO1xuICBjb25zdCBkcnZCb3R0b20gPSBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbXNCb3R0b20pLnZhbHVlO1xuXG4gIHJldHVybiAoZHJ2VG9wIC0gZHJ2Qm90dG9tKS8oMipzdGVwKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXVjKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgICAgICAgICAgICAgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgYXVjID0gMDtcblxuICBsZXQgbWluID0gTWF0aC5taW4oLi4uZGF0YS54KTtcbiAgbGV0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueCk7XG4gIGNvbnN0IGludGVncmF0aW9uU3RlcCA9IChtYXggLSBtaW4pLzEwMDA7XG5cbiAgZm9yKGxldCB4ID0gbWluOyB4IDwgbWF4OyB4Kz0gaW50ZWdyYXRpb25TdGVwKVxuICAgIGF1YyArPSBpbnRlZ3JhdGlvblN0ZXAqZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZnVuY3Rpb24gZ2V0RGV0Q29lZmYoZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcblxuICBjb25zdCB5TWVhbiA9IGpTdGF0Lm1lYW4oZGF0YS55KTtcblxuICBmb3IobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3NSZXMgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZml0dGVkQ3VydmUoZGF0YS54W2ldKSwgMik7XG4gICAgc3NUb3QgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0geU1lYW4sIDIpO1xuICB9XG5cbiAgcmV0dXJuIDEgLSBzc1Jlcy9zc1RvdDtcbn1cblxuZnVuY3Rpb24gZ2V0SW52RXJyb3IgKFxuICB0YXJnZXRGdW5jOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119XG4pOiBudW1iZXIge1xuICBjb25zdCBwaSA9IE1hdGguUEk7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcblxuICBsZXQgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLnkubGVuZ3RoKTtcbiAgZm9yKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBzaWdtYVNxICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZU5vcm1hbENvbnN0YW50IChcbiAgdGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSxcbiAgcGFyYW1zOiBudW1iZXJbXVxuKTogTGlrZWxpaG9vZCB7XG4gIC8vYXNzdXJlIG9ic2VydmVkIGFuZCBhcmdzIHNhbWUgbGVuZ3RoXG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBsZXQgbGlrZWxpaG9vZCA9IDA7XG5cbiAgbGV0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnlbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMocGFyYW1zLCBkYXRhLnhbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBzaWdtYVNxICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICBmb3IobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIGxpa2VsaWhvb2QgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldL3NpZ21hU3EgKyBNYXRoLmxvZygyICogcGkgKiBzaWdtYVNxKTtcblxuICByZXR1cm4ge3ZhbHVlOiAtbGlrZWxpaG9vZCwgY29uc3Q6IHNpZ21hLCBtdWx0OiAwfTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0aXZlTm9ybWFsUHJvcG9ydGlvbmFsIChcbnRhcmdldEZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbmRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LFxucGFyYW1zOiBudW1iZXJbXVxuKTogTGlrZWxpaG9vZCB7XG4gIC8vYXNzdXJlIG9ic2VydmVkIGFuZCBhcmdzIHNhbWUgbGVuZ3RoXG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBsZXQgbGlrZWxpaG9vZCA9IDA7XG5cbiAgbGV0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnlbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMocGFyYW1zLCBkYXRhLnhbaV0pXG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgbGlrZWxpaG9vZCArPSByZXNpZHVlc1NxdWFyZXNbaV0vc2lnbWFTcSArIE1hdGgubG9nKDIqcGkqc2lnbWFTcSk7XG5cbiAgcmV0dXJuIHt2YWx1ZTogLWxpa2VsaWhvb2QsIGNvbnN0OiBzaWdtYSwgbXVsdDogMH07XG59XG4iXX0=