occam-verify-cli 1.0.858 → 1.0.859
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/lib/context/file/nominal.js +13 -1
- package/lib/context/liminal.js +4 -4
- package/lib/context/mnemic.js +4 -1
- package/lib/context/synoptic.js +16 -3
- package/lib/context.js +5 -1
- package/lib/element/assumption/metaLevel.js +48 -2
- package/lib/element/assumption.js +3 -27
- package/lib/element/judgement.js +27 -27
- package/lib/element/metavariable.js +7 -1
- package/lib/element/substitution/statement.js +3 -17
- package/lib/element/variable.js +3 -1
- package/lib/process/unify.js +2 -54
- package/lib/utilities/element.js +10 -9
- package/lib/utilities/string.js +11 -4
- package/package.json +1 -1
- package/src/context/file/nominal.js +18 -0
- package/src/context/liminal.js +3 -3
- package/src/context/mnemic.js +4 -0
- package/src/context/synoptic.js +22 -2
- package/src/context.js +6 -0
- package/src/element/assumption/metaLevel.js +86 -5
- package/src/element/assumption.js +2 -44
- package/src/element/judgement.js +32 -32
- package/src/element/metavariable.js +12 -0
- package/src/element/substitution/statement.js +2 -20
- package/src/element/variable.js +4 -0
- package/src/process/unify.js +0 -83
- package/src/utilities/element.js +16 -15
- package/src/utilities/string.js +9 -1
package/lib/context/mnemic.js
CHANGED
|
@@ -310,6 +310,9 @@ class MnemicContext extends _context.default {
|
|
|
310
310
|
addSubstitutions(substitutions) {
|
|
311
311
|
///
|
|
312
312
|
}
|
|
313
|
+
addDerivedSubstitutions(derivedSubstitutions) {
|
|
314
|
+
///
|
|
315
|
+
}
|
|
313
316
|
findVariableByVariableNode(variableNode) {
|
|
314
317
|
const variableIdentifier = variableNode.getVariableIdentifier(), declaredVariable = this.findDeclaredVariableByVariableIdentifier(variableIdentifier), variable = declaredVariable; ///
|
|
315
318
|
return variable;
|
|
@@ -508,4 +511,4 @@ class MnemicContext extends _context.default {
|
|
|
508
511
|
}
|
|
509
512
|
}
|
|
510
513
|
|
|
511
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMsXG4gICAgICAgICBjb21wcmVzc0ZyYW1lcyxcbiAgICAgICAgIGNvbXByZXNzRXF1YWxpdGllcyxcbiAgICAgICAgIGNvbXByZXNzSnVkZ2VtZW50cyxcbiAgICAgICAgIGNvbXByZXNzQXNzZXJ0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzU3RhdGVtZW50cyxcbiAgICAgICAgIGNvbXByZXNzUmVmZXJlbmNlcyxcbiAgICAgICAgIGNvbXByZXNzQXNzdW1wdGlvbnMsXG4gICAgICAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMsXG4gICAgICAgICBjb21wcmVzc1N1YnN0aXR1dGlvbnMsfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N5bm9wdGljXCI7XG5pbXBvcnQgeyB0ZXJtc0Zyb21KU09OLFxuICAgICAgICAgZnJhbWVzRnJvbUpTT04sXG4gICAgICAgICB0ZXJtc1RvVGVybXNKU09OLFxuICAgICAgICAgZnJhbWVzVG9GcmFtZXNKU09OLFxuICAgICAgICAganVkZ2VtZW50c0Zyb21KU09OLFxuICAgICAgICAgZXF1YWxpdGllc0Zyb21KU09OLFxuICAgICAgICAgc3RhdGVtZW50c0Zyb21KU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc0Zyb21KU09OLFxuICAgICAgICAgcmVmZXJlbmNlc0Zyb21KU09OLFxuICAgICAgICAgYXNzdW1wdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIG1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OLFxuICAgICAgICAgZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04sXG4gICAgICAgICBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OLFxuICAgICAgICAgcmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNbmVtaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllcztcbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIGNvbXByZXNzVGVybXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIGNvbXByZXNzRnJhbWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goanVkZ2VtZW50cywgdGhpcy5qdWRnZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzKTtcblxuICAgIGNvbXByZXNzSnVkZ2VtZW50cyhjb250ZXh0KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICBjb21wcmVzc1N0YXRlbWVudHMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3NlcnRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocmVmZXJlbmNlcywgdGhpcy5yZWZlcmVuY2VzKTtcblxuICAgIGNvbnRleHQuZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzKTtcblxuICAgIGNvbXByZXNzUmVmZXJlbmNlcyhjb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICBjb21wcmVzc0Fzc3VtcHRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29tcHJlc3NTdWJzdGl0dXRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtQiA9IHRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICAgICAgICB0ZXJtQUNvbXBhcmVzVG9UZXJtQiA9IHRlcm1BLmNvbXBhcmVUZXJtKHRlcm1CKTtcbiAgICAgIFxuICAgICAgICAgICAgaWYgKHRlcm1BQ29tcGFyZXNUb1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAodGVybUIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmcmFtZUEgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWVCID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZUIgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgICAgICAgICBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuICAgICAgXG4gICAgICAgICAgICBpZiAoZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGZyYW1lQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZnJhbWVzLnB1c2goZnJhbWUpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5QSA9IGVxdWFsaXR5LCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICAgIGVxdWFsaXR5QiA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5QiA9IGVxdWFsaXR5LCAvLy9cbiAgICAgICAgICAgICAgICAgIGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIgPSBlcXVhbGl0eUEuaXNFcXVhbFRvKGVxdWFsaXR5Qik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoZXF1YWxpdHlCICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudChqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAganVkZ2VtZW50QSA9IGp1ZGdlbWVudCwgLy8vXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0ganVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50QiA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnRCID0ganVkZ2VtZW50LCAvLy9cbiAgICAgICAgICAgICAgICAgIGp1ZGdlbWVudEFFcXVhbFRvRXF1YWxpdHlCID0ganVkZ2VtZW50QS5pc0VxdWFsVG8oanVkZ2VtZW50Qik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnRBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGp1ZGdlbWVudEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuanVkZ2VtZW50cy5wdXNoKGp1ZGdlbWVudCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudEEgPSBzdGF0ZW1lbnQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudEIgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIgPSBzdGF0ZW1lbnRBLmlzRXF1YWxUbyhzdGF0ZW1lbnRCKTtcbiAgICAgIFxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50Qikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKHN0YXRlbWVudEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3NlcnRpb24oYXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc2VydGlvbkEgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgIGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb25CID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbkIgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CID0gYXNzZXJ0aW9uQS5pc0VxdWFsVG8oYXNzZXJ0aW9uQik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChhc3NlcnRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydGlvbnMucHVzaChhc3NlcnRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VBID0gcmVmZXJlbmNlLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2VCID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUIgPSByZWZlcmVuY2UsIC8vL1xuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlQUVxdWFsVG9SZWZlcmVuY2VCID0gcmVmZXJlbmNlQS5pc0VxdWFsVG8ocmVmZXJlbmNlQik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChyZWZlcmVuY2VCICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25BID0gYXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uQiA9IGFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgICAgICAgICAgYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9uQS5pc0VxdWFsVG8oYXNzdW1wdGlvbkIpO1xuICAgICAgXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChhc3N1bXB0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlQSA9IG1ldGF2YXJpYWJsZSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvU3Vic3RpdHV0aW9uQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuICAgICAgXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9TdWJzdGl0dXRpb25CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhdmFyaWFibGVzLnB1c2gobWV0YXZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbkEuaXNFcXVhbFRvKHN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgdGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgdGhpcy5hZGRUZXJtKHRlcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRnJhbWVzKGZyYW1lcykge1xuICAgIGZyYW1lcy5mb3JFYWNoKChmcmFtZSkgPT4ge1xuICAgICAgdGhpcy5hZGRGcmFtZShmcmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpIHtcbiAgICBlcXVhbGl0aWVzLmZvckVhY2goKGVxdWFsaXR5KSA9PiB7XG4gICAgICB0aGlzLmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudHMoanVkZ2VtZW50cykge1xuICAgIGp1ZGdlbWVudHMuZm9yRWFjaCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICB0aGlzLmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9ucyhhc3NlcnRpb25zKSB7XG4gICAgYXNzZXJ0aW9ucy5mb3JFYWNoKChhc3NlcnRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpIHtcbiAgICBzdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZW1lbnQoc3RhdGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZXMocmVmZXJlbmNlcykge1xuICAgIHJlZmVyZW5jZXMuZm9yRWFjaCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICB0aGlzLmFkZFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpIHtcbiAgICBhc3N1bXB0aW9ucy5mb3JFYWNoKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpIHtcbiAgICBtZXRhdmFyaWFibGVzLmZvckVhY2goKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgdGhpcy5hZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucykge1xuICAgIC8vL1xuICB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGU7ICAvLy9cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuICAgICAgXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gZXF1YWxpdGllcy5maW5kKChlcXVhbGl0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IGVxdWFsaXR5Lm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50cy5maW5kKChqdWRnZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKGp1ZGdlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50ID0gdGhpcy5maW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGp1ZGdlbWVudFByZXNlbnQgPSAoanVkZ2VtZW50ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICBhc3NlcnRpb25QcmVzZW50ID0gKGFzc2VydGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IHRoaXMuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uUHJlc2VudCA9IChhc3N1bXB0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHJlZmVyZW5jZVByZXNlbnQgPSAocmVmZXJlbmNlICE9PSBudWxsKTtcblxuICAgIHJldHVybiByZWZlcmVuY2VQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZW5Ob2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVuTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlblByZXNlbnQgPSAobWV0YXZhcmlhYmxlbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlblByZXNlbnQ7XG4gIH1cblxuICBpc1N1YnN0aXR1dGlvblByZXNlbnRCeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25QcmVzZW50ID0gKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGNvbW1pdChlbGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgZWxlbWVudC5zZXRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgaW5pdGlhbGlzZShqc29uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5yZWZlcmVuY2VzID0gcmVmZXJlbmNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuanVkZ2VtZW50cyA9IGp1ZGdlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgIHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKTtcblxuICAgIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zVG9UZXJtc0pTT04odGVybXMpLFxuICAgICAgICAgIGZyYW1lc0pTT04gPSBmcmFtZXNUb0ZyYW1lc0pTT04oZnJhbWVzKSxcbiAgICAgICAgICBqdWRnZW1lbnRzSlNPTiA9IGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OKGp1ZGdlbWVudHMpLFxuICAgICAgICAgIGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcyksXG4gICAgICAgICAgc3RhdGVtZW50c0pTT04gPSBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSxcbiAgICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpLFxuICAgICAgICAgIHJlZmVyZW5jZXNKU09OID0gcmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04ocmVmZXJlbmNlcyksXG4gICAgICAgICAgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTihhc3N1bXB0aW9ucyksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgdGVybXMgPSB0ZXJtc0pTT047IC8vL1xuICAgIGZyYW1lcyA9IGZyYW1lc0pTT047IC8vL1xuICAgIGp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzSlNPTjsgLy8vXG4gICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OOyAvLy9cbiAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0pTT047IC8vL1xuICAgIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTjsgLy8vXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNKU09OOyAvLy9cbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTjsgLy8vXG4gICAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OOyAgLy9cbiAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT047IC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHRlcm1zLFxuICAgICAgZnJhbWVzLFxuICAgICAganVkZ2VtZW50cyxcbiAgICAgIGVxdWFsaXRpZXMsXG4gICAgICBzdGF0ZW1lbnRzLFxuICAgICAgYXNzZXJ0aW9ucyxcbiAgICAgIHJlZmVyZW5jZXMsXG4gICAgICBhc3N1bXB0aW9ucyxcbiAgICAgIG1ldGF2YXJpYWJsZXMsXG4gICAgICBzdWJzdGl0dXRpb25zXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IG51bGwsXG4gICAgICAgICAgZnJhbWVzID0gbnVsbCxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gbnVsbCxcbiAgICAgICAgICBqdWRnZW1lbnRzID0gbnVsbCxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gbnVsbCxcbiAgICAgICAgICBhc3NlcnRpb25zID0gbnVsbCxcbiAgICAgICAgICByZWZlcmVuY2VzID0gbnVsbCxcbiAgICAgICAgICBhc3N1bXB0aW9ucyA9IG51bGwsXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IG51bGwsXG4gICAgICAgICAgbW5lbWljQ29udGV4dCA9IG5ldyBNbmVtaWNDb250ZXh0KGNvbnRleHQsIHRlcm1zLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIG1uZW1pY0NvbnRleHQuaW5pdGlhbGlzZShqc29uKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGZyYW1lcyA9IFtdLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBbXSxcbiAgICAgICAgICBqdWRnZW1lbnRzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICByZWZlcmVuY2VzID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBqdWRnZW1lbnRzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCByZWZlcmVuY2VzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbW5lbWljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIk1uZW1pY0NvbnRleHQiLCJwdXNoIiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsInRlcm1zIiwiZnJhbWVzIiwiZXF1YWxpdGllcyIsImp1ZGdlbWVudHMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsInJlZmVyZW5jZXMiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiY29tcHJlc3NUZXJtcyIsImdldEZyYW1lcyIsImNvbXByZXNzRnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImNvbXByZXNzRXF1YWxpdGllcyIsImdldEp1ZGdlbWVudHMiLCJjb21wcmVzc0p1ZGdlbWVudHMiLCJnZXRTdGF0ZW1lbnRzIiwiY29tcHJlc3NTdGF0ZW1lbnRzIiwiZ2V0QXNzZXJ0aW9ucyIsImNvbXByZXNzQXNzZXJ0aW9ucyIsImdldFJlZmVyZW5jZXMiLCJjb21wcmVzc1JlZmVyZW5jZXMiLCJnZXRBc3N1bXB0aW9ucyIsImNvbXByZXNzQXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwiY29tcHJlc3NNZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsImNvbXByZXNzU3Vic3RpdHV0aW9ucyIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybUEiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtQiIsImZpbmQiLCJ0ZXJtQUNvbXBhcmVzVG9UZXJtQiIsImNvbXBhcmVUZXJtIiwiZGVidWciLCJhZGRGcmFtZSIsImZyYW1lIiwiZnJhbWVBIiwiZnJhbWVTdHJpbmciLCJmcmFtZUIiLCJmcmFtZUFFcXVhbFRvRnJhbWVCIiwiaXNFcXVhbFRvIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5QSIsImVxdWFsaXR5U3RyaW5nIiwiZXF1YWxpdHlCIiwiZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiIsImFkZEp1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudEEiLCJqdWRnZW1lbnRTdHJpbmciLCJqdWRnZW1lbnRCIiwianVkZ2VtZW50QUVxdWFsVG9FcXVhbGl0eUIiLCJhZGRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRBIiwic3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50QiIsInN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvbkEiLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25CIiwiYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CIiwiYWRkUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlQSIsInJlZmVyZW5jZVN0cmluZyIsInJlZmVyZW5jZUIiLCJyZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIiLCJhZGRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25BIiwiYXNzdW1wdGlvblN0cmluZyIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvU3Vic3RpdHV0aW9uQiIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbkEiLCJzdWJzdGl0dXRpb25TdHJpbmciLCJzdWJzdGl0dXRpb25CIiwic3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiYWRkRnJhbWVzIiwiYWRkRXF1YWxpdGllcyIsImFkZEp1ZGdlbWVudHMiLCJhZGRBc3NlcnRpb25zIiwiYWRkU3RhdGVtZW50cyIsImFkZFJlZmVyZW5jZXMiLCJhZGRBc3N1bXB0aW9ucyIsImFkZE1ldGF2YXJpYWJsZXMiLCJhZGRTdWJzdGl0dXRpb25zIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaEp1ZGdlbWVudE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlIiwibWF0Y2hSZWZlcmVuY2VOb2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRQcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvblByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZW5Ob2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaXNTdWJzdGl0dXRpb25QcmVzZW50QnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uUHJlc2VudCIsImNvbW1pdCIsImVsZW1lbnQiLCJzZXRDb250ZXh0IiwiaW5pdGlhbGlzZSIsImpzb24iLCJ0ZXJtc0Zyb21KU09OIiwibWV0YXZhcmlhYmxlc0Zyb21KU09OIiwic3RhdGVtZW50c0Zyb21KU09OIiwicmVmZXJlbmNlc0Zyb21KU09OIiwiZXF1YWxpdGllc0Zyb21KU09OIiwiYXNzdW1wdGlvbnNGcm9tSlNPTiIsImZyYW1lc0Zyb21KU09OIiwianVkZ2VtZW50c0Zyb21KU09OIiwiYXNzZXJ0aW9uc0Zyb21KU09OIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwidG9KU09OIiwidGVybXNKU09OIiwidGVybXNUb1Rlcm1zSlNPTiIsImZyYW1lc0pTT04iLCJmcmFtZXNUb0ZyYW1lc0pTT04iLCJqdWRnZW1lbnRzSlNPTiIsImp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OIiwiZXF1YWxpdGllc0pTT04iLCJlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTiIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwicmVmZXJlbmNlc0pTT04iLCJyZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTiIsImFzc3VtcHRpb25zSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwic3Vic3RpdHV0aW9uc0pTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsImZyb21KU09OIiwibW5lbWljQ29udGV4dCIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkF1Q0E7OztlQUFxQkE7OzsyQkFyQ1U7Z0VBRVg7MEJBV2tCO3NCQW9CVzs7Ozs7O0FBRWpELE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1G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
|
|
514
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMsXG4gICAgICAgICBjb21wcmVzc0ZyYW1lcyxcbiAgICAgICAgIGNvbXByZXNzRXF1YWxpdGllcyxcbiAgICAgICAgIGNvbXByZXNzSnVkZ2VtZW50cyxcbiAgICAgICAgIGNvbXByZXNzQXNzZXJ0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzU3RhdGVtZW50cyxcbiAgICAgICAgIGNvbXByZXNzUmVmZXJlbmNlcyxcbiAgICAgICAgIGNvbXByZXNzQXNzdW1wdGlvbnMsXG4gICAgICAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMsXG4gICAgICAgICBjb21wcmVzc1N1YnN0aXR1dGlvbnMsfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N5bm9wdGljXCI7XG5pbXBvcnQgeyB0ZXJtc0Zyb21KU09OLFxuICAgICAgICAgZnJhbWVzRnJvbUpTT04sXG4gICAgICAgICB0ZXJtc1RvVGVybXNKU09OLFxuICAgICAgICAgZnJhbWVzVG9GcmFtZXNKU09OLFxuICAgICAgICAganVkZ2VtZW50c0Zyb21KU09OLFxuICAgICAgICAgZXF1YWxpdGllc0Zyb21KU09OLFxuICAgICAgICAgc3RhdGVtZW50c0Zyb21KU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc0Zyb21KU09OLFxuICAgICAgICAgcmVmZXJlbmNlc0Zyb21KU09OLFxuICAgICAgICAgYXNzdW1wdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIG1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OLFxuICAgICAgICAgZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04sXG4gICAgICAgICBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OLFxuICAgICAgICAgcmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNbmVtaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllcztcbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIGNvbXByZXNzVGVybXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIGNvbXByZXNzRnJhbWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goanVkZ2VtZW50cywgdGhpcy5qdWRnZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzKTtcblxuICAgIGNvbXByZXNzSnVkZ2VtZW50cyhjb250ZXh0KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICBjb21wcmVzc1N0YXRlbWVudHMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3NlcnRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocmVmZXJlbmNlcywgdGhpcy5yZWZlcmVuY2VzKTtcblxuICAgIGNvbnRleHQuZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzKTtcblxuICAgIGNvbXByZXNzUmVmZXJlbmNlcyhjb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICBjb21wcmVzc0Fzc3VtcHRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29tcHJlc3NTdWJzdGl0dXRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtQiA9IHRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICAgICAgICB0ZXJtQUNvbXBhcmVzVG9UZXJtQiA9IHRlcm1BLmNvbXBhcmVUZXJtKHRlcm1CKTtcbiAgICAgIFxuICAgICAgICAgICAgaWYgKHRlcm1BQ29tcGFyZXNUb1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAodGVybUIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmcmFtZUEgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWVCID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZUIgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgICAgICAgICBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuICAgICAgXG4gICAgICAgICAgICBpZiAoZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGZyYW1lQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZnJhbWVzLnB1c2goZnJhbWUpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5QSA9IGVxdWFsaXR5LCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICAgIGVxdWFsaXR5QiA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5QiA9IGVxdWFsaXR5LCAvLy9cbiAgICAgICAgICAgICAgICAgIGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIgPSBlcXVhbGl0eUEuaXNFcXVhbFRvKGVxdWFsaXR5Qik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChlcXVhbGl0eUFFcXVhbFRvRXF1YWxpdHlCKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoZXF1YWxpdHlCICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudChqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAganVkZ2VtZW50QSA9IGp1ZGdlbWVudCwgLy8vXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0ganVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50QiA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnRCID0ganVkZ2VtZW50LCAvLy9cbiAgICAgICAgICAgICAgICAgIGp1ZGdlbWVudEFFcXVhbFRvRXF1YWxpdHlCID0ganVkZ2VtZW50QS5pc0VxdWFsVG8oanVkZ2VtZW50Qik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnRBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGp1ZGdlbWVudEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuanVkZ2VtZW50cy5wdXNoKGp1ZGdlbWVudCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudEEgPSBzdGF0ZW1lbnQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudEIgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIgPSBzdGF0ZW1lbnRBLmlzRXF1YWxUbyhzdGF0ZW1lbnRCKTtcbiAgICAgIFxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50Qikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKHN0YXRlbWVudEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3NlcnRpb24oYXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc2VydGlvbkEgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgIGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb25CID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbkIgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CID0gYXNzZXJ0aW9uQS5pc0VxdWFsVG8oYXNzZXJ0aW9uQik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChhc3NlcnRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydGlvbnMucHVzaChhc3NlcnRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VBID0gcmVmZXJlbmNlLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2VCID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUIgPSByZWZlcmVuY2UsIC8vL1xuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlQUVxdWFsVG9SZWZlcmVuY2VCID0gcmVmZXJlbmNlQS5pc0VxdWFsVG8ocmVmZXJlbmNlQik7XG4gICAgICBcbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChyZWZlcmVuY2VCICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25BID0gYXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uQiA9IGFzc3VtcHRpb24sIC8vL1xuICAgICAgICAgICAgICAgICAgYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIgPSBhc3N1bXB0aW9uQS5pc0VxdWFsVG8oYXNzdW1wdGlvbkIpO1xuICAgICAgXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChhc3N1bXB0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlQSA9IG1ldGF2YXJpYWJsZSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVCID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1ldGF2YXJpYWJsZUFFcXVhbFRvU3Vic3RpdHV0aW9uQiA9IG1ldGF2YXJpYWJsZUEuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUIpO1xuICAgICAgXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9TdWJzdGl0dXRpb25CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhdmFyaWFibGVzLnB1c2gobWV0YXZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbkEuaXNFcXVhbFRvKHN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC50cmFjZShgVGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgdGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgdGhpcy5hZGRUZXJtKHRlcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRnJhbWVzKGZyYW1lcykge1xuICAgIGZyYW1lcy5mb3JFYWNoKChmcmFtZSkgPT4ge1xuICAgICAgdGhpcy5hZGRGcmFtZShmcmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpIHtcbiAgICBlcXVhbGl0aWVzLmZvckVhY2goKGVxdWFsaXR5KSA9PiB7XG4gICAgICB0aGlzLmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudHMoanVkZ2VtZW50cykge1xuICAgIGp1ZGdlbWVudHMuZm9yRWFjaCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICB0aGlzLmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9ucyhhc3NlcnRpb25zKSB7XG4gICAgYXNzZXJ0aW9ucy5mb3JFYWNoKChhc3NlcnRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpIHtcbiAgICBzdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZW1lbnQoc3RhdGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZXMocmVmZXJlbmNlcykge1xuICAgIHJlZmVyZW5jZXMuZm9yRWFjaCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICB0aGlzLmFkZFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpIHtcbiAgICBhc3N1bXB0aW9ucy5mb3JFYWNoKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpIHtcbiAgICBtZXRhdmFyaWFibGVzLmZvckVhY2goKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgdGhpcy5hZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucykge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICAvLy9cbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gdGhpcy5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgdmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlOyAgLy8vXG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcbiAgICAgIFxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIHRlcm1QcmVzZW50ID0gKHRlcm0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICBmcmFtZVByZXNlbnQgPSAoZnJhbWUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLmZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlQcmVzZW50ID0gKGVxdWFsaXR5ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBlcXVhbGl0eVByZXNlbnQ7XG4gIH1cblxuICBpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGp1ZGdlbWVudCA9IHRoaXMuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICBqdWRnZW1lbnRQcmVzZW50ID0gKGp1ZGdlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudFByZXNlbnQgPSAoc3RhdGVtZW50ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IChhc3NlcnRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvblByZXNlbnQgPSAoYXNzdW1wdGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICByZWZlcmVuY2VQcmVzZW50ID0gKHJlZmVyZW5jZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVuTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZW4gPSB0aGlzLmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlbk5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZW5QcmVzZW50ID0gKG1ldGF2YXJpYWJsZW4gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZW5QcmVzZW50O1xuICB9XG5cbiAgaXNTdWJzdGl0dXRpb25QcmVzZW50QnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBjb21taXQoZWxlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVsZW1lbnQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoanNvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIHRoaXMudGVybXMgPSB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgIGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgIGp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gdGhpcy5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgIGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSxcbiAgICAgICAgICBmcmFtZXNKU09OID0gZnJhbWVzVG9GcmFtZXNKU09OKGZyYW1lcyksXG4gICAgICAgICAganVkZ2VtZW50c0pTT04gPSBqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTihqdWRnZW1lbnRzKSxcbiAgICAgICAgICBlcXVhbGl0aWVzSlNPTiA9IGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OKGVxdWFsaXRpZXMpLFxuICAgICAgICAgIHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04oc3RhdGVtZW50cyksXG4gICAgICAgICAgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTihhc3NlcnRpb25zKSxcbiAgICAgICAgICByZWZlcmVuY2VzSlNPTiA9IHJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OKHJlZmVyZW5jZXMpLFxuICAgICAgICAgIGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04obWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTihzdWJzdGl0dXRpb25zKTtcblxuICAgIHRlcm1zID0gdGVybXNKU09OOyAvLy9cbiAgICBmcmFtZXMgPSBmcmFtZXNKU09OOyAvLy9cbiAgICBqdWRnZW1lbnRzID0ganVkZ2VtZW50c0pTT047IC8vL1xuICAgIGVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzSlNPTjsgLy8vXG4gICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OOyAvLy9cbiAgICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0pTT047IC8vL1xuICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzSlNPTjsgLy8vXG4gICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0pTT047IC8vL1xuICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTjsgIC8vXG4gICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OOyAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICB0ZXJtcyxcbiAgICAgIGZyYW1lcyxcbiAgICAgIGp1ZGdlbWVudHMsXG4gICAgICBlcXVhbGl0aWVzLFxuICAgICAgc3RhdGVtZW50cyxcbiAgICAgIGFzc2VydGlvbnMsXG4gICAgICByZWZlcmVuY2VzLFxuICAgICAgYXNzdW1wdGlvbnMsXG4gICAgICBtZXRhdmFyaWFibGVzLFxuICAgICAgc3Vic3RpdHV0aW9uc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBudWxsLFxuICAgICAgICAgIGZyYW1lcyA9IG51bGwsXG4gICAgICAgICAgZXF1YWxpdGllcyA9IG51bGwsXG4gICAgICAgICAganVkZ2VtZW50cyA9IG51bGwsXG4gICAgICAgICAgc3RhdGVtZW50cyA9IG51bGwsXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IG51bGwsXG4gICAgICAgICAgcmVmZXJlbmNlcyA9IG51bGwsXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBudWxsLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBlcXVhbGl0aWVzLCBqdWRnZW1lbnRzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCByZWZlcmVuY2VzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICBtbmVtaWNDb250ZXh0LmluaXRpYWxpc2UoanNvbik7XG5cbiAgICByZXR1cm4gbW5lbWljQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAganVkZ2VtZW50cyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgcmVmZXJlbmNlcyA9IFtdLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGZyYW1lcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJNbmVtaWNDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImZyYW1lcyIsImVxdWFsaXRpZXMiLCJqdWRnZW1lbnRzIiwiYXNzZXJ0aW9ucyIsInN0YXRlbWVudHMiLCJyZWZlcmVuY2VzIiwiYXNzdW1wdGlvbnMiLCJtZXRhdmFyaWFibGVzIiwic3Vic3RpdHV0aW9ucyIsImdldFRlcm1zIiwiZ2V0Q29udGV4dCIsImNvbXByZXNzVGVybXMiLCJnZXRGcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJjb21wcmVzc0VxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwiY29tcHJlc3NKdWRnZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImNvbXByZXNzU3RhdGVtZW50cyIsImdldEFzc2VydGlvbnMiLCJjb21wcmVzc0Fzc2VydGlvbnMiLCJnZXRSZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJjb21wcmVzc0Fzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJjb21wcmVzc1N1YnN0aXR1dGlvbnMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1BIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybUIiLCJmaW5kIiwidGVybUFDb21wYXJlc1RvVGVybUIiLCJjb21wYXJlVGVybSIsImRlYnVnIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lQSIsImZyYW1lU3RyaW5nIiwiZnJhbWVCIiwiZnJhbWVBRXF1YWxUb0ZyYW1lQiIsImlzRXF1YWxUbyIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eUEiLCJlcXVhbGl0eVN0cmluZyIsImVxdWFsaXR5QiIsImVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIiLCJhZGRKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRBIiwianVkZ2VtZW50U3RyaW5nIiwianVkZ2VtZW50QiIsImp1ZGdlbWVudEFFcXVhbFRvRXF1YWxpdHlCIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50QSIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudEIiLCJzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIiLCJhZGRBc3NlcnRpb24iLCJhc3NlcnRpb24iLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uU3RyaW5nIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImFkZFJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZUEiLCJyZWZlcmVuY2VTdHJpbmciLCJyZWZlcmVuY2VCIiwicmVmZXJlbmNlQUVxdWFsVG9SZWZlcmVuY2VCIiwiYWRkQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uQiIsImFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZVN0cmluZyIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb1N1YnN0aXR1dGlvbkIiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25BIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwic3Vic3RpdHV0aW9uQiIsInN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImFkZEZyYW1lcyIsImFkZEVxdWFsaXRpZXMiLCJhZGRKdWRnZW1lbnRzIiwiYWRkQXNzZXJ0aW9ucyIsImFkZFN0YXRlbWVudHMiLCJhZGRSZWZlcmVuY2VzIiwiYWRkQXNzdW1wdGlvbnMiLCJhZGRNZXRhdmFyaWFibGVzIiwiYWRkU3Vic3RpdHV0aW9ucyIsImFkZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlIiwiZnJhbWVQcmVzZW50IiwiaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5UHJlc2VudCIsImlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFByZXNlbnQiLCJpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvblByZXNlbnQiLCJpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbk5vZGUiLCJtZXRhdmFyaWFibGVuIiwibWV0YXZhcmlhYmxlblByZXNlbnQiLCJpc1N1YnN0aXR1dGlvblByZXNlbnRCeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25QcmVzZW50IiwiY29tbWl0IiwiZWxlbWVudCIsInNldENvbnRleHQiLCJpbml0aWFsaXNlIiwianNvbiIsInRlcm1zRnJvbUpTT04iLCJtZXRhdmFyaWFibGVzRnJvbUpTT04iLCJzdGF0ZW1lbnRzRnJvbUpTT04iLCJyZWZlcmVuY2VzRnJvbUpTT04iLCJlcXVhbGl0aWVzRnJvbUpTT04iLCJhc3N1bXB0aW9uc0Zyb21KU09OIiwiZnJhbWVzRnJvbUpTT04iLCJqdWRnZW1lbnRzRnJvbUpTT04iLCJhc3NlcnRpb25zRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJ0b0pTT04iLCJ0ZXJtc0pTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwiZnJhbWVzSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImp1ZGdlbWVudHNKU09OIiwianVkZ2VtZW50c1RvSnVkZ2VtZW50c0pTT04iLCJlcXVhbGl0aWVzSlNPTiIsImVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OIiwic3RhdGVtZW50c0pTT04iLCJzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTiIsImFzc2VydGlvbnNKU09OIiwiYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04iLCJyZWZlcmVuY2VzSlNPTiIsInJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTiIsIm1ldGF2YXJpYWJsZXNKU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwiZnJvbUpTT04iLCJtbmVtaWNDb250ZXh0IiwiZnJvbU5vdGhpbmciXSwibWFw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
|
package/lib/context/synoptic.js
CHANGED
|
@@ -18,7 +18,7 @@ function _interop_require_default(obj) {
|
|
|
18
18
|
}
|
|
19
19
|
const { push } = _necessary.arrayUtilities;
|
|
20
20
|
class SynopticContext extends _context.default {
|
|
21
|
-
constructor(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions){
|
|
21
|
+
constructor(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions, derivedSubstitutions){
|
|
22
22
|
super(context);
|
|
23
23
|
this.terms = terms;
|
|
24
24
|
this.frames = frames;
|
|
@@ -30,6 +30,7 @@ class SynopticContext extends _context.default {
|
|
|
30
30
|
this.assumptions = assumptions;
|
|
31
31
|
this.metavariables = metavariables;
|
|
32
32
|
this.substitutions = substitutions;
|
|
33
|
+
this.derivedSubstitutions = derivedSubstitutions;
|
|
33
34
|
}
|
|
34
35
|
getTerms(terms = []) {
|
|
35
36
|
push(terms, this.terms);
|
|
@@ -91,6 +92,11 @@ class SynopticContext extends _context.default {
|
|
|
91
92
|
(0, _synoptic.compressSubstitutions)(substitutions);
|
|
92
93
|
return substitutions;
|
|
93
94
|
}
|
|
95
|
+
getDerivedSubstitutions(derivedSubstitutions = []) {
|
|
96
|
+
push(derivedSubstitutions, this.derivedSubstitutions);
|
|
97
|
+
this.context.getDerivedSubstitutions(derivedSubstitutions);
|
|
98
|
+
return derivedSubstitutions;
|
|
99
|
+
}
|
|
94
100
|
findTermByTermNode(termNode) {
|
|
95
101
|
const terms = this.getTerms(), term = terms.find((term)=>{
|
|
96
102
|
const termNodeMatches = term.matchTermNode(termNode);
|
|
@@ -191,7 +197,7 @@ class SynopticContext extends _context.default {
|
|
|
191
197
|
return substitution;
|
|
192
198
|
}
|
|
193
199
|
static fromContexts(...contexts) {
|
|
194
|
-
const context = contexts.pop(), terms = termsFromContexts(contexts), frames = framesFromContexts(contexts), equalities = equalitiesFromContexts(contexts), judgements = judgementsFromContexts(contexts), assertions = assertionsFromContexts(contexts), statements = statementsFromContexts(contexts), references = referencesFromContexts(contexts), assumptions = assumptionsFromContexts(contexts), metavariables = metavariablesFromContexts(contexts), substitutions = substitutionsFromContexts(contexts), synopticContext = new SynopticContext(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions);
|
|
200
|
+
const context = contexts.pop(), terms = termsFromContexts(contexts), frames = framesFromContexts(contexts), equalities = equalitiesFromContexts(contexts), judgements = judgementsFromContexts(contexts), assertions = assertionsFromContexts(contexts), statements = statementsFromContexts(contexts), references = referencesFromContexts(contexts), assumptions = assumptionsFromContexts(contexts), metavariables = metavariablesFromContexts(contexts), substitutions = substitutionsFromContexts(contexts), derivedSubstitutions = derivedSubstitutionsFromContexts(contexts), synopticContext = new SynopticContext(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions, derivedSubstitutions);
|
|
195
201
|
return synopticContext;
|
|
196
202
|
}
|
|
197
203
|
}
|
|
@@ -275,5 +281,12 @@ function substitutionsFromContexts(contexts) {
|
|
|
275
281
|
(0, _synoptic.compressSubstitutions)(substitutions);
|
|
276
282
|
return substitutions;
|
|
277
283
|
}
|
|
284
|
+
function derivedSubstitutionsFromContexts(contexts) {
|
|
285
|
+
const derivedSubstitutions = [];
|
|
286
|
+
contexts.forEach((context)=>{
|
|
287
|
+
context.getDerivedSubstitutions(derivedSubstitutions);
|
|
288
|
+
});
|
|
289
|
+
return derivedSubstitutions;
|
|
290
|
+
}
|
|
278
291
|
|
|
279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgY29tcHJlc3NUZXJtcyxcbiAgICAgICAgIGNvbXByZXNzRnJhbWVzLFxuICAgICAgICAgY29tcHJlc3NFcXVhbGl0aWVzLFxuICAgICAgICAgY29tcHJlc3NKdWRnZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NBc3NlcnRpb25zLFxuICAgICAgICAgY29tcHJlc3NTdGF0ZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NSZWZlcmVuY2VzLFxuICAgICAgICAgY29tcHJlc3NBc3N1bXB0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyxcbiAgICAgICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyx9IGZyb20gXCIuLi91dGlsaXRpZXMvc3lub3B0aWNcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lub3B0aWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllcztcbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgY29tcHJlc3NUZXJtcyh0ZXJtcyk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuXG4gICAgY29tcHJlc3NGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIHB1c2goanVkZ2VtZW50cywgdGhpcy5qdWRnZW1lbnRzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgY29tcHJlc3NKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgY29tcHJlc3NTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHB1c2gocmVmZXJlbmNlcywgdGhpcy5yZWZlcmVuY2VzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgY29tcHJlc3NSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgcHVzaChhc3N1bXB0aW9ucywgdGhpcy5hc3N1bXB0aW9ucyk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIHB1c2gobWV0YXZhcmlhYmxlcywgdGhpcy5tZXRhdmFyaWFibGVzKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29tcHJlc3NNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHB1c2goc3Vic3RpdHV0aW9ucywgdGhpcy5zdWJzdGl0dXRpb25zKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29tcHJlc3NTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZXh0cyguLi5jb250ZXh0cykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjb250ZXh0cy5wb3AoKSwgIC8vL1xuICAgICAgICAgIHRlcm1zID0gdGVybXNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIGZyYW1lcyA9IGZyYW1lc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIGp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIHN5bm9wdGljQ29udGV4dCA9IG5ldyBTeW5vcHRpY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGZyYW1lcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN5bm9wdGljQ29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXJtc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCB0ZXJtcyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NUZXJtcyh0ZXJtcyk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5mdW5jdGlvbiBmcmFtZXNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgZnJhbWVzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0RnJhbWVzKGZyYW1lcyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzRnJhbWVzKGZyYW1lcyk7XG5cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZnVuY3Rpb24gZXF1YWxpdGllc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBlcXVhbGl0aWVzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gIHJldHVybiBlcXVhbGl0aWVzO1xufVxuXG5mdW5jdGlvbiBqdWRnZW1lbnRzRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IGp1ZGdlbWVudHMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuICB9KTtcblxuICBjb21wcmVzc0p1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGFzc2VydGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgYXNzZXJ0aW9ucyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzQXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICByZXR1cm4gYXNzZXJ0aW9ucztcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5mdW5jdGlvbiByZWZlcmVuY2VzRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuICB9KTtcblxuICBjb21wcmVzc1JlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXM7XG59XG5cbmZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuICB9KTtcblxuICBjb21wcmVzc0Fzc3VtcHRpb25zKGFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbn1cblxuZnVuY3Rpb24gc3Vic3RpdHV0aW9uc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBzdWJzdGl0dXRpb25zID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zO1xufVxuIl0sIm5hbWVzIjpbIlN5bm9wdGljQ29udGV4dCIsInB1c2giLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwidGVybXMiLCJmcmFtZXMiLCJlcXVhbGl0aWVzIiwianVkZ2VtZW50cyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwicmVmZXJlbmNlcyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInN1YnN0aXR1dGlvbnMiLCJnZXRUZXJtcyIsImNvbXByZXNzVGVybXMiLCJnZXRGcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJjb21wcmVzc0VxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwiY29tcHJlc3NKdWRnZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImNvbXByZXNzU3RhdGVtZW50cyIsImdldEFzc2VydGlvbnMiLCJjb21wcmVzc0Fzc2VydGlvbnMiLCJnZXRSZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJjb21wcmVzc0Fzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJjb21wcmVzc1N1YnN0aXR1dGlvbnMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5IiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tQ29udGV4dHMiLCJjb250ZXh0cyIsInBvcCIsInRlcm1zRnJvbUNvbnRleHRzIiwiZnJhbWVzRnJvbUNvbnRleHRzIiwiZXF1YWxpdGllc0Zyb21Db250ZXh0cyIsImp1ZGdlbWVudHNGcm9tQ29udGV4dHMiLCJhc3NlcnRpb25zRnJvbUNvbnRleHRzIiwic3RhdGVtZW50c0Zyb21Db250ZXh0cyIsInJlZmVyZW5jZXNGcm9tQ29udGV4dHMiLCJhc3N1bXB0aW9uc0Zyb21Db250ZXh0cyIsIm1ldGF2YXJpYWJsZXNGcm9tQ29udGV4dHMiLCJzdWJzdGl0dXRpb25zRnJvbUNvbnRleHRzIiwic3lub3B0aWNDb250ZXh0IiwiZm9yRWFjaCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBbUJBOzs7ZUFBcUJBOzs7MkJBakJVO2dFQUVYOzBCQVdrQjs7Ozs7O0FBRXRDLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1GLHdCQUF3QkcsZ0JBQU87SUFDbEQsWUFBWUMsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxFQUFFQyxhQUFhLENBQUU7UUFDekksS0FBSyxDQUFDVjtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0Ms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
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgY29tcHJlc3NUZXJtcyxcbiAgICAgICAgIGNvbXByZXNzRnJhbWVzLFxuICAgICAgICAgY29tcHJlc3NFcXVhbGl0aWVzLFxuICAgICAgICAgY29tcHJlc3NKdWRnZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NBc3NlcnRpb25zLFxuICAgICAgICAgY29tcHJlc3NTdGF0ZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NSZWZlcmVuY2VzLFxuICAgICAgICAgY29tcHJlc3NBc3N1bXB0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyxcbiAgICAgICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyx9IGZyb20gXCIuLi91dGlsaXRpZXMvc3lub3B0aWNcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lub3B0aWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHRlcm1zLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zLCBkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7XG4gICAgdGhpcy5qdWRnZW1lbnRzID0ganVkZ2VtZW50cztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5yZWZlcmVuY2VzID0gcmVmZXJlbmNlcztcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICAgIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRUZXJtcyh0ZXJtcyk7XG5cbiAgICBjb21wcmVzc1Rlcm1zKHRlcm1zKTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIGdldEZyYW1lcyhmcmFtZXMgPSBbXSkge1xuICAgIHB1c2goZnJhbWVzLCB0aGlzLmZyYW1lcyk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2V0RnJhbWVzKGZyYW1lcyk7XG5cbiAgICBjb21wcmVzc0ZyYW1lcyhmcmFtZXMpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICBjb21wcmVzc0VxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyA9IFtdKSB7XG4gICAgcHVzaChqdWRnZW1lbnRzLCB0aGlzLmp1ZGdlbWVudHMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICBjb21wcmVzc0p1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgcHVzaChzdGF0ZW1lbnRzLCB0aGlzLnN0YXRlbWVudHMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICBjb21wcmVzc1N0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICBjb21wcmVzc0Fzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgcHVzaChyZWZlcmVuY2VzLCB0aGlzLnJlZmVyZW5jZXMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgICBjb21wcmVzc1JlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICBjb21wcmVzc0Fzc3VtcHRpb25zKGFzc3VtcHRpb25zKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyA9IFtdKSB7XG4gICAgcHVzaChtZXRhdmFyaWFibGVzLCB0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgdGhpcy5jb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb21wcmVzc1N1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBwdXNoKGRlcml2ZWRTdWJzdGl0dXRpb25zLCB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHRoaXMuY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtID0gdGVybXMuZmluZCgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZXh0cyguLi5jb250ZXh0cykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjb250ZXh0cy5wb3AoKSwgIC8vL1xuICAgICAgICAgIHRlcm1zID0gdGVybXNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIGZyYW1lcyA9IGZyYW1lc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIGp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUNvbnRleHRzKGNvbnRleHRzKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21Db250ZXh0cyhjb250ZXh0cyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gZGVyaXZlZFN1YnN0aXR1dGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpLFxuICAgICAgICAgIHN5bm9wdGljQ29udGV4dCA9IG5ldyBTeW5vcHRpY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGZyYW1lcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMsIGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBzeW5vcHRpY0NvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVybXNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgdGVybXMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXRUZXJtcyh0ZXJtcyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzVGVybXModGVybXMpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZnVuY3Rpb24gZnJhbWVzRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IGZyYW1lcyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuICB9KTtcblxuICBjb21wcmVzc0ZyYW1lcyhmcmFtZXMpO1xuXG4gIHJldHVybiBmcmFtZXM7XG59XG5cbmZ1bmN0aW9uIGVxdWFsaXRpZXNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgZXF1YWxpdGllcyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzRXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICByZXR1cm4gZXF1YWxpdGllcztcbn1cblxuZnVuY3Rpb24ganVkZ2VtZW50c0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBqdWRnZW1lbnRzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gIHJldHVybiBqdWRnZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRpb25zRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IGFzc2VydGlvbnMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuICB9KTtcblxuICBjb21wcmVzc0Fzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgcmV0dXJuIGFzc2VydGlvbnM7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzU3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZnVuY3Rpb24gcmVmZXJlbmNlc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCByZWZlcmVuY2VzID0gW107XG5cbiAgY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgIGNvbnRleHQuZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gIHJldHVybiByZWZlcmVuY2VzO1xufVxuXG5mdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Db250ZXh0cyhjb250ZXh0cykge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zKTtcbiAgfSk7XG5cbiAgY29tcHJlc3NBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5mdW5jdGlvbiBtZXRhdmFyaWFibGVzRnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuICB9KTtcblxuICBjb21wcmVzc01ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG59XG5cbmZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFtdO1xuXG4gIGNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG4gIH0pO1xuXG4gIGNvbXByZXNzU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbn1cblxuZnVuY3Rpb24gZGVyaXZlZFN1YnN0aXR1dGlvbnNGcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXTtcblxuICBjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG4gIH0pO1xuXG4gIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJTeW5vcHRpY0NvbnRleHQiLCJwdXNoIiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsInRlcm1zIiwiZnJhbWVzIiwiZXF1YWxpdGllcyIsImp1ZGdlbWVudHMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsInJlZmVyZW5jZXMiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJzdWJzdGl0dXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXRUZXJtcyIsImNvbXByZXNzVGVybXMiLCJnZXRGcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJjb21wcmVzc0VxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwiY29tcHJlc3NKdWRnZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImNvbXByZXNzU3RhdGVtZW50cyIsImdldEFzc2VydGlvbnMiLCJjb21wcmVzc0Fzc2VydGlvbnMiLCJnZXRSZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJjb21wcmVzc0Fzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJjb21wcmVzc1N1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHkiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudCIsImp1ZGdlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hKdWRnZW1lbnROb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSIsIm1hdGNoUmVmZXJlbmNlTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Db250ZXh0cyIsImNvbnRleHRzIiwicG9wIiwidGVybXNGcm9tQ29udGV4dHMiLCJmcmFtZXNGcm9tQ29udGV4dHMiLCJlcXVhbGl0aWVzRnJvbUNvbnRleHRzIiwianVkZ2VtZW50c0Zyb21Db250ZXh0cyIsImFzc2VydGlvbnNGcm9tQ29udGV4dHMiLCJzdGF0ZW1lbnRzRnJvbUNvbnRleHRzIiwicmVmZXJlbmNlc0Zyb21Db250ZXh0cyIsImFzc3VtcHRpb25zRnJvbUNvbnRleHRzIiwibWV0YXZhcmlhYmxlc0Zyb21Db250ZXh0cyIsInN1YnN0aXR1dGlvbnNGcm9tQ29udGV4dHMiLCJkZXJpdmVkU3Vic3RpdHV0aW9uc0Zyb21Db250ZXh0cyIsInN5bm9wdGljQ29udGV4dCIsImZvckVhY2giXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW1CQTs7O2VBQXFCQTs7OzJCQWpCVTtnRUFFWDswQkFXa0I7Ozs7OztBQUV0QyxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUVoQixNQUFNRix3QkFBd0JHLGdCQUFPO0lBQ2xELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxvQkFBb0IsQ0FBRTtRQUMvSixLQUFLLENBQUNYO1FBRU4sSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUND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
|