occam-furtle 3.0.512 → 3.0.516

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.
@@ -81,6 +81,9 @@ _export(exports, {
81
81
  get everyFromExpressionNode () {
82
82
  return everyFromExpressionNode;
83
83
  },
84
+ get exporetedFromProcedureNode () {
85
+ return exporetedFromProcedureNode;
86
+ },
84
87
  get expressionFromExpressionNode () {
85
88
  return expressionFromExpressionNode;
86
89
  },
@@ -573,7 +576,7 @@ function statementFromStatementNode(statementNode, context) {
573
576
  return statement;
574
577
  }
575
578
  function procedureFromProcedureNode(procedureNode, context) {
576
- const { Procedure } = _elements.default, node = procedureNode, type = typeFromProcedureNode(procedureNode, context), label = labelFromProcedureNode(procedureNode, context), parameters = parametersFromProcedureNode(procedureNode, context), returnBlock = returnBlockFromProcedureNode(procedureNode, context), procedureString = (0, _string.procedureStringFromTypeLabelParametersAndReturnBlock)(type, label, parameters, returnBlock), string = procedureString, breakPoint = null, procedure = new Procedure(context, string, node, breakPoint, type, label, parameters, returnBlock);
579
+ const { Procedure } = _elements.default, node = procedureNode, type = typeFromProcedureNode(procedureNode, context), label = labelFromProcedureNode(procedureNode, context), exported = exporetedFromProcedureNode(procedureNode, context), parameters = parametersFromProcedureNode(procedureNode, context), returnBlock = returnBlockFromProcedureNode(procedureNode, context), procedureString = (0, _string.procedureStringFromTypeLabelExportedParametersAndReturnBlock)(type, label, exported, parameters, returnBlock), string = procedureString, breakPoint = null, procedure = new Procedure(context, string, node, breakPoint, type, label, exported, parameters, returnBlock);
577
580
  return procedure;
578
581
  }
579
582
  function referenceFromReferenceNode(referenceNode, context) {
@@ -995,6 +998,10 @@ function expressionFromVariableNode(variableNode, context) {
995
998
  const expression = null;
996
999
  return expression;
997
1000
  }
1001
+ function exporetedFromProcedureNode(procedureNode, context) {
1002
+ const exported = procedureNode.isExported();
1003
+ return exported;
1004
+ }
998
1005
  function variableFromTryIntegerNode(tryIntegerNode, context) {
999
1006
  const variableNode = tryIntegerNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
1000
1007
  return variable;
@@ -1281,4 +1288,4 @@ function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variab
1281
1288
  return variableAssignmentsArray;
1282
1289
  }
1283
1290
 
1284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zID0gbmV3IENvbnRhaW5zKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVuZHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVuZHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVuZHNXaXRoID0gbmV3IEVuZHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGVuZHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaXN0QXNzaWdubWVudCA9IGxpc3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIG9iamVjdEFzc2lnbm1lbnQgPSBvYmplY3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpc3RBc3NpZ25tZW50LCBvYmplY3RBc3NpZ25tZW50LCB2YXJpYWJsZUFzc2lnbm1lbnRzKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBwcm9jZWR1cmUgPSBuZXcgUHJvY2VkdXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gcHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2RlUXVlcnlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnkgPSBuZXcgTm9kZVF1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByaW1pdGl2ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmltaXRpdmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRvSW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0b0ludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdG9JbnRlZ2VyID0gbmV3IFRvSW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXJ0c1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhcnRzV2l0aE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXJ0c1dpdGggPSBuZXcgU3RhcnRzV2l0aChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBzdWJzdHJpbmcpO1xuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0cnlJbnRlZ2VyID0gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnRhaW5zID0gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbmRzV2l0aCA9IGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgc29tZSxcbiAgICAgICAgICBldmVyeSxcbiAgICAgICAgICByZWR1Y2UsXG4gICAgICAgICAgdGVybmFyeSxcbiAgICAgICAgICBub2RlUXVlcnksXG4gICAgICAgICAgbm9kZXNRdWVyeSxcbiAgICAgICAgICBsZW5ndGhPZixcbiAgICAgICAgICB0b0ludGVnZXIsXG4gICAgICAgICAgdHJ5SW50ZWdlcixcbiAgICAgICAgICBjb250YWlucyxcbiAgICAgICAgICBlbmRzV2l0aCxcbiAgICAgICAgICBzdGFydHNXaXRoLFxuICAgICAgICAgIHJldHVybkJsb2NrLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gZXhwcmVzc2lvblN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCBub2RlUXVlcnksIG5vZGVzUXVlcnksIGxlbmd0aE9mLCB0b0ludGVnZXIsIHRyeUludGVnZXIsIGNvbnRhaW5zLCBlbmRzV2l0aCwgc3RhcnRzV2l0aCwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRyeUludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHJ5SW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXIgPSBuZXcgVHJ5SW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMaXN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsaXN0QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGlzdEFzc2lnbm1lbnQgPSBuZXcgTGlzdEFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYmluZGluZ3MpO1xuXG4gIHJldHVybiBsaXN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSBuZXcgUmV0dXJuU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFsdWUpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgT2JqZWN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgb2JqZWN0QXNzaWdubWVudCA9IG5ldyBPYmplY3RBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIG5hbWVkQmluZGluZ3MpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFub255bW91c1Byb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlID0gbmV3IEFub255bW91c1Byb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudHMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkpLFxuICAgICAgICBhcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUodHlwZSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc2lnbm1lbnQgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gdHlwZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gYmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc29tZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gcHJpbWl0aXZlTm9kZS5nZXRWYWx1ZSgpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNvbWUgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWVOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0U29tZU5vZGUoKTtcblxuICBpZiAoc29tZU5vZGUgIT09IG51bGwpIHtcbiAgICBzb21lID0gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBuZWdhdGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbmVnYXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TmVnYXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKG5lZ2F0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbG9naWNhbFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGxvZ2ljYWxUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldExvZ2ljYWxUZXJtTm9kZSgpO1xuXG4gIGlmIChsb2dpY2FsVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBsb2dpY2FsVGVybSA9IGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudFR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IGFyZ3VtZW50VHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRBcmd1bWVudFR5cGVOYW1lKCk7XG5cbiAgaWYgKGFyZ3VtZW50VHlwZU5hbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gICAgYXJndW1lbnRUeXBlID0gVHlwZS5mcm9tVHlwZU5hbWUoYXJndW1lbnRUeXBlTmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBsZW5ndGhPZk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGNvbnRhaW5zTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGVuZHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbmFtZWRCaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBjb250YWluc05vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBlbmRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZEJpbmRpbmdOb2RlLmdldEFsaWFzKCk7XG5cbiAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRvSW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5PZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbXBhcmlzb25UZXJtID0gbnVsbDtcblxuICBjb25zdCBjb21wYXJpc29uVGVybU5vZGUgPSB0ZXJtTk9kZS5nZXRDb21wYXJpc29uVGVybU5vZGUoKTtcblxuICBpZiAoY29tcGFyaXNvblRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZTsgLy8vXG5cbiAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uID0gbnVsbDtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRyeUludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHN0YXJ0c1dpdGhOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVzUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW5ndGhPZiA9IG51bGw7XG5cbiAgY29uc3QgbGVuZ3RoT2ZOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0TGVuZ3RoT2ZOb2RlKCk7XG5cbiAgaWYgKGxlbmd0aE9mTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29udGFpbnMgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldENvbnRhaW5zTm9kZSgpO1xuXG4gIGlmIChjb250YWluc05vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWlucyA9IGNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVuZHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBlbmRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFbmRzV2l0aE5vZGUoKTtcblxuICBpZiAoZW5kc1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgZW5kc1dpdGggPSBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlbmRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBzdGFydHNXaXRoTm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGFydHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBzdGFydHNXaXRoTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFN0YXJ0c1dpdGhOb2RlKCk7XG5cbiAgaWYgKHN0YXJ0c1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0c1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21MaXN0QXNzaWdubWVudE5vZGUobGlzdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGxpc3RBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21MaXN0QXNzaWdubWVudE5vZGUobGlzdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdzTm9kZSA9IGxpc3RBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxpc3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBsaXN0QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldExpc3RBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChsaXN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBsaXN0QXNzaWdubWVudCA9IGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG9iamVjdEFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRPYmplY3RBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChvYmplY3RBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIG9iamVjdEFzc2lnbm1lbnQgPSBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50Tm9kZSA9IHJldHVybkJsb2NrTm9kZS5nZXRSZXR1cm5TdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50c05vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zQXJyYXkgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSB2YWx1ZU5vZGVzLm1hcCgodmFsdWVOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nTm9kZXMgPSBiaW5kaW5nc05vZGUuZ2V0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nTm9kZXMubWFwKChiaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gYmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwYXJhbWV0ZXJzTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZEJpbmRpbmdOb2Rlcy5tYXAoKG5hbWVkQmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbmFtZWRCaW5kaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMubWFwKCh2YXJpYWJsZUFzc2lnbm1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUiLCJhcmd1bWVudFR5cGVGcm9tVHlwZU5vZGUiLCJiaW5kaW5nRnJvbUJpbmRpbmdOb2RlIiwiYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21MaXN0QXNzaWdubWVudE5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwiYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlIiwiY29udGFpbnNGcm9tQ29udGFpbnNOb2RlIiwiY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUiLCJkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUiLCJlbGlkZWRGcm9tQmluZGluZ05vZGUiLCJlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSIsImVuZHNXaXRoRnJvbUVuZHNXaXRoTm9kZSIsImVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXZlcnlGcm9tRXZlcnlOb2RlIiwiZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVByb2NlZHVyZU5vZGUiLCJsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZSIsImxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZSIsImxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZSIsImxpc3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tQmluZGluZ05vZGUiLCJuYW1lRnJvbUxhYmVsTm9kZSIsIm5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZU5vZGUiLCJxdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwicXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJyZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZWR1Y2VGcm9tUmVkdWNlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJyaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlIiwic3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZSIsInN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSIsInRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlIiwidHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwidHlwZUZyb21CaW5kaW5nTm9kZSIsInR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlIiwidHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwidHlwZUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0eXBlRnJvbVBhcmFuZXRlck5vZGUiLCJ0eXBlRnJvbVByaW1pdGl2ZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZU5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidmFsdWVGcm9tUHJpbWl0aXZlTm9kZSIsInZhbHVlRnJvbVJlZHVjZU5vZGUiLCJ2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwidmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVZhbHVlTm9kZSIsInZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXMiLCJ2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJ2YWx1ZXNGcm9tVmFsdWVzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVGcm9tQ29udGFpbnNOb2RlIiwidmFyaWFibGVGcm9tRW5kc1dpdGhOb2RlIiwidmFyaWFibGVGcm9tRXZlcnlOb2RlIiwidmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlIiwidmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21SZWR1Y2VOb2RlIiwidmFyaWFibGVGcm9tU29tZU5vZGUiLCJ2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFyaWFibGVGcm9tVmFsdWVOb2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic29tZU5vZGUiLCJjb250ZXh0IiwiU29tZSIsImVsZW1lbnRzIiwibm9kZSIsInZhcmlhYmxlIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzdHJpbmciLCJicmVha1BvaW50Iiwic29tZSIsInRlcm1Ob2RlIiwiVGVybSIsInByaW1pdGl2ZSIsIm5lZ2F0ZWRUZXJtIiwibG9naWNhbFRlcm0iLCJicmFja2V0ZWRUZXJtIiwiY29tcGFyaXNvblRlcm0iLCJwcm9wZXJ0aWVzIiwidGVybVN0cmluZyIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm0iLCJ0eXBlTm9kZSIsIlR5cGUiLCJub2RlQXNTdHJpbmciLCJuYW1lIiwiYXJndW1lbnRUeXBlIiwidHlwZSIsInZhbHVlTm9kZSIsIlZhbHVlIiwidmFsdWVTdHJpbmciLCJ2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidmFsdWUiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwidmFsdWVzTm9kZSIsIlZhbHVlcyIsInZhbHVlTm9kZXMiLCJnZXRWYWx1ZU5vZGVzIiwidmFsdWVzQXJyYXkiLCJhcnJheSIsInZhbHVlcyIsInJlZHVjZU5vZGUiLCJSZWR1Y2UiLCJpbml0aWFsVmFsdWUiLCJyZWR1Y2VTdHJpbmciLCJyZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSIsInJlZHVjZSIsImJpbmRpbmdOb2RlIiwiQmluZGluZyIsImVsaWRlZCIsImJpbmRpbmciLCJ0ZXJuYXJ5Tm9kZSIsIlRlcm5hcnkiLCJpZkV4cHJlc3Npb24iLCJlbHNlRXhwcmVzc2lvbiIsInRlcm5hcnlTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0ZXJuYXJ5IiwiY29udGFpbnNOb2RlIiwiQ29udGFpbnMiLCJzdWJzdHJpbmciLCJjb250YWlucyIsImVuZHNXaXRoTm9kZSIsIkVuZHNXaXRoIiwiZW5kc1dpdGgiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImV4cHJlc3Npb24iLCJiaW5kaW5nc05vZGUiLCJCaW5kaW5ncyIsImJpbmRpbmdzQXJyYXkiLCJiaW5kaW5ncyIsImxlbmd0aE9mTm9kZSIsIkxlbmd0aE9mIiwibGVuZ3RoT2YiLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50IiwibGlzdEFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJwYXJhbWV0ZXJzIiwicmV0dXJuQmxvY2siLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwidG9JbnRlZ2VyTm9kZSIsIlRvSW50ZWdlciIsInRvSW50ZWdlciIsInN0YXJ0c1dpdGhOb2RlIiwiU3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJub2Rlc1F1ZXJ5Tm9kZSIsIk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicGFyYW1ldGVyc05vZGUiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyc0FycmF5IiwiZXhwcmVzc2lvbk5vZGUiLCJFeHByZXNzaW9uIiwidHJ5SW50ZWdlciIsInByb2NlZHVyZUNhbGwiLCJleHByZXNzaW9uU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidHJ5SW50ZWdlck5vZGUiLCJUcnlJbnRlZ2VyIiwicmV0dXJuQmxvY2tOb2RlIiwiUmV0dXJuQmxvY2siLCJzdGF0ZW1lbnRzIiwibm9uc2Vuc2ljYWwiLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5CbG9ja1N0cmluZyIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJuZWdhdGVkVGVybU5vZGUiLCJOZWdhdGVkVGVybSIsImdldFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Ob2RlIiwiTG9naWNhbFRlcm0iLCJkaXNqdW5jdGlvbiIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwibmFtZWRCaW5kaW5nTm9kZSIsIk5hbWVkQmluZGluZyIsImFsaWFzIiwibmFtZWRCaW5kaW5nIiwibmFtZWRCaW5kaW5nc05vZGUiLCJOYW1lZEJpbmRpbmdzIiwibmFtZWRCaW5kaW5nTm9kZXMiLCJnZXROYW1lZEJpbmRpbmdOb2RlcyIsIm5hbWVkQmluZGluZ3NBcnJheSIsIm5hbWVkQmluZGluZ3MiLCJicmFja2V0ZWRUZXJtTm9kZSIsIkJyYWNrZXRlZFRlcm0iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJjb21wYXJpc29uVGVybU5vZGUiLCJDb21wYXJpc29uVGVybSIsIm5lZ2F0ZWQiLCJsaXN0QXNzaWdubWVudE5vZGUiLCJMaXN0QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJyZXR1cm5TdGF0ZW1lbnROb2RlIiwiUmV0dXJuU3RhdGVtZW50IiwiT2JqZWN0QXNzaWdubWVudCIsImFub255bW91c1Byb2NlZHVyZU5vZGUiLCJBbm9ueW1vdXNQcm9jZWR1cmUiLCJub255bW91c1Byb2NlZHVyZVN0cmluZyIsImFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwidmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnRzIiwidmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nIiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSIsImFzc2lnbm1lbnQiLCJnZXROYW1lIiwiZ2V0VmFsdWVOb2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiaXNFbGlkZWQiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZnJvbVR5cGVOYW1lIiwiZ2V0U3RyaW5nIiwiUXVlcnkiLCJmcm9tRXhwcmVzc2lvblN0cmluZyIsImdldFZhbHVlIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0U29tZU5vZGUiLCJnZXROZWdhdGVkVGVybU5vZGUiLCJnZXRMb2dpY2FsVGVybU5vZGUiLCJnZXRFdmVyeU5vZGUiLCJCT09MRUFOX1RZUEVfTkFNRSIsImFyZ3VtZW50VHlwZU5hbWUiLCJnZXRBcmd1bWVudFR5cGVOYW1lIiwiZ2V0UmVkdWNlTm9kZSIsImdldEFsaWFzIiwiZ2V0VGVybmFyeU5vZGUiLCJnZXRCcmFja2V0ZWRUZXJtTm9kZSIsInRlcm1OT2RlIiwiZ2V0Q29tcGFyaXNvblRlcm1Ob2RlIiwiZ2V0TGVuZ3RoT2ZOb2RlIiwiZ2V0Q29udGFpbnNOb2RlIiwiZ2V0RW5kc1dpdGhOb2RlIiwiaWZFeHByZXNzaW9uTm9kZSIsImdldElmRXhwcmVzc2lvbk5vZGUiLCJnZXRQYXJhbWV0ZXJzTm9kZSIsImdldFRvSW50ZWdlck5vZGUiLCJnZXROb2RlUXVlcnlOb2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwiZ2V0VmFsdWVzTm9kZSIsImdldFJldHVybkJsb2NrTm9kZSIsImdldE5vZGVzUXVlcnlOb2RlIiwiZ2V0VHJ5SW50ZWdlck5vZGUiLCJnZXRTdGFydHNXaXRoTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsImlzTmVnYXRlZCIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiaXNEaXNqdW5jdGlvbiIsImdldFJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldEJpbmRpbmdzTm9kZSIsImdldExpc3RBc3NpZ25tZW50Tm9kZSIsImdldE9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSIsImdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiZ2V0RXhwcmVzc2lvbk5vZGUiLCJ0ZXJtTm9kZXMiLCJ0ZXJtc0FycmF5IiwiYmluZGluZ05vZGVzIiwiZ2V0QmluZGluZ05vZGVzIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsIm5hbWVkUGFyYW1ldGVyc0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsInZhcmlhYmxlQXNzaWdubWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNmhDZ0JBO2VBQUFBOztRQTFZQUM7ZUFBQUE7O1FBa3VCQUM7ZUFBQUE7O1FBMkRBQztlQUFBQTs7UUFoSEFDO2VBQUFBOztRQTdXQUM7ZUFBQUE7O1FBbnlCQUM7ZUFBQUE7O1FBNjFDQUM7ZUFBQUE7O1FBOXdDQUM7ZUFBQUE7O1FBdXBDQUM7ZUFBQUE7O1FBNzFCQUM7ZUFBQUE7O1FBNmZBQztlQUFBQTs7UUFuZUFDO2VBQUFBOztRQTZmQUM7ZUFBQUE7O1FBLzNCQUM7ZUFBQUE7O1FBeTdCQUM7ZUFBQUE7O1FBbU1BQztlQUFBQTs7UUF0aUJBQztlQUFBQTs7UUFxZkFDO2VBQUFBOztRQTVqQ0FDO2VBQUFBOztRQXM3QkFDO2VBQUFBOztRQWxqQ0FDO2VBQUFBOztRQWFBQztlQUFBQTs7UUFtMEJBQztlQUFBQTs7UUFuZ0JBQztlQUFBQTs7UUE0aUNBQztlQUFBQTs7UUExWEFDO2VBQUFBOztRQStEQUM7ZUFBQUE7O1FBdEVBQztlQUFBQTs7UUEzOUJBQztlQUFBQTs7UUFvdkJBQztlQUFBQTs7UUFxZUFDO2VBQUFBOztRQTNJQUM7ZUFBQUE7O1FBakZBQztlQUFBQTs7UUFoM0JBQztlQUFBQTs7UUFrVkFDO2VBQUFBOztRQTZ6QkFDO2VBQUFBOztRQWw1QkFDO2VBQUFBOztRQXFaQUM7ZUFBQUE7O1FBcE1BQztlQUFBQTs7UUFwQkFDO2VBQUFBOztRQWlVQUM7ZUFBQUE7O1FBck5BQztlQUFBQTs7UUFNQUM7ZUFBQUE7O1FBeEhBQztlQUFBQTs7UUErREFDO2VBQUFBOztRQXhPQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUFzRUFDO2VBQUFBOztRQW83QkFD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
1291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5LFxuICAgICAgICAgcHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbEV4cG9ydGVkUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNvbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc29tZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBzb21lU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWUgPSBuZXcgU29tZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICB2YXJpYWJsZSxcbiAgICAgIHByaW1pdGl2ZSxcbiAgICAgIG5lZ2F0ZWRUZXJtLFxuICAgICAgbG9naWNhbFRlcm0sXG4gICAgICBicmFja2V0ZWRUZXJtLFxuICAgICAgY29tcGFyaXNvblRlcm1cbiAgICBdLFxuICAgIHRlcm1TdHJpbmcgPSB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgc3RyaW5nID0gdGVybVN0cmluZywgIC8vL1xuICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUsIG5lZ2F0ZWRUZXJtLCBsb2dpY2FsVGVybSwgYnJhY2tldGVkVGVybSwgY29tcGFyaXNvblRlcm0pO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgYXJndW1lbnRUeXBlKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YWx1ZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHZhcmlhYmxlLFxuICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZVN0cmluZyA9IHZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhbHVlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlID0gbmV3IFZhbHVlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHByaW1pdGl2ZSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFdmVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBldmVyeU5vZGUsIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV2ZXJ5U3RyaW5nID0gZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSksXG4gICAgICAgIHN0cmluZyA9IGV2ZXJ5U3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXZlcnkgPSBuZXcgRXZlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gZXZlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhbHVlcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YWx1ZXNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHZhbHVlTm9kZXMgPSB2YWx1ZXNOb2RlLmdldFZhbHVlTm9kZXMoKSxcbiAgICAgICAgdmFsdWVzQXJyYXkgPSB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHZhbHVlc0FycmF5LCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFsdWVzID0gbmV3IFZhbHVlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZHVjZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWR1Y2VOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2VTdHJpbmcgPSByZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSByZWR1Y2VTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlID0gbmV3IFJlZHVjZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBpbml0aWFsVmFsdWUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJpbmRpbmdOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZWxpZGVkID0gZWxpZGVkRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBiaW5kaW5nID0gbmV3IEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBlbGlkZWQpO1xuXG4gIHJldHVybiBiaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm5hcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybmFyeU5vZGUsIC8vL1xuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGlmRXhwcmVzc2lvbiA9IGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5U3RyaW5nID0gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pLFxuICAgICAgICBzdHJpbmcgPSB0ZXJuYXJ5U3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeSA9IG5ldyBUZXJuYXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgaWZFeHByZXNzaW9uLCBlbHNlRXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbnNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbnMgPSBuZXcgQ29udGFpbnMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gY29udGFpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRW5kc1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZW5kc1dpdGhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZW5kc1dpdGggPSBuZXcgRW5kc1dpdGgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gZW5kc1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZShiaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCaW5kaW5ncyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBiaW5kaW5nc0FycmF5ID0gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBiaW5kaW5nc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBiaW5kaW5ncyA9IG5ldyBCaW5kaW5ncyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVuZ3RoT2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGVuZ3RoT2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbmd0aE9mID0gbmV3IExlbmd0aE9mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiBsZW5ndGhPZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpc3RBc3NpZ25tZW50ID0gbGlzdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGlzdEFzc2lnbm1lbnQsIG9iamVjdEFzc2lnbm1lbnQsIHZhcmlhYmxlQXNzaWdubWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHBvcnRlZCA9IGV4cG9yZXRlZEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gcHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2RlUXVlcnlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnkgPSBuZXcgTm9kZVF1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByaW1pdGl2ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmltaXRpdmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRvSW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0b0ludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdG9JbnRlZ2VyID0gbmV3IFRvSW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXJ0c1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhcnRzV2l0aE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXJ0c1dpdGggPSBuZXcgU3RhcnRzV2l0aChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBzdWJzdHJpbmcpO1xuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0cnlJbnRlZ2VyID0gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnRhaW5zID0gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbmRzV2l0aCA9IGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgc29tZSxcbiAgICAgICAgICBldmVyeSxcbiAgICAgICAgICByZWR1Y2UsXG4gICAgICAgICAgdGVybmFyeSxcbiAgICAgICAgICBub2RlUXVlcnksXG4gICAgICAgICAgbm9kZXNRdWVyeSxcbiAgICAgICAgICBsZW5ndGhPZixcbiAgICAgICAgICB0b0ludGVnZXIsXG4gICAgICAgICAgdHJ5SW50ZWdlcixcbiAgICAgICAgICBjb250YWlucyxcbiAgICAgICAgICBlbmRzV2l0aCxcbiAgICAgICAgICBzdGFydHNXaXRoLFxuICAgICAgICAgIHJldHVybkJsb2NrLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gZXhwcmVzc2lvblN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCBub2RlUXVlcnksIG5vZGVzUXVlcnksIGxlbmd0aE9mLCB0b0ludGVnZXIsIHRyeUludGVnZXIsIGNvbnRhaW5zLCBlbmRzV2l0aCwgc3RhcnRzV2l0aCwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRyeUludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHJ5SW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXIgPSBuZXcgVHJ5SW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMaXN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsaXN0QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGlzdEFzc2lnbm1lbnQgPSBuZXcgTGlzdEFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYmluZGluZ3MpO1xuXG4gIHJldHVybiBsaXN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSBuZXcgUmV0dXJuU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFsdWUpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgT2JqZWN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgb2JqZWN0QXNzaWdubWVudCA9IG5ldyBPYmplY3RBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIG5hbWVkQmluZGluZ3MpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFub255bW91c1Byb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlID0gbmV3IEFub255bW91c1Byb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudHMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkpLFxuICAgICAgICBhcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUodHlwZSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc2lnbm1lbnQgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gdHlwZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gYmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc29tZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gcHJpbWl0aXZlTm9kZS5nZXRWYWx1ZSgpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNvbWUgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWVOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0U29tZU5vZGUoKTtcblxuICBpZiAoc29tZU5vZGUgIT09IG51bGwpIHtcbiAgICBzb21lID0gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBuZWdhdGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbmVnYXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TmVnYXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKG5lZ2F0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbG9naWNhbFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGxvZ2ljYWxUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldExvZ2ljYWxUZXJtTm9kZSgpO1xuXG4gIGlmIChsb2dpY2FsVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBsb2dpY2FsVGVybSA9IGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudFR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IGFyZ3VtZW50VHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRBcmd1bWVudFR5cGVOYW1lKCk7XG5cbiAgaWYgKGFyZ3VtZW50VHlwZU5hbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gICAgYXJndW1lbnRUeXBlID0gVHlwZS5mcm9tVHlwZU5hbWUoYXJndW1lbnRUeXBlTmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBsZW5ndGhPZk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGNvbnRhaW5zTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGVuZHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbmFtZWRCaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBjb250YWluc05vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBlbmRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZEJpbmRpbmdOb2RlLmdldEFsaWFzKCk7XG5cbiAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRvSW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5PZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbXBhcmlzb25UZXJtID0gbnVsbDtcblxuICBjb25zdCBjb21wYXJpc29uVGVybU5vZGUgPSB0ZXJtTk9kZS5nZXRDb21wYXJpc29uVGVybU5vZGUoKTtcblxuICBpZiAoY29tcGFyaXNvblRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZTsgLy8vXG5cbiAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uID0gbnVsbDtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9yZXRlZEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwb3J0ZWQgPSBwcm9jZWR1cmVOb2RlLmlzRXhwb3J0ZWQoKTtcblxuICByZXR1cm4gZXhwb3J0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0cnlJbnRlZ2VyTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBzdGFydHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVuZ3RoT2YgPSBudWxsO1xuXG4gIGNvbnN0IGxlbmd0aE9mTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldExlbmd0aE9mTm9kZSgpO1xuXG4gIGlmIChsZW5ndGhPZk5vZGUgIT09IG51bGwpIHtcbiAgICBsZW5ndGhPZiA9IGxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aE9mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbnRhaW5zID0gbnVsbDtcblxuICBjb25zdCBjb250YWluc05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRDb250YWluc05vZGUoKTtcblxuICBpZiAoY29udGFpbnNOb2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbnMgPSBjb250YWluc0Zyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWlucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBlbmRzV2l0aCA9IG51bGw7XG5cbiAgY29uc3QgZW5kc1dpdGhOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0RW5kc1dpdGhOb2RlKCk7XG5cbiAgaWYgKGVuZHNXaXRoTm9kZSAhPT0gbnVsbCkge1xuICAgIGVuZHNXaXRoID0gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZW5kc1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWZFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldElmRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgaWZFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShpZkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaWZFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvSW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdG9JbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0b0ludGVnZXJOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VG9JbnRlZ2VyTm9kZSgpO1xuXG4gIGlmICh0b0ludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdG9JbnRlZ2VyID0gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2RlUXVlcnkgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVRdWVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXROb2RlUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVRdWVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gc3RhcnRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGxvZ2ljYWxUZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlc05vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRWYWx1ZXNOb2RlKCksXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IG51bGw7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZXNRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXROb2Rlc1F1ZXJ5Tm9kZSgpO1xuXG4gIGlmIChub2Rlc1F1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHJ5SW50ZWdlciA9IG51bGw7XG5cbiAgY29uc3QgdHJ5SW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUcnlJbnRlZ2VyTm9kZSgpO1xuXG4gIGlmICh0cnlJbnRlZ2VyTm9kZSAhPT0gbnVsbCkge1xuICAgIHRyeUludGVnZXIgPSB0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0cnlJbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhcnRzV2l0aCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhcnRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTdGFydHNXaXRoTm9kZSgpO1xuXG4gIGlmIChzdGFydHNXaXRoTm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXJ0c1dpdGggPSBzdGFydHNXaXRoRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGxvZ2ljYWxUZXJtTm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxzZUV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0RWxzZUV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShlbHNlRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBlbHNlRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZXR1cm5CbG9jayA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCk7XG5cbiAgaWYgKHJldHVybkJsb2NrTm9kZSAhPT0gbnVsbCkge1xuICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSByZXR1cm5CbG9ja05vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbXBhcmlzb25UZXJtTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gc29tZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub25zZW5zaWNhbCA9IHJldHVybkJsb2NrTm9kZS5pc05vbnNlbnNpY2FsKCk7XG5cbiAgcmV0dXJuIG5vbnNlbnNpY2FsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkaXNqdW5jdGlvbiA9IGxvZ2ljYWxUZXJtTm9kZS5pc0Rpc2p1bmN0aW9uKCk7XG5cbiAgcmV0dXJuIGRpc2p1bmN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGNvbXBhcmlzb25UZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZVN0cmluZ0Zyb21OYW1lKG5hbWUpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBsaXN0QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nc05vZGUgPSBsaXN0QXNzaWdubWVudE5vZGUuZ2V0QmluZGluZ3NOb2RlKCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBsaXN0QXNzaWdubWVudCA9IG51bGw7XG5cbiAgY29uc3QgbGlzdEFzc2lnbm1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRMaXN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAobGlzdEFzc2lnbm1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgbGlzdEFzc2lnbm1lbnQgPSBsaXN0QXNzaWdubWVudEZyb21MaXN0QXNzaWdubWVudE5vZGUobGlzdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSByZWR1Y2VOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAob2JqZWN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBvYmplY3RBc3NpZ25tZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRQYXJhbWV0ZXJzTm9kZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zQXJyYXlGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtc0FycmF5ID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlc0FycmF5ID0gdmFsdWVOb2Rlcy5tYXAoKHZhbHVlTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWVzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0FycmF5RnJvbUJpbmRpbmdzTm9kZShiaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ05vZGVzID0gYmluZGluZ3NOb2RlLmdldEJpbmRpbmdOb2RlcygpLFxuICAgICAgICBiaW5kaW5nc0FycmF5ID0gYmluZGluZ05vZGVzLm1hcCgoYmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIGJpbmRpbmc7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBiaW5kaW5nc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcGFyYW1ldGVyc05vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzKG5hbWVkQmluZGluZ05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWVkUGFyYW1ldGVyc0FycmF5ID0gbmFtZWRCaW5kaW5nTm9kZXMubWFwKChuYW1lZEJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IG5hbWVkQmluZGluZyA9IG5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG5hbWVkQmluZGluZztcbiAgfSk7XG5cbiAgcmV0dXJuIG5hbWVkUGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlcyA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFZhcmlhYmxlQXNzaWdubWVudE5vZGVzKCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzLm1hcCgodmFyaWFibGVBc3NpZ25tZW50Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnQ7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXk7XG59XG4iXSwibmFtZXMiOlsiYWxpYXNGcm9tTmFtZWRCaW5kaW5nTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlIiwiYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlIiwiYmluZGluZ0Zyb21CaW5kaW5nTm9kZSIsImJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlIiwiYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlIiwiYmluZGluZ3NGcm9tTGlzdEFzc2lnbm1lbnROb2RlIiwiYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSIsImNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZSIsImNvbnRhaW5zRnJvbUV4cHJlc3Npb25Ob2RlIiwiZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlIiwiZWxpZGVkRnJvbUJpbmRpbmdOb2RlIiwiZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUiLCJlbmRzV2l0aEZyb21FeHByZXNzaW9uTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImV2ZXJ5RnJvbUV2ZXJ5Tm9kZSIsImV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwb3JldGVkRnJvbVByb2NlZHVyZU5vZGUiLCJleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVByb2NlZHVyZU5vZGUiLCJsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZSIsImxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZSIsImxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZSIsImxpc3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tQmluZGluZ05vZGUiLCJuYW1lRnJvbUxhYmVsTm9kZSIsIm5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZU5vZGUiLCJxdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwicXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJyZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZWR1Y2VGcm9tUmVkdWNlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJyaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlIiwic3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZSIsInN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSIsInRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlIiwidHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwidHlwZUZyb21CaW5kaW5nTm9kZSIsInR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlIiwidHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwidHlwZUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0eXBlRnJvbVBhcmFuZXRlck5vZGUiLCJ0eXBlRnJvbVByaW1pdGl2ZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZU5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidmFsdWVGcm9tUHJpbWl0aXZlTm9kZSIsInZhbHVlRnJvbVJlZHVjZU5vZGUiLCJ2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwidmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVZhbHVlTm9kZSIsInZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXMiLCJ2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJ2YWx1ZXNGcm9tVmFsdWVzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVGcm9tQ29udGFpbnNOb2RlIiwidmFyaWFibGVGcm9tRW5kc1dpdGhOb2RlIiwidmFyaWFibGVGcm9tRXZlcnlOb2RlIiwidmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlIiwidmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21SZWR1Y2VOb2RlIiwidmFyaWFibGVGcm9tU29tZU5vZGUiLCJ2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFyaWFibGVGcm9tVmFsdWVOb2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic29tZU5vZGUiLCJjb250ZXh0IiwiU29tZSIsImVsZW1lbnRzIiwibm9kZSIsInZhcmlhYmxlIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzdHJpbmciLCJicmVha1BvaW50Iiwic29tZSIsInRlcm1Ob2RlIiwiVGVybSIsInByaW1pdGl2ZSIsIm5lZ2F0ZWRUZXJtIiwibG9naWNhbFRlcm0iLCJicmFja2V0ZWRUZXJtIiwiY29tcGFyaXNvblRlcm0iLCJwcm9wZXJ0aWVzIiwidGVybVN0cmluZyIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm0iLCJ0eXBlTm9kZSIsIlR5cGUiLCJub2RlQXNTdHJpbmciLCJuYW1lIiwiYXJndW1lbnRUeXBlIiwidHlwZSIsInZhbHVlTm9kZSIsIlZhbHVlIiwidmFsdWVTdHJpbmciLCJ2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidmFsdWUiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwidmFsdWVzTm9kZSIsIlZhbHVlcyIsInZhbHVlTm9kZXMiLCJnZXRWYWx1ZU5vZGVzIiwidmFsdWVzQXJyYXkiLCJhcnJheSIsInZhbHVlcyIsInJlZHVjZU5vZGUiLCJSZWR1Y2UiLCJpbml0aWFsVmFsdWUiLCJyZWR1Y2VTdHJpbmciLCJyZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSIsInJlZHVjZSIsImJpbmRpbmdOb2RlIiwiQmluZGluZyIsImVsaWRlZCIsImJpbmRpbmciLCJ0ZXJuYXJ5Tm9kZSIsIlRlcm5hcnkiLCJpZkV4cHJlc3Npb24iLCJlbHNlRXhwcmVzc2lvbiIsInRlcm5hcnlTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0ZXJuYXJ5IiwiY29udGFpbnNOb2RlIiwiQ29udGFpbnMiLCJzdWJzdHJpbmciLCJjb250YWlucyIsImVuZHNXaXRoTm9kZSIsIkVuZHNXaXRoIiwiZW5kc1dpdGgiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImV4cHJlc3Npb24iLCJiaW5kaW5nc05vZGUiLCJCaW5kaW5ncyIsImJpbmRpbmdzQXJyYXkiLCJiaW5kaW5ncyIsImxlbmd0aE9mTm9kZSIsIkxlbmd0aE9mIiwibGVuZ3RoT2YiLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50IiwibGlzdEFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJleHBvcnRlZCIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZVN0cmluZyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInByb2NlZHVyZSIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJwYXJhbWV0ZXJOb2RlIiwiUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwibm9kZVF1ZXJ5Tm9kZSIsIk5vZGVRdWVyeSIsInF1ZXJ5Iiwibm9kZVF1ZXJ5IiwicHJpbWl0aXZlTm9kZSIsIlByaW1pdGl2ZSIsInRvSW50ZWdlck5vZGUiLCJUb0ludGVnZXIiLCJ0b0ludGVnZXIiLCJzdGFydHNXaXRoTm9kZSIsIlN0YXJ0c1dpdGgiLCJzdGFydHNXaXRoIiwibm9kZXNRdWVyeU5vZGUiLCJOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsInBhcmFtZXRlcnNOb2RlIiwiUGFyYW1ldGVycyIsInBhcmFtZXRlcnNBcnJheSIsImV4cHJlc3Npb25Ob2RlIiwiRXhwcmVzc2lvbiIsInRyeUludGVnZXIiLCJwcm9jZWR1cmVDYWxsIiwiZXhwcmVzc2lvblN0cmluZyIsImV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyIsInRyeUludGVnZXJOb2RlIiwiVHJ5SW50ZWdlciIsInJldHVybkJsb2NrTm9kZSIsIlJldHVybkJsb2NrIiwic3RhdGVtZW50cyIsIm5vbnNlbnNpY2FsIiwicmV0dXJuU3RhdGVtZW50IiwicmV0dXJuQmxvY2tTdHJpbmciLCJyZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwibmVnYXRlZFRlcm1Ob2RlIiwiTmVnYXRlZFRlcm0iLCJnZXRUZXJtTm9kZSIsImxvZ2ljYWxUZXJtTm9kZSIsIkxvZ2ljYWxUZXJtIiwiZGlzanVuY3Rpb24iLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsIm5hbWVkQmluZGluZ05vZGUiLCJOYW1lZEJpbmRpbmciLCJhbGlhcyIsIm5hbWVkQmluZGluZyIsIm5hbWVkQmluZGluZ3NOb2RlIiwiTmFtZWRCaW5kaW5ncyIsIm5hbWVkQmluZGluZ05vZGVzIiwiZ2V0TmFtZWRCaW5kaW5nTm9kZXMiLCJuYW1lZEJpbmRpbmdzQXJyYXkiLCJuYW1lZEJpbmRpbmdzIiwiYnJhY2tldGVkVGVybU5vZGUiLCJCcmFja2V0ZWRUZXJtIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwiY29tcGFyaXNvblRlcm1Ob2RlIiwiQ29tcGFyaXNvblRlcm0iLCJuZWdhdGVkIiwibGlzdEFzc2lnbm1lbnROb2RlIiwiTGlzdEFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldE5hbWVkQmluZGluZ3NOb2RlIiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIk9iamVjdEFzc2lnbm1lbnQiLCJhbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiQW5vbnltb3VzUHJvY2VkdXJlIiwibm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZyIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudCIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUiLCJhc3NpZ25tZW50IiwiZ2V0TmFtZSIsImdldFZhbHVlTm9kZSIsImdldFR5cGVOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwiZ2V0UHJpbWl0aXZlTm9kZSIsImlzRWxpZGVkIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImZyb21UeXBlTmFtZSIsImdldFN0cmluZyIsIlF1ZXJ5IiwiZnJvbUV4cHJlc3Npb25TdHJpbmciLCJnZXRWYWx1ZSIsImdldExhYmVsTm9kZSIsImdldFNvbWVOb2RlIiwiZ2V0TmVnYXRlZFRlcm1Ob2RlIiwiZ2V0TG9naWNhbFRlcm1Ob2RlIiwiZ2V0RXZlcnlOb2RlIiwiQk9PTEVBTl9UWVBFX05BTUUiLCJhcmd1bWVudFR5cGVOYW1lIiwiZ2V0QXJndW1lbnRUeXBlTmFtZSIsImdldFJlZHVjZU5vZGUiLCJnZXRBbGlhcyIsImdldFRlcm5hcnlOb2RlIiwiZ2V0QnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtTk9kZSIsImdldENvbXBhcmlzb25UZXJtTm9kZSIsImlzRXhwb3J0ZWQiLCJnZXRMZW5ndGhPZk5vZGUiLCJnZXRDb250YWluc05vZGUiLCJnZXRFbmRzV2l0aE5vZGUiLCJpZkV4cHJlc3Npb25Ob2RlIiwiZ2V0SWZFeHByZXNzaW9uTm9kZSIsImdldFBhcmFtZXRlcnNOb2RlIiwiZ2V0VG9JbnRlZ2VyTm9kZSIsImdldE5vZGVRdWVyeU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0UmV0dXJuQmxvY2tOb2RlIiwiZ2V0Tm9kZXNRdWVyeU5vZGUiLCJnZXRUcnlJbnRlZ2VyTm9kZSIsImdldFN0YXJ0c1dpdGhOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJlbHNlRXhwcmVzc2lvbk5vZGUiLCJnZXRFbHNlRXhwcmVzc2lvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwibWFwIiwiaXNOZWdhdGVkIiwiZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImlzTm9uc2Vuc2ljYWwiLCJpc0Rpc2p1bmN0aW9uIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0QmluZGluZ3NOb2RlIiwiZ2V0TGlzdEFzc2lnbm1lbnROb2RlIiwiZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUiLCJnZXRSZXR1cm5TdGF0ZW1lbnROb2RlIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJnZXRFeHByZXNzaW9uTm9kZSIsInRlcm1Ob2RlcyIsInRlcm1zQXJyYXkiLCJiaW5kaW5nTm9kZXMiLCJnZXRCaW5kaW5nTm9kZXMiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwibmFtZWRQYXJhbWV0ZXJzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsImdldFZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwidmFyaWFibGVBc3NpZ25tZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUE4aENnQkE7ZUFBQUE7O1FBMVlBQztlQUFBQTs7UUF3dUJBQztlQUFBQTs7UUEyREFDO2VBQUFBOztRQWhIQUM7ZUFBQUE7O1FBblhBQztlQUFBQTs7UUFweUJBQztlQUFBQTs7UUFvMkNBQztlQUFBQTs7UUFyeENBQztlQUFBQTs7UUE4cENBQztlQUFBQTs7UUFuMkJBQztlQUFBQTs7UUE2ZkFDO2VBQUFBOztRQW5lQUM7ZUFBQUE7O1FBNmZBQztlQUFBQTs7UUFoNEJBQztlQUFBQTs7UUFnOEJBQztlQUFBQTs7UUFtTUFDO2VBQUFBOztRQTVpQkFDO2VBQUFBOztRQTJmQUM7ZUFBQUE7O1FBbmtDQUM7ZUFBQUE7O1FBNjdCQUM7ZUFBQUE7O1FBempDQUM7ZUFBQUE7O1FBYUFDO2VBQUFBOztRQW8wQkFDO2VBQUFBOztRQXFMQUM7ZUFBQUE7O1FBeHJCQUM7ZUFBQUE7O1FBa2pDQUM7ZUFBQUE7O1FBaFlB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