occam-furtle 3.0.381 → 3.0.385
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/file/furtle.js +4 -4
- package/lib/element/anonymousProcedure.js +15 -11
- package/lib/element/assignment/array.js +4 -3
- package/lib/element/assignment/object.js +6 -5
- package/lib/element/assignment/variable.js +10 -9
- package/lib/element/assignments/variable.js +9 -8
- package/lib/element/contains.js +1 -3
- package/lib/element/error.js +7 -4
- package/lib/element/every.js +21 -25
- package/lib/element/expression.js +19 -11
- package/lib/element/lengthOf.js +1 -1
- package/lib/element/procedure.js +33 -30
- package/lib/element/procedureCall.js +10 -10
- package/lib/element/reduce.js +14 -17
- package/lib/element/returnBlock.js +19 -16
- package/lib/element/some.js +21 -24
- package/lib/element/statement.js +12 -11
- package/lib/element/ternary.js +11 -11
- package/lib/element/type.js +3 -10
- package/lib/process/verify.js +12 -24
- package/lib/utilities/element.js +5 -5
- package/package.json +2 -2
- package/src/context/file/furtle.js +3 -4
- package/src/element/anonymousProcedure.js +21 -17
- package/src/element/assignment/array.js +5 -3
- package/src/element/assignment/object.js +7 -5
- package/src/element/assignment/variable.js +11 -11
- package/src/element/assignments/variable.js +10 -10
- package/src/element/contains.js +0 -3
- package/src/element/error.js +10 -5
- package/src/element/every.js +29 -38
- package/src/element/expression.js +24 -12
- package/src/element/lengthOf.js +1 -1
- package/src/element/procedure.js +45 -44
- package/src/element/procedureCall.js +12 -14
- package/src/element/reduce.js +15 -22
- package/src/element/returnBlock.js +22 -19
- package/src/element/some.js +30 -38
- package/src/element/statement.js +13 -11
- package/src/element/ternary.js +16 -16
- package/src/element/type.js +5 -17
- package/src/process/verify.js +11 -32
- package/src/utilities/element.js +4 -4
package/lib/utilities/element.js
CHANGED
|
@@ -567,9 +567,9 @@ function lengthOfFromLengthOfNode(lengthOfNode, context) {
|
|
|
567
567
|
return lengthOf;
|
|
568
568
|
}
|
|
569
569
|
function statementFromStatementNode(statementNode, context) {
|
|
570
|
-
const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null, arrayAssignment = arrayAssignmentFromStatementNode(statementNode, context),
|
|
570
|
+
const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null, arrayAssignment = arrayAssignmentFromStatementNode(statementNode, context), objectAssignment = objectAssignmentFromStatementNode(statementNode, context), variableAssigments = variableAssignmentsFromStatementNode(statementNode, context);
|
|
571
571
|
context = null;
|
|
572
|
-
const statement = new Statement(context, string, node, breakPoint, arrayAssignment,
|
|
572
|
+
const statement = new Statement(context, string, node, breakPoint, arrayAssignment, objectAssignment, variableAssigments);
|
|
573
573
|
return statement;
|
|
574
574
|
}
|
|
575
575
|
function procedureFromProcedureNode(procedureNode, context) {
|
|
@@ -709,9 +709,9 @@ function returnStatementFromReturnStatementNode(returnStatementNode, context) {
|
|
|
709
709
|
return returnStatement;
|
|
710
710
|
}
|
|
711
711
|
function objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context) {
|
|
712
|
-
const {
|
|
712
|
+
const { ObjectAssignment } = _elements.default, node = objectAssignmentNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromObjectAssignmentNode(objectAssignmentNode, context), namedBindings = namedBindingsFromObjectAssignmentNode(objectAssignmentNode, context);
|
|
713
713
|
context = null;
|
|
714
|
-
const objectAssignment = new
|
|
714
|
+
const objectAssignment = new ObjectAssignment(context, string, node, breakPoint, variable, namedBindings);
|
|
715
715
|
return objectAssignment;
|
|
716
716
|
}
|
|
717
717
|
function anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context) {
|
|
@@ -1281,4 +1281,4 @@ function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variab
|
|
|
1281
1281
|
return variableAssignmentsArray;
|
|
1282
1282
|
}
|
|
1283
1283
|
|
|
1284
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zID0gbmV3IENvbnRhaW5zKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVuZHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVuZHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVuZHNXaXRoID0gbmV3IEVuZHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGVuZHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdtZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5QXNzaWdubWVudCwgb2JqZWN0QXNzaWdtZW50LCB2YXJpYWJsZUFzc2lnbWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBwcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZVF1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVRdWVyeU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVRdWVyeSA9IG5ldyBOb2RlUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJpbWl0aXZlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByaW1pdGl2ZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFsdWUpO1xuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVG9JbnRlZ2VyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRvSW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0b0ludGVnZXIgPSBuZXcgVG9JbnRlZ2VyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhcnRzV2l0aCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGFydHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhcnRzV2l0aCA9IG5ldyBTdGFydHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIHN0YXJ0c1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZXNRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5ID0gbmV3IE5vZGVzUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlcnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHBhcmFtZXRlcnNBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBQYXJhbWV0ZXJzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEV4cHJlc3Npb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXhwcmVzc2lvbk5vZGUsICAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lID0gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV2ZXJ5ID0gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2UgPSByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVuZ3RoT2YgPSBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvSW50ZWdlciA9IHRvSW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRyeUludGVnZXIgPSB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29udGFpbnMgPSBjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVuZHNXaXRoID0gZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGFydHNXaXRoID0gc3RhcnRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgdGVybSxcbiAgICAgICAgICBzb21lLFxuICAgICAgICAgIGV2ZXJ5LFxuICAgICAgICAgIHJlZHVjZSxcbiAgICAgICAgICB0ZXJuYXJ5LFxuICAgICAgICAgIG5vZGVRdWVyeSxcbiAgICAgICAgICBub2Rlc1F1ZXJ5LFxuICAgICAgICAgIGxlbmd0aE9mLFxuICAgICAgICAgIHRvSW50ZWdlcixcbiAgICAgICAgICB0cnlJbnRlZ2VyLFxuICAgICAgICAgIGNvbnRhaW5zLFxuICAgICAgICAgIGVuZHNXaXRoLFxuICAgICAgICAgIHN0YXJ0c1dpdGgsXG4gICAgICAgICAgcmV0dXJuQmxvY2ssXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbFxuICAgICAgICBdLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHNvbWUsIGV2ZXJ5LCByZWR1Y2UsIHRlcm5hcnksIG5vZGVRdWVyeSwgbm9kZXNRdWVyeSwgbGVuZ3RoT2YsIHRvSW50ZWdlciwgdHJ5SW50ZWdlciwgY29udGFpbnMsIGVuZHNXaXRoLCBzdGFydHNXaXRoLCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHJ5SW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0cnlJbnRlZ2VyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHJ5SW50ZWdlciA9IG5ldyBUcnlJbnRlZ2VyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0cnlJbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJldHVybkJsb2NrIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVybkJsb2NrTm9kZSwgLy8vXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICBub25zZW5zaWNhbCA9IG5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnQpLFxuICAgICAgICBzdHJpbmcgPSByZXR1cm5CbG9ja1N0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9jayA9IG5ldyBSZXR1cm5CbG9jayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMsIG5vbnNlbnNpY2FsLCByZXR1cm5TdGF0ZW1lbnQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOZWdhdGVkVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuZWdhdGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkVGVybSA9IG5ldyBOZWdhdGVkVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHRlcm0pO1xuXG4gIHJldHVybiBuZWdhdGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMb2dpY2FsVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsb2dpY2FsVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkaXNqdW5jdGlvbiA9IGRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxvZ2ljYWxUZXJtID0gbmV3IExvZ2ljYWxUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgZGlzanVuY3Rpb24sIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZEJpbmRpbmcgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFsaWFzID0gYWxpYXNGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuZXcgTmFtZWRCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgYWxpYXMpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdzRnJvbU5hbWVkQmluZGluZ3NOb2RlKG5hbWVkQmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5ncyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZEJpbmRpbmdzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZWRCaW5kaW5nTm9kZXMgPSBuYW1lZEJpbmRpbmdzTm9kZS5nZXROYW1lZEJpbmRpbmdOb2RlcygpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzQXJyYXkgPSBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gbmFtZWRCaW5kaW5nc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBuYW1lZEJpbmRpbmdzID0gbmV3IE5hbWVkQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZFRlcm0gPSBuZXcgQnJhY2tldGVkVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0pO1xuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCB2YWx1ZXMpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBhcmlzb25UZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBhcmlzb25UZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBhcmlzb25UZXJtID0gbmV3IENvbXBhcmlzb25UZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25UZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lZEJpbmRpbmdzTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldE5hbWVkQmluZGluZ3NOb2RlKCksXG4gICAgICAgIG5hbWVkQmluZGluZ3MgPSBuYW1lZEJpbmRpbmdzRnJvbU5hbWVkQmluZGluZ3NOb2RlKG5hbWVkQmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBcnJheUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBiaW5kaW5ncyA9IGJpbmRpbmdzRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXJyYXlBc3NpZ25tZW50ID0gbmV3IEFycmF5QXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBiaW5kaW5ncyk7XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5TdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBPYmplY3RBc3NpZ21lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnQgPSBuZXcgT2JqZWN0QXNzaWdtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIG5hbWVkQmluZGluZ3MpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFub255bW91c1Byb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlID0gbmV3IEFub255bW91c1Byb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudHMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkpLFxuICAgICAgICBhcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUodHlwZSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc2lnbm1lbnQgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gdHlwZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gYmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc29tZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gcHJpbWl0aXZlTm9kZS5nZXRWYWx1ZSgpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNvbWUgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWVOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0U29tZU5vZGUoKTtcblxuICBpZiAoc29tZU5vZGUgIT09IG51bGwpIHtcbiAgICBzb21lID0gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBuZWdhdGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbmVnYXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TmVnYXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKG5lZ2F0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbG9naWNhbFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGxvZ2ljYWxUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldExvZ2ljYWxUZXJtTm9kZSgpO1xuXG4gIGlmIChsb2dpY2FsVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBsb2dpY2FsVGVybSA9IGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudFR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IGFyZ3VtZW50VHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRBcmd1bWVudFR5cGVOYW1lKCk7XG5cbiAgaWYgKGFyZ3VtZW50VHlwZU5hbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gICAgYXJndW1lbnRUeXBlID0gVHlwZS5mcm9tVHlwZU5hbWUoYXJndW1lbnRUeXBlTmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBsZW5ndGhPZk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGNvbnRhaW5zTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGVuZHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbmFtZWRCaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBjb250YWluc05vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBlbmRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZEJpbmRpbmdOb2RlLmdldEFsaWFzKCk7XG5cbiAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRvSW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5PZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbXBhcmlzb25UZXJtID0gbnVsbDtcblxuICBjb25zdCBjb21wYXJpc29uVGVybU5vZGUgPSB0ZXJtTk9kZS5nZXRDb21wYXJpc29uVGVybU5vZGUoKTtcblxuICBpZiAoY29tcGFyaXNvblRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZTsgLy8vXG5cbiAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uID0gbnVsbDtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRyeUludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHN0YXJ0c1dpdGhOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVzUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW5ndGhPZiA9IG51bGw7XG5cbiAgY29uc3QgbGVuZ3RoT2ZOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0TGVuZ3RoT2ZOb2RlKCk7XG5cbiAgaWYgKGxlbmd0aE9mTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29udGFpbnMgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldENvbnRhaW5zTm9kZSgpO1xuXG4gIGlmIChjb250YWluc05vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWlucyA9IGNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVuZHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBlbmRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFbmRzV2l0aE5vZGUoKTtcblxuICBpZiAoZW5kc1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgZW5kc1dpdGggPSBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlbmRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBzdGFydHNXaXRoTm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGFydHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBzdGFydHNXaXRoTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFN0YXJ0c1dpdGhOb2RlKCk7XG5cbiAgaWYgKHN0YXJ0c1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0c1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ3NOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gcmVkdWNlTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcnJheUFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEFycmF5QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAoYXJyYXlBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGFycmF5QXNzaWdubWVudCA9IGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAob2JqZWN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBvYmplY3RBc3NpZ25tZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdtZW50Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXNBcnJheSA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IHZhbHVlTm9kZXMubWFwKCh2YWx1ZU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdOb2RlcyA9IGJpbmRpbmdzTm9kZS5nZXRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdOb2Rlcy5tYXAoKGJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBiaW5kaW5nO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gYmluZGluZ3NBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBuYW1lZFBhcmFtZXRlcnNBcnJheSA9IG5hbWVkQmluZGluZ05vZGVzLm1hcCgobmFtZWRCaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBuYW1lZEJpbmRpbmc7XG4gIH0pO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZSIsImFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSIsImFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYXJyYXlBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJiaW5kaW5nRnJvbUJpbmRpbmdOb2RlIiwiYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlIiwiYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSIsImNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZSIsImNvbnRhaW5zRnJvbUV4cHJlc3Npb25Ob2RlIiwiZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlIiwiZWxpZGVkRnJvbUJpbmRpbmdOb2RlIiwiZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUiLCJlbmRzV2l0aEZyb21FeHByZXNzaW9uTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImV2ZXJ5RnJvbUV2ZXJ5Tm9kZSIsImV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlIiwiaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Qcm9jZWR1cmVOb2RlIiwibGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwibGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUiLCJsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tQmluZGluZ05vZGUiLCJuYW1lRnJvbUxhYmVsTm9kZSIsIm5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZU5vZGUiLCJxdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwicXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJyZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZWR1Y2VGcm9tUmVkdWNlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJyaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlIiwic3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZSIsInN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSIsInRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlIiwidHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwidHlwZUZyb21CaW5kaW5nTm9kZSIsInR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlIiwidHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwidHlwZUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0eXBlRnJvbVBhcmFuZXRlck5vZGUiLCJ0eXBlRnJvbVByaW1pdGl2ZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZU5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidmFsdWVGcm9tUHJpbWl0aXZlTm9kZSIsInZhbHVlRnJvbVJlZHVjZU5vZGUiLCJ2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwidmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVZhbHVlTm9kZSIsInZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXMiLCJ2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJ2YWx1ZXNGcm9tVmFsdWVzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbUNvbnRhaW5zTm9kZSIsInZhcmlhYmxlRnJvbUVuZHNXaXRoTm9kZSIsInZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZSIsInZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tUmVkdWNlTm9kZSIsInZhcmlhYmxlRnJvbVNvbWVOb2RlIiwidmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUiLCJ2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlRnJvbVZhbHVlTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInNvbWVOb2RlIiwiY29udGV4dCIsIlNvbWUiLCJlbGVtZW50cyIsIm5vZGUiLCJ2YXJpYWJsZSIsImFub255bW91c1Byb2NlZHVyZSIsInNvbWVTdHJpbmciLCJzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwic3RyaW5nIiwiYnJlYWtQb2ludCIsInNvbWUiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJwcmltaXRpdmUiLCJuZWdhdGVkVGVybSIsImxvZ2ljYWxUZXJtIiwiYnJhY2tldGVkVGVybSIsImNvbXBhcmlzb25UZXJtIiwicHJvcGVydGllcyIsInRlcm1TdHJpbmciLCJ0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0ZXJtIiwidHlwZU5vZGUiLCJUeXBlIiwibm9kZUFzU3RyaW5nIiwibmFtZSIsImFyZ3VtZW50VHlwZSIsInR5cGUiLCJ2YWx1ZU5vZGUiLCJWYWx1ZSIsInZhbHVlU3RyaW5nIiwidmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyIsInZhbHVlIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImV2ZXJ5Tm9kZSIsIkV2ZXJ5IiwiZXZlcnlTdHJpbmciLCJldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsImV2ZXJ5IiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsInZhbHVlc05vZGUiLCJWYWx1ZXMiLCJ2YWx1ZU5vZGVzIiwiZ2V0VmFsdWVOb2RlcyIsInZhbHVlc0FycmF5IiwiYXJyYXkiLCJ2YWx1ZXMiLCJyZWR1Y2VOb2RlIiwiUmVkdWNlIiwiaW5pdGlhbFZhbHVlIiwicmVkdWNlU3RyaW5nIiwicmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJyZWR1Y2UiLCJiaW5kaW5nTm9kZSIsIkJpbmRpbmciLCJlbGlkZWQiLCJiaW5kaW5nIiwidGVybmFyeU5vZGUiLCJUZXJuYXJ5IiwiaWZFeHByZXNzaW9uIiwiZWxzZUV4cHJlc3Npb24iLCJ0ZXJuYXJ5U3RyaW5nIiwidGVybmFyeVN0cmluZ0Zyb21UZXJtIiwidGVybmFyeSIsImNvbnRhaW5zTm9kZSIsIkNvbnRhaW5zIiwic3Vic3RyaW5nIiwiY29udGFpbnMiLCJlbmRzV2l0aE5vZGUiLCJFbmRzV2l0aCIsImVuZHNXaXRoIiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJleHByZXNzaW9uIiwiYmluZGluZ3NOb2RlIiwiQmluZGluZ3MiLCJiaW5kaW5nc0FycmF5IiwiYmluZGluZ3MiLCJsZW5ndGhPZk5vZGUiLCJMZW5ndGhPZiIsImxlbmd0aE9mIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsImFycmF5QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdtZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJwYXJhbWV0ZXJzIiwicmV0dXJuQmxvY2siLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwidG9JbnRlZ2VyTm9kZSIsIlRvSW50ZWdlciIsInRvSW50ZWdlciIsInN0YXJ0c1dpdGhOb2RlIiwiU3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJub2Rlc1F1ZXJ5Tm9kZSIsIk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicGFyYW1ldGVyc05vZGUiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyc0FycmF5IiwiZXhwcmVzc2lvbk5vZGUiLCJFeHByZXNzaW9uIiwidHJ5SW50ZWdlciIsInByb2NlZHVyZUNhbGwiLCJleHByZXNzaW9uU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidHJ5SW50ZWdlck5vZGUiLCJUcnlJbnRlZ2VyIiwicmV0dXJuQmxvY2tOb2RlIiwiUmV0dXJuQmxvY2siLCJzdGF0ZW1lbnRzIiwibm9uc2Vuc2ljYWwiLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5CbG9ja1N0cmluZyIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJuZWdhdGVkVGVybU5vZGUiLCJOZWdhdGVkVGVybSIsImdldFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Ob2RlIiwiTG9naWNhbFRlcm0iLCJkaXNqdW5jdGlvbiIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwibmFtZWRCaW5kaW5nTm9kZSIsIk5hbWVkQmluZGluZyIsImFsaWFzIiwibmFtZWRCaW5kaW5nIiwibmFtZWRCaW5kaW5nc05vZGUiLCJOYW1lZEJpbmRpbmdzIiwibmFtZWRCaW5kaW5nTm9kZXMiLCJnZXROYW1lZEJpbmRpbmdOb2RlcyIsIm5hbWVkQmluZGluZ3NBcnJheSIsIm5hbWVkQmluZGluZ3MiLCJicmFja2V0ZWRUZXJtTm9kZSIsIkJyYWNrZXRlZFRlcm0iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJjb21wYXJpc29uVGVybU5vZGUiLCJDb21wYXJpc29uVGVybSIsIm5lZ2F0ZWQiLCJvYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldE5hbWVkQmluZGluZ3NOb2RlIiwiYXJyYXlBc3NpZ25tZW50Tm9kZSIsIkFycmF5QXNzaWdubWVudCIsInJldHVyblN0YXRlbWVudE5vZGUiLCJSZXR1cm5TdGF0ZW1lbnQiLCJPYmplY3RBc3NpZ21lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwiYW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsIkFub255bW91c1Byb2NlZHVyZSIsIm5vbnltb3VzUHJvY2VkdXJlU3RyaW5nIiwiYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJ2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudHMiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudHMiLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSIsImFzc2lnbm1lbnQiLCJnZXROYW1lIiwiZ2V0VmFsdWVOb2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiaXNFbGlkZWQiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZnJvbVR5cGVOYW1lIiwiZ2V0U3RyaW5nIiwiUXVlcnkiLCJmcm9tRXhwcmVzc2lvblN0cmluZyIsImdldFZhbHVlIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0U29tZU5vZGUiLCJnZXROZWdhdGVkVGVybU5vZGUiLCJnZXRMb2dpY2FsVGVybU5vZGUiLCJnZXRFdmVyeU5vZGUiLCJCT09MRUFOX1RZUEVfTkFNRSIsImFyZ3VtZW50VHlwZU5hbWUiLCJnZXRBcmd1bWVudFR5cGVOYW1lIiwiZ2V0UmVkdWNlTm9kZSIsImdldEFsaWFzIiwiZ2V0VGVybmFyeU5vZGUiLCJnZXRCcmFja2V0ZWRUZXJtTm9kZSIsInRlcm1OT2RlIiwiZ2V0Q29tcGFyaXNvblRlcm1Ob2RlIiwiZ2V0TGVuZ3RoT2ZOb2RlIiwiZ2V0Q29udGFpbnNOb2RlIiwiZ2V0RW5kc1dpdGhOb2RlIiwiaWZFeHByZXNzaW9uTm9kZSIsImdldElmRXhwcmVzc2lvbk5vZGUiLCJnZXRQYXJhbWV0ZXJzTm9kZSIsImdldFRvSW50ZWdlck5vZGUiLCJnZXROb2RlUXVlcnlOb2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwiZ2V0VmFsdWVzTm9kZSIsImdldFJldHVybkJsb2NrTm9kZSIsImdldE5vZGVzUXVlcnlOb2RlIiwiZ2V0VHJ5SW50ZWdlck5vZGUiLCJnZXRTdGFydHNXaXRoTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsImlzTmVnYXRlZCIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiaXNEaXNqdW5jdGlvbiIsImdldFJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldEJpbmRpbmdzTm9kZSIsImdldEFycmF5QXNzaWdubWVudE5vZGUiLCJnZXRPYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldFJldHVyblN0YXRlbWVudE5vZGUiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlQXNzaWdtZW50Tm9kZSIsImdldEV4cHJlc3Npb25Ob2RlIiwidGVybU5vZGVzIiwidGVybXNBcnJheSIsImJpbmRpbmdOb2RlcyIsImdldEJpbmRpbmdOb2RlcyIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJuYW1lZFBhcmFtZXRlcnNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZoQ2dCQTtlQUFBQTs7UUExWUFDO2VBQUFBOztRQWt1QkFDO2VBQUFBOztRQStDQUM7ZUFBQUE7O1FBcEdBQztlQUFBQTs7UUE3V0FDO2VBQUFBOztRQTVXQUM7ZUFBQUE7O1FBbzBCQUM7ZUFBQUE7O1FBM3ZDQUM7ZUFBQUE7O1FBNjFDQUM7ZUFBQUE7O1FBdkhBQztlQUFBQTs7UUF2cENBQztlQUFBQTs7UUEwVEFDO2VBQUFBOztRQTZmQUM7ZUFBQUE7O1FBbmVBQztlQUFBQTs7UUE2ZkFDO2VBQUFBOztRQS8zQkFDO2VBQUFBOztRQXk3QkFDO2VBQUFBOztRQW1NQUM7ZUFBQUE7O1FBdGlCQUM7ZUFBQUE7O1FBcWZBQztlQUFBQTs7UUE1akNBQztlQUFBQTs7UUFzN0JBQztlQUFBQTs7UUFsakNBQztlQUFBQTs7UUFhQUM7ZUFBQUE7O1FBbTBCQUM7ZUFBQUE7O1FBbmdCQUM7ZUFBQUE7O1FBNGlDQUM7ZUFBQUE7O1FBMVhBQztlQUFBQTs7UUErREFDO2VBQUFBOztRQXRFQUM7ZUFBQUE7O1FBMzlCQUM7ZUFBQUE7O1FBb3ZCQUM7ZUFBQUE7O1FBcWVBQztlQUFBQTs7UUEzSUFDO2VBQUFBOztRQWpGQUM7ZUFBQUE7O1FBaDNCQUM7ZUFBQUE7O1FBNlBBQztlQUFBQTs7UUFxWkFDO2VBQUFBOztRQXBNQUM7ZUFBQUE7O1FBcEJBQztlQUFBQTs7UUFpVUFDO2VBQUFBOztRQXJOQUM7ZUFBQUE7O1FBTUFDO2VBQUFBOztRQXhIQUM7ZUFBQUE7O1FBK0RBQztlQUFBQTs7UUF4T0FDO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBdURBQztlQUFBQTs7UUFtOEJBQztlQUFBQTs7UUF6T0FDO2VBQUFBOztRQTV6QkFDO2VBQUFBOztRQXNaQUM7ZUFBQUE7O1FBd1NBQztlQUFBQTs7UUFwMkJBQztlQUFBQTs7UUF5NUJBQztlQUFBQTs7UUE5MUJBQztlQUFBQTs7UUFvN0JBQztlQUFBQTs7UUFuc0JBQztlQUFBQTs7UUEwekJBQztlQUFBQTs7UUFybkNBQztlQUFBQTs7UUErc0NBQztlQUFBQTs7UUFwREFDO2VBQUFBOztRQWxrQ0FDO2VBQUFBOztRQXV3QkFDO2VBQUFBOztRQWwwQkFDO2VBQUFBOztRQTZhQUM7ZUFBQUE7O1FBZ0VBQztlQUFBQTs7UUF3aUJBQztlQUFBQTs7UUF4ekJBQztlQUFBQTs7UUF4UkFDO2VBQUFBOztRQTJqQkFDO2VBQUFBOztRQXFFQUM7ZUFBQUE7O1FBMEVBQztlQUFBQTs7UUF2MUJBQztlQUFBQTs7UUFvckNBQztlQUFBQTs7UUF4aENBQztlQUFBQTs7UUFnckNBQztlQUFBQTs7UUF4TUFDO2VBQUFBOztRQXRFQUM7ZUFBQUE7O1FBaHZCQUM7ZUFBQUE7O1FBNjlCQUM7ZUFBQUE7O1FBcDFCQUM7ZUFBQUE7O1FBa3hCQUM7ZUFBQUE7O1FBbkhBQztlQUFBQTs7UUE3WUFDO2VBQUFBOztRQW4zQkFDO2VBQUFBOztRQW92Q0FDO2VBQUFBOztRQXI0QkFDO2VBQUFBOztRQXhHQUM7ZUFBQUE7O1FBbWhDQUM7ZUFBQUE7O1FBaFNBQztlQUFBQTs7UUFPQUM7ZUFBQUE7O1FBa0xBQztlQUFBQTs7UUEvSEFDO2VBQUFBOztRQTdNQUM7ZUFBQUE7O1FBZ0ZBQztlQUFBQTs7UUF2NkJBQztlQUFBQTs7UUFnckJBQztlQUFBQTs7UUFveUJBQztlQUFBQTs7UUEvY0FDO2VBQUFBOztRQTEyQkFDO2VBQUFBOztRQWcvQkFDO2VBQUFBOztRQTF6QkFDO2VBQUFBOztRQXU0QkFDO2VBQUFBOztRQTl4QkFDO2VBQUFBOztRQWs0QkFDO2VBQUFBOztRQS9uQkFDO2VBQUFBOztRQThOQUM7ZUFBQUE7O1FBa0VBQztlQUFBQTs7UUE1REFDO2VBQUFBOztRQXpKQUM7ZUFBQUE7O1FBbUJBQztlQUFBQTs7UUFuREFDO2VBQUFBOztRQTVzQkFDO2VBQUFBOztRQTQxQ0FDO2VBQUFBOztRQXRwQkFDO2VBQUFBOztRQXdHQUM7ZUFBQUE7O1FBaktBQztlQUFBQTs7UUE0aEJBQztlQUFBQTs7UUFOQUM7ZUFBQUE7O1FBcHBDQUM7ZUFBQUE7O1FBbTdDQUM7ZUFBQUE7O1FBN1NBQztlQUFBQTs7UUF2a0NBQztlQUFBQTs7UUFzaUJBQztlQUFBQTs7UUF3M0JBQztlQUFBQTs7UUE1RkFDO2VBQUFBOztRQTd5QkFDO2VBQUFBOztRQTJ1QkFDO2VBQUFBOztRQXZhQUM7ZUFBQUE7O1FBT0FDO2VBQUFBOztRQS9NQUM7ZUFBQUE7O1FBaU1BQztlQUFBQTs7UUFrRUFDO2VBQUFBOztRQW9GQUM7ZUFBQUE7O1FBZ1VBQztlQUFBQTs7UUF2bEJBQztlQUFBQTs7UUFsSEFDO2VBQUFBOztRQWtZQUM7ZUFBQUE7O1FBM1hBQztlQUFBQTs7UUE2VUFDO2VBQUFBOztRQXVDQUM7ZUFBQUE7O1FBeVlBQztlQUFBQTs7UUExSUFDO2VBQUFBOztRQWhpQkFDO2VBQUFBOztRQXpsQkFDO2VBQUFBOzs7NEJBN09NO2lFQUVEOzJCQUVhO3dCQWE2Qzs7Ozs7O0FBRXhFLFNBQVM1RCxpQkFBaUI2RCxRQUFRLEVBQUVDLE9BQU87SUFDaEQsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsaUJBQVEsRUFDbkJDLE9BQU9KLFVBQ1BLLFdBQVdkLHFCQUFxQlMsVUFBVUMsVUFDMUNLLHFCQUFxQnJKLCtCQUErQitJLFVBQVVDLFVBQzlETSxhQUFhQyxJQUFBQSxtREFBMkMsRUFBQ0gsVUFBVUMscUJBQ25FRyxTQUFTRixZQUNURyxhQUFhO0lBRW5CVCxVQUFVO0lBRVYsTUFBTVUsT0FBTyxJQUFJVCxLQUFLRCxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZTCxVQUFVQztJQUVuRSxPQUFPSztBQUNUO0FBRU8sU0FBUzdELGlCQUFpQjhELFFBQVEsRUFBRVgsT0FBTztJQUNoRCxNQUFNLEVBQUVZLElBQUksRUFBRSxHQUFHVixpQkFBUSxFQUN2QkMsT0FBT1EsVUFDUFAsV0FBV1oscUJBQXFCbUIsVUFBVVgsVUFDMUNhLFlBQVkvRixzQkFBc0I2RixVQUFVWCxVQUM1Q2MsY0FBYzlHLHdCQUF3QjJHLFVBQVVYLFVBQ2hEZSxjQUFjN0gsd0JBQXdCeUgsVUFBVVgsVUFDaERnQixnQkFBZ0J2SiwwQkFBMEJrSixVQUFVWCxVQUNwRGlCLGlCQUFpQnRKLDJCQUEyQmdKLFVBQVVYLFVBQ3REa0IsYUFBYTtRQUNYZDtRQUNBUztRQUNBQztRQUNBQztRQUNBQztRQUNBQztLQUNELEVBQ0RFLGFBQWFDLElBQUFBLGdDQUF3QixFQUFDRixZQUFZbEIsVUFDbERRLFNBQVNXLFlBQ1RWLGFBQWE7SUFFZlQsVUFBVTtJQUVWLE1BQU1xQixPQUFPLElBQUlULEtBQUtaLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlMLFVBQVVTLFdBQVdDLGFBQWFDLGFBQWFDLGVBQWVDO0lBRXZILE9BQU9JO0FBQ1Q7QUFFTyxTQUFTdkQsaUJBQWlCd0QsUUFBUSxFQUFFdEIsT0FBTztJQUNoRCxNQUFNLEVBQUV1QixJQUFJLEVBQUUsR0FBR3JCLGlCQUFRLEVBQ25CQyxPQUFPbUIsVUFDUGQsU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCc0IsT0FBT2pJLGlCQUFpQjhILFVBQVV0QixVQUNsQzBCLGVBQWV6Syx5QkFBeUJxSyxVQUFVdEIsVUFDbERTLGFBQWE7SUFFbkJULFVBQVU7SUFFVixNQUFNMkIsT0FBTyxJQUFJSixLQUFLdkIsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWWdCLE1BQU1DO0lBRS9ELE9BQU9DO0FBQ1Q7QUFFTyxTQUFTdEQsbUJBQW1CdUQsU0FBUyxFQUFFNUIsT0FBTztJQUNuRCxNQUFNLEVBQUU2QixLQUFLLEVBQUUsR0FBRzNCLGlCQUFRLEVBQ3BCQyxPQUFPeUIsV0FDUHhCLFdBQVdQLHNCQUFzQitCLFdBQVc1QixVQUM1Q2EsWUFBWTlGLHVCQUF1QjZHLFdBQVc1QixVQUM5Q2tCLGFBQWE7UUFDWGQ7UUFDQVM7S0FDRCxFQUNEaUIsY0FBY0MsSUFBQUEsaUNBQXlCLEVBQUNiLFlBQVlsQixVQUNwRFEsU0FBU3NCLGFBQ1RyQixhQUFhO0lBRW5CVCxVQUFVO0lBRVYsTUFBTWdDLFFBQVEsSUFBSUgsTUFBTTdCLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlMLFVBQVVTO0lBRXJFLE9BQU9tQjtBQUNUO0FBRU8sU0FBUzdKLG1CQUFtQjhKLFNBQVMsRUFBRWpDLE9BQU87SUFDbkQsTUFBTSxFQUFFa0MsS0FBSyxFQUFFLEdBQUdoQyxpQkFBUSxFQUNwQkMsT0FBTzhCLFdBQ1B6QixTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWE7SUFFbkJULFVBQVU7SUFFVixNQUFNbUMsUUFBUSxJQUFJRCxNQUFNbEMsU0FBU1EsUUFBUUwsTUFBTU07SUFFL0MsT0FBTzBCO0FBQ1Q7QUFFTyxTQUFTL0osbUJBQW1CZ0ssU0FBUyxFQUFFcEMsT0FBTztJQUNuRCxNQUFNLEVBQUVxQyxLQUFLLEVBQUUsR0FBR25DLGlCQUFRLEVBQ3BCQyxPQUFPaUMsV0FDUGhDLFdBQVdwQixzQkFBc0JvRCxXQUFXcEMsVUFDNUNLLHFCQUFxQnZKLGdDQUFnQ3NMLFdBQVdwQyxVQUNoRXNDLGNBQWNDLElBQUFBLG9EQUE0QyxFQUFDbkMsVUFBVUMscUJBQ3JFRyxTQUFTOEIsYUFDVDdCLGFBQWE7SUFFbkJULFVBQVU7SUFFVixNQUFNd0MsUUFBUSxJQUFJSCxNQUFNckMsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWUwsVUFBVUM7SUFFckUsT0FBT21DO0FBQ1Q7QUFFTyxTQUFTN0osbUJBQW1COEosU0FBUyxFQUFFekMsT0FBTztJQUNuRCxNQUFNLEVBQUUwQyxLQUFLLEVBQUUsR0FBR3hDLGlCQUFRLEVBQ3BCQyxPQUFPc0MsV0FDUGpDLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNiZ0IsT0FBT3JJLGtCQUFrQnFKLFdBQVd6QztJQUUxQ0EsVUFBVTtJQUVWLE1BQU0yQyxRQUFRLElBQUlELE1BQU0xQyxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZZ0I7SUFFM0QsT0FBT2tCO0FBQ1Q7QUFFTyxTQUFTbkUscUJBQXFCb0UsVUFBVSxFQUFFNUMsT0FBTztJQUN0RCxNQUFNLEVBQUU2QyxNQUFNLEVBQUUsR0FBRzNDLGlCQUFRLEVBQ3JCQyxPQUFPeUMsWUFDUHBDLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5QjJDLGFBQWFGLFdBQVdHLGFBQWEsSUFDckNDLGNBQWMxRSwwQkFBMEJ3RSxZQUFZOUMsVUFDcERpRCxRQUFRRCxhQUNSdkMsYUFBYTtJQUVuQlQsVUFBVTtJQUVWLE1BQU1rRCxTQUFTLElBQUlMLE9BQU83QyxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZd0M7SUFFN0QsT0FBT0M7QUFDVDtBQUVPLFNBQVM1SCxxQkFBcUI2SCxVQUFVLEVBQUVuRCxPQUFPO0lBQ3RELE1BQU0sRUFBRW9ELE1BQU0sRUFBRSxHQUFHbEQsaUJBQVEsRUFDckJDLE9BQU9nRCxZQUNQL0MsV0FBV2YsdUJBQXVCOEQsWUFBWW5ELFVBQzlDcUQsZUFBZTNLLDJCQUEyQnlLLFlBQVluRCxVQUN0REsscUJBQXFCdEosaUNBQWlDb00sWUFBWW5ELFVBQ2xFc0QsZUFBZUMsSUFBQUEsc0VBQThELEVBQUNuRCxVQUFVaUQsY0FBY2hELHFCQUN0R0csU0FBUzhDLGNBQ1Q3QyxhQUFhO0lBRW5CVCxVQUFVO0lBRVYsTUFBTXdELFNBQVMsSUFBSUosT0FBT3BELFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlMLFVBQVVpRCxjQUFjaEQ7SUFFckYsT0FBT21EO0FBQ1Q7QUFFTyxTQUFTcE0sdUJBQXVCcU0sV0FBVyxFQUFFekQsT0FBTztJQUN6RCxNQUFNLEVBQUUwRCxPQUFPLEVBQUUsR0FBR3hELGlCQUFRLEVBQ3RCQyxPQUFPc0QsYUFDUGpELFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNia0IsT0FBT3BFLG9CQUFvQmtHLGFBQWF6RCxVQUN4Q3lCLE9BQU90SSxvQkFBb0JzSyxhQUFhekQsVUFDeEMyRCxTQUFTNUwsc0JBQXNCMEwsYUFBYXpEO0lBRWxEQSxVQUFVO0lBRVYsTUFBTTRELFVBQVUsSUFBSUYsUUFBUTFELFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlrQixNQUFNRixNQUFNa0M7SUFFM0UsT0FBT0M7QUFDVDtBQUVPLFNBQVMzRyx1QkFBdUI0RyxXQUFXLEVBQUU3RCxPQUFPO0lBQ3pELE1BQU0sRUFBRThELE9BQU8sRUFBRSxHQUFHNUQsaUJBQVEsRUFDdEJDLE9BQU8wRCxhQUNQeEMsT0FBT3ZFLG9CQUFvQitHLGFBQWE3RCxVQUN4QytELGVBQWV0TCw0QkFBNEJvTCxhQUFhN0QsVUFDeERnRSxpQkFBaUJoTSw4QkFBOEI2TCxhQUFhN0QsVUFDNURpRSxnQkFBZ0JDLElBQUFBLDZCQUFxQixFQUFDN0MsT0FDdENiLFNBQVN5RCxlQUNUeEQsYUFBYTtJQUVuQlQsVUFBVTtJQUVWLE1BQU1tRSxVQUFVLElBQUlMLFFBQVE5RCxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZWSxNQUFNMEMsY0FBY0M7SUFFbkYsT0FBT0c7QUFDVDtBQUVPLFNBQVN2TSx5QkFBeUJ3TSxZQUFZLEVBQUVwRSxPQUFPO0lBQzVELE1BQU0sRUFBRXFFLFFBQVEsRUFBRSxHQUFHbkUsaUJBQVEsRUFDdkJDLE9BQU9pRSxjQUNQNUQsU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2JMLFdBQVd0Qix5QkFBeUJzRixjQUFjcEUsVUFDbERzRSxZQUFZL0gsMEJBQTBCNkgsY0FBY3BFO0lBRTFEQSxVQUFVO0lBRVYsTUFBTXVFLFdBQVcsSUFBSUYsU0FBU3JFLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlMLFVBQVVrRTtJQUUzRSxPQUFPQztBQUNUO0FBRU8sU0FBU3RNLHlCQUF5QnVNLFlBQVksRUFBRXhFLE9BQU87SUFDNUQsTUFBTSxFQUFFeUUsUUFBUSxFQUFFLEdBQUd2RSxpQkFBUSxFQUN2QkMsT0FBT3FFLGNBQ1BoRSxTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYkwsV0FBV3JCLHlCQUF5QnlGLGNBQWN4RSxVQUNsRHNFLFlBQVk5SCwwQkFBMEJnSSxjQUFjeEU7SUFFMURBLFVBQVU7SUFFVixNQUFNMEUsV0FBVyxJQUFJRCxTQUFTekUsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWUwsVUFBVWtFO0lBRTNFLE9BQU9JO0FBQ1Q7QUFFTyxTQUFTNUUseUJBQXlCNkUsWUFBWSxFQUFFM0UsT0FBTztJQUM1RCxNQUFNLEVBQUU0RSxRQUFRLEVBQUUsR0FBRzFFLGlCQUFRLEVBQ3ZCQyxPQUFPd0UsY0FDUG5FLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNia0IsT0FBTzNELHFCQUFxQjJHLGNBQWMzRSxVQUMxQ3lCLE9BQU9oSSxxQkFBcUJrTCxjQUFjM0UsVUFDMUM2RSxhQUFhck0sMkJBQTJCbU0sY0FBYzNFO0lBRTVEQSxVQUFVO0lBRVYsTUFBTUksV0FBVyxJQUFJd0UsU0FBUzVFLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlrQixNQUFNRixNQUFNb0Q7SUFFN0UsT0FBT3pFO0FBQ1Q7QUFFTyxTQUFTN0kseUJBQXlCdU4sWUFBWSxFQUFFOUUsT0FBTztJQUM1RCxNQUFNLEVBQUUrRSxRQUFRLEVBQUUsR0FBRzdFLGlCQUFRLEVBQ3ZCQyxPQUFPMkUsY0FDUHRFLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNidUUsZ0JBQWdCM04sOEJBQThCeU4sY0FBYzlFLFVBQzVEaUQsUUFBUStCLGVBQWUsR0FBRztJQUVoQ2hGLFVBQVU7SUFFVixNQUFNaUYsV0FBVyxJQUFJRixTQUFTL0UsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWXdDO0lBRWpFLE9BQU9nQztBQUNUO0FBRU8sU0FBU2pNLHlCQUF5QmtNLFlBQVksRUFBRWxGLE9BQU87SUFDNUQsTUFBTSxFQUFFbUYsUUFBUSxFQUFFLEdBQUdqRixpQkFBUSxFQUN2QkMsT0FBTytFLGNBQ1AxRSxTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYkwsV0FBV25CLHlCQUF5QmlHLGNBQWNsRjtJQUV4REEsVUFBVTtJQUVWLE1BQU1vRixXQUFXLElBQUlELFNBQVNuRixTQUFTUSxRQUFRTCxNQUFNTSxZQUFZTDtJQUVqRSxPQUFPZ0Y7QUFDVDtBQUVPLFNBQVMvSSwyQkFBMkJnSixhQUFhLEVBQUVyRixPQUFPO0lBQy9ELE1BQU0sRUFBRXNGLFNBQVMsRUFBRSxHQUFHcEYsaUJBQVEsRUFDeEJDLE9BQU9rRixlQUNQN0UsU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2I4RSxrQkFBa0JwTyxpQ0FBaUNrTyxlQUFlckYsVUFDbEV3RixrQkFBa0JqTCxrQ0FBa0M4SyxlQUFlckYsVUFDbkV5RixxQkFBcUI5RyxxQ0FBcUMwRyxlQUFlckY7SUFFL0VBLFVBQVU7SUFFVixNQUFNMEYsWUFBWSxJQUFJSixVQUFVdEYsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWThFLGlCQUFpQkMsaUJBQWlCQztJQUVyRyxPQUFPQztBQUNUO0FBRU8sU0FBU3hLLDJCQUEyQnlLLGFBQWEsRUFBRTNGLE9BQU87SUFDL0QsTUFBTSxFQUFFNEYsU0FBUyxFQUFFLEdBQUcxRixpQkFBUSxFQUN4QkMsT0FBT3dGLGVBQ1BoRSxPQUFPOUQsc0JBQXNCOEgsZUFBZTNGLFVBQzVDMkMsUUFBUS9KLHVCQUF1QitNLGVBQWUzRixVQUM5QzZGLGFBQWFqTCw0QkFBNEIrSyxlQUFlM0YsVUFDeEQ4RixjQUFjbkssNkJBQTZCZ0ssZUFBZTNGLFVBQzFEK0Ysa0JBQWtCQyxJQUFBQSw0REFBb0QsRUFBQ3JFLE1BQU1nQixPQUFPa0QsWUFBWUMsY0FDaEd0RixTQUFTdUYsaUJBQ1R0RixhQUFhLE1BQ2J3RixZQUFZLElBQUlMLFVBQVU1RixTQUFTUSxRQUFRTCxNQUFNTSxZQUFZa0IsTUFBTWdCLE9BQU9rRCxZQUFZQztJQUU1RixPQUFPRztBQUNUO0FBRU8sU0FBU3pLLDJCQUEyQjBLLGFBQWEsRUFBRWxHLE9BQU87SUFDL0QsTUFBTSxFQUFFbUcsU0FBUyxFQUFFLEdBQUdqRyxpQkFBUSxFQUN4QkMsT0FBTytGLGVBQ1AxRixTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYmdCLE9BQU9sSSxzQkFBc0IyTSxlQUFlbEc7SUFFbERBLFVBQVU7SUFFVixNQUFNb0csWUFBWSxJQUFJRCxVQUFVbkcsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWWdCO0lBRW5FLE9BQU8yRTtBQUNUO0FBRU8sU0FBUzVMLDJCQUEyQjZMLGFBQWEsRUFBRXJHLE9BQU87SUFDL0QsTUFBTSxFQUFFc0csU0FBUyxFQUFFLEdBQUdwRyxpQkFBUSxFQUN4QkMsT0FBT2tHLGVBQ1A3RixTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYmtCLE9BQU9oRSxzQkFBc0IwSSxlQUFlckcsVUFDNUN5QixPQUFPbkksc0JBQXNCK00sZUFBZXJHO0lBRWxEQSxVQUFVO0lBRVYsTUFBTXVHLFlBQVksSUFBSUQsVUFBVXRHLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlrQixNQUFNRjtJQUV6RSxPQUFPOEU7QUFDVDtBQUVPLFNBQVNyTSwyQkFBMkJzTSxhQUFhLEVBQUV4RyxPQUFPO0lBQy9ELE1BQU0sRUFBRXlHLFNBQVMsRUFBRSxHQUFHdkcsaUJBQVEsRUFDeEJDLE9BQU9xRyxlQUNQaEcsU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2JMLFdBQVdsQiwwQkFBMEJzSCxlQUFleEcsVUFDcEQwRyxRQUFRdkwsdUJBQXVCcUwsZUFBZXhHO0lBRXBEQSxVQUFVO0lBRVYsTUFBTTJHLFlBQVksSUFBSUYsVUFBVXpHLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlMLFVBQVVzRztJQUU3RSxPQUFPQztBQUNUO0FBRU8sU0FBUzlMLDJCQUEyQitMLGFBQWEsRUFBRTVHLE9BQU87SUFDL0QsTUFBTSxFQUFFNkcsU0FBUyxFQUFFLEdBQUczRyxpQkFBUSxFQUN4QkMsT0FBT3lHLGVBQ1BwRyxTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYmtCLE9BQU8vRCxzQkFBc0JnSixlQUFlNUcsVUFDNUNnQyxRQUFRL0QsdUJBQXVCMkksZUFBZTVHO0lBRXBEQSxVQUFVO0lBRVYsTUFBTWEsWUFBWSxJQUFJZ0csVUFBVTdHLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlrQixNQUFNSztJQUV6RSxPQUFPbkI7QUFDVDtBQUVPLFNBQVMxRCwyQkFBMkIySixhQUFhLEVBQUU5RyxPQUFPO0lBQy9ELE1BQU0sRUFBRStHLFNBQVMsRUFBRSxHQUFHN0csaUJBQVEsRUFDeEJDLE9BQU8yRyxlQUNQdEcsU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2JMLFdBQVdYLDBCQUEwQnFILGVBQWU5RztJQUUxREEsVUFBVTtJQUVWLE1BQU1nSCxZQUFZLElBQUlELFVBQVUvRyxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZTDtJQUVuRSxPQUFPNEc7QUFDVDtBQUVPLFNBQVM1Syw2QkFBNkI2SyxjQUFjLEVBQUVqSCxPQUFPO0lBQ2xFLE1BQU0sRUFBRWtILFVBQVUsRUFBRSxHQUFHaEgsaUJBQVEsRUFDekJDLE9BQU84RyxnQkFDUHpHLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNiTCxXQUFXYiwyQkFBMkIwSCxnQkFBZ0JqSCxVQUN0RHNFLFlBQVk3SCw0QkFBNEJ3SyxnQkFBZ0JqSDtJQUU5REEsVUFBVTtJQUVWLE1BQU1tSCxhQUFhLElBQUlELFdBQVdsSCxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZTCxVQUFVa0U7SUFFL0UsT0FBTzZDO0FBQ1Q7QUFFTyxTQUFTL00sNkJBQTZCZ04sY0FBYyxFQUFFcEgsT0FBTztJQUNsRSxNQUFNLEVBQUVxSCxVQUFVLEVBQUUsR0FBR25ILGlCQUFRLEVBQ3pCQyxPQUFPaUgsZ0JBQ1A1RyxTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYkwsV0FBV2pCLDJCQUEyQmlJLGdCQUFnQnBILFVBQ3REMEcsUUFBUXRMLHdCQUF3QmdNLGdCQUFnQnBIO0lBRXREQSxVQUFVO0lBRVYsTUFBTXNILGFBQWEsSUFBSUQsV0FBV3JILFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlMLFVBQVVzRztJQUUvRSxPQUFPWTtBQUNUO0FBRU8sU0FBUzNNLDZCQUE2QjRNLGNBQWMsRUFBRXZILE9BQU87SUFDbEUsTUFBTSxFQUFFd0gsVUFBVSxFQUFFLEdBQUd0SCxpQkFBUSxFQUN6QkMsT0FBT29ILGdCQUNQL0csU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2JnSCxrQkFBa0JoTixrQ0FBa0M4TSxnQkFBZ0J2SCxVQUNwRWlELFFBQVF3RSxpQkFBaUIsR0FBRztJQUVsQ3pILFVBQVU7SUFFVixNQUFNNkYsYUFBYSxJQUFJMkIsV0FBV3hILFNBQVNRLFFBQVFMLE1BQU1NLFlBQVl3QztJQUVyRSxPQUFPNEM7QUFDVDtBQUVPLFNBQVN2Tiw2QkFBNkJvUCxjQUFjLEVBQUUxSCxPQUFPO0lBQ2xFLE1BQU0sRUFBRTJILFVBQVUsRUFBRSxHQUFHekgsaUJBQVEsRUFDekJDLE9BQU91SCxnQkFDUHJHLE9BQU8xRSx1QkFBdUIrSyxnQkFBZ0IxSCxVQUM5Q1UsT0FBT3pFLHVCQUF1QnlMLGdCQUFnQjFILFVBQzlDd0MsUUFBUW5LLHdCQUF3QnFQLGdCQUFnQjFILFVBQ2hEd0QsU0FBU25JLHlCQUF5QnFNLGdCQUFnQjFILFVBQ2xEbUUsVUFBVW5ILDBCQUEwQjBLLGdCQUFnQjFILFVBQ3BEMkcsWUFBWTFNLDRCQUE0QnlOLGdCQUFnQjFILFVBQ3hEc0gsYUFBYW5OLDZCQUE2QnVOLGdCQUFnQjFILFVBQzFEb0YsV0FBV3JNLDJCQUEyQjJPLGdCQUFnQjFILFVBQ3REZ0gsWUFBWTlKLDRCQUE0QndLLGdCQUFnQjFILFVBQ3hENEgsYUFBYXhLLDZCQUE2QnNLLGdCQUFnQjFILFVBQzFEdUUsV0FBVzFNLDJCQUEyQjZQLGdCQUFnQjFILFVBQ3REMEUsV0FBV3hNLDJCQUEyQndQLGdCQUFnQjFILFVBQ3REbUgsYUFBYWhMLDZCQUE2QnVMLGdCQUFnQjFILFVBQzFEOEYsY0FBY3BLLDhCQUE4QmdNLGdCQUFnQjFILFVBQzVENkgsZ0JBQWdCN00sZ0NBQWdDME0sZ0JBQWdCMUgsVUFDaEVrQixhQUFhO1FBQ1hHO1FBQ0FYO1FBQ0E4QjtRQUNBZ0I7UUFDQVc7UUFDQXdDO1FBQ0FXO1FBQ0FsQztRQUNBNEI7UUFDQVk7UUFDQXJEO1FBQ0FHO1FBQ0F5QztRQUNBckI7UUFDQStCO0tBQ0QsRUFDREMsbUJBQW1CQyxJQUFBQSxzQ0FBOEIsRUFBQzdHLFlBQVlsQixVQUM5RFEsU0FBU3NILGtCQUNUckgsYUFBYTtJQUVuQlQsVUFBVTtJQUVWLE1BQU02RSxhQUFhLElBQUk4QyxXQUFXM0gsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWVksTUFBTVgsTUFBTThCLE9BQU9nQixRQUFRVyxTQUFTd0MsV0FBV1csWUFBWWxDLFVBQVU0QixXQUFXWSxZQUFZckQsVUFBVUcsVUFBVXlDLFlBQVlyQixhQUFhK0I7SUFFOU0sT0FBT2hEO0FBQ1Q7QUFFTyxTQUFTeEgsNkJBQTZCMkssY0FBYyxFQUFFaEksT0FBTztJQUNsRSxNQUFNLEVBQUVpSSxVQUFVLEVBQUUsR0FBRy9ILGlCQUFRLEVBQ3pCQyxPQUFPNkgsZ0JBQ1B4SCxTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYkwsV0FBV1YsMkJBQTJCc0ksZ0JBQWdCaEk7SUFFNURBLFVBQVU7SUFFVixNQUFNNEgsYUFBYSxJQUFJSyxXQUFXakksU0FBU1EsUUFBUUwsTUFBTU0sWUFBWUw7SUFFckUsT0FBT3dIO0FBQ1Q7QUFFTyxTQUFTaE0sK0JBQStCc00sZUFBZSxFQUFFbEksT0FBTztJQUNyRSxNQUFNLEVBQUVtSSxXQUFXLEVBQUUsR0FBR2pJLGlCQUFRLEVBQzFCQyxPQUFPK0gsaUJBQ1BFLGFBQWE5TCw4QkFBOEI0TCxpQkFBaUJsSSxVQUM1RHFJLGNBQWNoTywrQkFBK0I2TixpQkFBaUJsSSxVQUM5RHNJLGtCQUFrQnpNLG1DQUFtQ3FNLGlCQUFpQmxJLFVBQ3RFdUksb0JBQW9CQyxJQUFBQSxnREFBd0MsRUFBQ0Ysa0JBQzdEOUgsU0FBUytILG1CQUNUOUgsYUFBYTtJQUVuQlQsVUFBVTtJQUVWLE1BQU04RixjQUFjLElBQUlxQyxZQUFZbkksU0FBU1EsUUFBUUwsTUFBTU0sWUFBWTJILFlBQVlDLGFBQWFDO0lBRWhHLE9BQU94QztBQUNUO0FBRU8sU0FBUy9MLCtCQUErQjBPLGVBQWUsRUFBRXpJLE9BQU87SUFDckUsTUFBTSxFQUFFMEksV0FBVyxFQUFFLEdBQUd4SSxpQkFBUSxFQUMxQkMsT0FBT3NJLGlCQUNQakksU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2JFLFdBQVc4SCxnQkFBZ0JFLFdBQVcsSUFDdENoSCxPQUFPakUsd0JBQXdCaUQsVUFBVVgsVUFDekNxQixPQUFPekUsd0JBQXdCNkwsaUJBQWlCekksVUFDaERjLGNBQWMsSUFBSTRILFlBQVkxSSxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZa0IsTUFBTU47SUFFN0UsT0FBT1A7QUFDVDtBQUVPLFNBQVM3SCwrQkFBK0IyUCxlQUFlLEVBQUU1SSxPQUFPO0lBQ3JFLE1BQU0sRUFBRTZJLFdBQVcsRUFBRSxHQUFHM0ksaUJBQVEsRUFDMUJDLE9BQU95SSxpQkFDUHBJLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNia0IsT0FBT25FLHdCQUF3Qm9MLGlCQUFpQjVJLFVBQ2hEOEksY0FBY2hSLCtCQUErQjhRLGlCQUFpQjVJLFVBQzlEK0ksV0FBV2pRLDRCQUE0QjhQLGlCQUFpQjVJLFVBQ3hEZ0osWUFBWWhOLDZCQUE2QjRNLGlCQUFpQjVJLFVBQzFEZSxjQUFjLElBQUk4SCxZQUFZN0ksU0FBU1EsUUFBUUwsTUFBTU0sWUFBWWtCLE1BQU1tSCxhQUFhQyxVQUFVQztJQUVwRyxPQUFPakk7QUFDVDtBQUVPLFNBQVNySCxpQ0FBaUN1UCxnQkFBZ0IsRUFBRWpKLE9BQU87SUFDeEUsTUFBTSxFQUFFa0osWUFBWSxFQUFFLEdBQUdoSixpQkFBUSxFQUMzQkMsT0FBTzhJLGtCQUNQekksU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2JrQixPQUFPbEUseUJBQXlCd0wsa0JBQWtCakosVUFDbER5QixPQUFPcEkseUJBQXlCNFAsa0JBQWtCakosVUFDbERtSixRQUFRdlMsMEJBQTBCcVMsa0JBQWtCako7SUFFMURBLFVBQVU7SUFFVixNQUFNb0osZUFBZSxJQUFJRixhQUFhbEosU0FBU1EsUUFBUUwsTUFBTU0sWUFBWWtCLE1BQU1GLE1BQU0wSDtJQUVyRixPQUFPQztBQUNUO0FBRU8sU0FBU3pQLG1DQUFtQzBQLGlCQUFpQixFQUFFckosT0FBTztJQUMzRSxNQUFNLEVBQUVzSixhQUFhLEVBQUUsR0FBR3BKLGlCQUFRLEVBQzVCQyxPQUFPa0osbUJBQ1A3SSxTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYjhJLG9CQUFvQkYsa0JBQWtCRyxvQkFBb0IsSUFDMURDLHFCQUFxQjVQLDBDQUEwQzBQLG1CQUFtQnZKLFVBQ2xGaUQsUUFBUXdHLG9CQUFvQixHQUFHO0lBRXJDekosVUFBVTtJQUVWLE1BQU0wSixnQkFBZ0IsSUFBSUosY0FBY3RKLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVl3QztJQUUzRSxPQUFPeUc7QUFDVDtBQUVPLFNBQVNsUyxtQ0FBbUNtUyxpQkFBaUIsRUFBRTNKLE9BQU87SUFDM0UsTUFBTSxFQUFFNEosYUFBYSxFQUFFLEdBQUcxSixpQkFBUSxFQUM1QkMsT0FBT3dKLG1CQUNQbkosU0FBU1IsUUFBUXdCLFlBQVksQ0FBQ3JCLE9BQzlCTSxhQUFhLE1BQ2JZLE9BQU8zRSwwQkFBMEJpTixtQkFBbUIzSixVQUNwRGdCLGdCQUFnQixJQUFJNEksY0FBYzVKLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlZO0lBRTNFLE9BQU9MO0FBQ1Q7QUFFTyxTQUFTL0YsbUNBQW1DNE8saUJBQWlCLEVBQUU3SixPQUFPO0lBQzNFLE1BQU0sRUFBRThKLGFBQWEsRUFBRSxHQUFHNUosaUJBQVEsRUFDNUJDLE9BQU8wSixtQkFDUHJKLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNiMkYsWUFBWTdLLCtCQUErQnNPLG1CQUFtQjdKLFVBQzlEa0QsU0FBUzNFLDRCQUE0QnNMLG1CQUFtQjdKO0lBRTlEQSxVQUFVO0lBRVYsTUFBTTZILGdCQUFnQixJQUFJaUMsY0FBYzlKLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVkyRixXQUFXbEQ7SUFFdEYsT0FBTzJFO0FBQ1Q7QUFFTyxTQUFTblEscUNBQXFDcVMsa0JBQWtCLEVBQUUvSixPQUFPO0lBQzlFLE1BQU0sRUFBRWdLLGNBQWMsRUFBRSxHQUFHOUosaUJBQVEsRUFDN0JDLE9BQU80SixvQkFDUHZKLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNid0osVUFBVW5RLDhCQUE4QmlRLG9CQUFvQi9KLFVBQzVEK0ksV0FBV2xRLCtCQUErQmtSLG9CQUFvQi9KLFVBQzlEZ0osWUFBWWpOLGdDQUFnQ2dPLG9CQUFvQi9KLFVBQ2hFaUIsaUJBQWlCLElBQUkrSSxlQUFlaEssU0FBU1EsUUFBUUwsTUFBTU0sWUFBWXdKLFNBQVNsQixVQUFVQztJQUVoRyxPQUFPL0g7QUFDVDtBQUVPLFNBQVNySCxzQ0FBc0NzUSxvQkFBb0IsRUFBRWxLLE9BQU87SUFDakYsTUFBTXFKLG9CQUFvQmEscUJBQXFCQyxvQkFBb0IsSUFDN0RULGdCQUFnQi9QLG1DQUFtQzBQLG1CQUFtQnJKO0lBRTVFLE9BQU8wSjtBQUNUO0FBRU8sU0FBU3hTLHVDQUF1Q2tULG1CQUFtQixFQUFFcEssT0FBTztJQUNqRixNQUFNLEVBQUVxSyxlQUFlLEVBQUUsR0FBR25LLGlCQUFRLEVBQzlCQyxPQUFPaUsscUJBQ1A1SixTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYkwsV0FBV3ZCLGdDQUFnQ3VMLHFCQUFxQnBLLFVBQ2hFaUYsV0FBVzNOLGdDQUFnQzhTLHFCQUFxQnBLO0lBRXRFQSxVQUFVO0lBRVYsTUFBTXVGLGtCQUFrQixJQUFJOEUsZ0JBQWdCckssU0FBU1EsUUFBUUwsTUFBTU0sWUFBWUwsVUFBVTZFO0lBRXpGLE9BQU9NO0FBQ1Q7QUFFTyxTQUFTekosdUNBQXVDd08sbUJBQW1CLEVBQUV0SyxPQUFPO0lBQ2pGLE1BQU0sRUFBRXVLLGVBQWUsRUFBRSxHQUFHckssaUJBQVEsRUFDOUJDLE9BQU9tSyxxQkFDUDlKLFNBQVNSLFFBQVF3QixZQUFZLENBQUNyQixPQUM5Qk0sYUFBYSxNQUNidUIsUUFBUTdELDZCQUE2Qm1NLHFCQUFxQnRLO0lBRWhFQSxVQUFVO0lBRVYsTUFBTXNJLGtCQUFrQixJQUFJaUMsZ0JBQWdCdkssU0FBU1EsUUFBUUwsTUFBTU0sWUFBWXVCO0lBRS9FLE9BQU9zRztBQUNUO0FBRU8sU0FBU2hPLHlDQUF5QzRQLG9CQUFvQixFQUFFbEssT0FBTztJQUNwRixNQUFNLEVBQUV3SyxlQUFlLEVBQUUsR0FBR3RLLGlCQUFRLEVBQzlCQyxPQUFPK0osc0JBQ1AxSixTQUFTUixRQUFRd0IsWUFBWSxDQUFDckIsT0FDOUJNLGFBQWEsTUFDYkwsV0FBV2hCLGlDQUFpQzhLLHNCQUFzQmxLLFVBQ2xFMEosZ0JBQWdCOVAsc0NBQXNDc1Esc0JBQXNCbEs7SUFFbEZBLFVBQVU7SUFFVixNQUFNeUssbUJBQW1CLElBQUlELGdCQUFnQnhLLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlMLFVBQVVzSjtJQUUxRixPQUFPZTtBQUNUO0FBRU8sU0FBUzVULDZDQUE2QzZULHNCQUFzQixFQUFFMUssT0FBTztJQUMxRixNQUFNLEVBQUUySyxrQkFBa0IsRUFBRSxHQUFHekssaUJBQVEsRUFDakNDLE9BQU91Syx3QkFDUC9JLE9BQU9yRSwrQkFBK0JvTix3QkFBd0IxSyxVQUM5RDZGLGFBQWFuTCxxQ0FBcUNnUSx3QkFBd0IxSyxVQUMxRThGLGNBQWNySyxzQ0FBc0NpUCx3QkFBd0IxSyxVQUM1RTRLLDBCQUEwQkMsSUFBQUEsZ0VBQXdELEVBQUNsSixNQUFNa0UsWUFBWUMsY0FDckd0RixTQUFTb0sseUJBQ1RuSyxhQUFhO0lBRW5CVCxVQUFVO0lBRVYsTUFBTUsscUJBQXFCLElBQUlzSyxtQkFBbUIzSyxTQUFTUSxRQUFRTCxNQUFNTSxZQUFZa0IsTUFBTWtFLFlBQVlDO0lBRXZHLE9BQU96RjtBQUNUO0FBRU8sU0FBU3pCLCtDQUErQ2tNLHVCQUF1QixFQUFFOUssT0FBTztJQUM3RixNQUFNLEVBQUUrSyxtQkFBbUIsRUFBRSxHQUFHN0ssaUJBQVEsRUFDbENDLE9BQU8ySyx5QkFDUG5KLE9BQU81RCxnQ0FBZ0MrTSx5QkFBeUI5SyxVQUNoRWdMLDJCQUEyQnRNLDJEQUEyRGlELE1BQU1tSix5QkFBeUI5SyxVQUNySGlMLDJCQUEyQkMsSUFBQUEsbUVBQTJELEVBQUN2SixNQUFNcUosMkJBQzdGL0gsUUFBUStILDBCQUNSeEssU0FBU3lLLDBCQUNUeEssYUFBYTtJQUVuQlQsVUFBVTtJQUVWLE1BQU1tTCxzQkFBc0IsSUFBSUosb0JBQW9CL0ssU0FBU1EsUUFBUUwsTUFBTU0sWUFBWXdDO0lBRXZGLE9BQU9rSTtBQUNUO0FBRU8sU0FBUzFNLG9EQUFvRGtELElBQUksRUFBRXlKLHNCQUFzQixFQUFFcEwsT0FBTztJQUN2RyxNQUFNLEVBQUVxTCxrQkFBa0IsRUFBRSxHQUFHbkwsaUJBQVEsRUFDakNDLE9BQU9pTCx3QkFDUGhMLFdBQVdULDBDQUEwQ2dDLE1BQU15Six3QkFBd0JwTCxVQUNuRjZFLGFBQWF0TSxxQ0FBcUM2Uyx3QkFBd0JwTCxVQUMxRWlMLDJCQUEyQkssSUFBQUEsbURBQTJDLEVBQUMzSixNQUFNdkIsVUFBVUosVUFDdkZRLFNBQVN5SywwQkFDVHhLLGFBQWEsTUFDYjhLLGFBQWEsSUFBSUYsbUJBQW1CckwsU0FBU1EsUUFBUUwsTUFBTU0sWUFBWUwsVUFBVXlFO0lBRXZGLE9BQU8wRztBQUNUO0FBRU8sU0FBUy9SLGlCQUFpQjhILFFBQVEsRUFBRXRCLE9BQU87SUFDaEQsTUFBTXlCLE9BQU9ILFNBQVNrSyxPQUFPO0lBRTdCLE9BQU8vSjtBQUNUO0FBRU8sU0FBU3JJLGtCQUFrQnFKLFNBQVMsRUFBRXpDLE9BQU87SUFDbEQsTUFBTXlCLE9BQU9nQixVQUFVK0ksT0FBTztJQUU5QixPQUFPL0o7QUFDVDtBQUVPLFNBQVN2RCxvQkFBb0JpRixVQUFVLEVBQUVuRCxPQUFPO0lBQ3JELE1BQU00QixZQUFZdUIsV0FBV3NJLFlBQVksSUFDbkN6SixRQUFRM0QsbUJBQW1CdUQsV0FBVzVCO0lBRTVDLE9BQU9nQztBQUNUO0FBRU8sU0FBU2xGLG9CQUFvQitHLFdBQVcsRUFBRTdELE9BQU87SUFDdEQsTUFBTVcsV0FBV2tELFlBQVk4RSxXQUFXLElBQ2xDdEgsT0FBT3hFLGlCQUFpQjhELFVBQVVYO0lBRXhDLE9BQU9xQjtBQUNUO0FBRU8sU0FBU2xJLG9CQUFvQnNLLFdBQVcsRUFBRXpELE9BQU87SUFDdEQsTUFBTXlCLE9BQU9nQyxZQUFZK0gsT0FBTztJQUVoQyxPQUFPL0o7QUFDVDtBQUVPLFNBQVNsRSxvQkFBb0JrRyxXQUFXLEVBQUV6RCxPQUFPO0lBQ3RELElBQUkyQixPQUFPO0lBRVgsTUFBTUwsV0FBV21DLFlBQVlpSSxXQUFXO0lBRXhDLElBQUlwSyxZQUFZLE1BQU07UUFDcEJLLE9BQU83RCxpQkFBaUJ3RCxVQUFVdEI7SUFDcEM7SUFFQSxPQUFPMkI7QUFDVDtBQUVPLFNBQVNyQyxxQkFBcUJTLFFBQVEsRUFBRUMsT0FBTztJQUNwRCxNQUFNMkUsZUFBZTVFLFNBQVM0TCxlQUFlLElBQ3ZDdkwsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBRXhELE9BQU9JO0FBQ1Q7QUFFTyxTQUFTWixxQkFBcUJtQixRQUFRLEVBQUVYLE9BQU87SUFDcEQsSUFBSUksV0FBVztJQUVmLE1BQU11RSxlQUFlaEUsU0FBU2dMLGVBQWU7SUFFN0MsSUFBSWhILGlCQUFpQixNQUFNO1FBQ3pCdkUsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBQ3BEO0lBRUEsT0FBT0k7QUFDVDtBQUVPLFNBQVMzRyxxQkFBcUJrTCxZQUFZO0lBQy9DLE1BQU1sRCxPQUFPa0QsYUFBYTZHLE9BQU87SUFFakMsT0FBTy9KO0FBQ1Q7QUFFTyxTQUFTekQscUJBQXFCMkcsWUFBWSxFQUFFM0UsT0FBTztJQUN4RCxNQUFNMkIsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTOUQsc0JBQXNCOEgsYUFBYSxFQUFFM0YsT0FBTztJQUMxRCxNQUFNc0IsV0FBV3FFLGNBQWMrRixXQUFXLElBQ3BDL0osT0FBTzdELGlCQUFpQndELFVBQVV0QjtJQUV4QyxPQUFPMkI7QUFDVDtBQUVPLFNBQVM3RyxzQkFBc0I2RixRQUFRLEVBQUVYLE9BQU87SUFDckQsSUFBSWEsWUFBWTtJQUVoQixNQUFNK0YsZ0JBQWdCakcsU0FBU2lMLGdCQUFnQjtJQUUvQyxJQUFJaEYsa0JBQWtCLE1BQU07UUFDMUIvRixZQUFZaEcsMkJBQTJCK0wsZUFBZTVHO0lBQ3hEO0lBRUEsT0FBT2E7QUFDVDtBQUVPLFNBQVM3QixzQkFBc0JvRCxTQUFTLEVBQUVwQyxPQUFPO0lBQ3RELE1BQU0yRSxlQUFldkMsVUFBVXVKLGVBQWUsSUFDeEN2TCxXQUFXTix5QkFBeUI2RSxjQUFjM0U7SUFFeEQsT0FBT0k7QUFDVDtBQUVPLFNBQVNySSxzQkFBc0IwTCxXQUFXLEVBQUV6RCxPQUFPO0lBQ3hELE1BQU0yRCxTQUFTRixZQUFZb0ksUUFBUTtJQUVuQyxPQUFPbEk7QUFDVDtBQUVPLFNBQVNoRyxzQkFBc0IwSSxhQUFhLEVBQUVyRyxPQUFPO0lBQzFELE1BQU1zQixXQUFXK0UsY0FBY3FGLFdBQVcsSUFDcEMvSixPQUFPN0QsaUJBQWlCd0QsVUFBVXRCO0lBRXhDLE9BQU8yQjtBQUNUO0FBRU8sU0FBU3JJLHNCQUFzQitNLGFBQWEsRUFBRXJHLE9BQU87SUFDMUQsTUFBTXlCLE9BQU80RSxjQUFjbUYsT0FBTztJQUVsQyxPQUFPL0o7QUFDVDtBQUVPLFNBQVNsSSxzQkFBc0IyTSxhQUFhLEVBQUVsRyxPQUFPO0lBQzFELE1BQU15QixPQUFPeUUsY0FBY3NGLE9BQU87SUFFbEMsT0FBTy9KO0FBQ1Q7QUFFTyxTQUFTN0Qsc0JBQXNCZ0osYUFBYSxFQUFFNUcsT0FBTztJQUMxRCxNQUFNLEVBQUV1QixJQUFJLEVBQUUsR0FBR3JCLGlCQUFRLEVBQ25CNEwsV0FBV2xGLGNBQWNtRixXQUFXLElBQ3BDcEssT0FBT0osS0FBS3lLLFlBQVksQ0FBQ0YsVUFBVTlMO0lBRXpDLE9BQU8yQjtBQUNUO0FBRU8sU0FBUzlCLHNCQUFzQitCLFNBQVMsRUFBRTVCLE9BQU87SUFDdEQsSUFBSUksV0FBVztJQUVmLE1BQU11RSxlQUFlL0MsVUFBVStKLGVBQWU7SUFFOUMsSUFBSWhILGlCQUFpQixNQUFNO1FBQ3pCdkUsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBQ3BEO0lBRUEsT0FBT0k7QUFDVDtBQUVPLFNBQVNyRix1QkFBdUI2RyxTQUFTLEVBQUU1QixPQUFPO0lBQ3ZELElBQUlhLFlBQVk7SUFFaEIsTUFBTStGLGdCQUFnQmhGLFVBQVVnSyxnQkFBZ0I7SUFFaEQsSUFBSWhGLGtCQUFrQixNQUFNO1FBQzFCL0YsWUFBWWhHLDJCQUEyQitMLGVBQWU1RztJQUN4RDtJQUVBLE9BQU9hO0FBQ1Q7QUFFTyxTQUFTeEIsdUJBQXVCOEQsVUFBVSxFQUFFbkQsT0FBTztJQUN4RCxNQUFNMkUsZUFBZXhCLFdBQVd3SSxlQUFlLElBQ3pDdkwsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBRXhELE9BQU9JO0FBQ1Q7QUFFTyxTQUFTakYsdUJBQXVCcUwsYUFBYSxFQUFFeEcsT0FBTztJQUMzRCxNQUFNUSxTQUFTZ0csY0FBY3lGLFNBQVMsSUFDcENuRSxtQkFBbUJ0SCxRQUNuQmtHLFFBQVF3RixpQkFBSyxDQUFDQyxvQkFBb0IsQ0FBQ3JFO0lBRXJDLE9BQU9wQjtBQUNUO0FBRU8sU0FBU3pJLHVCQUF1QjJJLGFBQWEsRUFBRTVHLE9BQU87SUFDM0QsTUFBTWdDLFFBQVE0RSxjQUFjd0YsUUFBUTtJQUVwQyxPQUFPcEs7QUFDVDtBQUVPLFNBQVNwSix1QkFBdUIrTSxhQUFhLEVBQUUzRixPQUFPO0lBQzNELE1BQU15QyxZQUFZa0QsY0FBYzBHLFlBQVksSUFDdEMxSixRQUFRaEssbUJBQW1COEosV0FBV3pDO0lBRTVDLE9BQU8yQztBQUNUO0FBRU8sU0FBU2hHLHVCQUF1QitLLGNBQWMsRUFBRTFILE9BQU87SUFDNUQsSUFBSXFCLE9BQU87SUFFWCxNQUFNVixXQUFXK0csZUFBZWlCLFdBQVc7SUFFM0MsSUFBSWhJLGFBQWEsTUFBTTtRQUNyQlUsT0FBT3hFLGlCQUFpQjhELFVBQVVYO0lBQ3BDO0lBRUEsT0FBT3FCO0FBQ1Q7QUFFTyxTQUFTcEYsdUJBQXVCeUwsY0FBYyxFQUFFMUgsT0FBTztJQUM1RCxJQUFJVSxPQUFPO0lBRVgsTUFBTVgsV0FBVzJILGVBQWU0RSxXQUFXO0lBRTNDLElBQUl2TSxhQUFhLE1BQU07UUFDckJXLE9BQU94RSxpQkFBaUI2RCxVQUFVQztJQUNwQztJQUVBLE9BQU9VO0FBQ1Q7QUFFTyxTQUFTMUcsd0JBQXdCMkcsUUFBUSxFQUFFWCxPQUFPO0lBQ3ZELElBQUljLGNBQWM7SUFFbEIsTUFBTTJILGtCQUFrQjlILFNBQVM0TCxrQkFBa0I7SUFFbkQsSUFBSTlELG9CQUFvQixNQUFNO1FBQzVCM0gsY0FBYy9HLCtCQUErQjBPLGlCQUFpQnpJO0lBQ2hFO0lBRUEsT0FBT2M7QUFDVDtBQUVPLFNBQVM1SCx3QkFBd0J5SCxRQUFRLEVBQUVYLE9BQU87SUFDdkQsSUFBSWUsY0FBYztJQUVsQixNQUFNNkgsa0JBQWtCakksU0FBUzZMLGtCQUFrQjtJQUVuRCxJQUFJNUQsb0JBQW9CLE1BQU07UUFDNUI3SCxjQUFjOUgsK0JBQStCMlAsaUJBQWlCNUk7SUFDaEU7SUFFQSxPQUFPZTtBQUNUO0FBRU8sU0FBUzNGLHdCQUF3QmdNLGNBQWMsRUFBRXBILE9BQU87SUFDN0QsTUFBTVEsU0FBUzRHLGVBQWU2RSxTQUFTLElBQ2pDbkUsbUJBQW1CdEgsUUFDbkJrRyxRQUFRd0YsaUJBQUssQ0FBQ0Msb0JBQW9CLENBQUNyRTtJQUV6QyxPQUFPcEI7QUFDVDtBQUVPLFNBQVNyTyx3QkFBd0JxUCxjQUFjLEVBQUUxSCxPQUFPO0lBQzdELElBQUl3QyxRQUFRO0lBRVosTUFBTUosWUFBWXNGLGVBQWUrRSxZQUFZO0lBRTdDLElBQUlySyxjQUFjLE1BQU07UUFDdEJJLFFBQVFwSyxtQkFBbUJnSyxXQUFXcEM7SUFDeEM7SUFFQSxPQUFPd0M7QUFDVDtBQUVPLFNBQVNoRix3QkFBd0JvTCxlQUFlLEVBQUU1SSxPQUFPO0lBQzlELE1BQU0yQixPQUFPK0ssNEJBQWlCO0lBRTlCLE9BQU8vSztBQUNUO0FBRU8sU0FBU2pFLHdCQUF3QmtMLGVBQWUsRUFBRTVJLE9BQU87SUFDOUQsTUFBTTJCLE9BQU8rSyw0QkFBaUI7SUFFOUIsT0FBTy9LO0FBQ1Q7QUFFTyxTQUFTL0Usd0JBQXdCNkwsZUFBZSxFQUFFekksT0FBTztJQUM5RCxNQUFNVyxXQUFXOEgsZ0JBQWdCRSxXQUFXLElBQ3RDdEgsT0FBT3hFLGlCQUFpQjhELFVBQVVYO0lBRXhDLE9BQU9xQjtBQUNUO0FBRU8sU0FBU3BLLHlCQUF5QnFLLFFBQVEsRUFBRXRCLE9BQU87SUFDeEQsSUFBSTBCLGVBQWU7SUFFbkIsTUFBTWlMLG1CQUFtQnJMLFNBQVNzTCxtQkFBbUI7SUFFckQsSUFBSUQscUJBQXFCLE1BQU07UUFDN0IsTUFBTSxFQUFFcEwsSUFBSSxFQUFFLEdBQUdyQixpQkFBUTtRQUV6QndCLGVBQWVILEtBQUt5SyxZQUFZLENBQUNXLGtCQUFrQjNNO0lBQ3JEO0lBRUEsT0FBTzBCO0FBQ1Q7QUFFTyxTQUFTekMseUJBQXlCaUcsWUFBWSxFQUFFbEYsT0FBTztJQUM1RCxNQUFNMkUsZUFBZU8sYUFBYXlHLGVBQWUsSUFDL0N2TCxXQUFXTix5QkFBeUI2RSxjQUFjM0U7SUFFcEQsT0FBT0k7QUFDVDtBQUVPLFNBQVN0Qix5QkFBeUJzRixZQUFZLEVBQUVwRSxPQUFPO0lBQzVELE1BQU0yRSxlQUFlUCxhQUFhdUgsZUFBZSxJQUMzQ3ZMLFdBQVdOLHlCQUF5QjZFLGNBQWMzRTtJQUV4RCxPQUFPSTtBQUNUO0FBRU8sU0FBU3JCLHlCQUF5QnlGLFlBQVksRUFBRXhFLE9BQU87SUFDNUQsTUFBTTJFLGVBQWVILGFBQWFtSCxlQUFlLElBQzNDdkwsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBRXhELE9BQU9JO0FBQ1Q7QUFFTyxTQUFTL0UseUJBQXlCcU0sY0FBYyxFQUFFMUgsT0FBTztJQUM5RCxJQUFJd0QsU0FBUztJQUViLE1BQU1MLGFBQWF1RSxlQUFlbUYsYUFBYTtJQUUvQyxJQUFJMUosZUFBZSxNQUFNO1FBQ3ZCSyxTQUFTbEkscUJBQXFCNkgsWUFBWW5EO0lBQzVDO0lBRUEsT0FBT3dEO0FBQ1Q7QUFFTyxTQUFTL0YseUJBQXlCd0wsZ0JBQWdCLEVBQUVqSixPQUFPO0lBQ2hFLE1BQU1zQixXQUFXMkgsaUJBQWlCeUMsV0FBVyxJQUN2Qy9KLE9BQU83RCxpQkFBaUJ3RCxVQUFVdEI7SUFFeEMsT0FBTzJCO0FBQ1Q7QUFFTyxTQUFTdEkseUJBQXlCNFAsZ0JBQWdCLEVBQUVqSixPQUFPO0lBQ2hFLE1BQU15QixPQUFPd0gsaUJBQWlCdUMsT0FBTztJQUVyQyxPQUFPL0o7QUFDVDtBQUVPLFNBQVNsRiwwQkFBMEI2SCxZQUFZLEVBQUVwRSxPQUFPO0lBQzdELE1BQU1RLFNBQVM0RCxhQUFhNkgsU0FBUyxJQUMvQjNILFlBQVk5RCxRQUFTLEdBQUc7SUFFOUIsT0FBTzhEO0FBQ1Q7QUFFTyxTQUFTOUgsMEJBQTBCZ0ksWUFBWSxFQUFFeEUsT0FBTztJQUM3RCxNQUFNUSxTQUFTZ0UsYUFBYXlILFNBQVMsSUFDL0IzSCxZQUFZOUQsUUFBUyxHQUFHO0lBRTlCLE9BQU84RDtBQUNUO0FBRU8sU0FBUzFOLDBCQUEwQnFTLGdCQUFnQixFQUFFakosT0FBTztJQUNqRSxNQUFNbUosUUFBUUYsaUJBQWlCNkQsUUFBUTtJQUV2QyxPQUFPM0Q7QUFDVDtBQUVPLFNBQVNqSywwQkFBMEJzSCxhQUFhLEVBQUV4RyxPQUFPO0lBQzlELE1BQU0yRSxlQUFlNkIsY0FBY21GLGVBQWUsSUFDNUN2TCxXQUFXTix5QkFBeUI2RSxjQUFjM0U7SUFFeEQsT0FBT0k7QUFDVDtBQUVPLFNBQVNwRCwwQkFBMEIwSyxjQUFjLEVBQUUxSCxPQUFPO0lBQy9ELElBQUltRSxVQUFVO0lBRWQsTUFBTU4sY0FBYzZELGVBQWVxRixjQUFjO0lBRWpELElBQUlsSixnQkFBZ0IsTUFBTTtRQUN4Qk0sVUFBVWxILHVCQUF1QjRHLGFBQWE3RDtJQUNoRDtJQUVBLE9BQU9tRTtBQUNUO0FBRU8sU0FBUzFNLDBCQUEwQmtKLFFBQVEsRUFBRVgsT0FBTztJQUN6RCxJQUFJZ0IsZ0JBQWdCO0lBRXBCLE1BQU0ySSxvQkFBb0JoSixTQUFTcU0sb0JBQW9CO0lBRXZELElBQUlyRCxzQkFBc0IsTUFBTTtRQUM5QjNJLGdCQUFnQnhKLG1DQUFtQ21TLG1CQUFtQjNKO0lBQ3hFO0lBRUEsT0FBT2dCO0FBQ1Q7QUFFTyxTQUFTdkIsMEJBQTBCcUgsYUFBYSxFQUFFOUcsT0FBTztJQUM5RCxNQUFNMkUsZUFBZW1DLGNBQWM2RSxlQUFlLElBQzVDdkwsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBRXhELE9BQU9JO0FBQ1Q7QUFFTyxTQUFTMUQsMEJBQTBCaU4saUJBQWlCLEVBQUUzSixPQUFPO0lBQ2xFLE1BQU1XLFdBQVdnSixrQkFBa0JoQixXQUFXLElBQzVDdEgsT0FBT3hFLGlCQUFpQjhELFVBQVVYO0lBRXBDLE9BQU9xQjtBQUNUO0FBRU8sU0FBUzFKLDJCQUEyQnNWLFFBQVEsRUFBRWpOLE9BQU87SUFDMUQsSUFBSWlCLGlCQUFpQjtJQUVyQixNQUFNOEkscUJBQXFCa0QsU0FBU0MscUJBQXFCO0lBRXpELElBQUluRCx1QkFBdUIsTUFBTTtRQUMvQjlJLGlCQUFpQnZKLHFDQUFxQ3FTLG9CQUFvQi9KO0lBQzVFO0lBRUEsT0FBT2lCO0FBQ1Q7QUFFTyxTQUFTdkksMkJBQTJCeUssVUFBVSxFQUFFbkQsT0FBTztJQUM1RCxNQUFNZ0MsUUFBUTlELG9CQUFvQmlGLFlBQVluRCxVQUN4Q3FELGVBQWVyQixPQUFPLEdBQUc7SUFFL0IsT0FBT3FCO0FBQ1Q7QUFFTyxTQUFTN0ssMkJBQTJCbU0sWUFBWSxFQUFFM0UsT0FBTztJQUM5RCxNQUFNNkUsYUFBYTtJQUVuQixPQUFPQTtBQUNUO0FBRU8sU0FBU25GLDJCQUEyQnNJLGNBQWMsRUFBRWhJLE9BQU87SUFDaEUsTUFBTTJFLGVBQWVxRCxlQUFlMkQsZUFBZSxJQUM3Q3ZMLFdBQVdOLHlCQUF5QjZFLGNBQWMzRTtJQUV4RCxPQUFPSTtBQUNUO0FBRU8sU0FBU2IsMkJBQTJCMEgsY0FBYyxFQUFFakgsT0FBTztJQUNoRSxNQUFNMkUsZUFBZXNDLGVBQWUwRSxlQUFlLElBQzdDdkwsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBRXhELE9BQU9JO0FBQ1Q7QUFFTyxTQUFTakIsMkJBQTJCaUksY0FBYyxFQUFFcEgsT0FBTztJQUNoRSxNQUFNMkUsZUFBZXlDLGVBQWV1RSxlQUFlLElBQzdDdkwsV0FBV04seUJBQXlCNkUsY0FBYzNFO0lBRXhELE9BQU9JO0FBQ1Q7QUFFTyxTQUFTckgsMkJBQTJCMk8sY0FBYyxFQUFFMUgsT0FBTztJQUNoRSxJQUFJb0YsV0FBVztJQUVmLE1BQU1GLGVBQWV3QyxlQUFleUYsZUFBZTtJQUVuRCxJQUFJakksaUJBQWlCLE1BQU07UUFDekJFLFdBQVdwTSx5QkFBeUJrTSxjQUFjbEY7SUFDcEQ7SUFFQSxPQUFPb0Y7QUFDVDtBQUVPLFNBQVN2TiwyQkFBMkI2UCxjQUFjLEVBQUUxSCxPQUFPO0lBQ2hFLElBQUl1RSxXQUFXO0lBRWYsTUFBTUgsZUFBZXNELGVBQWUwRixlQUFlO0lBRW5ELElBQUloSixpQkFBaUIsTUFBTTtRQUN6QkcsV0FBVzNNLHlCQUF5QndNLGNBQWNwRTtJQUNwRDtJQUVBLE9BQU91RTtBQUNUO0FBRU8sU0FBU3JNLDJCQUEyQndQLGNBQWMsRUFBRTFILE9BQU87SUFDaEUsSUFBSTBFLFdBQVc7SUFFZixNQUFNRixlQUFla0QsZUFBZTJGLGVBQWU7SUFFbkQsSUFBSTdJLGlCQUFpQixNQUFNO1FBQ3pCRSxXQUFXek0seUJBQXlCdU0sY0FBY3hFO0lBQ3BEO0lBRUEsT0FBTzBFO0FBQ1Q7QUFFTyxTQUFTak0sNEJBQTRCb0wsV0FBVyxFQUFFN0QsT0FBTztJQUM5RCxNQUFNc04sbUJBQW1CekosWUFBWTBKLG1CQUFtQixJQUNsRHhKLGVBQWV6TCw2QkFBNkJnVixrQkFBa0J0TjtJQUVwRSxPQUFPK0Q7QUFDVDtBQUVPLFNBQVNuSiw0QkFBNEIrSyxhQUFhLEVBQUUzRixPQUFPO0lBQ2hFLE1BQU11SCxpQkFBaUI1QixjQUFjNkgsaUJBQWlCLElBQ2hEM0gsYUFBYWxMLDZCQUE2QjRNLGdCQUFnQnZIO0lBRWhFLE9BQU82RjtBQUNUO0FBRU8sU0FBUzNJLDRCQUE0QndLLGNBQWMsRUFBRTFILE9BQU87SUFDakUsSUFBSWdILFlBQVk7SUFFaEIsTUFBTUYsZ0JBQWdCWSxlQUFlK0YsZ0JBQWdCO0lBRXJELElBQUkzRyxrQkFBa0IsTUFBTTtRQUMxQkUsWUFBWTdKLDJCQUEyQjJKLGVBQWU5RztJQUN4RDtJQUVBLE9BQU9nSDtBQUNUO0FBRU8sU0FBUy9NLDRCQUE0QnlOLGNBQWMsRUFBRTFILE9BQU87SUFDakUsSUFBSTJHLFlBQVk7SUFFaEIsTUFBTUgsZ0JBQWdCa0IsZUFBZWdHLGdCQUFnQjtJQUVyRCxJQUFJbEgsa0JBQWtCLE1BQU07UUFDMUJHLFlBQVl6TSwyQkFBMkJzTSxlQUFleEc7SUFDeEQ7SUFFQSxPQUFPMkc7QUFDVDtBQUVPLFNBQVNsSyw0QkFBNEJ3SyxjQUFjLEVBQUVqSCxPQUFPO0lBQ2pFLE1BQU1RLFNBQVN5RyxlQUFlZ0YsU0FBUyxJQUNqQzNILFlBQVk5RCxRQUFTLEdBQUc7SUFFOUIsT0FBTzhEO0FBQ1Q7QUFFTyxTQUFTeEwsNEJBQTRCOFAsZUFBZSxFQUFFNUksT0FBTztJQUNsRSxNQUFNMk4sZUFBZS9FLGdCQUFnQmdGLGVBQWUsSUFDOUM3RSxXQUFXbE0saUJBQWlCOFEsY0FBYzNOO0lBRWhELE9BQU8rSTtBQUNUO0FBRU8sU0FBU3hLLDRCQUE0QnNMLGlCQUFpQixFQUFFN0osT0FBTztJQUNwRSxNQUFNNEMsYUFBYWlILGtCQUFrQmdFLGFBQWEsSUFDNUMzSyxTQUFTMUUscUJBQXFCb0UsWUFBWTVDO0lBRWhELE9BQU9rRDtBQUNUO0FBRU8sU0FBU3ZILDZCQUE2QmdLLGFBQWEsRUFBRTNGLE9BQU87SUFDakUsTUFBTWtJLGtCQUFrQnZDLGNBQWNtSSxrQkFBa0IsSUFDbERoSSxjQUFjbEssK0JBQStCc00saUJBQWlCbEk7SUFFcEUsT0FBTzhGO0FBQ1Q7QUFFTyxTQUFTMUgsNkJBQTZCdUQsSUFBSSxFQUFFZ0QsWUFBWSxFQUFFM0UsT0FBTztJQUN0RSxNQUFNZ0MsUUFBUTtJQUVkLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTN0QsNkJBQTZCbU0sbUJBQW1CLEVBQUV0SyxPQUFPO0lBQ3ZFLE1BQU00QixZQUFZMEksb0JBQW9CbUIsWUFBWSxJQUM1Q3pKLFFBQVEzRCxtQkFBbUJ1RCxXQUFXNUI7SUFFNUMsT0FBT2dDO0FBQ1Q7QUFFTyxTQUFTN0gsNkJBQTZCdU4sY0FBYyxFQUFFMUgsT0FBTztJQUNsRSxJQUFJc0gsYUFBYTtJQUVqQixNQUFNRixpQkFBaUJNLGVBQWVxRyxpQkFBaUI7SUFFdkQsSUFBSTNHLG1CQUFtQixNQUFNO1FBQzNCRSxhQUFhbE4sNkJBQTZCZ04sZ0JBQWdCcEg7SUFDNUQ7SUFFQSxPQUFPc0g7QUFDVDtBQUVPLFNBQVNsSyw2QkFBNkJzSyxjQUFjLEVBQUUxSCxPQUFPO0lBQ2xFLElBQUk0SCxhQUFhO0lBRWpCLE1BQU1JLGlCQUFpQk4sZUFBZXNHLGlCQUFpQjtJQUV2RCxJQUFJaEcsbUJBQW1CLE1BQU07UUFDM0JKLGFBQWF2Syw2QkFBNkIySyxnQkFBZ0JoSTtJQUM1RDtJQUVBLE9BQU80SDtBQUNUO0FBRU8sU0FBU3pMLDZCQUE2QnVMLGNBQWMsRUFBRTFILE9BQU87SUFDbEUsSUFBSW1ILGFBQWE7SUFFakIsTUFBTUYsaUJBQWlCUyxlQUFldUcsaUJBQWlCO0lBRXZELElBQUloSCxtQkFBbUIsTUFBTTtRQUMzQkUsYUFBYS9LLDZCQUE2QjZLLGdCQUFnQmpIO0lBQzVEO0lBRUEsT0FBT21IO0FBQ1Q7QUFFTyxTQUFTbkwsNkJBQTZCNE0sZUFBZSxFQUFFNUksT0FBTztJQUNuRSxNQUFNa08sZ0JBQWdCdEYsZ0JBQWdCdUYsZ0JBQWdCLElBQ2pEbkYsWUFBWW5NLGlCQUFpQnFSLGVBQWVsTztJQUVqRCxPQUFPZ0o7QUFDVDtBQUVPLFNBQVNoUiw4QkFBOEI2TCxXQUFXLEVBQUU3RCxPQUFPO0lBQ2hFLE1BQU1vTyxxQkFBcUJ2SyxZQUFZd0sscUJBQXFCLElBQ3REckssaUJBQWlCMUwsNkJBQTZCOFYsb0JBQW9CcE87SUFFeEUsT0FBT2dFO0FBQ1Q7QUFFTyxTQUFTdEksOEJBQThCZ00sY0FBYyxFQUFFMUgsT0FBTztJQUNuRSxJQUFJOEYsY0FBYztJQUVsQixNQUFNb0Msa0JBQWtCUixlQUFlb0csa0JBQWtCO0lBRXpELElBQUk1RixvQkFBb0IsTUFBTTtRQUM1QnBDLGNBQWNsSywrQkFBK0JzTSxpQkFBaUJsSTtJQUNoRTtJQUVBLE9BQU84RjtBQUNUO0FBRU8sU0FBU3hKLDhCQUE4QjRMLGVBQWUsRUFBRWxJLE9BQU87SUFDcEUsTUFBTXNPLGlCQUFpQnBHLGdCQUFnQnFHLGlCQUFpQixJQUNsRG5HLGFBQWFrRyxlQUFlRSxHQUFHLENBQUMsQ0FBQ25KO1FBQy9CLE1BQU1LLFlBQVlySiwyQkFBMkJnSixlQUFlckY7UUFFNUQsT0FBTzBGO0lBQ1Q7SUFFTixPQUFPMEM7QUFDVDtBQUVPLFNBQVN0Tyw4QkFBOEJpUSxrQkFBa0IsRUFBRS9KLE9BQU87SUFDdkUsTUFBTWlLLFVBQVVGLG1CQUFtQjBFLFNBQVM7SUFFNUMsT0FBT3hFO0FBQ1Q7QUFFTyxTQUFTalQsK0JBQStCK0ksUUFBUSxFQUFFQyxPQUFPO0lBQzlELE1BQU0wSyx5QkFBeUIzSyxTQUFTMk8seUJBQXlCLElBQzNEck8scUJBQXFCeEosNkNBQTZDNlQsd0JBQXdCMUs7SUFFaEcsT0FBT0s7QUFDVDtBQUVPLFNBQVNoRywrQkFBK0I2TixlQUFlLEVBQUVsSSxPQUFPO0lBQ3JFLE1BQU1xSSxjQUFjSCxnQkFBZ0J5RyxhQUFhO0lBRWpELE9BQU90RztBQUNUO0FBRU8sU0FBU3ZRLCtCQUErQjhRLGVBQWUsRUFBRTVJLE9BQU87SUFDckUsTUFBTThJLGNBQWNGLGdCQUFnQmdHLGFBQWE7SUFFakQsT0FBTzlGO0FBQ1Q7QUFFTyxTQUFTdk4sK0JBQStCc08saUJBQWlCLEVBQUU3SixPQUFPO0lBQ3ZFLE1BQU1rRyxnQkFBZ0IyRCxrQkFBa0JnRixnQkFBZ0IsSUFDbER6SSxZQUFZNUssMkJBQTJCMEssZUFBZWxHO0lBRTVELE9BQU9vRztBQUNUO0FBRU8sU0FBU3ZOLCtCQUErQmtSLGtCQUFrQixFQUFFL0osT0FBTztJQUN4RSxNQUFNMk4sZUFBZTVELG1CQUFtQjZELGVBQWUsSUFDakQ3RSxXQUFXbE0saUJBQWlCOFEsY0FBYzNOO0lBRWhELE9BQU8rSTtBQUNUO0FBRU8sU0FBU3pMLCtCQUErQm9OLHNCQUFzQixFQUFFMUssT0FBTztJQUM1RSxNQUFNc0IsV0FBV29KLHVCQUF1QmdCLFdBQVcsSUFDN0MvSixPQUFPN0QsaUJBQWlCd0QsVUFBVXRCO0lBRXhDLE9BQU8yQjtBQUNUO0FBRU8sU0FBUy9CLGdDQUFnQytCLElBQUksRUFBRWdELFlBQVksRUFBRTNFLE9BQU87SUFDekUsTUFBTSxFQUFFNEUsUUFBUSxFQUFFLEdBQUcxRSxpQkFBUSxFQUN2QkMsT0FBT3dFLGNBQ1BsRCxPQUFPaEkscUJBQXFCa0wsZUFDNUIzQyxRQUFRNUQsNkJBQTZCdUQsTUFBTWdELGNBQWMzRSxVQUN6RDhPLGlCQUFpQkMsSUFBQUEsOEJBQXNCLEVBQUN0TixPQUN4Q2pCLFNBQVNzTyxnQkFDVHJPLGFBQWEsTUFDYkwsV0FBVyxJQUFJd0UsU0FBUzVFLFNBQVNRLFFBQVFMLE1BQU1NLFlBQVlrQixNQUFNRixNQUFNTztJQUU3RSxPQUFPNUI7QUFDVDtBQUVPLFNBQVN0SixnQ0FBZ0NzTCxTQUFTLEVBQUVwQyxPQUFPO0lBQ2hFLE1BQU0wSyx5QkFBeUJ0SSxVQUFVc00seUJBQXlCLElBQzVEck8scUJBQXFCeEosNkNBQTZDNlQsd0JBQXdCMUs7SUFFaEcsT0FBT0s7QUFDVDtBQUVPLFNBQVNyRixnQ0FBZ0MwTSxjQUFjLEVBQUUxSCxPQUFPO0lBQ3JFLElBQUk2SCxnQkFBZ0I7SUFFcEIsTUFBTWdDLG9CQUFvQm5DLGVBQWVzSCxvQkFBb0I7SUFFN0QsSUFBSW5GLHNCQUFzQixNQUFNO1FBQzlCaEMsZ0JBQWdCNU0sbUNBQW1DNE8sbUJBQW1CN0o7SUFDeEU7SUFFQSxPQUFPNkg7QUFDVDtBQUVPLFNBQVM5TCxnQ0FBZ0NnTyxrQkFBa0IsRUFBRS9KLE9BQU87SUFDekUsTUFBTWtPLGdCQUFnQm5FLG1CQUFtQm9FLGdCQUFnQixJQUNuRG5GLFlBQVluTSxpQkFBaUJxUixlQUFlbE87SUFFbEQsT0FBT2dKO0FBQ1Q7QUFFTyxTQUFTbkssZ0NBQWdDdUwsbUJBQW1CLEVBQUVwSyxPQUFPO0lBQzFFLE1BQU0yRSxlQUFleUYsb0JBQW9CdUIsZUFBZSxJQUNsRHZMLFdBQVdOLHlCQUF5QjZFLGNBQWMzRTtJQUV4RCxPQUFPSTtBQUNUO0FBRU8sU0FBUzlJLGdDQUFnQzhTLG1CQUFtQixFQUFFcEssT0FBTztJQUMxRSxNQUFNOEUsZUFBZXNGLG9CQUFvQjZFLGVBQWUsSUFDbERoSyxXQUFXMU4seUJBQXlCdU4sY0FBYzlFO0lBRXhELE9BQU9pRjtBQUNUO0FBRU8sU0FBU2xILGdDQUFnQytNLHVCQUF1QixFQUFFOUssT0FBTztJQUM5RSxNQUFNc0IsV0FBV3dKLHdCQUF3QlksV0FBVyxJQUM5Qy9KLE9BQU83RCxpQkFBaUJ3RCxVQUFVdEI7SUFFeEMsT0FBTzJCO0FBQ1Q7QUFFTyxTQUFTNUssaUNBQWlDb00sVUFBVSxFQUFFbkQsT0FBTztJQUNsRSxNQUFNMEsseUJBQXlCdkgsV0FBV3VMLHlCQUF5QixJQUM3RHJPLHFCQUFxQnhKLDZDQUE2QzZULHdCQUF3QjFLO0lBRWhHLE9BQU9LO0FBQ1Q7QUFFTyxTQUFTbEosaUNBQWlDa08sYUFBYSxFQUFFckYsT0FBTztJQUNyRSxJQUFJdUYsa0JBQWtCO0lBRXRCLE1BQU02RSxzQkFBc0IvRSxjQUFjNkosc0JBQXNCO0lBRWhFLElBQUk5RSx3QkFBd0IsTUFBTTtRQUNoQzdFLGtCQUFrQnJPLHVDQUF1Q2tULHFCQUFxQnBLO0lBQ2hGO0lBRUEsT0FBT3VGO0FBQ1Q7QUFFTyxTQUFTbkcsaUNBQWlDOEssb0JBQW9CLEVBQUVsSyxPQUFPO0lBQzVFLE1BQU0yRSxlQUFldUYscUJBQXFCeUIsZUFBZSxJQUNuRHZMLFdBQVdOLHlCQUF5QjZFLGNBQWMzRTtJQUV4RCxPQUFPSTtBQUNUO0FBRU8sU0FBUzdGLGtDQUFrQzhLLGFBQWEsRUFBRXJGLE9BQU87SUFDdEUsSUFBSXlLLG1CQUFtQjtJQUV2QixNQUFNUCx1QkFBdUI3RSxjQUFjOEosdUJBQXVCO0lBRWxFLElBQUlqRix5QkFBeUIsTUFBTTtRQUNqQ08sbUJBQW1CblEseUNBQXlDNFAsc0JBQXNCbEs7SUFDcEY7SUFFQSxPQUFPeUs7QUFDVDtBQUVPLFNBQVM1TyxtQ0FBbUNxTSxlQUFlLEVBQUVsSSxPQUFPO0lBQ3pFLE1BQU1zSyxzQkFBc0JwQyxnQkFBZ0JrSCxzQkFBc0IsSUFDNUQ5RyxrQkFBa0J4TSx1Q0FBdUN3TyxxQkFBcUJ0SztJQUVwRixPQUFPc0k7QUFDVDtBQUVPLFNBQVMzSixxQ0FBcUMwRyxhQUFhLEVBQUVyRixPQUFPO0lBQ3pFLElBQUltTCxzQkFBc0I7SUFFMUIsTUFBTUwsMEJBQTBCekYsY0FBY2dLLDBCQUEwQjtJQUV4RSxJQUFJdkUsNEJBQTRCLE1BQU07UUFDcENLLHNCQUFzQnZNLCtDQUErQ2tNLHlCQUF5QjlLO0lBQ2hHO0lBRUEsT0FBT21MO0FBQ1Q7QUFFTyxTQUFTNVMscUNBQXFDK1cscUJBQXFCLEVBQUV0UCxPQUFPO0lBQ2pGLE1BQU0wSCxpQkFBaUI0SCxzQkFBc0JDLGlCQUFpQixJQUN4RDFLLGFBQWF2TSw2QkFBNkJvUCxnQkFBZ0IxSDtJQUVoRSxPQUFPNkU7QUFDVDtBQUVPLFNBQVNuSyxxQ0FBcUNnUSxzQkFBc0IsRUFBRTFLLE9BQU87SUFDbEYsTUFBTXVILGlCQUFpQm1ELHVCQUF1QjhDLGlCQUFpQixJQUN6RDNILGFBQWFsTCw2QkFBNkI0TSxnQkFBZ0J2SDtJQUVoRSxPQUFPNkY7QUFDVDtBQUVPLFNBQVNwSyxzQ0FBc0NpUCxzQkFBc0IsRUFBRTFLLE9BQU87SUFDbkYsTUFBTWtJLGtCQUFrQndDLHVCQUF1Qm9ELGtCQUFrQixJQUMzRGhJLGNBQWNsSywrQkFBK0JzTSxpQkFBaUJsSTtJQUVwRSxPQUFPOEY7QUFDVDtBQUVPLFNBQVNuRywwQ0FBMENnQyxJQUFJLEVBQUV5SixzQkFBc0IsRUFBRXBMLE9BQU87SUFDN0YsTUFBTTJFLGVBQWV5Ryx1QkFBdUJPLGVBQWUsSUFDckR2TCxXQUFXUixnQ0FBZ0MrQixNQUFNZ0QsY0FBYzNFO0lBRXJFLE9BQU9JO0FBQ1Q7QUFFTyxTQUFTckQsd0JBQXdCeVMsU0FBUyxFQUFFeFAsT0FBTztJQUN4RCxNQUFNeVAsYUFBYUQsVUFBVWhCLEdBQUcsQ0FBQyxDQUFDN047UUFDaEMsTUFBTVUsT0FBT3hFLGlCQUFpQjhELFVBQVVYO1FBRXhDLE9BQU9xQjtJQUNUO0lBRUEsT0FBT29PO0FBQ1Q7QUFFTyxTQUFTblIsMEJBQTBCd0UsVUFBVSxFQUFFOUMsT0FBTztJQUMzRCxNQUFNZ0QsY0FBY0YsV0FBVzBMLEdBQUcsQ0FBQyxDQUFDNU07UUFDbEMsTUFBTUksUUFBUTNELG1CQUFtQnVELFdBQVc1QjtRQUU1QyxPQUFPZ0M7SUFDVDtJQUVBLE9BQU9nQjtBQUNUO0FBRU8sU0FBUzNMLDhCQUE4QnlOLFlBQVksRUFBRTlFLE9BQU87SUFDakUsTUFBTTBQLGVBQWU1SyxhQUFhNkssZUFBZSxJQUMzQzNLLGdCQUFnQjBLLGFBQWFsQixHQUFHLENBQUMsQ0FBQy9LO1FBQ2hDLE1BQU1HLFVBQVV4TSx1QkFBdUJxTSxhQUFhekQ7UUFFcEQsT0FBTzREO0lBQ1Q7SUFFTixPQUFPb0I7QUFDVDtBQUVPLFNBQVN2SyxrQ0FBa0M4TSxjQUFjLEVBQUV2SCxPQUFPO0lBQ3ZFLE1BQU00UCxpQkFBaUJySSxlQUFlc0ksaUJBQWlCLElBQ2pEcEksa0JBQWtCbUksZUFBZXBCLEdBQUcsQ0FBQyxDQUFDbkk7UUFDcEMsTUFBTUUsWUFBWS9MLDJCQUEyQjZMLGVBQWVyRztRQUU1RCxPQUFPdUc7SUFDVDtJQUVOLE9BQU9rQjtBQUNUO0FBRU8sU0FBUzVOLDBDQUEwQzBQLGlCQUFpQixFQUFFdkosT0FBTztJQUNsRixNQUFNOFAsdUJBQXVCdkcsa0JBQWtCaUYsR0FBRyxDQUFDLENBQUN2RjtRQUNsRCxNQUFNRyxlQUFlMVAsaUNBQWlDdVAsa0JBQWtCako7UUFFeEUsT0FBT29KO0lBQ1Q7SUFFQSxPQUFPMEc7QUFDVDtBQUVPLFNBQVNwUiwyREFBMkRpRCxJQUFJLEVBQUVtSix1QkFBdUIsRUFBRTlLLE9BQU87SUFDL0csTUFBTStQLDBCQUEwQmpGLHdCQUF3QmtGLDBCQUEwQixJQUM1RWhGLDJCQUEyQitFLHdCQUF3QnZCLEdBQUcsQ0FBQyxDQUFDcEQ7UUFDdEQsTUFBTTZFLHFCQUFxQnhSLG9EQUFvRGtELE1BQU15Six3QkFBd0JwTDtRQUU3RyxPQUFPaVE7SUFDVDtJQUVOLE9BQU9qRjtBQUNUIn0=
|
|
1284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zID0gbmV3IENvbnRhaW5zKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVuZHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVuZHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVuZHNXaXRoID0gbmV3IEVuZHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGVuZHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ21lbnRzID0gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheUFzc2lnbm1lbnQsIG9iamVjdEFzc2lnbm1lbnQsIHZhcmlhYmxlQXNzaWdtZW50cyk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlTm9kZSwgIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlU3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOb2RlUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZVF1ZXJ5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5ID0gbmV3IE5vZGVRdWVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBxdWVyeSk7XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmltaXRpdmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJpbWl0aXZlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZSA9IG5ldyBQcmltaXRpdmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvSW50ZWdlckZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUb0ludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdG9JbnRlZ2VyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlciA9IG5ldyBUb0ludGVnZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHRvSW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGFydHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXJ0c1dpdGhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGFydHNXaXRoID0gbmV3IFN0YXJ0c1dpdGgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gc3RhcnRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOb2Rlc1F1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVzUXVlcnlOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzUXVlcnkgPSBuZXcgTm9kZXNRdWVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBxdWVyeSk7XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVycyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJzTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gcGFyYW1ldGVyc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IFBhcmFtZXRlcnMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXhwcmVzc2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBleHByZXNzaW9uTm9kZSwgIC8vL1xuICAgICAgICB0ZXJtID0gdGVybUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWUgPSBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXZlcnkgPSBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZHVjZSA9IHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW5ndGhPZiA9IGxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9JbnRlZ2VyID0gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb250YWlucyA9IGNvbnRhaW5zRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZW5kc1dpdGggPSBlbmRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXJ0c1dpdGggPSBzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB0ZXJtLFxuICAgICAgICAgIHNvbWUsXG4gICAgICAgICAgZXZlcnksXG4gICAgICAgICAgcmVkdWNlLFxuICAgICAgICAgIHRlcm5hcnksXG4gICAgICAgICAgbm9kZVF1ZXJ5LFxuICAgICAgICAgIG5vZGVzUXVlcnksXG4gICAgICAgICAgbGVuZ3RoT2YsXG4gICAgICAgICAgdG9JbnRlZ2VyLFxuICAgICAgICAgIHRyeUludGVnZXIsXG4gICAgICAgICAgY29udGFpbnMsXG4gICAgICAgICAgZW5kc1dpdGgsXG4gICAgICAgICAgc3RhcnRzV2l0aCxcbiAgICAgICAgICByZXR1cm5CbG9jayxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsXG4gICAgICAgIF0sXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IG5ldyBFeHByZXNzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgc29tZSwgZXZlcnksIHJlZHVjZSwgdGVybmFyeSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCBsZW5ndGhPZiwgdG9JbnRlZ2VyLCB0cnlJbnRlZ2VyLCBjb250YWlucywgZW5kc1dpdGgsIHN0YXJ0c1dpdGgsIHJldHVybkJsb2NrLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUcnlJbnRlZ2VyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRyeUludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyID0gbmV3IFRyeUludGVnZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuQmxvY2sgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuQmxvY2tOb2RlLCAvLy9cbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vbnNlbnNpY2FsID0gbm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmcgPSByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudCksXG4gICAgICAgIHN0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVybkJsb2NrID0gbmV3IFJldHVybkJsb2NrKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cywgbm9uc2Vuc2ljYWwsIHJldHVyblN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5lZ2F0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWRUZXJtID0gbmV3IE5lZ2F0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdGVybSk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExvZ2ljYWxUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxvZ2ljYWxUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRpc2p1bmN0aW9uID0gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbG9naWNhbFRlcm0gPSBuZXcgTG9naWNhbFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBkaXNqdW5jdGlvbiwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZEJpbmRpbmdOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYWxpYXMgPSBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZyA9IG5ldyBOYW1lZEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBhbGlhcyk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZEJpbmRpbmdzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ3NOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lZEJpbmRpbmdOb2RlcyA9IG5hbWVkQmluZGluZ3NOb2RlLmdldE5hbWVkQmluZGluZ05vZGVzKCksXG4gICAgICAgIG5hbWVkQmluZGluZ3NBcnJheSA9IG5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzKG5hbWVkQmluZGluZ05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBuYW1lZEJpbmRpbmdzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZ3MgPSBuZXcgTmFtZWRCaW5kaW5ncyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkVGVybSA9IG5ldyBCcmFja2V0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHZhbHVlcyk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGFyaXNvblRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGFyaXNvblRlcm0gPSBuZXcgQ29tcGFyaXNvblRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuZWdhdGVkLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWVkQmluZGluZ3NOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0TmFtZWRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFycmF5QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhcnJheUFzc2lnbm1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhcnJheUFzc2lnbm1lbnQgPSBuZXcgQXJyYXlBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGJpbmRpbmdzKTtcblxuICByZXR1cm4gYXJyYXlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJldHVyblN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5TdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50ID0gbmV3IFJldHVyblN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhbHVlKTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE9iamVjdEFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnQgPSBuZXcgT2JqZWN0QXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBuYW1lZEJpbmRpbmdzKTtcblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBbm9ueW1vdXNQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nID0gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBub255bW91c1Byb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZSA9IG5ldyBBbm9ueW1vdXNQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnRzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5KSxcbiAgICAgICAgYXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXksIC8vL1xuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50cyA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnRzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlKHR5cGUsIHZhcmlhYmxlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3NpZ25tZW50ID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gYXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHR5cGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbGFiZWxOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBiaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdGVybU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBldmVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxpZGVkRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVsaWRlZCA9IGJpbmRpbmdOb2RlLmlzRWxpZGVkKCk7XG5cbiAgcmV0dXJuIGVsaWRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcGFyYW1ldGVyTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0eXBlTmFtZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgdHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKHR5cGVOYW1lLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdmFsdWVOb2RlLmdldFByaW1pdGl2ZU5vZGUoKTtcblxuICBpZiAocHJpbWl0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBub2RlUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VmFsdWUoKTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzb21lID0gbnVsbDtcblxuICBjb25zdCBzb21lTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFNvbWVOb2RlKCk7XG5cbiAgaWYgKHNvbWVOb2RlICE9PSBudWxsKSB7XG4gICAgc29tZSA9IHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNvbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbmVnYXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IG5lZ2F0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldE5lZ2F0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChuZWdhdGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBuZWdhdGVkVGVybSA9IG5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxvZ2ljYWxUZXJtID0gbnVsbDtcblxuICBjb25zdCBsb2dpY2FsVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRMb2dpY2FsVGVybU5vZGUoKTtcblxuICBpZiAobG9naWNhbFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVzUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gc3RyaW5nLCAgLy8vXG4gICAgICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGV2ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBldmVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFdmVyeU5vZGUoKTtcblxuICBpZiAoZXZlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgZXZlcnkgPSBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRV9OQU1FO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJndW1lbnRUeXBlID0gbnVsbDtcblxuICBjb25zdCBhcmd1bWVudFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0QXJndW1lbnRUeXBlTmFtZSgpO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICAgIGFyZ3VtZW50VHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKGFyZ3VtZW50VHlwZU5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3VtZW50VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbGVuZ3RoT2ZOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBjb250YWluc05vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBlbmRzV2l0aE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWR1Y2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZWR1Y2VOb2RlKCk7XG5cbiAgaWYgKHJlZHVjZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWR1Y2UgPSByZWR1Y2VGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gY29udGFpbnNOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdHJpbmc7ICAvLy9cblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gZW5kc1dpdGhOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdHJpbmc7ICAvLy9cblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFsaWFzID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRBbGlhcygpO1xuXG4gIHJldHVybiBhbGlhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2RlUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm5hcnkgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybmFyeU5vZGUoKTtcblxuICBpZiAodGVybmFyeU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybmFyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGJyYWNrZXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGJyYWNrZXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0QnJhY2tldGVkVGVybU5vZGUoKTtcblxuICBpZiAoYnJhY2tldGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBicmFja2V0ZWRUZXJtID0gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0b0ludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1OT2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21wYXJpc29uVGVybSA9IG51bGw7XG5cbiAgY29uc3QgY29tcGFyaXNvblRlcm1Ob2RlID0gdGVybU5PZGUuZ2V0Q29tcGFyaXNvblRlcm1Ob2RlKCk7XG5cbiAgaWYgKGNvbXBhcmlzb25UZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gdmFsdWU7IC8vL1xuXG4gIHJldHVybiBpbml0aWFsVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0cnlJbnRlZ2VyTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBzdGFydHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVuZ3RoT2YgPSBudWxsO1xuXG4gIGNvbnN0IGxlbmd0aE9mTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldExlbmd0aE9mTm9kZSgpO1xuXG4gIGlmIChsZW5ndGhPZk5vZGUgIT09IG51bGwpIHtcbiAgICBsZW5ndGhPZiA9IGxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aE9mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbnRhaW5zID0gbnVsbDtcblxuICBjb25zdCBjb250YWluc05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRDb250YWluc05vZGUoKTtcblxuICBpZiAoY29udGFpbnNOb2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbnMgPSBjb250YWluc0Zyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWlucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBlbmRzV2l0aCA9IG51bGw7XG5cbiAgY29uc3QgZW5kc1dpdGhOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0RW5kc1dpdGhOb2RlKCk7XG5cbiAgaWYgKGVuZHNXaXRoTm9kZSAhPT0gbnVsbCkge1xuICAgIGVuZHNXaXRoID0gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZW5kc1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWZFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldElmRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgaWZFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShpZkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaWZFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvSW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdG9JbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0b0ludGVnZXJOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VG9JbnRlZ2VyTm9kZSgpO1xuXG4gIGlmICh0b0ludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdG9JbnRlZ2VyID0gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2RlUXVlcnkgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVRdWVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXROb2RlUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVRdWVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gc3RhcnRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGxvZ2ljYWxUZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlc05vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRWYWx1ZXNOb2RlKCksXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IG51bGw7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZXNRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXROb2Rlc1F1ZXJ5Tm9kZSgpO1xuXG4gIGlmIChub2Rlc1F1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHJ5SW50ZWdlciA9IG51bGw7XG5cbiAgY29uc3QgdHJ5SW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUcnlJbnRlZ2VyTm9kZSgpO1xuXG4gIGlmICh0cnlJbnRlZ2VyTm9kZSAhPT0gbnVsbCkge1xuICAgIHRyeUludGVnZXIgPSB0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0cnlJbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhcnRzV2l0aCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhcnRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTdGFydHNXaXRoTm9kZSgpO1xuXG4gIGlmIChzdGFydHNXaXRoTm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXJ0c1dpdGggPSBzdGFydHNXaXRoRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGxvZ2ljYWxUZXJtTm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxzZUV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0RWxzZUV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShlbHNlRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBlbHNlRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZXR1cm5CbG9jayA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCk7XG5cbiAgaWYgKHJldHVybkJsb2NrTm9kZSAhPT0gbnVsbCkge1xuICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSByZXR1cm5CbG9ja05vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbXBhcmlzb25UZXJtTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gc29tZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub25zZW5zaWNhbCA9IHJldHVybkJsb2NrTm9kZS5pc05vbnNlbnNpY2FsKCk7XG5cbiAgcmV0dXJuIG5vbnNlbnNpY2FsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkaXNqdW5jdGlvbiA9IGxvZ2ljYWxUZXJtTm9kZS5pc0Rpc2p1bmN0aW9uKCk7XG5cbiAgcmV0dXJuIGRpc2p1bmN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGNvbXBhcmlzb25UZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZVN0cmluZ0Zyb21OYW1lKG5hbWUpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdzTm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUuZ2V0QmluZGluZ3NOb2RlKCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJyYXlBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBhcnJheUFzc2lnbm1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRBcnJheUFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKGFycmF5QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhcnJheUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgb2JqZWN0QXNzaWdubWVudCA9IG51bGw7XG5cbiAgY29uc3Qgb2JqZWN0QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE9iamVjdEFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKG9iamVjdEFzc2lnbm1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5TdGF0ZW1lbnROb2RlID0gcmV0dXJuQmxvY2tOb2RlLmdldFJldHVyblN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50c05vZGUoKTtcblxuICBpZiAodmFyaWFibGVBc3NpZ25tZW50c05vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZUFzc2lnbm1lbnRzID0gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSB2YXJpYWJsZUFzc2lnbWVudE5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zQXJyYXkgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSB2YWx1ZU5vZGVzLm1hcCgodmFsdWVOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nTm9kZXMgPSBiaW5kaW5nc05vZGUuZ2V0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nTm9kZXMubWFwKChiaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gYmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwYXJhbWV0ZXJzTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZEJpbmRpbmdOb2Rlcy5tYXAoKG5hbWVkQmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbmFtZWRCaW5kaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMubWFwKCh2YXJpYWJsZUFzc2lnbm1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUiLCJhcmd1bWVudFR5cGVGcm9tVHlwZU5vZGUiLCJhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsImFycmF5QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlIiwiYmluZGluZ0Zyb21CaW5kaW5nTm9kZSIsImJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlIiwiYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsImJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUiLCJjb250YWluc0Zyb21Db250YWluc05vZGUiLCJjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImVsaWRlZEZyb21CaW5kaW5nTm9kZSIsImVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlIiwiZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJldmVyeUZyb21FdmVyeU5vZGUiLCJldmVyeUZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSIsImlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSIsImluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tUHJvY2VkdXJlTm9kZSIsImxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZSIsImxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlIiwibGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlIiwibG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Gcm9tVGVybU5vZGUiLCJuYW1lRnJvbUJpbmRpbmdOb2RlIiwibmFtZUZyb21MYWJlbE5vZGUiLCJuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21WYXJpYWJsZU5vZGUiLCJuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUiLCJuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwibmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMiLCJuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZSIsIm5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZSIsIm5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwibm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwibm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwibm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsIm5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJvYmplY3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUiLCJwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZSIsInByaW1pdGl2ZUZyb21UZXJtTm9kZSIsInByaW1pdGl2ZUZyb21WYWx1ZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUZyb21Qcm9jZWR1cmVOb2RlIiwicXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsInF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwicmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlIiwicmVkdWNlRnJvbVJlZHVjZU5vZGUiLCJyZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZSIsInJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJyaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwicmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInNvbWVGcm9tRXhwcmVzc2lvbk5vZGUiLCJzb21lRnJvbVNvbWVOb2RlIiwic3RhcnRzV2l0aEZyb21FeHByZXNzaW9uTm9kZSIsInN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlIiwic3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZSIsInN1YnN0cmluZ0Zyb21FbmRzV2l0aE5vZGUiLCJzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybmFyeU5vZGUiLCJ0ZXJtc0FycmF5RnJvbVRlcm1Ob2RlcyIsInRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlIiwidG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUiLCJ0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSIsInR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tQmluZGluZ05vZGUiLCJ0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsInR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlIiwidHlwZUZyb21QYXJhbmV0ZXJOb2RlIiwidHlwZUZyb21QcmltaXRpdmVOb2RlIiwidHlwZUZyb21Qcm9jZWR1cmVOb2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YWx1ZUZyb21SZWR1Y2VOb2RlIiwidmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21WYWx1ZU5vZGUiLCJ2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzIiwidmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwidmFsdWVzRnJvbVZhbHVlc05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21Db250YWluc05vZGUiLCJ2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUiLCJ2YXJpYWJsZUZyb21FdmVyeU5vZGUiLCJ2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUiLCJ2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVJlZHVjZU5vZGUiLCJ2YXJpYWJsZUZyb21Tb21lTm9kZSIsInZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUZyb21WYWx1ZU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJzb21lTm9kZSIsImNvbnRleHQiLCJTb21lIiwiZWxlbWVudHMiLCJub2RlIiwidmFyaWFibGUiLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJzb21lU3RyaW5nIiwic29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJzb21lIiwidGVybU5vZGUiLCJUZXJtIiwicHJpbWl0aXZlIiwibmVnYXRlZFRlcm0iLCJsb2dpY2FsVGVybSIsImJyYWNrZXRlZFRlcm0iLCJjb21wYXJpc29uVGVybSIsInByb3BlcnRpZXMiLCJ0ZXJtU3RyaW5nIiwidGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidGVybSIsInR5cGVOb2RlIiwiVHlwZSIsIm5vZGVBc1N0cmluZyIsIm5hbWUiLCJhcmd1bWVudFR5cGUiLCJ0eXBlIiwidmFsdWVOb2RlIiwiVmFsdWUiLCJ2YWx1ZVN0cmluZyIsInZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZSIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJldmVyeU5vZGUiLCJFdmVyeSIsImV2ZXJ5U3RyaW5nIiwiZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJldmVyeSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibGFiZWwiLCJ2YWx1ZXNOb2RlIiwiVmFsdWVzIiwidmFsdWVOb2RlcyIsImdldFZhbHVlTm9kZXMiLCJ2YWx1ZXNBcnJheSIsImFycmF5IiwidmFsdWVzIiwicmVkdWNlTm9kZSIsIlJlZHVjZSIsImluaXRpYWxWYWx1ZSIsInJlZHVjZVN0cmluZyIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVkdWNlIiwiYmluZGluZ05vZGUiLCJCaW5kaW5nIiwiZWxpZGVkIiwiYmluZGluZyIsInRlcm5hcnlOb2RlIiwiVGVybmFyeSIsImlmRXhwcmVzc2lvbiIsImVsc2VFeHByZXNzaW9uIiwidGVybmFyeVN0cmluZyIsInRlcm5hcnlTdHJpbmdGcm9tVGVybSIsInRlcm5hcnkiLCJjb250YWluc05vZGUiLCJDb250YWlucyIsInN1YnN0cmluZyIsImNvbnRhaW5zIiwiZW5kc1dpdGhOb2RlIiwiRW5kc1dpdGgiLCJlbmRzV2l0aCIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiZXhwcmVzc2lvbiIsImJpbmRpbmdzTm9kZSIsIkJpbmRpbmdzIiwiYmluZGluZ3NBcnJheSIsImJpbmRpbmdzIiwibGVuZ3RoT2ZOb2RlIiwiTGVuZ3RoT2YiLCJsZW5ndGhPZiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJhcnJheUFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ21lbnRzIiwic3RhdGVtZW50IiwicHJvY2VkdXJlTm9kZSIsIlByb2NlZHVyZSIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZVN0cmluZyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJwcm9jZWR1cmUiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsIm5vZGVRdWVyeU5vZGUiLCJOb2RlUXVlcnkiLCJxdWVyeSIsIm5vZGVRdWVyeSIsInByaW1pdGl2ZU5vZGUiLCJQcmltaXRpdmUiLCJ0b0ludGVnZXJOb2RlIiwiVG9JbnRlZ2VyIiwidG9JbnRlZ2VyIiwic3RhcnRzV2l0aE5vZGUiLCJTdGFydHNXaXRoIiwic3RhcnRzV2l0aCIsIm5vZGVzUXVlcnlOb2RlIiwiTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJwYXJhbWV0ZXJzTm9kZSIsIlBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQXJyYXkiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJ0cnlJbnRlZ2VyIiwicHJvY2VkdXJlQ2FsbCIsImV4cHJlc3Npb25TdHJpbmciLCJleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0cnlJbnRlZ2VyTm9kZSIsIlRyeUludGVnZXIiLCJyZXR1cm5CbG9ja05vZGUiLCJSZXR1cm5CbG9jayIsInN0YXRlbWVudHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsInJldHVybkJsb2NrU3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsIm5lZ2F0ZWRUZXJtTm9kZSIsIk5lZ2F0ZWRUZXJtIiwiZ2V0VGVybU5vZGUiLCJsb2dpY2FsVGVybU5vZGUiLCJMb2dpY2FsVGVybSIsImRpc2p1bmN0aW9uIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJuYW1lZEJpbmRpbmdOb2RlIiwiTmFtZWRCaW5kaW5nIiwiYWxpYXMiLCJuYW1lZEJpbmRpbmciLCJuYW1lZEJpbmRpbmdzTm9kZSIsIk5hbWVkQmluZGluZ3MiLCJuYW1lZEJpbmRpbmdOb2RlcyIsImdldE5hbWVkQmluZGluZ05vZGVzIiwibmFtZWRCaW5kaW5nc0FycmF5IiwibmFtZWRCaW5kaW5ncyIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiQnJhY2tldGVkVGVybSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsImNvbXBhcmlzb25UZXJtTm9kZSIsIkNvbXBhcmlzb25UZXJtIiwibmVnYXRlZCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJhcnJheUFzc2lnbm1lbnROb2RlIiwiQXJyYXlBc3NpZ25tZW50IiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIk9iamVjdEFzc2lnbm1lbnQiLCJhbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiQW5vbnltb3VzUHJvY2VkdXJlIiwibm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZyIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwiYXNzaWdubWVudCIsImdldE5hbWUiLCJnZXRWYWx1ZU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFByaW1pdGl2ZU5vZGUiLCJpc0VsaWRlZCIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJmcm9tVHlwZU5hbWUiLCJnZXRTdHJpbmciLCJRdWVyeSIsImZyb21FeHByZXNzaW9uU3RyaW5nIiwiZ2V0VmFsdWUiLCJnZXRMYWJlbE5vZGUiLCJnZXRTb21lTm9kZSIsImdldE5lZ2F0ZWRUZXJtTm9kZSIsImdldExvZ2ljYWxUZXJtTm9kZSIsImdldEV2ZXJ5Tm9kZSIsIkJPT0xFQU5fVFlQRV9OQU1FIiwiYXJndW1lbnRUeXBlTmFtZSIsImdldEFyZ3VtZW50VHlwZU5hbWUiLCJnZXRSZWR1Y2VOb2RlIiwiZ2V0QWxpYXMiLCJnZXRUZXJuYXJ5Tm9kZSIsImdldEJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybU5PZGUiLCJnZXRDb21wYXJpc29uVGVybU5vZGUiLCJnZXRMZW5ndGhPZk5vZGUiLCJnZXRDb250YWluc05vZGUiLCJnZXRFbmRzV2l0aE5vZGUiLCJpZkV4cHJlc3Npb25Ob2RlIiwiZ2V0SWZFeHByZXNzaW9uTm9kZSIsImdldFBhcmFtZXRlcnNOb2RlIiwiZ2V0VG9JbnRlZ2VyTm9kZSIsImdldE5vZGVRdWVyeU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0UmV0dXJuQmxvY2tOb2RlIiwiZ2V0Tm9kZXNRdWVyeU5vZGUiLCJnZXRUcnlJbnRlZ2VyTm9kZSIsImdldFN0YXJ0c1dpdGhOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJlbHNlRXhwcmVzc2lvbk5vZGUiLCJnZXRFbHNlRXhwcmVzc2lvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwibWFwIiwiaXNOZWdhdGVkIiwiZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImlzTm9uc2Vuc2ljYWwiLCJpc0Rpc2p1bmN0aW9uIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0QmluZGluZ3NOb2RlIiwiZ2V0QXJyYXlBc3NpZ25tZW50Tm9kZSIsImdldE9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSIsImdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ21lbnROb2RlIiwiZ2V0RXhwcmVzc2lvbk5vZGUiLCJ0ZXJtTm9kZXMiLCJ0ZXJtc0FycmF5IiwiYmluZGluZ05vZGVzIiwiZ2V0QmluZGluZ05vZGVzIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsIm5hbWVkUGFyYW1ldGVyc0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsInZhcmlhYmxlQXNzaWdubWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNmhDZ0JBO2VBQUFBOztRQTFZQUM7ZUFBQUE7O1FBa3VCQUM7ZUFBQUE7O1FBK0NBQztlQUFBQTs7UUFwR0FDO2VBQUFBOztRQTdXQUM7ZUFBQUE7O1FBNVdBQztlQUFBQTs7UUFvMEJBQztlQUFBQTs7UUEzdkNBQztlQUFBQTs7UUE2MUNBQztlQUFBQTs7UUF2SEFDO2VBQUFBOztRQXZwQ0FDO2VBQUFBOztRQTBUQUM7ZUFBQUE7O1FBNmZBQztlQUFBQTs7UUFuZUFDO2VBQUFBOztRQTZmQUM7ZUFBQUE7O1FBLzNCQUM7ZUFBQUE7O1FBeTdCQUM7ZUFBQUE7O1FBbU1BQztlQUFBQTs7UUF0aUJBQztlQUFBQTs7UUFxZkFDO2VBQUFBOztRQTVqQ0FDO2VBQUFBOztRQXM3QkFDO2VBQUFBOztRQWxqQ0FDO2VBQUFBOztRQWFBQztlQUFBQTs7UUFtMEJBQztlQUFBQTs7UUFuZ0JBQztlQUFBQTs7UUE0aUNBQztlQUFBQTs7UUExWEFDO2VBQUFBOztRQStEQUM7ZUFBQUE7O1FBdEVBQztlQUFBQTs7UUEzOUJBQztlQUFBQTs7UUFvdkJBQztlQUFBQTs7UUFxZUFDO2VBQUFBOztRQTNJQUM7ZUFBQUE7O1FBakZBQztlQUFBQTs7UUFoM0JBQztlQUFBQTs7UUE2UEFDO2VBQUFBOztRQXFaQUM7ZUFBQUE7O1FBcE1BQztlQUFBQTs7UUFwQkFDO2VBQUFBOztRQWlVQUM7ZUFBQUE7O1FBck5BQztlQUFBQTs7UUFNQUM7ZUFBQUE7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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-furtle",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.385",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-furtle",
|
|
7
7
|
"description": "Occam's Furtle language.",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"necessary": "^17.5.2",
|
|
14
14
|
"occam-grammars": "^1.3.632",
|
|
15
|
-
"occam-languages": "^1.0.
|
|
15
|
+
"occam-languages": "^1.0.47",
|
|
16
16
|
"occam-lexers": "^23.2.2",
|
|
17
17
|
"occam-parsers": "^23.2.4",
|
|
18
18
|
"occam-query": "^4.1.198"
|