occam-nominal 1.0.310 → 1.0.317
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/liminal.js +17 -15
- package/lib/context/phaneric.js +3 -3
- package/lib/context.js +3 -3
- package/lib/element/assertion/contained.js +19 -17
- package/lib/element/assertion/defined.js +16 -14
- package/lib/element/conclusion.js +10 -11
- package/lib/element/declaration/variable.js +2 -2
- package/lib/element/deduction.js +7 -7
- package/lib/element/equality.js +3 -3
- package/lib/element/frame.js +8 -3
- package/lib/element/goal.js +7 -8
- package/lib/element/judgement.js +8 -10
- package/lib/element/metavariable.js +44 -40
- package/lib/element/proof.js +2 -2
- package/lib/element/proofAssertion/premise.js +17 -21
- package/lib/element/proofAssertion/step.js +5 -5
- package/lib/element/proofAssertion/supposition.js +39 -35
- package/lib/element/rule.js +24 -22
- package/lib/element/statement.js +56 -32
- package/lib/element/substitution/frame.js +71 -62
- package/lib/element/substitution/reference.js +21 -21
- package/lib/element/substitution/statement.js +81 -98
- package/lib/element/substitution/term.js +76 -67
- package/lib/element/substitution.js +5 -5
- package/lib/element/term.js +2 -2
- package/lib/element/topLevelAssertion/axiom.js +4 -5
- package/lib/element/topLevelAssertion/conjecture.js +3 -3
- package/lib/element/topLevelAssertion/lemma.js +3 -3
- package/lib/element/topLevelAssertion/theorem.js +3 -3
- package/lib/element/topLevelAssertion.js +59 -69
- package/lib/node/metavariable.js +18 -1
- package/lib/process/unify.js +5 -7
- package/lib/process/validation.js +5 -2
- package/lib/utilities/element.js +34 -56
- package/package.json +2 -2
- package/src/context/liminal.js +18 -16
- package/src/context/phaneric.js +3 -3
- package/src/context.js +2 -2
- package/src/element/assertion/contained.js +19 -18
- package/src/element/assertion/defined.js +16 -16
- package/src/element/conclusion.js +9 -11
- package/src/element/declaration/variable.js +1 -1
- package/src/element/deduction.js +6 -6
- package/src/element/equality.js +2 -2
- package/src/element/frame.js +10 -2
- package/src/element/goal.js +6 -8
- package/src/element/judgement.js +7 -11
- package/src/element/metavariable.js +56 -52
- package/src/element/proof.js +1 -1
- package/src/element/proofAssertion/premise.js +17 -25
- package/src/element/proofAssertion/step.js +4 -4
- package/src/element/proofAssertion/supposition.js +44 -43
- package/src/element/rule.js +27 -25
- package/src/element/statement.js +71 -41
- package/src/element/substitution/frame.js +88 -82
- package/src/element/substitution/reference.js +30 -32
- package/src/element/substitution/statement.js +97 -132
- package/src/element/substitution/term.js +95 -89
- package/src/element/substitution.js +6 -6
- package/src/element/term.js +1 -1
- package/src/element/topLevelAssertion/axiom.js +3 -5
- package/src/element/topLevelAssertion/conjecture.js +2 -2
- package/src/element/topLevelAssertion/lemma.js +2 -2
- package/src/element/topLevelAssertion/theorem.js +2 -2
- package/src/element/topLevelAssertion.js +61 -80
- package/src/node/metavariable.js +28 -1
- package/src/process/unify.js +7 -16
- package/src/process/validation.js +5 -4
- package/src/utilities/element.js +49 -64
package/lib/utilities/element.js
CHANGED
|
@@ -132,9 +132,6 @@ _export(exports, {
|
|
|
132
132
|
get frameSubstitutionFromFrameSubstitutionNode () {
|
|
133
133
|
return frameSubstitutionFromFrameSubstitutionNode;
|
|
134
134
|
},
|
|
135
|
-
get frameSubstitutionFromStatementSubstitutionNode () {
|
|
136
|
-
return frameSubstitutionFromStatementSubstitutionNode;
|
|
137
|
-
},
|
|
138
135
|
get generatorDeclarationFromGeneratorDeclarationNode () {
|
|
139
136
|
return generatorDeclarationFromGeneratorDeclarationNode;
|
|
140
137
|
},
|
|
@@ -522,8 +519,8 @@ _export(exports, {
|
|
|
522
519
|
get subproofFromSubproofNode () {
|
|
523
520
|
return subproofFromSubproofNode;
|
|
524
521
|
},
|
|
525
|
-
get
|
|
526
|
-
return
|
|
522
|
+
get substitutionFromStatementNode () {
|
|
523
|
+
return substitutionFromStatementNode;
|
|
527
524
|
},
|
|
528
525
|
get superTypesFromCotypeDeclarationNode () {
|
|
529
526
|
return superTypesFromCotypeDeclarationNode;
|
|
@@ -591,9 +588,6 @@ _export(exports, {
|
|
|
591
588
|
get termFromTypeAssertionNode () {
|
|
592
589
|
return termFromTypeAssertionNode;
|
|
593
590
|
},
|
|
594
|
-
get termSubstitutionFromStatementSubstitutionNode () {
|
|
595
|
-
return termSubstitutionFromStatementSubstitutionNode;
|
|
596
|
-
},
|
|
597
591
|
get termSubstitutionFromTermSubstitutionNode () {
|
|
598
592
|
return termSubstitutionFromTermSubstitutionNode;
|
|
599
593
|
},
|
|
@@ -825,9 +819,9 @@ function deductionFromDeductionNode(deductionNode, context) {
|
|
|
825
819
|
return deduction;
|
|
826
820
|
}
|
|
827
821
|
function statementFromStatementNode(statementNode, context) {
|
|
828
|
-
const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null;
|
|
822
|
+
const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null, substitution = substitutionFromStatementNode(statementNode, context);
|
|
829
823
|
context = null;
|
|
830
|
-
const statement = new Statement(context, string, node, breakPoint);
|
|
824
|
+
const statement = new Statement(context, string, node, breakPoint, substitution);
|
|
831
825
|
return statement;
|
|
832
826
|
}
|
|
833
827
|
function signatureFromSignatureNode(signatureNode, context) {
|
|
@@ -957,17 +951,17 @@ function definedAssertionFromDefinedAssertionNode(definedAssertionNode, context)
|
|
|
957
951
|
return definedAssertion;
|
|
958
952
|
}
|
|
959
953
|
function termSubstitutionFromTermSubstitutionNode(termSubstitutionNode, generalContext, specificContext) {
|
|
960
|
-
const { TermSubstitution } = _elements.default, node = termSubstitutionNode,
|
|
954
|
+
const { TermSubstitution } = _elements.default, node = termSubstitutionNode, contexts = [
|
|
961
955
|
generalContext,
|
|
962
956
|
specificContext
|
|
963
|
-
], string = context.nodeAsString(node), breakPoint = null, targetTerm = targetTermFromTermSubstitutionNode(termSubstitutionNode,
|
|
957
|
+
], context = specificContext, string = context.nodeAsString(node), breakPoint = null, targetTerm = targetTermFromTermSubstitutionNode(termSubstitutionNode, generalContext), replacementTerm = replacementTermFromTermSubstitutionNode(termSubstitutionNode, specificContext), termSubstitution = new TermSubstitution(contexts, string, node, breakPoint, targetTerm, replacementTerm);
|
|
964
958
|
return termSubstitution;
|
|
965
959
|
}
|
|
966
960
|
function frameSubstitutionFromFrameSubstitutionNode(frameSubstitutionNode, generalContext, specificContext) {
|
|
967
|
-
const { FrameSubstitution } = _elements.default, node = frameSubstitutionNode,
|
|
961
|
+
const { FrameSubstitution } = _elements.default, node = frameSubstitutionNode, contexts = [
|
|
968
962
|
generalContext,
|
|
969
963
|
specificContext
|
|
970
|
-
], string = context.nodeAsString(node), breakPoint = null, targetFrame = targetFrameFromFrameSubstitutionNode(frameSubstitutionNode,
|
|
964
|
+
], context = specificContext, string = context.nodeAsString(node), breakPoint = null, targetFrame = targetFrameFromFrameSubstitutionNode(frameSubstitutionNode, generalContext), replacementFrame = replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, specificContext), frameSubstitution = new FrameSubstitution(contexts, string, node, breakPoint, targetFrame, replacementFrame);
|
|
971
965
|
return frameSubstitution;
|
|
972
966
|
}
|
|
973
967
|
function propertyAssertionFromPropertyAssertionNode(propertyAssertionNode, context) {
|
|
@@ -1049,17 +1043,17 @@ function combinatorDeclarationFromCombinatorDeclarationNode(combinatorDeclaratio
|
|
|
1049
1043
|
return combinatorDeclaration;
|
|
1050
1044
|
}
|
|
1051
1045
|
function referenceSubstitutionFromReferenceSubstitutionNode(referenceSubstitutionNode, generalContext, specificContext) {
|
|
1052
|
-
const { ReferenceSubstitution } = _elements.default, node = referenceSubstitutionNode,
|
|
1046
|
+
const { ReferenceSubstitution } = _elements.default, node = referenceSubstitutionNode, contexts = [
|
|
1053
1047
|
generalContext,
|
|
1054
1048
|
specificContext
|
|
1055
|
-
], string = context.nodeAsString(node), breakPoint = null, targetReference = targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode,
|
|
1049
|
+
], context = specificContext, string = context.nodeAsString(node), breakPoint = null, targetReference = targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, generalContext), replacementReference = replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, specificContext), referenceSubstitution = new ReferenceSubstitution(contexts, string, node, breakPoint, targetReference, replacementReference);
|
|
1056
1050
|
return referenceSubstitution;
|
|
1057
1051
|
}
|
|
1058
1052
|
function statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext) {
|
|
1059
|
-
const { StatementSubstitution } = _elements.default, node = statementSubstitutionNode,
|
|
1053
|
+
const { StatementSubstitution } = _elements.default, node = statementSubstitutionNode, contexts = [
|
|
1060
1054
|
generalContext,
|
|
1061
1055
|
specificContext
|
|
1062
|
-
], string = context.nodeAsString(node), breakPoint = null, resolved = resolvedFromStatementSubstitutionNode(statementSubstitutionNode,
|
|
1056
|
+
], context = specificContext, string = context.nodeAsString(node), breakPoint = null, resolved = resolvedFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext), targetStatement = targetStatementFromStatementSubstitutionNode(statementSubstitutionNode, generalContext), replacementStatement = replacementStatementFromStatementSubstitutionNode(statementSubstitutionNode, specificContext), statementSubstitution = new StatementSubstitution(contexts, string, node, breakPoint, resolved, targetStatement, replacementStatement);
|
|
1063
1057
|
return statementSubstitution;
|
|
1064
1058
|
}
|
|
1065
1059
|
function constructorDeclarationFromConstructorDeclarationNode(constructorDeclarationNode, context) {
|
|
@@ -1484,6 +1478,10 @@ function metavariableFromReferenceNode(referenceNode, context) {
|
|
|
1484
1478
|
const metavariableNode = referenceNode.getMetavariableNode(), metavariable = metavariableFromMetavariableNode(metavariableNode, context);
|
|
1485
1479
|
return metavariable;
|
|
1486
1480
|
}
|
|
1481
|
+
function substitutionFromStatementNode(statementNode, context) {
|
|
1482
|
+
const { FrameSubstitution, TermSubstitution } = _elements.default, frameSubstitution = FrameSubstitution.fromStatementNode(statementNode, context), termSubstitution = TermSubstitution.fromStatementNode(statementNode, context), substitution = frameSubstitution || termSubstitution;
|
|
1483
|
+
return substitution;
|
|
1484
|
+
}
|
|
1487
1485
|
function hypothesesFromConstructorNode(constructorNode, context) {
|
|
1488
1486
|
const hypotheses = [];
|
|
1489
1487
|
return hypotheses;
|
|
@@ -1646,8 +1644,8 @@ function negatedFromContainedAssertionNode(containedAssertionNode, context) {
|
|
|
1646
1644
|
const negated = containedAssertionNode.isNegated();
|
|
1647
1645
|
return negated;
|
|
1648
1646
|
}
|
|
1649
|
-
function targetTermFromTermSubstitutionNode(termSubstitutionNode,
|
|
1650
|
-
const targetTermNode = termSubstitutionNode.getTargetTermNode(), targetTerm = termFromTermNode(targetTermNode, context);
|
|
1647
|
+
function targetTermFromTermSubstitutionNode(termSubstitutionNode, generalContext) {
|
|
1648
|
+
const context = generalContext, targetTermNode = termSubstitutionNode.getTargetTermNode(), targetTerm = termFromTermNode(targetTermNode, context);
|
|
1651
1649
|
return targetTerm;
|
|
1652
1650
|
}
|
|
1653
1651
|
function deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context) {
|
|
@@ -1761,8 +1759,8 @@ function subjectTermFromPropertyAssertionNode(propertyAssertionNode, context) {
|
|
|
1761
1759
|
const subjectTermNode = propertyAssertionNode.getSubjectTermNode(), subjectTerm = termFromTermNode(subjectTermNode, context);
|
|
1762
1760
|
return subjectTerm;
|
|
1763
1761
|
}
|
|
1764
|
-
function targetFrameFromFrameSubstitutionNode(frameSubstitutionNode,
|
|
1765
|
-
const targetFrameNode = frameSubstitutionNode.getTargetFrameNode(), targetFrame = frameFromFrameNode(targetFrameNode, context);
|
|
1762
|
+
function targetFrameFromFrameSubstitutionNode(frameSubstitutionNode, generalContext) {
|
|
1763
|
+
const context = generalContext, targetFrameNode = frameSubstitutionNode.getTargetFrameNode(), targetFrame = frameFromFrameNode(targetFrameNode, context);
|
|
1766
1764
|
return targetFrame;
|
|
1767
1765
|
}
|
|
1768
1766
|
function provisionalFromCotypeDeclarationNode(cotypeDeclarationNode, context) {
|
|
@@ -1793,7 +1791,7 @@ function generatorFromGeneratorDeclarationNode(generatorDeclarationNode, context
|
|
|
1793
1791
|
const generatorNode = generatorDeclarationNode.getGeneratorNode(), generator = generatorFromGeneratorNode(generatorNode, context);
|
|
1794
1792
|
return generator;
|
|
1795
1793
|
}
|
|
1796
|
-
function resolvedFromStatementSubstitutionNode(statementSubstitutionNode,
|
|
1794
|
+
function resolvedFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext) {
|
|
1797
1795
|
const resolved = statementSubstitutionNode.isResolved();
|
|
1798
1796
|
return resolved;
|
|
1799
1797
|
}
|
|
@@ -1809,8 +1807,8 @@ function procedureReferenceFromProcedureCallNode(procedureCallNode, context) {
|
|
|
1809
1807
|
const procedureReferenceNode = procedureCallNode.getProcedureReferenceNode(), procedureReference = procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context);
|
|
1810
1808
|
return procedureReference;
|
|
1811
1809
|
}
|
|
1812
|
-
function replacementTermFromTermSubstitutionNode(termSubstitutionNode,
|
|
1813
|
-
const replacementTermNode = termSubstitutionNode.getReplacementTermNode(), replacementTerm = termFromTermNode(replacementTermNode, context);
|
|
1810
|
+
function replacementTermFromTermSubstitutionNode(termSubstitutionNode, specificContext) {
|
|
1811
|
+
const context = specificContext, replacementTermNode = termSubstitutionNode.getReplacementTermNode(), replacementTerm = termFromTermNode(replacementTermNode, context);
|
|
1814
1812
|
return replacementTerm;
|
|
1815
1813
|
}
|
|
1816
1814
|
function provisionalFromGeneratorDeclarationNode(generatorDeclarationNode, context) {
|
|
@@ -1829,14 +1827,10 @@ function metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, co
|
|
|
1829
1827
|
const metaTypeName = metavariableDeclarationNode.getMetaTypeName(), metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
|
|
1830
1828
|
return metaType;
|
|
1831
1829
|
}
|
|
1832
|
-
function replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode,
|
|
1833
|
-
const replacementFrameNode = frameSubstitutionNode.getReplacementFrameNode(), replacementFrame = frameFromFrameNode(replacementFrameNode, context);
|
|
1830
|
+
function replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, specificContext) {
|
|
1831
|
+
const context = specificContext, replacementFrameNode = frameSubstitutionNode.getReplacementFrameNode(), replacementFrame = frameFromFrameNode(replacementFrameNode, context);
|
|
1834
1832
|
return replacementFrame;
|
|
1835
1833
|
}
|
|
1836
|
-
function substitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext) {
|
|
1837
|
-
const frameSubstitution = frameSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext), termSubstitution = termSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext), substitution = frameSubstitution || termSubstitution;
|
|
1838
|
-
return substitution;
|
|
1839
|
-
}
|
|
1840
1834
|
function constructorFromConstructorDeclarationNode(constructorDeclarationNode, context) {
|
|
1841
1835
|
const constructorNode = constructorDeclarationNode.getConstructorNode(), constructor = constructorFromConstructorNode(constructorNode, context);
|
|
1842
1836
|
return constructor;
|
|
@@ -1849,40 +1843,24 @@ function metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode
|
|
|
1849
1843
|
const metavariableNode = metavariableDeclarationNode.getMetavariableNode(), metavariable = metavariableFromMetavariableNode(metavariableNode, context);
|
|
1850
1844
|
return metavariable;
|
|
1851
1845
|
}
|
|
1852
|
-
function targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode,
|
|
1853
|
-
const { Reference } = _elements.default, targetReferenceNode = referenceSubstitutionNode.getTargetReferenceNode(), targetReferenceString = context.nodeAsString(targetReferenceNode), targetReference = Reference.fromReferenceString(targetReferenceString, context);
|
|
1846
|
+
function targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, generalContext) {
|
|
1847
|
+
const { Reference } = _elements.default, context = generalContext, targetReferenceNode = referenceSubstitutionNode.getTargetReferenceNode(), targetReferenceString = context.nodeAsString(targetReferenceNode), targetReference = Reference.fromReferenceString(targetReferenceString, context);
|
|
1854
1848
|
return targetReference;
|
|
1855
1849
|
}
|
|
1856
|
-
function targetStatementFromStatementSubstitutionNode(statementSubstitutionNode,
|
|
1857
|
-
const targetStatementNode = statementSubstitutionNode.getTargetStatementNode(), targetStatement = statementFromStatementNode(targetStatementNode, context);
|
|
1850
|
+
function targetStatementFromStatementSubstitutionNode(statementSubstitutionNode, generalContext) {
|
|
1851
|
+
const context = generalContext, targetStatementNode = statementSubstitutionNode.getTargetStatementNode(), targetStatement = statementFromStatementNode(targetStatementNode, context);
|
|
1858
1852
|
return targetStatement;
|
|
1859
1853
|
}
|
|
1860
1854
|
function propertyDeclarationsFromCotypeDeclarationNode(cotypeDeclarationNode, context) {
|
|
1861
1855
|
const propertyDeclarationnNodes = cotypeDeclarationNode.getPropertyDeclarationNodes(), propertyDeclarations = propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNodes, context);
|
|
1862
1856
|
return propertyDeclarations;
|
|
1863
1857
|
}
|
|
1864
|
-
function
|
|
1865
|
-
|
|
1866
|
-
const termSubstitutionNode = statementSubstitutionNode.getTermSubstitutionNode();
|
|
1867
|
-
if (termSubstitutionNode !== null) {
|
|
1868
|
-
termSubstitution = termSubstitutionFromTermSubstitutionNode(termSubstitutionNode, generalContext, specificContext);
|
|
1869
|
-
}
|
|
1870
|
-
return termSubstitution;
|
|
1871
|
-
}
|
|
1872
|
-
function frameSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext) {
|
|
1873
|
-
let frameSubstitution = null;
|
|
1874
|
-
const frameSubstitutionNode = statementSubstitutionNode.getFrameSubstitutionNode();
|
|
1875
|
-
if (frameSubstitutionNode !== null) {
|
|
1876
|
-
frameSubstitution = frameSubstitutionFromFrameSubstitutionNode(frameSubstitutionNode, generalContext, specificContext);
|
|
1877
|
-
}
|
|
1878
|
-
return frameSubstitution;
|
|
1879
|
-
}
|
|
1880
|
-
function replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context) {
|
|
1881
|
-
const { Reference } = _elements.default, replacementReferenceNode = referenceSubstitutionNode.getReplacementReferenceNode(), replacementReferenceString = context.nodeAsString(replacementReferenceNode), replacementReference = Reference.fromReferenceString(replacementReferenceString, context);
|
|
1858
|
+
function replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, specificContext) {
|
|
1859
|
+
const { Reference } = _elements.default, context = specificContext, replacementReferenceNode = referenceSubstitutionNode.getReplacementReferenceNode(), replacementReferenceString = context.nodeAsString(replacementReferenceNode), replacementReference = Reference.fromReferenceString(replacementReferenceString, context);
|
|
1882
1860
|
return replacementReference;
|
|
1883
1861
|
}
|
|
1884
|
-
function replacementStatementFromStatementSubstitutionNode(statementSubstitutionNode,
|
|
1885
|
-
const replacementStatementNode = statementSubstitutionNode.getReplacementStatementNode(), replacementStatement = statementFromStatementNode(replacementStatementNode, context);
|
|
1862
|
+
function replacementStatementFromStatementSubstitutionNode(statementSubstitutionNode, specificContext) {
|
|
1863
|
+
const context = specificContext, replacementStatementNode = statementSubstitutionNode.getReplacementStatementNode(), replacementStatement = statementFromStatementNode(replacementStatementNode, context);
|
|
1886
1864
|
return replacementStatement;
|
|
1887
1865
|
}
|
|
1888
1866
|
function termsFromTermNodes(termNodes, context) {
|
|
@@ -1970,4 +1948,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
|
|
|
1970
1948
|
return propertyDeclrations;
|
|
1971
1949
|
}
|
|
1972
1950
|
|
|
1973
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzLFxuICAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCxcbiAgICAgICAgIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kVG9wTGV2ZWxBc3NlcnRpb24sXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2lnbmF0dXJlQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICAgICAgbm9kZSA9IHJ1bGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gIHJldHVybiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ29hbEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEdvYWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ29hbE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBnb2FsID0gbmV3IEdvYWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGxlbW1hTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTY2hlbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gc2NoZW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNjaGVtYVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzY2hlbWEgPSBuZXcgU2NoZW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgY29uc3RyYWludHMpO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2VjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgdG9wTGV2ZWxBc3NlcnRpb24pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgZGVjbGFyYXRpb24sIHRvcExldmVsQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtID0gbmV3IFRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBpZiAocHJvcGVydHlOb2RlICE9IG51bGwpIHtcbiAgICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gcHJvcGVydHlOb2RlLCAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlKTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBpZGVudGlmaWVyLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mTm9kZSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbiwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2YgPSBuZXcgU3VicHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pO1xuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBnb2FsID0gZ29hbEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgZ29hbCk7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gaHlwb2h0ZXNpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25zdHJhaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZzsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1aXZhbGVuY2UgPSBuZXcgRXF1aXZhbGVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCB0ZXJtLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycyksXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uID0gbmV3IFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRGcmFtZSwgcmVwbGFjZW1lbnRGcmFtZSk7XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1YmplY3RUZXJtID0gc3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YmplY3RUZXJtLCBwcm9wZXJ0eVRlcm0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cyk7XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvdHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZyA9IGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpLFxuICAgICAgICBzdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvdHlwZURlY2xhcmF0aW9uID0gbmV3IENvdHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwsIHByb3BlcnR5RGVjbGFyYXRpb25zKTtcblxuICByZXR1cm4gY290eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlZW5jZSA9IG5ldyBQcm9jZWR1cmVSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBJbXBsaWNpdEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBuZXcgSW1wbGljaXRBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb24gPSBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gbmV3IEJyYWNrZXRlZENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbmV3IEdlbmVyYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGdlbmVyYXRvcik7XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IHNjaGVtYU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBzY2hlbWFOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZU5vZGVzID0gcnVsZU5vZGUuZ2V0UHJlbWlzZU5vZGVzKCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZ29hbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gZ29hbE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdvYWxOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRHb2FsTm9kZSgpLFxuICAgICAgICBnb2FsID0gZ29hbEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGdlbmVyYXRvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBzY2hlbWFOb2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YW1ldGF2YXJpYWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcblxuICByZXR1cm4gY29uc3RyYWludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc2NoZW1hTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIHx8IGdlbmVyYXRvckRlY2xhcmF0aW9uKTtcblxuICByZXR1cm4gZGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uc3RyYWludE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBtZXRhdmFyaWFibGVTdHJpbmcsIC8vL1xuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXhpb20gPSBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbW1hID0gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSAoYXhpb20gfHwgbGVtbWEgfHwgdGhlb3JlbSB8fCBjb25qZWN0dXJlKTtcblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHNpZ25hdHVyZU5vZGUpO1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21TaWduYXR1cmVTdHJpbmcoc2lnbmF0dXJlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHNpZ25hdHVyZU5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcoc2lnbmF0dXJlTm9kZSksXG4gICAgICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tU2lnbmF0dXJlU3RyaW5nKHNpZ25hdHVyZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdWJqZWN0VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0U3ViamVjdFRlcm1Ob2RlKCksXG4gICAgICAgIHN1YmplY3RUZXJtID0gdGVybUZyb21UZXJtTm9kZShzdWJqZWN0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJqZWN0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldEZyYW1lTm9kZSgpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZSh0YXJnZXRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYnJhY2tldGVkQ29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSgpO1xuXG4gIGlmIChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlUZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocHJvcGVydHlUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmF0b3JOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldEdlbmVyYXRvck5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNSZXNvbHZlZCgpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJlcGxhY2VtZW50VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKSxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbWJpbmF0b3JOb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YVR5cGVOYW1lID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShyZXBsYWNlbWVudEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gKGZyYW1lU3Vic3RpdHV0aW9uIHx8IHRlcm1TdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRDb25zdHJ1Y3Rvck5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHRhcmdldFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyh0YXJnZXRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUodGFyZ2V0U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMoKSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlEZWNsY2FyYXRpb24gPSBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlY2xjYXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbHJhdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21TY2hlbWFOb2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZSIsImdvYWxGcm9tR29hbE5vZGUiLCJnb2FsRnJvbUp1ZGdlbWVudE5vZGUiLCJoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZSIsImlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlIiwiaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tU2NoZW1hTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGFiZWxzRnJvbVJ1bGVOb2RlIiwibGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbXRlck5vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbUh5cG90aGVzaXNOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21TY2hlbWFOb2RlIiwicHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UZXJtTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlRnJvbUdvYWxOb2RlIiwicmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2NoZW1hRnJvbVNjaGVtYU5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Hb2FsTm9kZSIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbVByZW1pc2VOb2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RlcE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzIiwic3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdGVwRnJvbVN0ZXBOb2RlIiwic3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZSIsInN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUiLCJzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlTm9kZSIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUdlbmVyYXRvck5vZGUiLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlOb2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJ0eXBlRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5Tm9kZSIsInR5cGVGcm9tVGVybU5vZGUiLCJ0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVzRnJvbVR5cGVzTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJicmVha1BvaW50IiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJnb2FsTm9kZSIsIkdvYWwiLCJnb2FsIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsInRvcExldmVsQXNzc2VydGlvbk5vZGUiLCJkZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwidG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2NoZW1hTm9kZSIsIlNjaGVtYSIsImNvbnN0cmFpbnRzIiwic2NoZW1hU3RyaW5nIiwic2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwic2NoZW1hIiwic2VjdGlvbk5vZGUiLCJTZWN0aW9uIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwiZGVjbGFyYXRpb24iLCJ0b3BMZXZlbEFzc2VydGlvbiIsInNlY3Rpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZFRvcExldmVsQXNzZXJ0aW9uIiwic2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJzaWduYXR1cmVOb2RlIiwiU2lnbmF0dXJlIiwidGVybXMiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwianVkZ2VtZW50Tm9kZSIsIkp1ZGdlbWVudCIsImp1ZGdlbWVudCIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwic3ViRGVyaXZhdGlvbk5vZGUiLCJTdWJEZXJpdmF0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsIlR5cGVEZWNsYXJhdGlvbiIsInR5cGVEZWNsYXJhdGlvbiIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIlRlcm1TdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwic3ViamVjdFRlcm0iLCJwcm9wZXJ0eVRlcm0iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY290eXBlRGVjbGFyYXRpb25Ob2RlIiwiQ290eXBlRGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9ucyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvdHlwZURlY2xhcmF0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlZW5jZSIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiR2VuZXJhdG9yRGVjbGFyYXRpb24iLCJnZW5lcmF0b3JEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uIiwidGFyZ2V0U3RhdGVtZW50IiwicmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsIkNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJnZXRQcm9vZk5vZGUiLCJsYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VGVybU5vZGUiLCJnZXROYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlc21lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VTdHJpbmciLCJmcm9tUmVmZXJlbmNlU3RyaW5nIiwiZ2V0R29hbE5vZGUiLCJ0eXBlUHJlZml4TmFtZSIsImdldFR5cGVQcmVmaXhOYW1lIiwiZ2V0Q29uY2x1c2lvbk5vZGUiLCJnZXRUaGVvcmVtTm9kZSIsImdldEZyYW1lTm9kZSIsInRlcm1Ob2RlcyIsImdldFRlcm1Ob2RlcyIsImdldERlZHVjdGlvbk5vZGUiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGFtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInR5cGVtTm9kZSIsImdldFR5cGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllciIsImdldEp1ZGdlbWVudE5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJnZXRTdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcnZpYXRpb24iLCJtZXRhdmFyaWFibGVTdHJpbmciLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwidHlwZXNOb2RlIiwiZ2V0VHlwZXNOb2RlIiwidHlwZXMiLCJ0YXJnZXRUZXJtTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZVN0cmluZyIsImZyb21TaWduYXR1cmVTdHJpbmciLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJzdWJqZWN0VGVybU5vZGUiLCJnZXRTdWJqZWN0VGVybU5vZGUiLCJ0YXJnZXRGcmFtZU5vZGUiLCJnZXRUYXJnZXRGcmFtZU5vZGUiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5VGVybU5vZGUiLCJnZXRQcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0R2VuZXJhdG9yTm9kZSIsImlzUmVzb2x2ZWQiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRUeXBlUHJlZml4Tm9kZSIsImdldENvbWJpbmF0b3JOb2RlIiwibWV0YVR5cGVOYW1lIiwiZ2V0TWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJyZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0UmVmZXJlbmNlTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VTdHJpbmciLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwicHJvcGVydHlEZWNscmF0aW9ucyIsInByb3BlcnR5RGVjbGNhcmF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUE2Z0JnQkE7ZUFBQUE7O1FBMHpEQUM7ZUFBQUE7O1FBcmtDQUM7ZUFBQUE7O1FBaGxDQUM7ZUFBQUE7O1FBKzJCQUM7ZUFBQUE7O1FBMU1BQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBMkNBQztlQUFBQTs7UUFpd0NBQztlQUFBQTs7UUF0ckRBQztlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBdXNCQUM7ZUFBQUE7O1FBMXVCQUM7ZUFBQUE7O1FBdzVCQUM7ZUFBQUE7O1FBcDZCQUM7ZUFBQUE7O1FBODVCQUM7ZUFBQUE7O1FBdFpBQztlQUFBQTs7UUFpb0NBQztlQUFBQTs7UUEyR0FDO2VBQUFBOztRQS9vREFDO2VBQUFBOztRQW1PQUM7ZUFBQUE7O1FBc3JDQUM7ZUFBQUE7O1FBeHNDQUM7ZUFBQUE7O1FBa3FCQUM7ZUFBQUE7O1FBbmtDQUM7ZUFBQUE7O1FBeTRCQUM7ZUFBQUE7O1FBcXFCQUM7ZUFBQUE7O1FBNXRDQUM7ZUFBQUE7O1FBcXJDQUM7ZUFBQUE7O1FBbDJDQUM7ZUFBQUE7O1FBdXZCQUM7ZUFBQUE7O1FBMzZCQUM7ZUFBQUE7O1FBaWpDQUM7ZUFBQUE7O1FBdHpCQUM7ZUFBQUE7O1FBcmNBQztlQUFBQTs7UUE4b0RBQztlQUFBQTs7UUF0SEFDO2VBQUFBOztRQXQvQ0FDO2VBQUFBOztRQWlpREFDO2VBQUFBOztRQXRmQUM7ZUFBQUE7O1FBamdCQUM7ZUFBQUE7O1FBbWlEQUM7ZUFBQUE7O1FBbjNDQUM7ZUFBQUE7O1FBOGxDQUM7ZUFBQUE7O1FBNklBQztlQUFBQTs7UUFsc0RBQztlQUFBQTs7UUE1VEFDO2VBQUFBOztRQTBpQ0FDO2VBQUFBOztRQXUrQkFDO2VBQUFBOztRQTdmQUM7ZUFBQUE7O1FBcEpBQztlQUFBQTs7UUFpMkJBQztlQUFBQTs7UUFqVEFDO2VBQUFBOztRQXBtREFDO2VBQUFBOztRQThpQ0FDO2VBQUFBOztRQXhEQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQTFtQkFDO2VBQUFBOztRQW5iQUM7ZUFBQUE7O1FBc2pDQUM7ZUFBQUE7O1FBeDBDQUM7ZUFBQUE7O1FBNjVCQUM7ZUFBQUE7O1FBOHdDQUM7ZUFBQUE7O1FBNXhDQUM7ZUFBQUE7O1FBc3hCQUM7ZUFBQUE7O1FBeGZBQztlQUFBQTs7UUFycENBQztlQUFBQTs7UUE2NkJBQztlQUFBQTs7UUF3bUNBQztlQUFBQTs7UUF0c0NBQztlQUFBQTs7UUFtWEFDO2VBQUFBOztRQVlBQztlQUFBQTs7UUEwMkJBQztlQUFBQTs7UUFobkRBQztlQUFBQTs7UUFpaUNBQztlQUFBQTs7UUFaQUM7ZUFBQUE7O1FBMVRBQztlQUFBQTs7UUF2TkFDO2VBQUFBOztRQW9EQUM7ZUFBQUE7O1FBd21CQUM7ZUFBQUE7O1FBMXdCQUM7ZUFBQUE7O1FBZ1BBQztlQUFBQTs7UUErcEJBQztlQUFBQTs7UUFyREFDO2VBQUFBOztRQTlXQUM7ZUFBQUE7O1FBamtDQUM7ZUFBQUE7O1FBMDZEQUM7ZUFBQUE7O1FBempCQUM7ZUFBQUE7O1FBcGxCQUM7ZUFBQUE7O1FBNzdCQUM7ZUFBQUE7O1FBc2pFQUM7ZUFBQUE7O1FBcndDQUM7ZUFBQUE7O1FBb3RCQUM7ZUFBQUE7O1FBbk1BQztlQUFBQTs7UUFsOUJBQztlQUFBQTs7UUFtdENBQztlQUFBQTs7UUF1VUFDO2VBQUFBOztRQXAxQ0FDO2VBQUFBOztRQTNuQkFDO2VBQUFBOztRQXUwQkFDO2VBQUFBOztRQW1CQUM7ZUFBQUE7O1FBb3NCQUM7ZUFBQUE7O1FBbGlCQUM7ZUFBQUE7O1FBaGRBQztlQUFBQTs7UUFnc0NBQztlQUFBQTs7UUF4bENBQztlQUFBQTs7UUF1NUNBQztlQUFBQTs7UUFrS0FDO2VBQUFBOztRQS9WQUM7ZUFBQUE7O1FBeHdEQUM7ZUFBQUE7O1FBazBEQUM7ZUFBQUE7O1FBc0dBQztlQUFBQTs7UUEvSEFDO2VBQUFBOztRQThFQUM7ZUFBQUE7O1FBLzVCQUM7ZUFBQUE7O1FBc3NCQUM7ZUFBQUE7O1FBNXNCQUM7ZUFBQUE7O1FBMjRCQUM7ZUFBQUE7O1FBdnBCQUM7ZUFBQUE7O1FBa0JBQztlQUFBQTs7UUFrREFDO2VBQUFBOztRQWxjQUM7ZUFBQUE7O1FBb2lCQUM7ZUFBQUE7O1FBdndDQUM7ZUFBQUE7O1FBc3BEQUM7ZUFBQUE7O1FBcDVCQUM7ZUFBQUE7O1FBdE5BQztlQUFBQTs7UUFpd0NBQztlQUFBQTs7UUFrRkFDO2VBQUFBOztRQVNBQztlQUFBQTs7UUE3SEFDO2VBQUFBOztRQXpCQUM7ZUFBQUE7O1FBMXZCQUM7ZUFBQUE7O1FBN3hDQUM7ZUFBQUE7O1FBNkhBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQXlqQkFDO2VBQUFBOztRQWlyQ0FDO2VBQUFBOztRQW5TQUM7ZUFBQUE7O1FBOFZBQztlQUFBQTs7UUF4cERBQztlQUFBQTs7UUE2aERBQztlQUFBQTs7UUFuWkFDO2VBQUFBOztRQTJrQkFDO2VBQUFBOztRQXBrQkFDO2VBQUFBOztRQU9BQztlQUFBQTs7UUFpQ0FDO2VBQUFBOztRQXdkQUM7ZUFBQUE7O1FBamxCQUM7ZUFBQUE7O1FBdFVBQztlQUFBQTs7UUEwYUFDO2VBQUFBOztRQXNlQUM7ZUFBQUE7O1FBcnVCQUM7ZUFBQUE7O1FBbDdCQUM7ZUFBQUE7O1FBOHdCQUM7ZUFBQUE7O1FBeWRBQztlQUFBQTs7UUFscEJBQztlQUFBQTs7UUE2M0NBQztlQUFBQTs7UUFsVUFDO2VBQUFBOztRQTc2REFDO2VBQUFBOztRQWs0Q0FDO2VBQUFBOztRQXR6QkFDO2VBQUFBOztRQXF0REFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUE3dkRBQztlQUFBQTs7UUE2K0JBQztlQUFBQTs7UUErY0FDO2VBQUFBOztRQXpJQUM7ZUFBQUE7O1FBN3JDQUM7ZUFBQUE7O1FBKytCQUM7ZUFBQUE7O1FBajZDQUM7ZUFBQUE7O1FBczNEQUM7ZUFBQUE7O1FBMU1BQztlQUFBQTs7UUExSEFDO2VBQUFBOztRQXJzQkFDO2VBQUFBOztRQTltQkFDO2VBQUFBOztRQTQxQkFDO2VBQUFBOztRQStLQUM7ZUFBQUE7O1FBMHhCQUM7ZUFBQUE7O1FBOVBBQztlQUFBQTs7UUF2Q0FDO2VBQUFBOztRQW1KQUM7ZUFBQUE7O1FBU0FDO2VBQUFBOztRQXJWQUM7ZUFBQUE7O1FBckRBQztlQUFBQTs7UUEva0JBQztlQUFBQTs7UUE2ZUFDO2VBQUFBOztRQWxKQUM7ZUFBQUE7O1FBN2JBQztlQUFBQTs7UUFrZkFDO2VBQUFBOztRQXJWQUM7ZUFBQUE7O1FBalBBQztlQUFBQTs7UUE5Z0NBQztlQUFBQTs7UUErMENBQztlQUFBQTs7UUE0MUJBQztlQUFBQTs7UUF4aURBQztlQUFBQTs7UUE4bUJBQztlQUFBQTs7UUFyRkFDO2VBQUFBOztRQXVqQ0FDO2VBQUFBOztRQTFrQ0FDO2VBQUFBOztRQS83QkFDO2VBQUFBOztRQTZpREFDO2VBQUFBOztRQXhIQUM7ZUFBQUE7O1FBbmpDQUM7ZUFBQUE7O1FBdUJBQztlQUFBQTs7UUF1ckNBQztlQUFBQTs7UUF5R0FDO2VBQUFBOztRQXhyQkFDO2VBQUFBOztRQWlhQUM7ZUFBQUE7O1FBM1pBQztlQUFBQTs7UUFnbEJBQztlQUFBQTs7UUF4ckJBQztlQUFBQTs7UUFrS0FDO2VBQUFBOztRQThkQUM7ZUFBQUE7O1FBcHRCQUM7ZUFBQUE7O1FBM0ZBQztlQUFBQTs7UUE0WkFDO2VBQUFBOztRQW1LQUM7ZUFBQUE7O1FBcmhEQUM7ZUFBQUE7O1FBNHdEQUM7ZUFBQUE7O1FBcnRCQUM7ZUFBQUE7O1FBdk1BQztlQUFBQTs7UUF3d0NBQztlQUFBQTs7UUF4b0RBQztlQUFBQTs7UUF5d0RBQztlQUFBQTs7UUFqOENBQztlQUFBQTs7UUF1TUFDO2VBQUFBOztRQWdoQ0FDO2VBQUFBOztRQWp3REFDO2VBQUFBOzs7aUVBM1JLO3NCQUVlO3dCQVMrQzs7Ozs7O0FBRTVFLFNBQVNWLGlCQUFpQlcsUUFBUSxFQUFFQyxPQUFPO0lBQ2hELElBQUlDO0lBRUosSUFBSUYsYUFBYSxNQUFNO1FBQ3JCLE1BQU1HLFdBQVdDLElBQUFBLHlCQUFtQjtRQUVwQ0YsT0FBT0MsVUFBVyxHQUFHO0lBQ3ZCLE9BQU87UUFDTCxNQUFNLEVBQUVFLElBQUksRUFBRSxHQUFHQyxpQkFBUSxFQUNuQkMsT0FBT1AsVUFDUFEsT0FBTzdKLGlCQUFpQnFKLFVBQVVDLFVBQ2xDUSxhQUFhdEosdUJBQXVCNkksVUFBVUMsVUFDOUNTLGFBQWFqRSx1QkFBdUJ1RCxVQUFVQyxVQUM5Q1UsYUFBYTFJLHVCQUF1QitILFVBQVVDLFVBQzlDVyxjQUFjN0gsd0JBQXdCaUgsVUFBVUMsVUFDaERZLGtCQUFrQjlKLDRCQUE0QmlKLFVBQVVDLFVBQ3hEYSxhQUFhQyxJQUFBQSxxQ0FBNkIsRUFBQ0Ysa0JBQzNDRyxTQUFTRixZQUNURyxhQUFhO1FBRW5CaEIsVUFBVTtRQUVWQyxPQUFPLElBQUlHLEtBQUtKLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlULE1BQU1DLFlBQVlDLFlBQVlDLFlBQVlDO0lBQy9GO0lBRUEsT0FBT1Y7QUFDVDtBQUVPLFNBQVN2QyxpQkFBaUJ1RCxRQUFRLEVBQUVqQixPQUFPO0lBQ2hELE1BQU0sRUFBRWtCLElBQUksRUFBRSxHQUFHYixpQkFBUSxFQUNuQkMsT0FBT1csVUFDUEYsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmYsT0FBT2hCLGlCQUFpQmdDLFVBQVVqQixVQUNsQ1csY0FBYy9ILHdCQUF3QnFJLFVBQVVqQjtJQUV0REEsVUFBVTtJQUVWLE1BQU1vQixPQUFPLElBQUlGLEtBQUtsQixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZixNQUFNVTtJQUUvRCxPQUFPUztBQUNUO0FBRU8sU0FBUzNGLGlCQUFpQjRGLFFBQVEsRUFBRXJCLE9BQU87SUFDaEQsTUFBTSxFQUFFc0IsSUFBSSxFQUFFLEdBQUdqQixpQkFBUSxFQUNuQkMsT0FBT2UsVUFDUE4sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWW5HLHNCQUFzQmlHLFVBQVVyQixVQUM1Q3dCLFlBQVlqSSxzQkFBc0I4SCxVQUFVckIsVUFDNUN5QixxQkFBcUJySCwrQkFBK0JpSCxVQUFVckI7SUFFcEVBLFVBQVU7SUFFVixNQUFNMEIsT0FBTyxJQUFJSixLQUFLdEIsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWU8sV0FBV0MsV0FBV0M7SUFFL0UsT0FBT0M7QUFDVDtBQUVPLFNBQVMzSCxpQkFBaUI0SCxRQUFRLEVBQUUzQixPQUFPO0lBQ2hELE1BQU0sRUFBRTRCLElBQUksRUFBRSxHQUFHdkIsaUJBQVEsRUFDbkJ3QixRQUFRaEssa0JBQWtCOEosVUFBVTNCLFVBQ3BDOEIsU0FBU3JNLG1CQUFtQmtNLFVBQVUzQixVQUN0QytCLFdBQVcxSyxxQkFBcUJzSyxVQUFVM0IsVUFDMUNnQyxhQUFhM1AsdUJBQXVCc1AsVUFBVTNCLFVBQzlDaUMsYUFBYUMsSUFBQUEsaURBQXlDLEVBQUNKLFFBQVFDLFVBQVVDLGFBQ3pFMUIsT0FBT3FCLFVBQ1BaLFNBQVNrQixZQUNUakIsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNbUMsT0FBTyxJQUFJUCxLQUFLNUIsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWEsT0FBT0MsUUFBUUMsVUFBVUM7SUFFbEYsT0FBT0c7QUFDVDtBQUVPLFNBQVMzTixpQkFBaUI0TixRQUFRLEVBQUVwQyxPQUFPO0lBQ2hELE1BQU0sRUFBRXFDLElBQUksRUFBRSxHQUFHaEMsaUJBQVEsRUFDbkJDLE9BQU84QixVQUNQckIsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYlEsWUFBWXJJLHNCQUFzQmlKLFVBQVVwQyxVQUM1Q3VCLFlBQVl4RyxzQkFBc0JxSCxVQUFVcEMsVUFDNUNzQyxPQUFPLElBQUlELEtBQUtyQyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZUSxXQUFXRDtJQUVwRSxPQUFPZTtBQUNUO0FBRU8sU0FBU2hOLG1CQUFtQmlOLFNBQVMsRUFBRXZDLE9BQU87SUFDbkQsTUFBTSxFQUFFd0MsS0FBSyxFQUFFLEdBQUduQyxpQkFBUSxFQUNwQkMsT0FBT2lDLFdBQ1B4QixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNieUIsZUFBZXhNLDBCQUEwQnNNLFdBQVd2QyxVQUNwRDBDLFFBQVEsSUFBSUYsTUFBTXhDLFNBQVNlLFFBQVFULE1BQU1VLFlBQVl5QjtJQUUzRCxPQUFPQztBQUNUO0FBRU8sU0FBUzlPLG1CQUFtQitPLFNBQVMsRUFBRTNDLE9BQU87SUFDbkQsTUFBTSxFQUFFNEMsS0FBSyxFQUFFLEdBQUd2QyxpQkFBUSxFQUNwQkMsT0FBT3FDLFdBQ1A1QixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNNkMsUUFBUSxJQUFJRCxNQUFNNUMsU0FBU2UsUUFBUVQsTUFBTVU7SUFFL0MsT0FBTzZCO0FBQ1Q7QUFFTyxTQUFTak4sbUJBQW1Ca04sU0FBUyxFQUFFOUMsT0FBTztJQUNuRCxNQUFNLEVBQUUrQyxLQUFLLEVBQUUsR0FBRzFDLGlCQUFRLEVBQ3BCMkMseUJBQXlCRixXQUN6QmpCLFFBQVE5SiwrQkFBK0JpTCx3QkFBd0JoRCxVQUMvRDhCLFNBQVNwTSxnQ0FBZ0NzTix3QkFBd0JoRCxVQUNqRWlELFlBQVk3UCxtQ0FBbUM0UCx3QkFBd0JoRCxVQUN2RWtELGVBQWVyRyxzQ0FBc0NtRyx3QkFBd0JoRCxVQUM3RW1ELFlBQVk1SSxtQ0FBbUN5SSx3QkFBd0JoRCxVQUN2RW9ELGFBQWF0TyxvQ0FBb0NrTyx3QkFBd0JoRCxVQUN6RXFELDJCQUEyQkMsSUFBQUEsMEVBQWtFLEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDL0gzQyxPQUFPd0MsV0FDUC9CLFNBQVNzQywwQkFDVHJDLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTXVELFFBQVEsSUFBSVIsTUFBTS9DLFNBQVNlLFFBQVFULE1BQU1VLFlBQVljLFFBQVFvQixjQUFjRCxXQUFXcEIsT0FBT3NCLFdBQVdDO0lBRTlHLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTeFAsbUJBQW1CeVAsU0FBUyxFQUFFeEQsT0FBTztJQUNuRCxNQUFNLEVBQUV5RCxLQUFLLEVBQUUsR0FBR3BELGlCQUFRLEVBQ3BCQyxPQUFPa0QsV0FDUHpDLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2IwQyxjQUFjOVIseUJBQXlCNFIsV0FBV3hELFVBQ2xEeUMsZUFBZXpNLDBCQUEwQndOLFdBQVd4RDtJQUUxREEsVUFBVTtJQUVWLE1BQU0yRCxRQUFRLElBQUlGLE1BQU16RCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZMEMsYUFBYWpCO0lBRXhFLE9BQU9rQjtBQUNUO0FBRU8sU0FBUy9MLG1CQUFtQmdNLFNBQVMsRUFBRTVELE9BQU87SUFDbkQsTUFBTSxFQUFFNkQsS0FBSyxFQUFFLEdBQUd4RCxpQkFBUSxFQUNwQkMsT0FBT3NELFdBQ1A3QyxTQUFTLE1BQ1RDLGFBQWEsTUFDYjhDLGFBQWF0USx3QkFBd0JvUSxXQUFXNUQ7SUFFdERBLFVBQVU7SUFFVixNQUFNNkIsUUFBUSxJQUFJZ0MsTUFBTTdELFNBQVNlLFFBQVFULE1BQU1VLFlBQVk4QztJQUUzRCxPQUFPakM7QUFDVDtBQUVPLFNBQVNoUSxtQkFBbUJrUyxTQUFTLEVBQUUvRCxPQUFPO0lBQ25ELE1BQU0sRUFBRWdFLEtBQUssRUFBRSxHQUFHM0QsaUJBQVEsRUFDcEIyQyx5QkFBeUJlLFdBQ3pCbEMsUUFBUTlKLCtCQUErQmlMLHdCQUF3QmhELFVBQy9EOEIsU0FBU3BNLGdDQUFnQ3NOLHdCQUF3QmhELFVBQ2pFaUQsWUFBWTdQLG1DQUFtQzRQLHdCQUF3QmhELFVBQ3ZFa0QsZUFBZXJHLHNDQUFzQ21HLHdCQUF3QmhELFVBQzdFbUQsWUFBWTVJLG1DQUFtQ3lJLHdCQUF3QmhELFVBQ3ZFb0QsYUFBYXRPLG9DQUFvQ2tPLHdCQUF3QmhELFVBQ3pFcUQsMkJBQTJCQyxJQUFBQSwwRUFBa0UsRUFBQ3hCLFFBQVFxQixXQUFXRCxjQUFjRCxZQUMvSDNDLE9BQU95RCxXQUNQaEQsU0FBU3NDLDBCQUNUckMsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNaUUsUUFBUSxJQUFJRCxNQUFNaEUsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWMsUUFBUW9CLGNBQWNELFdBQVdwQixPQUFPc0IsV0FBV0M7SUFFOUcsT0FBT2E7QUFDVDtBQUVPLFNBQVNqSyxxQkFBcUJrSyxVQUFVLEVBQUVsRSxPQUFPO0lBQ3RELE1BQU0sRUFBRW1FLE1BQU0sRUFBRSxHQUFHOUQsaUJBQVEsRUFDckJ3QixRQUFRL0osb0JBQW9Cb00sWUFBWWxFLFVBQ3hDMEMsUUFBUW5OLG9CQUFvQjJPLFlBQVlsRSxVQUN4Q2lELFlBQVk5UCx3QkFBd0IrUSxZQUFZbEUsVUFDaERrRCxlQUFleEcsMkJBQTJCd0gsWUFBWWxFLFVBQ3REb0UsY0FBYzNSLDBCQUEwQnlSLFlBQVlsRSxVQUNwRHFFLGVBQWVDLElBQUFBLHFEQUE2QyxFQUFDNUIsT0FBT1EsY0FBY0QsWUFDbEYzQyxPQUFPNEQsWUFDUG5ELFNBQVNzRCxjQUNUckQsYUFBYSxNQUNidUQsU0FBUyxJQUFJSixPQUFPbkUsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWTBCLE9BQU9RLGNBQWNELFdBQVdwQixPQUFPdUM7SUFFcEcsT0FBT0c7QUFDVDtBQUVPLFNBQVN0Syx1QkFBdUJ1SyxXQUFXLEVBQUV4RSxPQUFPO0lBQ3pELE1BQU0sRUFBRXlFLE9BQU8sRUFBRSxHQUFHcEUsaUJBQVEsRUFDdEJxRSxrQkFBa0JGLFlBQVlHLGtCQUFrQixJQUNoRHZCLGFBQWF2Tyw4QkFBOEI2UCxpQkFBaUIxRSxVQUM1RDRFLGNBQWMzUiwyQkFBMkJ1UixhQUFheEUsVUFDdEQ2RSxvQkFBb0IxRyxpQ0FBaUNxRyxhQUFheEUsVUFDbEU4RSxnQkFBZ0JDLElBQUFBLGtFQUEwRCxFQUFDM0IsWUFBWXdCLGFBQWFDLG9CQUNwR3ZFLE9BQU9rRSxhQUNQekQsU0FBUytELGVBQ1Q5RCxhQUFhO0lBRW5CaEIsVUFBVTtJQUVWLE1BQU1nRixVQUFVLElBQUlQLFFBQVF6RSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZb0MsWUFBWXdCLGFBQWFDO0lBRXhGLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTN04sdUJBQXVCOE4sV0FBVyxFQUFFakYsT0FBTztJQUN6RCxNQUFNLEVBQUVrRixPQUFPLEVBQUUsR0FBRzdFLGlCQUFRLEVBQ3RCQyxPQUFPMkUsYUFDUGxFLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVlyRyx5QkFBeUIrSixhQUFhakYsVUFDbERtRixnQkFBZ0I1Tiw2QkFBNkIwTixhQUFhakYsVUFDMURvRixVQUFVLElBQUlGLFFBQVFsRixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTyxXQUFXNEQ7SUFFMUUsT0FBT0M7QUFDVDtBQUVPLFNBQVNsSCx1QkFBdUJtSCxXQUFXLEVBQUVyRixPQUFPO0lBQ3pELE1BQU0sRUFBRXNGLE9BQU8sRUFBRSxHQUFHakYsaUJBQVEsRUFDdEIyQyx5QkFBeUJxQyxhQUN6QnhELFFBQVE5SiwrQkFBK0JpTCx3QkFBd0JoRCxVQUMvRDhCLFNBQVNwTSxnQ0FBZ0NzTix3QkFBd0JoRCxVQUNqRWlELFlBQVk3UCxtQ0FBbUM0UCx3QkFBd0JoRCxVQUN2RWtELGVBQWVyRyxzQ0FBc0NtRyx3QkFBd0JoRCxVQUM3RW1ELFlBQVk1SSxtQ0FBbUN5SSx3QkFBd0JoRCxVQUN2RW9ELGFBQWF0TyxvQ0FBb0NrTyx3QkFBd0JoRCxVQUN6RXFELDJCQUEyQkMsSUFBQUEsMEVBQWtFLEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDL0gzQyxPQUFPK0UsYUFDUHRFLFNBQVNzQywwQkFDVHJDLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTXVGLFVBQVUsSUFBSUQsUUFBUXRGLFNBQVNlLFFBQVFULE1BQU1VLFlBQVljLFFBQVFvQixjQUFjRCxXQUFXcEIsT0FBT3NCLFdBQVdDO0lBRWxILE9BQU9tQztBQUNUO0FBRU8sU0FBU2hOLHlCQUF5QmlOLFlBQVksRUFBRXhGLE9BQU87SUFDNUQsSUFBSXlGLFdBQVc7SUFFZixJQUFJRCxnQkFBZ0IsTUFBTTtRQUN4QixNQUFNLEVBQUVFLFFBQVEsRUFBRSxHQUFHckYsaUJBQVEsRUFDdkJDLE9BQU9rRixjQUNQekUsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYkksT0FBTzNELHFCQUFxQitILGNBQWN4RixVQUMxQ0MsT0FBT2pCLHFCQUFxQndHLGNBQWN4RjtRQUVoREEsVUFBVTtRQUVWeUYsV0FBVyxJQUFJQyxTQUFTMUYsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW5CO0lBQ25FO0lBRUEsT0FBT3dGO0FBQ1Q7QUFFTyxTQUFTM0YseUJBQXlCNkYsWUFBWSxFQUFFM0YsT0FBTztJQUM1RCxNQUFNLEVBQUU0RixRQUFRLEVBQUUsR0FBR3ZGLGlCQUFRLEVBQ3ZCQyxPQUFPcUYsY0FDUDVFLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9YLHFCQUFxQnFHLGNBQWMzRixVQUMxQzZGLGFBQWEzUSwyQkFBMkJ5USxjQUFjM0YsVUFDdERXLGNBQWMzSCw0QkFBNEIyTSxjQUFjM0Y7SUFFOURBLFVBQVU7SUFFVixNQUFNOEYsV0FBVyxJQUFJRixTQUFTNUYsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWYsTUFBTTRGLFlBQVlsRjtJQUVuRixPQUFPbUY7QUFDVDtBQUVPLFNBQVMxSix5QkFBeUIySixZQUFZLEVBQUUvRixPQUFPO0lBQzVELE1BQU0sRUFBRWdHLFFBQVEsRUFBRSxHQUFHM0YsaUJBQVEsRUFDdkJDLE9BQU95RixjQUNQL0UsYUFBYSxNQUNia0MsZUFBZXZHLDZCQUE2Qm9KLGNBQWMvRixVQUMxRGlHLGdCQUFnQmxLLDhCQUE4QmdLLGNBQWMvRixVQUM1RGtHLGlCQUFpQkMsSUFBQUEsc0RBQThDLEVBQUNqRCxjQUFjK0MsZUFBZWpHLFVBQzdGZSxTQUFTbUYsZ0JBQWlCLEdBQUc7SUFFbkNsRyxVQUFVO0lBRVYsTUFBTW9HLFdBQVcsSUFBSUosU0FBU2hHLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlrQyxjQUFjK0M7SUFFL0UsT0FBT0c7QUFDVDtBQUVPLFNBQVMzUyx5QkFBeUI0UyxZQUFZLEVBQUVyRyxPQUFPO0lBQzVELE1BQU0sRUFBRXNHLFFBQVEsRUFBRSxHQUFHakcsaUJBQVEsRUFDdkJDLE9BQU8rRixjQUNQdEYsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnVGLFdBQVc1USx5QkFBeUIwUSxjQUFjckcsVUFDbER3RyxZQUFZMU0sMEJBQTBCdU0sY0FBY3JHO0lBRTFEQSxVQUFVO0lBRVYsTUFBTXlHLFdBQVcsSUFBSUgsU0FBU3RHLFNBQVNlLFFBQVFULE1BQU1VLFlBQVl1RixVQUFVQztJQUUzRSxPQUFPQztBQUNUO0FBRU8sU0FBU3ZULDJCQUEyQndULGFBQWEsRUFBRTFHLE9BQU87SUFDL0QsTUFBTSxFQUFFMkcsU0FBUyxFQUFFLEdBQUd0RyxpQkFBUSxFQUN4QkMsT0FBT29HLGVBQ1AzRixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZekcsMkJBQTJCNEwsZUFBZTFHLFVBQ3REaUQsWUFBWSxJQUFJMEQsVUFBVTNHLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPO0lBRW5FLE9BQU8wQjtBQUNUO0FBRU8sU0FBUzlILDJCQUEyQnlMLGFBQWEsRUFBRTVHLE9BQU87SUFDL0QsTUFBTSxFQUFFNkcsU0FBUyxFQUFFLEdBQUd4RyxpQkFBUSxFQUN4QkMsT0FBT3NHLGVBQ1A3RixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNdUIsWUFBWSxJQUFJc0YsVUFBVTdHLFNBQVNlLFFBQVFULE1BQU1VO0lBRXZELE9BQU9PO0FBQ1Q7QUFFTyxTQUFTakgsMkJBQTJCd00sYUFBYSxFQUFFOUcsT0FBTztJQUMvRCxNQUFNLEVBQUUrRyxTQUFTLEVBQUUsR0FBRzFHLGlCQUFRLEVBQ3hCQyxPQUFPd0csZUFDUC9GLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JnRyxRQUFRakosdUJBQXVCK0ksZUFBZTlHLFVBQzlDbUQsWUFBWSxJQUFJNEQsVUFBVS9HLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlnRztJQUVuRSxPQUFPN0Q7QUFDVDtBQUVPLFNBQVM5SiwyQkFBMkI0TixhQUFhLEVBQUVqSCxPQUFPO0lBQy9ELE1BQU0sRUFBRWtILFNBQVMsRUFBRSxHQUFHN0csaUJBQVEsRUFDeEJDLE9BQU8yRyxlQUNQbEcsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnlCLGVBQWVyTSw4QkFBOEI2USxlQUFlakgsVUFDNUR3QixZQUFZLElBQUkwRixVQUFVbEgsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXlCO0lBRW5FLE9BQU9qQjtBQUNUO0FBRU8sU0FBU3BNLDJCQUEyQitSLGFBQWEsRUFBRW5ILE9BQU87SUFDL0QsTUFBTSxFQUFFb0gsU0FBUyxFQUFFLEdBQUcvRyxpQkFBUSxFQUN4QkMsT0FBTzZHLGVBQ1BwRyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiMkMsUUFBUTFQLHVCQUF1QmtULGVBQWVuSCxVQUM5Q3NDLE9BQU83TixzQkFBc0IwUyxlQUFlbkg7SUFFbERBLFVBQVU7SUFFVixNQUFNcUgsWUFBWSxJQUFJRCxVQUFVcEgsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWTJDLE9BQU9yQjtJQUUxRSxPQUFPK0U7QUFDVDtBQUVPLFNBQVN0USwyQkFBMkJ1USxhQUFhLEVBQUV0SCxPQUFPO0lBQy9ELE1BQU0sRUFBRXVILFNBQVMsRUFBRSxHQUFHbEgsaUJBQVEsRUFDeEJDLE9BQU9nSCxlQUNQdkcsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYlQsT0FBT2hLLHFCQUFxQitRLGVBQWV0SCxVQUMzQzZGLGFBQWE1USwyQkFBMkJxUyxlQUFldEg7SUFFN0RBLFVBQVU7SUFFVixNQUFNd0gsWUFBWSxJQUFJRCxVQUFVdkgsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWVQsTUFBTXNGO0lBRXpFLE9BQU8yQjtBQUNUO0FBRU8sU0FBU2pULDJCQUEyQmtULGFBQWEsRUFBRXpILE9BQU87SUFDL0QsTUFBTSxFQUFFMEgsU0FBUyxFQUFFLEdBQUdySCxpQkFBUSxFQUN4QkMsT0FBT21ILGVBQ1AxRyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiSSxPQUFPOUQsc0JBQXNCbUssZUFBZXpILFVBQzVDQyxPQUFPcEIsc0JBQXNCNEksZUFBZXpILFVBQzVDb0QsYUFBYXhPLDRCQUE0QjZTLGVBQWV6SDtJQUU5REEsVUFBVTtJQUVWLE1BQU0ySCxZQUFZLElBQUlELFVBQVUxSCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZSSxNQUFNbkIsTUFBTW1EO0lBRS9FLE9BQU91RTtBQUNUO0FBRU8sU0FBUzVTLDZCQUE2QjZTLGFBQWEsRUFBRTVILE9BQU87SUFDakUsTUFBTSxFQUFFNkgsVUFBVSxFQUFFLEdBQUd4SCxpQkFBUSxFQUN6QkMsT0FBT3NILGVBQ1A3RyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZdkcsNEJBQTRCNE0sZUFBZTVILFVBQ3ZEbUYsZ0JBQWdCN04sZ0NBQWdDc1EsZUFBZTVIO0lBRXJFQSxVQUFVO0lBRVYsTUFBTThILGFBQWEsSUFBSUQsV0FBVzdILFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPLFdBQVc0RDtJQUVoRixPQUFPMkM7QUFDVDtBQUVPLFNBQVN0Viw2QkFBNkJ1VixjQUFjLEVBQUUvSCxPQUFPO0lBQ2xFLE1BQU0sRUFBRWdJLFVBQVUsRUFBRSxHQUFHM0gsaUJBQVEsRUFDekJDLE9BQU95SCxnQkFDUGhILFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JRLFlBQVl0SSw0QkFBNEI2TyxnQkFBZ0IvSCxVQUN4RHVCLFlBQVkzRyw0QkFBNEJtTixnQkFBZ0IvSCxVQUN4RGlJLGFBQWEsSUFBSUQsV0FBV2hJLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlRLFdBQVdEO0lBRWhGLE9BQU8wRztBQUNUO0FBRU8sU0FBUzNWLDZCQUE2QjRWLGNBQWMsRUFBRWxJLE9BQU87SUFDbEUsTUFBTSxFQUFFbUksVUFBVSxFQUFFLEdBQUc5SCxpQkFBUSxFQUN6QjJDLHlCQUF5QmtGLGdCQUN6QnJHLFFBQVE5SiwrQkFBK0JpTCx3QkFBd0JoRCxVQUMvRDhCLFNBQVNwTSxnQ0FBZ0NzTix3QkFBd0JoRCxVQUNqRWlELFlBQVk3UCxtQ0FBbUM0UCx3QkFBd0JoRCxVQUN2RWtELGVBQWVyRyxzQ0FBc0NtRyx3QkFBd0JoRCxVQUM3RW1ELFlBQVk1SSxtQ0FBbUN5SSx3QkFBd0JoRCxVQUN2RW9ELGFBQWF0TyxvQ0FBb0NrTyx3QkFBd0JoRCxVQUN6RXFELDJCQUEyQkMsSUFBQUEsMEVBQWtFLEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDL0gzQyxPQUFPNEgsZ0JBQ1BuSCxTQUFTc0MsMEJBQ1RyQyxhQUFhO0lBRW5CaEIsVUFBVTtJQUVWLE1BQU1vSSxhQUFhLElBQUlELFdBQVduSSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZYyxRQUFRb0IsY0FBY0QsV0FBV3BCLE9BQU9zQixXQUFXQztJQUV4SCxPQUFPZ0Y7QUFDVDtBQUVPLFNBQVNqVyw2QkFBNkJrVyxjQUFjLEVBQUVySSxPQUFPO0lBQ2xFLE1BQU0sRUFBRXNJLFVBQVUsRUFBRSxHQUFHakksaUJBQVEsRUFDekJDLE9BQU8rSCxnQkFDUHRILFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVk3Ryw0QkFBNEIyTixnQkFBZ0JySTtJQUU5REEsVUFBVTtJQUVWLE1BQU11SSxhQUFhLElBQUlELFdBQVd0SSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTztJQUVyRSxPQUFPZ0g7QUFDVDtBQUVPLFNBQVNuVyw2QkFBNkJvVyxjQUFjLEVBQUV4SSxPQUFPO0lBQ2xFLE1BQU0sRUFBRXlJLFVBQVUsRUFBRSxHQUFHcEksaUJBQVEsRUFDekJDLE9BQU9rSSxnQkFDUHpILFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVk1Ryw0QkFBNEI2TixnQkFBZ0J4SSxVQUN4RGdDLGFBQWEsSUFBSXlHLFdBQVd6SSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTztJQUVyRSxPQUFPUztBQUNUO0FBRU8sU0FBU3pPLDZCQUE2Qm1WLGNBQWMsRUFBRTFJLE9BQU87SUFDbEUsTUFBTSxFQUFFMkksVUFBVSxFQUFFLEdBQUd0SSxpQkFBUSxFQUN6QkMsT0FBT29JLGdCQUNQM0gsU0FBUyxNQUNUQyxhQUFhLE1BQ2I0SCxtQkFBbUJoTixtQ0FBbUM4TSxnQkFBZ0IxSTtJQUU1RUEsVUFBVTtJQUVWLE1BQU04RCxhQUFhLElBQUk2RSxXQUFXM0ksU0FBU2UsUUFBUVQsTUFBTVUsWUFBWTRIO0lBRXJFLE9BQU85RTtBQUNUO0FBRU8sU0FBU3JFLDZCQUE2Qm9KLGNBQWMsRUFBRTdJLE9BQU87SUFDbEUsTUFBTSxFQUFFOEksVUFBVSxFQUFFLEdBQUd6SSxpQkFBUSxFQUN6QkMsT0FBT3VJLGdCQUNQOUgsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYlQsT0FBTzVKLHVCQUF1QmtTLGdCQUFnQjdJO0lBRXBEQSxVQUFVO0lBRVYsTUFBTStJLGFBQWEsSUFBSUQsV0FBVzlJLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlUO0lBRXJFLE9BQU93STtBQUNUO0FBRU8sU0FBU3JYLDZCQUE2QnNYLGNBQWMsRUFBRWhKLE9BQU87SUFDbEUsTUFBTSxFQUFFaUosVUFBVSxFQUFFLEdBQUc1SSxpQkFBUSxFQUN6QkMsT0FBTzBJLGdCQUNQakksU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYlEsWUFBWXZJLDRCQUE0QitQLGdCQUFnQmhKLFVBQ3hEdUIsWUFBWS9HLDRCQUE0QndPLGdCQUFnQmhKO0lBRTlEQSxVQUFVO0lBRVYsTUFBTWtKLGFBQWEsSUFBSUQsV0FBV2pKLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlRLFdBQVdEO0lBRWhGLE9BQU8ySDtBQUNUO0FBRU8sU0FBU3JXLCtCQUErQnNXLGVBQWUsRUFBRW5KLE9BQU87SUFDckUsTUFBTSxFQUFFb0osV0FBVyxFQUFFLEdBQUcvSSxpQkFBUSxFQUMxQkMsT0FBTzZJLGlCQUNQcEksU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYkksT0FBT2pFLHdCQUF3QmdNLGlCQUFpQm5KLFVBQ2hEQyxPQUFPeEIsd0JBQXdCMEssaUJBQWlCbkosVUFDaERvRCxhQUFhek8sOEJBQThCd1UsaUJBQWlCbko7SUFFbEVBLFVBQVU7SUFFVixNQUFNcUosY0FBYyxJQUFJRCxZQUFZcEosU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW5CLE1BQU1tRDtJQUVuRixPQUFPaUc7QUFDVDtBQUVPLFNBQVM1TSwrQkFBK0I2TSxlQUFlLEVBQUV0SixPQUFPO0lBQ3JFLE1BQU0sRUFBRXVKLFdBQVcsRUFBRSxHQUFHbEosaUJBQVEsRUFDMUJDLE9BQU9nSixpQkFDUHZJLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVlsRyw2QkFBNkJpTyxpQkFBaUJ0SixVQUMxRG1GLGdCQUFnQjFOLGlDQUFpQzZSLGlCQUFpQnRKLFVBQ2xFd0osY0FBYyxJQUFJRCxZQUFZdkosU0FBU2UsUUFBUVQsTUFBTVUsWUFBWU8sV0FBVzREO0lBRWxGLE9BQU9xRTtBQUNUO0FBRU8sU0FBUzdWLCtCQUErQjhWLGVBQWUsRUFBRXpKLE9BQU87SUFDckUsTUFBTSxFQUFFMEosV0FBVyxFQUFFLEdBQUdySixpQkFBUSxFQUMxQkMsT0FBT21KLGlCQUNQekksYUFBYSxNQUNiZixPQUFPdEIsd0JBQXdCOEssaUJBQWlCekosVUFDaERnSCxRQUFRbEoseUJBQXlCMkwsaUJBQWlCekosVUFDbEQySixvQkFBb0JDLElBQUFBLGtDQUEwQixFQUFDNUMsUUFDL0NqRyxTQUFTNEksbUJBQW1CLEdBQUc7SUFFckMzSixVQUFVO0lBRVYsTUFBTTZKLGNBQWMsSUFBSUgsWUFBWTFKLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU0rRztJQUU3RSxPQUFPNkM7QUFDVDtBQUVPLFNBQVMxVCxpQ0FBaUMyVCxnQkFBZ0IsRUFBRTlKLE9BQU87SUFDeEUsTUFBTSxFQUFFK0osWUFBWSxFQUFFLEdBQUcxSixpQkFBUSxFQUMzQkMsT0FBT3dKLGtCQUNQL0ksU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYlQsT0FBT2pLLHlCQUF5QndULGtCQUFrQjlKLFVBQ2xEb0IsT0FBTzVELHlCQUF5QnNNLGtCQUFrQjlKLFVBQ2xEQyxPQUFPbkIseUJBQXlCZ0wsa0JBQWtCOUosVUFDbERnSyxXQUFXO0lBRWpCaEssVUFBVTtJQUVWLE1BQU15QyxlQUFlLElBQUlzSCxhQUFhL0osU0FBU2UsUUFBUVQsTUFBTVUsWUFBWVQsTUFBTWEsTUFBTW5CLE1BQU0rSjtJQUUzRixPQUFPdkg7QUFDVDtBQUVPLFNBQVNqTCxtQ0FBbUN5UyxpQkFBaUIsRUFBRWpLLE9BQU87SUFDM0UsTUFBTSxFQUFFa0ssYUFBYSxFQUFFLEdBQUc3SixpQkFBUSxFQUM1QjhKLGFBQWFsVCxnQ0FBZ0NnVCxtQkFBbUJqSyxVQUNoRW9LLHFCQUFxQjFTLHdDQUF3Q3VTLG1CQUFtQmpLLFVBQ2hGcUssc0JBQXNCQyxJQUFBQSw4REFBc0QsRUFBQ0Ysb0JBQW9CRCxhQUNqRzdKLE9BQU8ySixtQkFDUGxKLFNBQVNzSixxQkFDVHJKLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTW1GLGdCQUFnQixJQUFJK0UsY0FBY2xLLFNBQVNlLFFBQVFULE1BQU1VLFlBQVltSixZQUFZQztJQUV2RixPQUFPakY7QUFDVDtBQUVPLFNBQVNySixtQ0FBbUN5TyxpQkFBaUIsRUFBRXZLLE9BQU87SUFDM0UsTUFBTSxFQUFFd0ssYUFBYSxFQUFFLEdBQUduSyxpQkFBUSxFQUM1QkMsT0FBT2lLLG1CQUNQeEosU0FBUyxNQUNUQyxhQUFhLE1BQ2I0SCxtQkFBbUIvTSxzQ0FBc0MwTyxtQkFBbUJ2SztJQUVsRkEsVUFBVTtJQUVWLE1BQU1pRyxnQkFBZ0IsSUFBSXVFLGNBQWN4SyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZNEg7SUFFM0UsT0FBTzNDO0FBQ1Q7QUFFTyxTQUFTNUgsbUNBQW1Db00saUJBQWlCLEVBQUV6SyxPQUFPO0lBQzNFLE1BQU0sRUFBRTBLLGFBQWEsRUFBRSxHQUFHckssaUJBQVEsRUFDNUJDLE9BQU9tSyxtQkFDUDFKLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JJLE9BQU96RCwwQkFBMEI4TSxtQkFBbUJ6SyxVQUNwREMsT0FBT2YsMEJBQTBCdUwsbUJBQW1Ceks7SUFFMURBLFVBQVU7SUFFVixNQUFNMkssZ0JBQWdCLElBQUlELGNBQWMxSyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZSSxNQUFNbkI7SUFFakYsT0FBTzBLO0FBQ1Q7QUFFTyxTQUFTaFAscUNBQXFDaVAsa0JBQWtCLEVBQUU1SyxPQUFPO0lBQzlFLE1BQU0wQixPQUFPaEcsMkJBQTJCa1Asb0JBQW9CNUssVUFDdERvRyxXQUFXakssK0JBQStCeU8sb0JBQW9CNUssVUFDOUQ2SyxpQkFBa0JuSixRQUFRMEU7SUFFaEMsT0FBT3lFO0FBQ1Q7QUFFTyxTQUFTdk0sdUNBQXVDd00sbUJBQW1CLEVBQUU5SyxPQUFPO0lBQ2pGLE1BQU0sRUFBRStLLGVBQWUsRUFBRSxHQUFHMUssaUJBQVEsRUFDOUJDLE9BQU93SyxxQkFDUC9KLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9kLDRCQUE0QjJMLHFCQUFxQjlLLFVBQ3hEUyxhQUFhbEUsa0NBQWtDdU8scUJBQXFCOUssVUFDcEVXLGNBQWM5SCxtQ0FBbUNpUyxxQkFBcUI5SztJQUU1RUEsVUFBVTtJQUVWLE1BQU1nTCxrQkFBa0IsSUFBSUQsZ0JBQWdCL0ssU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWYsTUFBTVEsWUFBWUU7SUFFakcsT0FBT3FLO0FBQ1Q7QUFFTyxTQUFTM1gseUNBQXlDNFgsb0JBQW9CLEVBQUVqTCxPQUFPO0lBQ3BGLE1BQU0sRUFBRWtMLGdCQUFnQixFQUFFLEdBQUc3SyxpQkFBUSxFQUMvQkMsT0FBTzJLLHNCQUNQbEssU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYm1LLFVBQVVGLHFCQUFxQkcsU0FBUyxJQUN4Q2hLLE9BQU8vRCw2QkFBNkI0TixzQkFBc0JqTCxVQUMxRDJELFFBQVE3UCw4QkFBOEJtWCxzQkFBc0JqTDtJQUVsRUEsVUFBVTtJQUVWLE1BQU1xTCxtQkFBbUIsSUFBSUgsaUJBQWlCbEwsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTXVDLE9BQU93SDtJQUU5RixPQUFPRTtBQUNUO0FBRU8sU0FBU3hOLHlDQUF5Q3lOLG9CQUFvQixFQUFFQyxjQUFjLEVBQUVDLGVBQWU7SUFDNUcsTUFBTSxFQUFFQyxnQkFBZ0IsRUFBRSxHQUFHcEwsaUJBQVEsRUFDL0JDLE9BQU9nTCxzQkFDUHRMLFVBQVV3TCxpQkFDVkUsV0FBVztRQUNUSDtRQUNBQztLQUNELEVBQ0R6SyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiMkssYUFBYTFPLG1DQUFtQ3FPLHNCQUFzQnRMLFVBQ3RFNEwsa0JBQWtCaFMsd0NBQXdDMFIsc0JBQXNCdEwsVUFDaEY2TCxtQkFBbUIsSUFBSUosaUJBQWlCQyxVQUFVM0ssUUFBUVQsTUFBTVUsWUFBWTJLLFlBQVlDO0lBRTlGLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTM1gsMkNBQTJDNFgscUJBQXFCLEVBQUVQLGNBQWMsRUFBRUMsZUFBZTtJQUMvRyxNQUFNLEVBQUVPLGlCQUFpQixFQUFFLEdBQUcxTCxpQkFBUSxFQUNoQ0MsT0FBT3dMLHVCQUNQOUwsVUFBVXdMLGlCQUNWRSxXQUFXO1FBQ1RIO1FBQ0FDO0tBQ0QsRUFDRHpLLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JnTCxjQUFjbFAscUNBQXFDZ1AsdUJBQXVCOUwsVUFDMUVpTSxtQkFBbUJ4UywwQ0FBMENxUyx1QkFBdUI5TCxVQUNwRmtNLG9CQUFvQixJQUFJSCxrQkFBa0JMLFVBQVUzSyxRQUFRVCxNQUFNVSxZQUFZZ0wsYUFBYUM7SUFFakcsT0FBT0M7QUFDVDtBQUVPLFNBQVNqVSwyQ0FBMkNrVSxxQkFBcUIsRUFBRW5NLE9BQU87SUFDdkYsTUFBTSxFQUFFb00saUJBQWlCLEVBQUUsR0FBRy9MLGlCQUFRLEVBQ2hDQyxPQUFPNkwsdUJBQ1BwTCxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNicUwsY0FBY3JRLHFDQUFxQ21RLHVCQUF1Qm5NLFVBQzFFc00sZUFBZTlULHNDQUFzQzJULHVCQUF1Qm5NO0lBRWxGQSxVQUFVO0lBRVYsTUFBTXVNLG9CQUFvQixJQUFJSCxrQkFBa0JwTSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZcUwsYUFBYUM7SUFFaEcsT0FBT0M7QUFDVDtBQUVPLFNBQVNyUSwyQ0FBMkNzUSxxQkFBcUIsRUFBRXhNLE9BQU87SUFDdkYsTUFBTSxFQUFFeU0saUJBQWlCLEVBQUUsR0FBR3BNLGlCQUFRLEVBQ2hDQyxPQUFPa00sdUJBQ1B6TCxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiMEwsYUFBYWxSLG9DQUFvQ2dSLHVCQUF1QnhNO0lBRTlFQSxVQUFVO0lBRVYsTUFBTTJNLG9CQUFvQixJQUFJRixrQkFBa0J6TSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZMEw7SUFFbkYsT0FBT0M7QUFDVDtBQUVPLFNBQVMzWiwyQ0FBMkM0WixxQkFBcUIsRUFBRTVNLE9BQU87SUFDdkYsTUFBTSxFQUFFNk0saUJBQWlCLEVBQUUsR0FBR3hNLGlCQUFRLEVBQ2hDQyxPQUFPc00sdUJBQ1A1TCxhQUFhLE1BQ2JmLE9BQU92Qiw4QkFBOEJrTyx1QkFBdUI1TSxVQUM1RFMsYUFBYW5FLG9DQUFvQ3NRLHVCQUF1QjVNLFVBQ3hFVyxjQUFjakkscUNBQXFDa1UsdUJBQXVCNU0sVUFDMUU4TSx1QkFBdUIxVSw4Q0FBOEN3VSx1QkFBdUI1TSxVQUM1RitNLDBCQUEwQkMsSUFBQUEsK0RBQXVELEVBQUMvTSxNQUFNUSxZQUFZRSxjQUNwR0ksU0FBU2dNLHlCQUEwQixHQUFHO0lBRTVDL00sVUFBVTtJQUVWLE1BQU1pTixvQkFBb0IsSUFBSUosa0JBQWtCN00sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWYsTUFBTVEsWUFBWUUsYUFBYW1NO0lBRWxILE9BQU9HO0FBQ1Q7QUFFTyxTQUFTbmEsNkNBQTZDb2Esc0JBQXNCLEVBQUVsTixPQUFPO0lBQzFGLE1BQU0sRUFBRW1OLGtCQUFrQixFQUFFLEdBQUc5TSxpQkFBUSxFQUNqQ0MsT0FBTzRNLHdCQUNQbk0sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYkksT0FBT2hFLCtCQUErQjhQLHdCQUF3QmxOLFVBQzlEMkQsUUFBUTlQLGdDQUFnQ3FaLHdCQUF3QmxOLFVBQ2hFbUwsVUFBVXZVLGtDQUFrQ3NXLHdCQUF3QmxOLFVBQ3BFdUIsWUFBWTFHLG9DQUFvQ3FTLHdCQUF3QmxOO0lBRTlFQSxVQUFVO0lBRVYsTUFBTW9OLHFCQUFxQixJQUFJRCxtQkFBbUJuTixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZSSxNQUFNdUMsT0FBT3dILFNBQVM1SjtJQUUzRyxPQUFPNkw7QUFDVDtBQUVPLFNBQVNsVCw2Q0FBNkNtVCxzQkFBc0IsRUFBRXJOLE9BQU87SUFDMUYsTUFBTSxFQUFFc04sa0JBQWtCLEVBQUUsR0FBR2pOLGlCQUFRLEVBQ2pDQyxPQUFPK00sd0JBQ1B0TSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNibUMsWUFBWTlJLG9DQUFvQ2dULHdCQUF3QnJOLFVBQ3hFd0IsWUFBWWxJLG9DQUFvQytULHdCQUF3QnJOO0lBRTlFQSxVQUFVO0lBRVYsTUFBTXlCLHFCQUFxQixJQUFJNkwsbUJBQW1CdE4sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWW1DLFdBQVczQjtJQUVoRyxPQUFPQztBQUNUO0FBRU8sU0FBUzlKLDZDQUE2QzRWLHNCQUFzQixFQUFFdk4sT0FBTztJQUMxRixNQUFNLEVBQUV3TixrQkFBa0IsRUFBRSxHQUFHbk4saUJBQVEsRUFDakNDLE9BQU9pTix3QkFDUHhNLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JULE9BQU85SiwrQkFBK0I4Vyx3QkFBd0J2TjtJQUVwRUEsVUFBVTtJQUVWLE1BQU15TixzQkFBc0IsSUFBSUQsbUJBQW1CeE4sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWVQ7SUFFdEYsT0FBT2tOO0FBQ1Q7QUFFTyxTQUFTdFksNkNBQTZDdVksc0JBQXNCLEVBQUUxTixPQUFPO0lBQzFGLE1BQU0sRUFBRTJOLGtCQUFrQixFQUFFLEdBQUd0TixpQkFBUSxFQUNqQ0MsT0FBT29OLHdCQUNQM00sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWXRHLG9DQUFvQ3lTLHdCQUF3QjFOLFVBQ3hFNE4scUJBQXFCLElBQUlELG1CQUFtQjNOLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPO0lBRXJGLE9BQU9xTTtBQUNUO0FBRU8sU0FBU3pWLCtDQUErQzBWLHVCQUF1QixFQUFFN04sT0FBTztJQUM3RixNQUFNLEVBQUU4TixtQkFBbUIsRUFBRSxHQUFHek4saUJBQVEsRUFDbENDLE9BQU91Tix5QkFDUDlNLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9sQixnQ0FBZ0M4Tyx5QkFBeUI3TixVQUNoRXlGLFdBQVduTixvQ0FBb0N1Vix5QkFBeUI3TjtJQUU5RUEsVUFBVTtJQUVWLE1BQU0rTixzQkFBc0IsSUFBSUQsb0JBQW9COU4sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWYsTUFBTXdGO0lBRTdGLE9BQU9zSTtBQUNUO0FBRU8sU0FBU3BPLCtDQUErQ3FPLHVCQUF1QixFQUFFaE8sT0FBTztJQUM3RixNQUFNLEVBQUVpTyxtQkFBbUIsRUFBRSxHQUFHNU4saUJBQVEsRUFDbENDLE9BQU8wTix5QkFDUGpOLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9aLGdDQUFnQzJPLHlCQUF5QmhPLFVBQ2hFOEYsV0FBV2pHLG9DQUFvQ21PLHlCQUF5QmhPLFVBQ3hFVyxjQUFjNUgsdUNBQXVDaVYseUJBQXlCaE87SUFFcEZBLFVBQVU7SUFFVixNQUFNa08sc0JBQXNCLElBQUlELG9CQUFvQmpPLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU02RixVQUFVbkY7SUFFdkcsT0FBT3VOO0FBQ1Q7QUFFTyxTQUFTbmMsK0NBQStDb2MsdUJBQXVCLEVBQUVuTyxPQUFPO0lBQzdGLE1BQU0sRUFBRW9PLG1CQUFtQixFQUFFLEdBQUcvTixpQkFBUSxFQUNsQ0MsT0FBTzZOLHlCQUNQcE4sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWTlHLHFDQUFxQzBULHlCQUF5Qm5PLFVBQzFFcU8sc0JBQXNCLElBQUlELG9CQUFvQnBPLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPO0lBRXZGLE9BQU84TTtBQUNUO0FBRU8sU0FBU3JjLGlEQUFpRHNjLHdCQUF3QixFQUFFdE8sT0FBTztJQUNoRyxNQUFNLEVBQUV1TyxvQkFBb0IsRUFBRSxHQUFHbE8saUJBQVEsRUFDbkNDLE9BQU9nTywwQkFDUHZOLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JJLE9BQU9sRSxpQ0FBaUNvUiwwQkFBMEJ0TyxVQUNsRUMsT0FBTzFCLGlDQUFpQytQLDBCQUEwQnRPLFVBQ2xFb0QsYUFBYTFPLHVDQUF1QzRaLDBCQUEwQnRPLFVBQzlFd08sdUJBQXVCLElBQUlELHFCQUFxQnZPLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1uQixNQUFNbUQ7SUFFckcsT0FBT29MO0FBQ1Q7QUFFTyxTQUFTcGEsaURBQWlEcWEsd0JBQXdCLEVBQUV6TyxPQUFPO0lBQ2hHLE1BQU0sRUFBRTBPLG9CQUFvQixFQUFFLEdBQUdyTyxpQkFBUSxFQUNuQ0MsT0FBT21PLDBCQUNQMU4sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmYsT0FBT3JCLGlDQUFpQzZQLDBCQUEwQnpPLFVBQ2xFVyxjQUFjaEksd0NBQXdDOFYsMEJBQTBCek8sVUFDaEYySCxZQUFZclQsc0NBQXNDbWEsMEJBQTBCek87SUFFbEZBLFVBQVU7SUFFVixNQUFNMk8sdUJBQXVCLElBQUlELHFCQUFxQjFPLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU1VLGFBQWFnSDtJQUU1RyxPQUFPZ0g7QUFDVDtBQUVPLFNBQVNwUCxtREFBbURxUCx5QkFBeUIsRUFBRTVPLE9BQU87SUFDbkcsTUFBTSxFQUFFNk8scUJBQXFCLEVBQUUsR0FBR3hPLGlCQUFRLEVBQ3BDQyxPQUFPc08sMkJBQ1A3TixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiK0gsYUFBYXZKLHdDQUF3Q29QLDJCQUEyQjVPO0lBRXRGQSxVQUFVO0lBRVYsTUFBTThPLHdCQUF3QixJQUFJRCxzQkFBc0I3TyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZK0g7SUFFM0YsT0FBTytGO0FBQ1Q7QUFFTyxTQUFTN2MsbURBQW1EOGMseUJBQXlCLEVBQUUvTyxPQUFPO0lBQ25HLE1BQU0sRUFBRWdQLHFCQUFxQixFQUFFLEdBQUczTyxpQkFBUSxFQUNwQ0MsT0FBT3lPLDJCQUNQaE8sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnVILGFBQWFyVyx3Q0FBd0M2YywyQkFBMkIvTztJQUV0RkEsVUFBVTtJQUVWLE1BQU1pUCx3QkFBd0IsSUFBSUQsc0JBQXNCaFAsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXVIO0lBRTNGLE9BQU8wRztBQUNUO0FBRU8sU0FBU3pWLG1EQUFtRDBWLHlCQUF5QixFQUFFM0QsY0FBYyxFQUFFQyxlQUFlO0lBQzNILE1BQU0sRUFBRTJELHFCQUFxQixFQUFFLEdBQUc5TyxpQkFBUSxFQUNwQ0MsT0FBTzRPLDJCQUNQbFAsVUFBVXdMLGlCQUNWRSxXQUFXO1FBQ1RIO1FBQ0FDO0tBQ0QsRUFDRHpLLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JvTyxrQkFBa0JyUyw2Q0FBNkNtUywyQkFBMkJsUCxVQUMxRnFQLHVCQUF1QjNWLGtEQUFrRHdWLDJCQUEyQmxQLFVBQ3BHc1Asd0JBQXdCLElBQUlILHNCQUFzQnpELFVBQVUzSyxRQUFRVCxNQUFNVSxZQUFZb08saUJBQWlCQztJQUU3RyxPQUFPQztBQUNUO0FBRU8sU0FBU2hVLG1EQUFtRGlVLHlCQUF5QixFQUFFaEUsY0FBYyxFQUFFQyxlQUFlO0lBQzNILE1BQU0sRUFBRWdFLHFCQUFxQixFQUFFLEdBQUduUCxpQkFBUSxFQUNwQ0MsT0FBT2lQLDJCQUNQdlAsVUFBVXdMLGlCQUNWRSxXQUFXO1FBQ1RIO1FBQ0FDO0tBQ0QsRUFDRHpLLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2J5TyxXQUFXNVYsc0NBQXNDMFYsMkJBQTJCdlAsVUFDNUUwUCxlQUFlclQsMENBQTBDa1QsMkJBQTJCaEUsZ0JBQWdCQyxrQkFDcEdtRSxrQkFBa0IzUyw2Q0FBNkN1UywyQkFBMkJ2UCxVQUMxRjRQLHVCQUF1QmpXLGtEQUFrRDRWLDJCQUEyQnZQLFVBQ3BHNlAsd0JBQXdCLElBQUlMLHNCQUFzQjlELFVBQVUzSyxRQUFRVCxNQUFNVSxZQUFZeU8sVUFBVUMsY0FBY0MsaUJBQWlCQztJQUVySSxPQUFPQztBQUNUO0FBRU8sU0FBU25kLHFEQUFxRG9kLDBCQUEwQixFQUFFOVAsT0FBTztJQUN0RyxNQUFNLEVBQUUrUCxzQkFBc0IsRUFBRSxHQUFHMVAsaUJBQVEsRUFDckNDLE9BQU93UCw0QkFDUC9PLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU96QixtQ0FBbUNzUiw0QkFBNEI5UCxVQUN0RVcsY0FBY2xJLDBDQUEwQ3FYLDRCQUE0QjlQLFVBQ3BGcUosY0FBY3pXLDBDQUEwQ2tkLDRCQUE0QjlQO0lBRTFGQSxVQUFVO0lBRVYsTUFBTWdRLHlCQUF5QixJQUFJRCx1QkFBdUIvUCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZixNQUFNVSxhQUFhMEk7SUFFaEgsT0FBTzJHO0FBQ1Q7QUFFTyxTQUFTamEsdURBQXVEa2EsMkJBQTJCLEVBQUVqUSxPQUFPO0lBQ3pHLE1BQU0sRUFBRWtRLHVCQUF1QixFQUFFLEdBQUc3UCxpQkFBUSxFQUN0Q0MsT0FBTzJQLDZCQUNQbFAsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmdKLFdBQVdsVSx3Q0FBd0NtYSw2QkFBNkJqUSxVQUNoRnlDLGVBQWV2TSw0Q0FBNEMrWiw2QkFBNkJqUTtJQUU5RkEsVUFBVTtJQUVWLE1BQU1tUSwwQkFBMEIsSUFBSUQsd0JBQXdCbFEsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWdKLFVBQVV2SDtJQUV6RyxPQUFPME47QUFDVDtBQUVPLFNBQVN6WixpQkFBaUJxSixRQUFRLEVBQUVDLE9BQU87SUFDaEQsTUFBTW9RLFdBQVdyUSxTQUFTc1EsV0FBVyxJQUMvQjlQLE9BQU82UCxVQUFXLEdBQUc7SUFFM0IsT0FBTzdQO0FBQ1Q7QUFFTyxTQUFTdEIsaUJBQWlCZ0MsUUFBUSxFQUFFakIsT0FBTztJQUNoRCxNQUFNQyxPQUFPO0lBRWIsT0FBT0E7QUFDVDtBQUVPLFNBQVNwSSxrQkFBa0I4SixRQUFRLEVBQUUzQixPQUFPO0lBQ2pELElBQUk2QixRQUFRO0lBRVosTUFBTStCLFlBQVlqQyxTQUFTMk8sWUFBWTtJQUV2QyxJQUFJMU0sY0FBYyxNQUFNO1FBQ3RCL0IsUUFBUWpLLG1CQUFtQmdNLFdBQVc1RDtJQUN4QztJQUVBLE9BQU82QjtBQUNUO0FBRU8sU0FBU3BNLG1CQUFtQmtNLFFBQVEsRUFBRTNCLE9BQU87SUFDbEQsTUFBTXVRLGFBQWE1TyxTQUFTNk8sYUFBYSxJQUNuQzFPLFNBQVN0TSxxQkFBcUIrYSxZQUFZdlE7SUFFaEQsT0FBTzhCO0FBQ1Q7QUFFTyxTQUFTaEssb0JBQW9Cb00sVUFBVSxFQUFFbEUsT0FBTztJQUNyRCxNQUFNNEQsWUFBWU0sV0FBV29NLFlBQVksSUFDbkN6TyxRQUFRakssbUJBQW1CZ00sV0FBVzVEO0lBRTVDLE9BQU82QjtBQUNUO0FBRU8sU0FBU3RNLG9CQUFvQjJPLFVBQVUsRUFBRWxFLE9BQU87SUFDckQsTUFBTSxFQUFFd0MsS0FBSyxFQUFFLEdBQUduQyxpQkFBUSxFQUNwQmtDLFlBQVkyQixXQUFXdU0sWUFBWSxJQUNuQ0MsY0FBYzFRLFFBQVFtQixZQUFZLENBQUNvQixZQUNuQ0csUUFBUUYsTUFBTW1PLGVBQWUsQ0FBQ0QsYUFBYTFRO0lBRWpELE9BQU8wQztBQUNUO0FBRU8sU0FBUzlDLHFCQUFxQnFCLFFBQVEsRUFBRWpCLE9BQU87SUFDcEQsSUFBSThGLFdBQVc7SUFFZixNQUFNSCxlQUFlMUUsU0FBUzJQLGVBQWU7SUFFN0MsSUFBSWpMLGlCQUFpQixNQUFNO1FBQ3pCRyxXQUFXaEcseUJBQXlCNkYsY0FBYzNGO0lBQ3BEO0lBRUEsT0FBTzhGO0FBQ1Q7QUFFTyxTQUFTek8scUJBQXFCc0ssUUFBUSxFQUFFM0IsT0FBTztJQUNwRCxNQUFNNlEsZUFBZWxQLFNBQVNtUCxlQUFlLElBQ3ZDL08sV0FBVzNLLHlCQUF5QnlaLGNBQWM3UTtJQUV4RCxPQUFPK0I7QUFDVDtBQUVPLFNBQVNqUSxxQkFBcUIwUyxXQUFXLEVBQUV4RSxPQUFPO0lBQ3ZELElBQUlpRSxRQUFRO0lBRVosTUFBTUYsWUFBWVMsWUFBWXVNLFlBQVk7SUFFMUMsSUFBSWhOLGNBQWMsTUFBTTtRQUN0QkUsUUFBUXBTLG1CQUFtQmtTLFdBQVcvRDtJQUN4QztJQUVBLE9BQU9pRTtBQUNUO0FBRU8sU0FBU3BPLHFCQUFxQjJPLFdBQVcsRUFBRXhFLE9BQU87SUFDdkQsSUFBSXVELFFBQVE7SUFFWixNQUFNVCxZQUFZMEIsWUFBWXdNLFlBQVk7SUFFMUMsSUFBSWxPLGNBQWMsTUFBTTtRQUN0QlMsUUFBUTNOLG1CQUFtQmtOLFdBQVc5QztJQUN4QztJQUVBLE9BQU91RDtBQUNUO0FBRU8sU0FBUzlGLHFCQUFxQitILFlBQVksRUFBRXhGLE9BQU87SUFDeEQsTUFBTWlCLFdBQVd1RSxhQUFheUwsV0FBVyxJQUN2QzdQLE9BQU8xRCxpQkFBaUJ1RCxVQUFVakI7SUFFcEMsT0FBT29CO0FBQ1Q7QUFFTyxTQUFTcEMscUJBQXFCd0csWUFBWSxFQUFFeEYsT0FBTztJQUN4RCxNQUFNQyxPQUFPO0lBRWIsT0FBT0E7QUFDVDtBQUVPLFNBQVNYLHFCQUFxQnFHLFlBQVksRUFBRTNGLE9BQU87SUFDeEQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTMUoscUJBQXFCK1EsYUFBYSxFQUFFdEgsT0FBTztJQUN6RCxNQUFNTyxPQUFPK0csY0FBYzRKLE9BQU87SUFFbEMsT0FBTzNRO0FBQ1Q7QUFFTyxTQUFTcEgsc0JBQXNCaUosUUFBUSxFQUFFcEMsT0FBTztJQUNyRCxJQUFJd0IsWUFBWTtJQUVoQixNQUFNc0ksbUJBQW1CMUgsU0FBUytPLG1CQUFtQjtJQUVyRCxJQUFJckgscUJBQXFCLE1BQU07UUFDN0J0SSxZQUFZcEksOEJBQThCMFEsa0JBQWtCOUo7SUFDOUQ7SUFFQSxPQUFPd0I7QUFDVDtBQUVPLFNBQVN6RyxzQkFBc0JxSCxRQUFRLEVBQUVwQyxPQUFPO0lBQ3JELE1BQU1vUixpQkFBaUJoUCxTQUFTaVAsZ0JBQWdCLElBQzFDOVAsWUFBWXBHLDJCQUEyQmlXLGdCQUFnQnBSO0lBRTdELE9BQU91QjtBQUNUO0FBRU8sU0FBU25HLHNCQUFzQmlHLFFBQVEsRUFBRXJCLE9BQU87SUFDckQsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXFGLGdCQUFnQnZGLFNBQVNnUSxnQkFBZ0I7SUFFL0MsSUFBSXpLLGtCQUFrQixNQUFNO1FBQzFCckYsWUFBWXBHLDJCQUEyQnlMLGVBQWU1RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBU2hJLHNCQUFzQjhILFFBQVEsRUFBRXJCLE9BQU87SUFDckQsSUFBSXdCLFlBQVk7SUFFaEIsTUFBTXlGLGdCQUFnQjVGLFNBQVNpUSxnQkFBZ0I7SUFFL0MsSUFBSXJLLGtCQUFrQixNQUFNO1FBQzFCLE1BQU0sRUFBRUMsU0FBUyxFQUFFLEdBQUc3RyxpQkFBUSxFQUN4QmtSLGtCQUFrQnZSLFFBQVFtQixZQUFZLENBQUM4RjtRQUU3Q3pGLFlBQVkwRixVQUFVc0ssbUJBQW1CLENBQUNELGlCQUFpQnZSO0lBQzdEO0lBRUEsT0FBT3dCO0FBQ1Q7QUFFTyxTQUFTaEwsc0JBQXNCOFEsYUFBYSxFQUFFdEgsT0FBTztJQUMxRCxNQUFNTyxPQUFPK0csY0FBYzRKLE9BQU87SUFFbEMsT0FBTzNRO0FBQ1Q7QUFFTyxTQUFTOUwsc0JBQXNCMFMsYUFBYSxFQUFFbkgsT0FBTztJQUMxRCxNQUFNb0MsV0FBVytFLGNBQWNzSyxXQUFXLElBQ3BDblAsT0FBTzlOLGlCQUFpQjROLFVBQVVwQztJQUV4QyxPQUFPc0M7QUFDVDtBQUVPLFNBQVNoRixzQkFBc0JtSyxhQUFhLEVBQUV6SCxPQUFPO0lBQzFELE1BQU1pQixXQUFXd0csY0FBY3dKLFdBQVcsSUFDcEM3UCxPQUFPMUQsaUJBQWlCdUQsVUFBVWpCO0lBRXhDLE9BQU9vQjtBQUNUO0FBRU8sU0FBU3ZDLHNCQUFzQjRJLGFBQWEsRUFBRXpILE9BQU87SUFDMUQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTekQsdUJBQXVCdUQsUUFBUSxFQUFFQyxPQUFPO0lBQ3RELE1BQU1TLGFBQWE7SUFFbkIsT0FBT0E7QUFDVDtBQUVPLFNBQVN6SSx1QkFBdUIrSCxRQUFRLEVBQUVDLE9BQU87SUFDdEQsTUFBTVUsYUFBYTtJQUVuQixPQUFPQTtBQUNUO0FBRU8sU0FBU3hKLHVCQUF1QjZJLFFBQVEsRUFBRUMsT0FBTztJQUN0RCxNQUFNMFIsaUJBQWlCM1IsU0FBUzRSLGlCQUFpQixJQUMzQ25SLGFBQWFrUixnQkFBaUIsR0FBRztJQUV2QyxPQUFPbFI7QUFDVDtBQUVPLFNBQVNuTyx1QkFBdUJzUCxRQUFRLEVBQUUzQixPQUFPO0lBQ3RELE1BQU13SSxpQkFBaUI3RyxTQUFTaVEsaUJBQWlCLElBQzNDNVAsYUFBYTVQLDZCQUE2Qm9XLGdCQUFnQnhJO0lBRWhFLE9BQU9nQztBQUNUO0FBRU8sU0FBUy9ELHVCQUF1QnVHLFdBQVcsRUFBRXhFLE9BQU87SUFDekQsSUFBSXVGLFVBQVU7SUFFZCxNQUFNRixjQUFjYixZQUFZcU4sY0FBYztJQUU5QyxJQUFJeE0sZ0JBQWdCLE1BQU07UUFDeEJFLFVBQVVySCx1QkFBdUJtSCxhQUFhckY7SUFDaEQ7SUFFQSxPQUFPdUY7QUFDVDtBQUVPLFNBQVN0Uix1QkFBdUJrVCxhQUFhLEVBQUVuSCxPQUFPO0lBQzNELE1BQU13RCxZQUFZMkQsY0FBYzJLLFlBQVksSUFDdENuTyxRQUFRNVAsbUJBQW1CeVAsV0FBV3hEO0lBRTVDLE9BQU8yRDtBQUNUO0FBRU8sU0FBUzVGLHVCQUF1QitJLGFBQWEsRUFBRTlHLE9BQU87SUFDM0QsTUFBTStSLFlBQVlqTCxjQUFja0wsWUFBWSxJQUN0Q2hMLFFBQVFoSixtQkFBbUIrVCxXQUFXL1I7SUFFNUMsT0FBT2dIO0FBQ1Q7QUFFTyxTQUFTclEsdUJBQXVCa1MsY0FBYyxFQUFFN0ksT0FBTztJQUM1RCxNQUFNMFIsaUJBQWlCN0ksZUFBZThJLGlCQUFpQixJQUNqRHBSLE9BQU9tUixnQkFBaUIsR0FBRztJQUVqQyxPQUFPblI7QUFDVDtBQUVPLFNBQVNwTix3QkFBd0IrUSxVQUFVLEVBQUVsRSxPQUFPO0lBQ3pELE1BQU0wRyxnQkFBZ0J4QyxXQUFXK04sZ0JBQWdCLElBQzNDaFAsWUFBWS9QLDJCQUEyQndULGVBQWUxRztJQUU1RCxPQUFPaUQ7QUFDVDtBQUVPLFNBQVNuSyx3QkFBd0JpSCxRQUFRLEVBQUVDLE9BQU87SUFDdkQsTUFBTVcsY0FBYztJQUVwQixPQUFPQTtBQUNUO0FBRU8sU0FBUy9ILHdCQUF3QnFJLFFBQVEsRUFBRWpCLE9BQU87SUFDdkQsTUFBTVcsY0FBYztJQUVwQixPQUFPQTtBQUNUO0FBRU8sU0FBU25OLHdCQUF3Qm9RLFNBQVMsRUFBRTVELE9BQU87SUFDeEQsTUFBTTBJLGlCQUFpQjlFLFVBQVVzTyxpQkFBaUIsSUFDNUNwTyxhQUFhdlEsNkJBQTZCbVYsZ0JBQWdCMUk7SUFFaEUsT0FBTzhEO0FBQ1Q7QUFFTyxTQUFTM0csd0JBQXdCZ1YsZUFBZSxFQUFFblMsT0FBTztJQUM5RCxNQUFNaUIsV0FBV2tSLGdCQUFnQmxCLFdBQVcsSUFDdEM3UCxPQUFPMUQsaUJBQWlCdUQsVUFBVWpCO0lBRXhDLE9BQU9vQjtBQUNUO0FBRU8sU0FBUzNDLHdCQUF3QjBULGVBQWUsRUFBRW5TLE9BQU87SUFDOUQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTdEIsd0JBQXdCOEssZUFBZSxFQUFFekosT0FBTztJQUM5RCxNQUFNQyxPQUFPO0lBRWIsT0FBT0E7QUFDVDtBQUVPLFNBQVNyTyx5QkFBeUI0UixTQUFTLEVBQUV4RCxPQUFPO0lBQ3pELE1BQU1vUyxrQkFBa0I1TyxVQUFVNk8sa0JBQWtCLElBQzlDM08sY0FBYy9SLCtCQUErQnlnQixpQkFBaUJwUztJQUVwRSxPQUFPMEQ7QUFDVDtBQUVPLFNBQVN4SSx5QkFBeUIrSixXQUFXLEVBQUVqRixPQUFPO0lBQzNELElBQUl1QixZQUFZO0lBRWhCLE1BQU1xRixnQkFBZ0IzQixZQUFZb00sZ0JBQWdCO0lBRWxELElBQUl6SyxrQkFBa0IsTUFBTTtRQUMxQnJGLFlBQVlwRywyQkFBMkJ5TCxlQUFlNUc7SUFDeEQ7SUFFQSxPQUFPdUI7QUFDVDtBQUVPLFNBQVM1TCx5QkFBeUIwUSxZQUFZLEVBQUVyRyxPQUFPO0lBQzVELE1BQU1zUyxlQUFlak0sYUFBYWtNLGVBQWUsSUFDM0NoTSxXQUFXN0ksaUJBQWlCNFUsY0FBY3RTO0lBRWhELE9BQU91RztBQUNUO0FBRU8sU0FBU3pJLHlCQUF5QjJMLGVBQWUsRUFBRXpKLE9BQU87SUFDL0QsTUFBTStSLFlBQVl0SSxnQkFBZ0J1SSxZQUFZLElBQ3hDaEwsUUFBUWhKLG1CQUFtQitULFdBQVcvUjtJQUU1QyxPQUFPZ0g7QUFDVDtBQUVPLFNBQVMxUSx5QkFBeUJ3VCxnQkFBZ0IsRUFBRTlKLE9BQU87SUFDaEUsTUFBTXdTLHVCQUF1QjFJLGlCQUFpQjJJLG1CQUFtQixJQUMzRGxTLE9BQU9pUyxzQkFBdUIsR0FBRztJQUV2QyxPQUFPalM7QUFDVDtBQUVPLFNBQVMvQyx5QkFBeUJzTSxnQkFBZ0IsRUFBRTlKLE9BQU87SUFDaEUsSUFBSW9CLE9BQU87SUFFWCxNQUFNSCxXQUFXNkksaUJBQWlCbUgsV0FBVztJQUU3QyxJQUFJaFEsYUFBYSxNQUFNO1FBQ3JCRyxPQUFPMUQsaUJBQWlCdUQsVUFBVWpCO0lBQ3BDO0lBRUEsT0FBT29CO0FBQ1Q7QUFFTyxTQUFTdEMseUJBQXlCZ0wsZ0JBQWdCLEVBQUU5SixPQUFPO0lBQ2hFLElBQUlDLE9BQU87SUFFWCxNQUFNeVMsWUFBWTVJLGlCQUFpQjZJLFdBQVc7SUFFOUMsSUFBSUQsY0FBYyxNQUFNO1FBQ3RCelMsT0FBT2IsaUJBQWlCc1QsV0FBVzFTO0lBQ3JDO0lBRUEsT0FBT0M7QUFDVDtBQUVPLFNBQVNqSywwQkFBMEJ3TixTQUFTLEVBQUV4RCxPQUFPO0lBQzFELElBQUl5QyxlQUFlO0lBRW5CLE1BQU1xSCxtQkFBbUJ0RyxVQUFVMk4sbUJBQW1CO0lBRXRELElBQUlySCxxQkFBcUIsTUFBTTtRQUM3QnJILGVBQWV0TSxpQ0FBaUMyVCxrQkFBa0I5SjtJQUNwRTtJQUVBLE9BQU95QztBQUNUO0FBRU8sU0FBU3hNLDBCQUEwQnNNLFNBQVMsRUFBRXZDLE9BQU87SUFDMUQsTUFBTThKLG1CQUFtQnZILFVBQVU0TyxtQkFBbUIsSUFDaEQxTyxlQUFldE0saUNBQWlDMlQsa0JBQWtCOUo7SUFFeEUsT0FBT3lDO0FBQ1Q7QUFFTyxTQUFTaFEsMEJBQTBCeVIsVUFBVSxFQUFFbEUsT0FBTztJQUMzRCxNQUFNb0UsY0FBYyxFQUFFO0lBRXRCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTN1IsMEJBQTBCaVMsV0FBVyxFQUFFeEUsT0FBTztJQUM1RCxJQUFJb0ksYUFBYTtJQUVqQixNQUFNRixpQkFBaUIxRCxZQUFZb08saUJBQWlCO0lBRXBELElBQUkxSyxtQkFBbUIsTUFBTTtRQUMzQkUsYUFBYTlWLDZCQUE2QjRWLGdCQUFnQmxJO0lBQzVEO0lBRUEsT0FBT29JO0FBQ1Q7QUFFTyxTQUFTdE8sMEJBQTBCdU0sWUFBWSxFQUFFckcsT0FBTztJQUM3RCxNQUFNNlMsZ0JBQWdCeE0sYUFBYXlNLGdCQUFnQixJQUM3Q3RNLFlBQVk5SSxpQkFBaUJtVixlQUFlN1M7SUFFbEQsT0FBT3dHO0FBQ1Q7QUFFTyxTQUFTOVMsMEJBQTBCa1QsYUFBYSxFQUFFNUcsT0FBTztJQUM5RCxJQUFJeUcsV0FBVztJQUVmLE1BQU1KLGVBQWVPLGNBQWNtTSxlQUFlO0lBRWxELElBQUkxTSxpQkFBaUIsTUFBTTtRQUN6QkksV0FBV2hULHlCQUF5QjRTLGNBQWNyRztJQUNwRDtJQUVBLE9BQU95RztBQUNUO0FBRU8sU0FBUzlJLDBCQUEwQjhNLGlCQUFpQixFQUFFekssT0FBTztJQUNsRSxNQUFNaUIsV0FBV3dKLGtCQUFrQndHLFdBQVcsSUFDeEM3UCxPQUFPMUQsaUJBQWlCdUQsVUFBVWpCO0lBRXhDLE9BQU9vQjtBQUNUO0FBRU8sU0FBU2xDLDBCQUEwQnVMLGlCQUFpQixFQUFFekssT0FBTztJQUNsRSxNQUFNRCxXQUFXMEssa0JBQWtCa0ksV0FBVyxJQUN4QzFTLE9BQU9iLGlCQUFpQlcsVUFBVUM7SUFFeEMsT0FBT0M7QUFDVDtBQUVPLFNBQVN2RCwyQkFBMkJ3SCxVQUFVLEVBQUVsRSxPQUFPO0lBQzVELE1BQU1nVCxtQkFBbUI5TyxXQUFXK08sbUJBQW1CLElBQ2pEL1AsZUFBZXRHLGlDQUFpQ29XLGtCQUFrQmhUO0lBRXhFLE9BQU9rRDtBQUNUO0FBRU8sU0FBU2pRLDJCQUEyQnVSLFdBQVcsRUFBRXhFLE9BQU87SUFDN0QsTUFBTWdRLHlCQUF5QnJkLHNDQUFzQzZSLGFBQWF4RSxVQUM1RTJPLHVCQUF1QnRhLG9DQUFvQ21RLGFBQWF4RSxVQUN4RTRFLGNBQWVvTCwwQkFBMEJyQjtJQUUvQyxPQUFPL0o7QUFDVDtBQUVPLFNBQVMxUCwyQkFBMkJ5USxZQUFZLEVBQUUzRixPQUFPO0lBQzlELE1BQU1rVCxxQkFBcUJ2TixhQUFhd04scUJBQXFCLElBQzNEdE4sYUFBYXFOLG9CQUFxQixHQUFHO0lBRXZDLE9BQU9yTjtBQUNUO0FBRU8sU0FBUzVRLDJCQUEyQnFTLGFBQWEsRUFBRXRILE9BQU87SUFDL0QsTUFBTTZGLGFBQWF5QixjQUFjOEwsYUFBYTtJQUU5QyxPQUFPdk47QUFDVDtBQUVPLFNBQVMvSywyQkFBMkI0TCxhQUFhLEVBQUUxRyxPQUFPO0lBQy9ELElBQUl1QixZQUFZO0lBRWhCLE1BQU1xRixnQkFBZ0JGLGNBQWMySyxnQkFBZ0I7SUFFcEQsSUFBSXpLLGtCQUFrQixNQUFNO1FBQzFCckYsWUFBWXBHLDJCQUEyQnlMLGVBQWU1RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBU2xNLDJCQUEyQnVSLGFBQWEsRUFBRTVHLE9BQU87SUFDL0QsSUFBSXFILFlBQVk7SUFFaEIsTUFBTUYsZ0JBQWdCUCxjQUFjeU0sZ0JBQWdCO0lBRXBELElBQUlsTSxrQkFBa0IsTUFBTTtRQUMxQkUsWUFBWWpTLDJCQUEyQitSLGVBQWVuSDtJQUN4RDtJQUVBLE9BQU9xSDtBQUNUO0FBRU8sU0FBUzNMLDJCQUEyQmtQLGtCQUFrQixFQUFFNUssT0FBTztJQUNwRSxJQUFJMEIsT0FBTztJQUVYLE1BQU00Uiw2QkFBNkIxSSxtQkFBbUIySSxVQUFVO0lBRWhFLElBQUlELDRCQUE0QjtRQUM5QixNQUFNalMsV0FBV3VKLG9CQUFxQixHQUFHO1FBRXpDbEosT0FBT2pHLGlCQUFpQjRGLFVBQVVyQjtJQUNwQztJQUVBLE9BQU8wQjtBQUNUO0FBRU8sU0FBUzVLLDRCQUE0QmlKLFFBQVEsRUFBRUMsT0FBTztJQUMzRCxNQUFNWSxrQkFBa0JiLFNBQVN5VCxrQkFBa0I7SUFFbkQsT0FBTzVTO0FBQ1Q7QUFFTyxTQUFTNUgsNEJBQTRCMk0sWUFBWSxFQUFFM0YsT0FBTztJQUMvRCxNQUFNVyxjQUFjO0lBRXBCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTM0wsNEJBQTRCc1MsYUFBYSxFQUFFdEgsT0FBTztJQUNoRSxNQUFNNkYsYUFBYXlCLGNBQWM4TCxhQUFhO0lBRTlDLE9BQU92TjtBQUNUO0FBRU8sU0FBU2pSLDRCQUE0QjZTLGFBQWEsRUFBRXpILE9BQU87SUFDaEUsTUFBTW9ELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBU25LLDRCQUE0QitQLGNBQWMsRUFBRWhKLE9BQU87SUFDakUsSUFBSXdCLFlBQVk7SUFFaEIsTUFBTXNJLG1CQUFtQmQsZUFBZW1JLG1CQUFtQjtJQUUzRCxJQUFJckgscUJBQXFCLE1BQU07UUFDN0J0SSxZQUFZcEksOEJBQThCMFEsa0JBQWtCOUo7SUFDOUQ7SUFFQSxPQUFPd0I7QUFDVDtBQUVPLFNBQVNoSCw0QkFBNEJ3TyxjQUFjLEVBQUVoSixPQUFPO0lBQ2pFLE1BQU1vUixpQkFBaUJwSSxlQUFlcUksZ0JBQWdCLElBQ2hEOVAsWUFBWXBHLDJCQUEyQmlXLGdCQUFnQnBSO0lBRTdELE9BQU91QjtBQUNUO0FBRU8sU0FBUzdHLDRCQUE0QjJOLGNBQWMsRUFBRXJJLE9BQU87SUFDakUsTUFBTTRHLGdCQUFnQnlCLGVBQWVnSixnQkFBZ0IsSUFDL0M5UCxZQUFZcEcsMkJBQTJCeUwsZUFBZTVHO0lBRTVELE9BQU91QjtBQUNUO0FBRU8sU0FBUzVHLDRCQUE0QjhZLGNBQWMsRUFBRXpULE9BQU87SUFDakUsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXFGLGdCQUFnQjZNLGVBQWVwQyxnQkFBZ0I7SUFFckQsSUFBSXpLLGtCQUFrQixNQUFNO1FBQzFCckYsWUFBWXBHLDJCQUEyQnlMLGVBQWU1RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBU3ZHLDRCQUE0QjBZLGNBQWMsRUFBRTFULE9BQU87SUFDakUsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXFGLGdCQUFnQjhNLGVBQWVyQyxnQkFBZ0I7SUFFckQsSUFBSXpLLGtCQUFrQixNQUFNO1FBQzFCckYsWUFBWXBHLDJCQUEyQnlMLGVBQWU1RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBU3JJLDRCQUE0QjZPLGNBQWMsRUFBRS9ILE9BQU87SUFDakUsTUFBTSxFQUFFa0gsU0FBUyxFQUFFLEdBQUc3RyxpQkFBUSxFQUN4QjRHLGdCQUFnQmMsZUFBZXVKLGdCQUFnQixJQUMvQ0Msa0JBQWtCdlIsUUFBUW1CLFlBQVksQ0FBQzhGLGdCQUN2Q3pGLFlBQVkwRixVQUFVc0ssbUJBQW1CLENBQUNELGlCQUFpQnZSO0lBRWpFLE9BQU93QjtBQUNUO0FBRU8sU0FBUzVHLDRCQUE0Qm1OLGNBQWMsRUFBRS9ILE9BQU87SUFDakUsTUFBTTRHLGdCQUFnQm1CLGVBQWVzSixnQkFBZ0IsSUFDL0M5UCxZQUFZcEcsMkJBQTJCeUwsZUFBZTVHO0lBRTVELE9BQU91QjtBQUNUO0FBRU8sU0FBU3BDLDRCQUE0QjJMLG1CQUFtQixFQUFFOUssT0FBTztJQUN0RSxNQUFNRCxXQUFXK0ssb0JBQW9CNkgsV0FBVyxJQUMxQzFTLE9BQU9iLGlCQUFpQlcsVUFBVUM7SUFFeEMsT0FBT0M7QUFDVDtBQUVPLFNBQVMxSSw2QkFBNkIwTixXQUFXLEVBQUVqRixPQUFPO0lBQy9ELElBQUltRixnQkFBZ0I7SUFFcEIsTUFBTThFLG9CQUFvQmhGLFlBQVkwTyxvQkFBb0I7SUFFMUQsSUFBSTFKLHNCQUFzQixNQUFNO1FBQzlCOUUsZ0JBQWdCM04sbUNBQW1DeVMsbUJBQW1Caks7SUFDeEU7SUFFQSxPQUFPbUY7QUFDVDtBQUVPLFNBQVN4SSw2QkFBNkJvSixZQUFZLEVBQUUvRixPQUFPO0lBQ2hFLE1BQU1nVCxtQkFBbUJqTixhQUFha04sbUJBQW1CLElBQ25EL1AsZUFBZXRHLGlDQUFpQ29XLGtCQUFrQmhUO0lBRXhFLE9BQU9rRDtBQUNUO0FBRU8sU0FBUzdILDZCQUE2QmlPLGVBQWUsRUFBRXRKLE9BQU87SUFDbkUsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXFGLGdCQUFnQjBDLGdCQUFnQitILGdCQUFnQjtJQUV0RCxJQUFJekssa0JBQWtCLE1BQU07UUFDMUJyRixZQUFZcEcsMkJBQTJCeUwsZUFBZTVHO0lBQ3hEO0lBRUEsT0FBT3VCLFdBQVcsR0FBRztBQUN2QjtBQUVPLFNBQVNsRSw2QkFBNkI0TixvQkFBb0IsRUFBRWpMLE9BQU87SUFDeEUsSUFBSW9CLE9BQU87SUFFWCxNQUFNSCxXQUFXZ0sscUJBQXFCZ0csV0FBVztJQUVqRCxJQUFJaFEsYUFBYSxNQUFNO1FBQ3JCRyxPQUFPMUQsaUJBQWlCdUQsVUFBVWpCO0lBQ3BDO0lBRUEsT0FBT29CO0FBQ1Q7QUFFTyxTQUFTckYsOEJBQThCZ0ssWUFBWSxFQUFFL0YsT0FBTztJQUNqRSxNQUFNdUssb0JBQW9CeEUsYUFBYTZOLG9CQUFvQixJQUNyREMsZ0JBQWdCL1gsbUNBQW1DeU8sbUJBQW1Cdks7SUFFNUUsT0FBTzZUO0FBQ1Q7QUFFTyxTQUFTeGQsOEJBQThCdVEsYUFBYSxFQUFFNUcsT0FBTztJQUNsRSxJQUFJeUMsZUFBZTtJQUVuQixNQUFNcUgsbUJBQW1CbEQsY0FBY3VLLG1CQUFtQjtJQUUxRCxJQUFJckgscUJBQXFCLE1BQU07UUFDN0JySCxlQUFldE0saUNBQWlDMlQsa0JBQWtCOUo7SUFDcEU7SUFFQSxPQUFPeUM7QUFDVDtBQUVPLFNBQVNyTSw4QkFBOEI2USxhQUFhLEVBQUVqSCxPQUFPO0lBQ2xFLE1BQU04SixtQkFBbUI3QyxjQUFja0ssbUJBQW1CLElBQ3BEMU8sZUFBZXRNLGlDQUFpQzJULGtCQUFrQjlKO0lBRXhFLE9BQU95QztBQUNUO0FBRU8sU0FBUzlOLDhCQUE4QndVLGVBQWUsRUFBRW5KLE9BQU87SUFDcEUsTUFBTW9ELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBU2hLLDhCQUE4QjBRLGdCQUFnQixFQUFFOUosT0FBTztJQUNyRSxNQUFNLEVBQUVrSCxTQUFTLEVBQUUsR0FBRzdHLGlCQUFRLEVBQ3hCeVQscUJBQXFCOVQsUUFBUW1CLFlBQVksQ0FBQzJJLG1CQUMxQ3lILGtCQUFrQnVDLG9CQUNsQnRTLFlBQVkwRixVQUFVc0ssbUJBQW1CLENBQUNELGlCQUFpQnZSO0lBRWpFLE9BQU93QjtBQUNUO0FBRU8sU0FBU2pFLDhCQUE4QjBOLG9CQUFvQixFQUFFakwsT0FBTztJQUN6RSxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVdnSyxxQkFBcUJnRyxXQUFXO0lBRWpELElBQUloUSxhQUFhLE1BQU07UUFDckJHLE9BQU8xRCxpQkFBaUJ1RCxVQUFVakI7SUFDcEM7SUFFQSxPQUFPb0I7QUFDVDtBQUVPLFNBQVN0Tiw4QkFBOEJtWCxvQkFBb0IsRUFBRWpMLE9BQU87SUFDekUsSUFBSTJELFFBQVE7SUFFWixNQUFNSCxZQUFZeUgscUJBQXFCNkcsWUFBWTtJQUVuRCxJQUFJdE8sY0FBYyxNQUFNO1FBQ3RCRyxRQUFRNVAsbUJBQW1CeVAsV0FBV3hEO0lBQ3hDO0lBRUEsT0FBTzJEO0FBQ1Q7QUFFTyxTQUFTakYsOEJBQThCa08scUJBQXFCLEVBQUU1TSxPQUFPO0lBQzFFLE1BQU1ELFdBQVc2TSxzQkFBc0IrRixXQUFXLElBQzVDMVMsT0FBT2IsaUJBQWlCVyxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBUzdGLCtCQUErQmlILFFBQVEsRUFBRXJCLE9BQU87SUFDOUQsSUFBSXlCLHFCQUFxQjtJQUV6QixNQUFNNEwseUJBQXlCaE0sU0FBUzBTLHlCQUF5QjtJQUVqRSxJQUFJMUcsMkJBQTJCLE1BQU07UUFDbkM1TCxxQkFBcUJ2SCw2Q0FBNkNtVCx3QkFBd0JyTjtJQUM1RjtJQUVBLE9BQU95QjtBQUNUO0FBRU8sU0FBU3JELCtCQUErQndJLGFBQWEsRUFBRTVHLE9BQU87SUFDbkUsSUFBSTJLLGdCQUFnQjtJQUVwQixNQUFNRixvQkFBb0I3RCxjQUFjb04sb0JBQW9CO0lBRTVELElBQUl2SixzQkFBc0IsTUFBTTtRQUM5QkUsZ0JBQWdCdE0sbUNBQW1Db00sbUJBQW1Ceks7SUFDeEU7SUFFQSxPQUFPMks7QUFDVDtBQUVPLFNBQVMzVywrQkFBK0JpWCxvQkFBb0IsRUFBRWpMLE9BQU87SUFDMUUsSUFBSTJELFFBQVE7SUFFWixNQUFNSCxZQUFZeUgscUJBQXFCNkcsWUFBWTtJQUVuRCxJQUFJdE8sY0FBYyxNQUFNO1FBQ3RCRyxRQUFRNVAsbUJBQW1CeVAsV0FBV3hEO0lBQ3hDO0lBRUEsT0FBTzJEO0FBQ1Q7QUFFTyxTQUFTNUwsK0JBQStCaUwsc0JBQXNCLEVBQUVoRCxPQUFPO0lBQzVFLElBQUk2QixRQUFRO0lBRVosTUFBTStCLFlBQVlaLHVCQUF1QnNOLFlBQVk7SUFFckQsSUFBSTFNLGNBQWMsTUFBTTtRQUN0Qi9CLFFBQVFqSyxtQkFBbUJnTSxXQUFXNUQ7SUFDeEM7SUFFQSxPQUFPNkI7QUFDVDtBQUVPLFNBQVMxRiwrQkFBK0I4WCxzQkFBc0IsRUFBRWpVLE9BQU87SUFDNUUsSUFBSW9HLFdBQVc7SUFFZixNQUFNOE4scUNBQXFDRCx1QkFBdUJFLGNBQWM7SUFFaEYsSUFBSUQsb0NBQW9DO1FBQ3RDLE1BQU1uTyxlQUFla08sd0JBQXlCLEdBQUc7UUFFakQ3TixXQUFXaEsseUJBQXlCMkosY0FBYy9GO0lBQ3BEO0lBRUEsT0FBT29HO0FBQ1Q7QUFFTyxTQUFTaEosK0JBQStCOFAsc0JBQXNCLEVBQUVsTixPQUFPO0lBQzVFLElBQUlvQixPQUFPO0lBRVgsTUFBTUgsV0FBV2lNLHVCQUF1QitELFdBQVc7SUFFbkQsSUFBSWhRLGFBQWEsTUFBTTtRQUNyQkcsT0FBTzFELGlCQUFpQnVELFVBQVVqQjtJQUNwQztJQUVBLE9BQU9vQjtBQUNUO0FBRU8sU0FBUzNLLCtCQUErQjhXLHNCQUFzQixFQUFFdk4sT0FBTztJQUM1RSxNQUFNTyxPQUFPZ04sdUJBQXVCMkQsT0FBTztJQUUzQyxPQUFPM1E7QUFDVDtBQUVPLFNBQVNqSixnQ0FBZ0NvYyxjQUFjLEVBQUUxVCxPQUFPO0lBQ3JFLElBQUltRixnQkFBZ0I7SUFFcEIsTUFBTThFLG9CQUFvQnlKLGVBQWVDLG9CQUFvQjtJQUU3RCxJQUFJMUosc0JBQXNCLE1BQU07UUFDOUI5RSxnQkFBZ0IzTixtQ0FBbUN5UyxtQkFBbUJqSztJQUN4RTtJQUVBLE9BQU9tRjtBQUNUO0FBRU8sU0FBU2xPLGdDQUFnQ2dULGlCQUFpQixFQUFFakssT0FBTztJQUN4RSxNQUFNb1UsaUJBQWlCbkssa0JBQWtCb0ssaUJBQWlCLElBQ3BEbEssYUFBYW5ULDZCQUE2Qm9kLGdCQUFnQnBVO0lBRWhFLE9BQU9tSztBQUNUO0FBRU8sU0FBU3RXLGdDQUFnQ3FaLHNCQUFzQixFQUFFbE4sT0FBTztJQUM3RSxJQUFJMkQsUUFBUTtJQUVaLE1BQU1ILFlBQVkwSix1QkFBdUI0RSxZQUFZO0lBRXJELElBQUl0TyxjQUFjLE1BQU07UUFDdEJHLFFBQVE1UCxtQkFBbUJ5UCxXQUFXeEQ7SUFDeEM7SUFFQSxPQUFPMkQ7QUFDVDtBQUVPLFNBQVNqTyxnQ0FBZ0NzTixzQkFBc0IsRUFBRWhELE9BQU87SUFDN0UsTUFBTXVRLGFBQWF2Tix1QkFBdUJ3TixhQUFhLElBQ2pEMU8sU0FBU3RNLHFCQUFxQithLFlBQVl2UTtJQUVoRCxPQUFPOEI7QUFDVDtBQUVPLFNBQVMvQyxnQ0FBZ0M4Tyx1QkFBdUIsRUFBRTdOLE9BQU87SUFDOUUsTUFBTUQsV0FBVzhOLHdCQUF3QjhFLFdBQVcsSUFDOUMxUyxPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTWixnQ0FBZ0MyTyx1QkFBdUIsRUFBRWhPLE9BQU87SUFDOUUsTUFBTUQsV0FBV2lPLHdCQUF3QjJFLFdBQVcsSUFDOUMxUyxPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTOUIsaUNBQWlDcUcsV0FBVyxFQUFFeEUsT0FBTztJQUNuRSxNQUFNaUUsUUFBUW5TLHFCQUFxQjBTLGFBQWF4RSxVQUMxQ3VELFFBQVExTixxQkFBcUIyTyxhQUFheEUsVUFDMUN1RixVQUFVdEgsdUJBQXVCdUcsYUFBYXhFLFVBQzlDb0ksYUFBYTdWLDBCQUEwQmlTLGFBQWF4RSxVQUNwRDZFLG9CQUFxQlosU0FBU1YsU0FBU2dDLFdBQVc2QztJQUV4RCxPQUFPdkQ7QUFDVDtBQUVPLFNBQVNwTixpQ0FBaUM2UixlQUFlLEVBQUV0SixPQUFPO0lBQ3ZFLElBQUltRixnQkFBZ0I7SUFFcEIsTUFBTThFLG9CQUFvQlgsZ0JBQWdCcUssb0JBQW9CO0lBRTlELElBQUkxSixzQkFBc0IsTUFBTTtRQUM5QjlFLGdCQUFnQjNOLG1DQUFtQ3lTLG1CQUFtQmpLO0lBQ3hFO0lBRUEsT0FBT21GO0FBQ1Q7QUFFTyxTQUFTdE8saUNBQWlDb1Usb0JBQW9CLEVBQUVqTCxPQUFPO0lBQzVFLE1BQU1tTCxVQUFVRixxQkFBcUJHLFNBQVM7SUFFOUMsT0FBT0Q7QUFDVDtBQUVPLFNBQVNqTyxpQ0FBaUNvWCx3QkFBd0IsRUFBRXRVLE9BQU87SUFDaEYsTUFBTWlCLFdBQVdxVCx5QkFBeUJyRCxXQUFXLElBQy9DN1AsT0FBTzFELGlCQUFpQnVELFVBQVVqQjtJQUV4QyxPQUFPb0I7QUFDVDtBQUVPLFNBQVM3QyxpQ0FBaUMrVix3QkFBd0IsRUFBRXRVLE9BQU87SUFDaEYsTUFBTUUsV0FBV0MsSUFBQUEseUJBQW1CLEtBQzlCRixPQUFPQyxVQUFXLEdBQUc7SUFFM0IsT0FBT0Q7QUFDVDtBQUVPLFNBQVNyQixpQ0FBaUM2UCx3QkFBd0IsRUFBRXpPLE9BQU87SUFDaEYsTUFBTUQsV0FBVzBPLHlCQUF5QmtFLFdBQVcsSUFDL0MxUyxPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTM00sa0NBQWtDc1QsYUFBYSxFQUFFNUcsT0FBTztJQUN0RSxJQUFJcUwsbUJBQW1CO0lBRXZCLE1BQU1KLHVCQUF1QnJFLGNBQWMyTix1QkFBdUI7SUFFbEUsSUFBSXRKLHlCQUF5QixNQUFNO1FBQ2pDSSxtQkFBbUJoWSx5Q0FBeUM0WCxzQkFBc0JqTDtJQUNwRjtJQUVBLE9BQU9xTDtBQUNUO0FBRU8sU0FBUzlPLGtDQUFrQ3VPLG1CQUFtQixFQUFFOUssT0FBTztJQUM1RSxJQUFJUyxhQUFhLEVBQUU7SUFFbkIsTUFBTStULFlBQVkxSixvQkFBb0IySixZQUFZO0lBRWxELElBQUlELGNBQWMsTUFBTTtRQUN0QixNQUFNRSxRQUFRaFYsbUJBQW1COFUsV0FBV3hVO1FBRTVDUyxhQUFhaVUsT0FBTyxHQUFHO0lBQ3pCO0lBRUEsT0FBT2pVO0FBQ1Q7QUFFTyxTQUFTN0osa0NBQWtDc1csc0JBQXNCLEVBQUVsTixPQUFPO0lBQy9FLE1BQU1tTCxVQUFVK0IsdUJBQXVCOUIsU0FBUztJQUVoRCxPQUFPRDtBQUNUO0FBRU8sU0FBU2xPLG1DQUFtQ3FPLG9CQUFvQixFQUFFdEwsT0FBTztJQUM5RSxNQUFNMlUsaUJBQWlCckoscUJBQXFCc0osaUJBQWlCLElBQ3ZEakosYUFBYWpPLGlCQUFpQmlYLGdCQUFnQjNVO0lBRXBELE9BQU8yTDtBQUNUO0FBRU8sU0FBU3ZZLG1DQUFtQzRQLHNCQUFzQixFQUFFaEQsT0FBTztJQUNoRixNQUFNMEcsZ0JBQWdCMUQsdUJBQXVCaVAsZ0JBQWdCLElBQ3ZEaFAsWUFBWS9QLDJCQUEyQndULGVBQWUxRztJQUU1RCxPQUFPaUQ7QUFDVDtBQUVPLFNBQVMxSSxtQ0FBbUN5SSxzQkFBc0IsRUFBRWhELE9BQU87SUFDaEYsSUFBSW1ELFlBQVk7SUFFaEIsTUFBTTJELGdCQUFnQjlELHVCQUF1QjZSLGdCQUFnQjtJQUU3RCxJQUFJL04sa0JBQWtCLE1BQU07UUFDMUIsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBRzFHLGlCQUFRLEVBQ3hCeVUsa0JBQWtCOVUsUUFBUW1CLFlBQVksQ0FBQzJGO1FBRTdDM0QsWUFBWTRELFVBQVVnTyxtQkFBbUIsQ0FBQ0QsaUJBQWlCOVU7SUFDN0Q7SUFFQSxPQUFPbUQ7QUFDVDtBQUVPLFNBQVNqTCxtQ0FBbUMwTyxhQUFhLEVBQUU1RyxPQUFPO0lBQ3ZFLElBQUl1TSxvQkFBb0I7SUFFeEIsTUFBTUosd0JBQXdCdkYsY0FBY29PLHdCQUF3QjtJQUVwRSxJQUFJN0ksMEJBQTBCLE1BQU07UUFDbENJLG9CQUFvQnRVLDJDQUEyQ2tVLHVCQUF1Qm5NO0lBQ3hGO0lBRUEsT0FBT3VNO0FBQ1Q7QUFFTyxTQUFTdFEsbUNBQW1DMkssYUFBYSxFQUFFNUcsT0FBTztJQUN2RSxJQUFJMk0sb0JBQW9CO0lBRXhCLE1BQU1ILHdCQUF3QjVGLGNBQWNxTyx3QkFBd0I7SUFFcEUsSUFBSXpJLDBCQUEwQixNQUFNO1FBQ2xDRyxvQkFBb0J6USwyQ0FBMkNzUSx1QkFBdUJ4TTtJQUN4RjtJQUVBLE9BQU8yTTtBQUNUO0FBRU8sU0FBUzlULG1DQUFtQ2lTLG1CQUFtQixFQUFFOUssT0FBTztJQUM3RSxNQUFNVyxjQUFjbUssb0JBQW9Cb0ssYUFBYTtJQUVyRCxPQUFPdlU7QUFDVDtBQUVPLFNBQVNuQyxtQ0FBbUNzUiwwQkFBMEIsRUFBRTlQLE9BQU87SUFDcEYsTUFBTUQsV0FBVytQLDJCQUEyQjZDLFdBQVcsSUFDakQxUyxPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTbE4sb0NBQW9DNlQsYUFBYSxFQUFFNUcsT0FBTztJQUFHO0lBQzNFLElBQUlvTixxQkFBcUI7SUFFekIsTUFBTUYseUJBQXlCdEcsY0FBY3VPLHlCQUF5QjtJQUV0RSxJQUFJakksMkJBQTJCLE1BQU07UUFDbkNFLHFCQUFxQnRhLDZDQUE2Q29hLHdCQUF3QmxOO0lBQzVGO0lBRUEsT0FBT29OO0FBQ1Q7QUFFTyxTQUFTalQsb0NBQW9DeU0sYUFBYSxFQUFFNUcsT0FBTztJQUN4RSxJQUFJeUIscUJBQXFCO0lBRXpCLE1BQU00TCx5QkFBeUJ6RyxjQUFjbU4seUJBQXlCO0lBRXRFLElBQUkxRywyQkFBMkIsTUFBTTtRQUNuQzVMLHFCQUFxQnZILDZDQUE2Q21ULHdCQUF3QnJOO0lBQzVGO0lBRUEsT0FBT3lCO0FBQ1Q7QUFFTyxTQUFTcE4sb0NBQW9DbVEsV0FBVyxFQUFFeEUsT0FBTztJQUN0RSxJQUFJMk8sdUJBQXVCO0lBRTNCLE1BQU1GLDJCQUEyQmpLLFlBQVk0USwyQkFBMkI7SUFFeEUsSUFBSTNHLDZCQUE2QixNQUFNO1FBQ3JDRSx1QkFBdUJ2YSxpREFBaURxYSwwQkFBMEJ6TztJQUNwRztJQUVBLE9BQU8yTztBQUNUO0FBRU8sU0FBU3JTLG9DQUFvQ3NRLHFCQUFxQixFQUFFNU0sT0FBTztJQUNoRixJQUFJUyxhQUFhLEVBQUU7SUFFbkIsTUFBTStULFlBQVk1SCxzQkFBc0I2SCxZQUFZO0lBRXBELElBQUlELGNBQWMsTUFBTTtRQUN0QixNQUFNRSxRQUFRaFYsbUJBQW1COFUsV0FBV3hVO1FBRTVDUyxhQUFhaVUsT0FBTyxHQUFHO0lBQ3pCO0lBRUEsT0FBT2pVO0FBQ1Q7QUFFTyxTQUFTakYsb0NBQW9DZ1IscUJBQXFCLEVBQUV4TSxPQUFPO0lBQ2hGLE1BQU1xVixpQkFBaUI3SSxzQkFBc0I4SSxpQkFBaUIsSUFDeEQ1SSxhQUFhblIsNkJBQTZCOFosZ0JBQWdCclY7SUFFaEUsT0FBTzBNO0FBQ1Q7QUFFTyxTQUFTelIsb0NBQW9DeVMsc0JBQXNCLEVBQUUxTixPQUFPO0lBQ2pGLE1BQU1vUixpQkFBaUIxRCx1QkFBdUIyRCxnQkFBZ0IsSUFDeEQ5UCxZQUFZcEcsMkJBQTJCaVcsZ0JBQWdCcFI7SUFFN0QsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTMUcsb0NBQW9DcVMsc0JBQXNCLEVBQUVsTixPQUFPO0lBQ2pGLE1BQU00RyxnQkFBZ0JzRyx1QkFBdUJtRSxnQkFBZ0IsSUFDdkQ5UCxZQUFZcEcsMkJBQTJCeUwsZUFBZTVHO0lBRTVELE9BQU91QjtBQUNUO0FBRU8sU0FBU2xILG9DQUFvQ2dULHNCQUFzQixFQUFFck4sT0FBTztJQUNqRixNQUFNLEVBQUUrRyxTQUFTLEVBQUUsR0FBRzFHLGlCQUFRLEVBQ3hCeUcsZ0JBQWdCdUcsdUJBQXVCd0gsZ0JBQWdCLElBQ3ZEQyxrQkFBa0I5VSxRQUFRbUIsWUFBWSxDQUFDMkYsZ0JBQ3ZDM0QsWUFBWTRELFVBQVVnTyxtQkFBbUIsQ0FBQ0QsaUJBQWlCOVU7SUFFakUsT0FBT21EO0FBQ1Q7QUFFTyxTQUFTN0osb0NBQW9DK1Qsc0JBQXNCLEVBQUVyTixPQUFPO0lBQ2pGLE1BQU04SixtQkFBbUJ1RCx1QkFBdUI4RCxtQkFBbUIsSUFDN0QzUCxZQUFZcEksOEJBQThCMFEsa0JBQWtCOUo7SUFFbEUsT0FBT3dCO0FBQ1Q7QUFFTyxTQUFTMU0sb0NBQW9Da08sc0JBQXNCLEVBQUVoRCxPQUFPO0lBQ2pGLE1BQU1vRCxhQUFhLEVBQUU7SUFFckIsT0FBT0E7QUFDVDtBQUVPLFNBQVM5SyxvQ0FBb0N1Vix1QkFBdUIsRUFBRTdOLE9BQU87SUFDbEYsSUFBSXlGLFdBQVc7SUFFZixNQUFNRCxlQUFlcUksd0JBQXdCMEgsZUFBZTtJQUU1RCxJQUFJL1AsaUJBQWlCLE1BQU07UUFDekJDLFdBQVdsTix5QkFBeUJpTixjQUFjeEY7SUFDcEQ7SUFFQSxPQUFPeUY7QUFDVDtBQUVPLFNBQVM1RixvQ0FBb0NtTyx1QkFBdUIsRUFBRWhPLE9BQU87SUFDbEYsTUFBTTJGLGVBQWVxSSx3QkFBd0I0QyxlQUFlLElBQ3REOUssV0FBV2hHLHlCQUF5QjZGLGNBQWMzRjtJQUV4RCxPQUFPOEY7QUFDVDtBQUVPLFNBQVM5SixxQ0FBcUNtUSxxQkFBcUIsRUFBRW5NLE9BQU87SUFDakYsTUFBTXdWLGtCQUFrQnJKLHNCQUFzQnNKLGtCQUFrQixJQUMxRHBKLGNBQWMzTyxpQkFBaUI4WCxpQkFBaUJ4VjtJQUV0RCxPQUFPcU07QUFDVDtBQUVPLFNBQVN2UCxxQ0FBcUNnUCxxQkFBcUIsRUFBRTlMLE9BQU87SUFDakYsTUFBTTBWLGtCQUFrQjVKLHNCQUFzQjZKLGtCQUFrQixJQUMxRDNKLGNBQWNqWSxtQkFBbUIyaEIsaUJBQWlCMVY7SUFFeEQsT0FBT2dNO0FBQ1Q7QUFFTyxTQUFTdFQscUNBQXFDa1UscUJBQXFCLEVBQUU1TSxPQUFPO0lBQ2pGLE1BQU1XLGNBQWNpTSxzQkFBc0JzSSxhQUFhO0lBRXZELE9BQU92VTtBQUNUO0FBRU8sU0FBU2xHLHFDQUFxQzBULHVCQUF1QixFQUFFbk8sT0FBTztJQUNuRixNQUFNNEcsZ0JBQWdCdUgsd0JBQXdCa0QsZ0JBQWdCLElBQ3hEOVAsWUFBWXBHLDJCQUEyQnlMLGVBQWU1RztJQUU1RCxPQUFPdUI7QUFDVDtBQUVPLFNBQVM1TyxzQ0FBc0M2UixXQUFXLEVBQUV4RSxPQUFPO0lBQ3hFLElBQUlnUSx5QkFBeUI7SUFFN0IsTUFBTUYsNkJBQTZCdEwsWUFBWW9SLDZCQUE2QjtJQUU1RSxJQUFJOUYsK0JBQStCLE1BQU07UUFDdkNFLHlCQUF5QnRkLHFEQUFxRG9kLDRCQUE0QjlQO0lBQzVHO0lBRUEsT0FBT2dRO0FBQ1Q7QUFFTyxTQUFTeFgsc0NBQXNDMlQscUJBQXFCLEVBQUVuTSxPQUFPO0lBQ2xGLE1BQU02VixtQkFBbUIxSixzQkFBc0IySixtQkFBbUIsSUFDNUR4SixlQUFlNU8saUJBQWlCbVksa0JBQWtCN1Y7SUFFeEQsT0FBT3NNO0FBQ1Q7QUFFTyxTQUFTelAsc0NBQXNDbUcsc0JBQXNCLEVBQUVoRCxPQUFPO0lBQ25GLE1BQU1nVCxtQkFBbUJoUSx1QkFBdUJpUSxtQkFBbUIsSUFDN0QvUCxlQUFldEcsaUNBQWlDb1csa0JBQWtCaFQ7SUFFeEUsT0FBT2tEO0FBQ1Q7QUFFTyxTQUFTNU8sc0NBQXNDbWEsd0JBQXdCLEVBQUV6TyxPQUFPO0lBQ3JGLE1BQU15SCxnQkFBZ0JnSCx5QkFBeUJzSCxnQkFBZ0IsSUFDekRwTyxZQUFZcFQsMkJBQTJCa1QsZUFBZXpIO0lBRTVELE9BQU8ySDtBQUNUO0FBRU8sU0FBUzlOLHNDQUFzQzBWLHlCQUF5QixFQUFFdlAsT0FBTztJQUN0RixNQUFNeVAsV0FBV0YsMEJBQTBCeUcsVUFBVTtJQUVyRCxPQUFPdkc7QUFDVDtBQUVPLFNBQVMxVyx1Q0FBdUNpVix1QkFBdUIsRUFBRWhPLE9BQU87SUFDckYsTUFBTVcsY0FBY3FOLHdCQUF3QmtILGFBQWE7SUFFekQsT0FBT3ZVO0FBQ1Q7QUFFTyxTQUFTak0sdUNBQXVDNFosd0JBQXdCLEVBQUV0TyxPQUFPO0lBQ3RGLE1BQU1vRCxhQUFhLEVBQUU7SUFFckIsT0FBT0E7QUFDVDtBQUVPLFNBQVMxTCx3Q0FBd0N1UyxpQkFBaUIsRUFBRWpLLE9BQU87SUFDaEYsTUFBTXVOLHlCQUF5QnRELGtCQUFrQmdNLHlCQUF5QixJQUNwRTdMLHFCQUFxQnpTLDZDQUE2QzRWLHdCQUF3QnZOO0lBRWhHLE9BQU9vSztBQUNUO0FBRU8sU0FBU3hRLHdDQUF3QzBSLG9CQUFvQixFQUFFdEwsT0FBTztJQUNuRixNQUFNa1csc0JBQXNCNUsscUJBQXFCNkssc0JBQXNCLElBQ2pFdkssa0JBQWtCbE8saUJBQWlCd1kscUJBQXFCbFc7SUFFOUQsT0FBTzRMO0FBQ1Q7QUFFTyxTQUFTalQsd0NBQXdDOFYsd0JBQXdCLEVBQUV6TyxPQUFPO0lBQ3ZGLE1BQU1XLGNBQWM4Tix5QkFBeUJ5RyxhQUFhO0lBRTFELE9BQU92VTtBQUNUO0FBRU8sU0FBU25CLHdDQUF3Q29QLHlCQUF5QixFQUFFNU8sT0FBTztJQUN4RixNQUFNNkksaUJBQWlCK0YsMEJBQTBCd0gsaUJBQWlCLElBQzVEck4sYUFBYXRKLDZCQUE2Qm9KLGdCQUFnQjdJO0lBRWhFLE9BQU8rSTtBQUNUO0FBRU8sU0FBUzdXLHdDQUF3QzZjLHlCQUF5QixFQUFFL08sT0FBTztJQUN4RixNQUFNcUksaUJBQWlCMEcsMEJBQTBCc0gsaUJBQWlCLElBQzVEOU4sYUFBYXBXLDZCQUE2QmtXLGdCQUFnQnJJO0lBRWhFLE9BQU91STtBQUNUO0FBRU8sU0FBU3pTLHdDQUF3Q21hLDJCQUEyQixFQUFFalEsT0FBTztJQUMxRixNQUFNc1csZUFBZXJHLDRCQUE0QnNHLGVBQWUsSUFDMUR2TSxXQUFXaEssUUFBUXdXLDBCQUEwQixDQUFDRjtJQUVwRCxPQUFPdE07QUFDVDtBQUVPLFNBQVN2USwwQ0FBMENxUyxxQkFBcUIsRUFBRTlMLE9BQU87SUFDdEYsTUFBTXlXLHVCQUF1QjNLLHNCQUFzQjRLLHVCQUF1QixJQUNwRXpLLG1CQUFtQmxZLG1CQUFtQjBpQixzQkFBc0J6VztJQUVsRSxPQUFPaU07QUFDVDtBQUVPLFNBQVM1UCwwQ0FBMENrVCx5QkFBeUIsRUFBRWhFLGNBQWMsRUFBRUMsZUFBZTtJQUNsSCxNQUFNVSxvQkFBb0IvWCwrQ0FBK0NvYiwyQkFBMkJoRSxnQkFBZ0JDLGtCQUM5R0ssbUJBQW1Cak8sOENBQThDMlIsMkJBQTJCaEUsZ0JBQWdCQyxrQkFDNUdrRSxlQUFnQnhELHFCQUFxQkw7SUFFM0MsT0FBTzZEO0FBQ1Q7QUFFTyxTQUFTOWMsMENBQTBDa2QsMEJBQTBCLEVBQUU5UCxPQUFPO0lBQzNGLE1BQU1tSixrQkFBa0IyRywyQkFBMkI2RyxrQkFBa0IsSUFDL0R0TixjQUFjeFcsK0JBQStCc1csaUJBQWlCbko7SUFFcEUsT0FBT3FKO0FBQ1Q7QUFFTyxTQUFTNVEsMENBQTBDcVgsMEJBQTBCLEVBQUU5UCxPQUFPO0lBQzNGLE1BQU1XLGNBQWNtUCwyQkFBMkJvRixhQUFhO0lBRTVELE9BQU92VTtBQUNUO0FBRU8sU0FBU3pLLDRDQUE0QytaLDJCQUEyQixFQUFFalEsT0FBTztJQUM5RixNQUFNOEosbUJBQW1CbUcsNEJBQTRCa0IsbUJBQW1CLElBQ2xFMU8sZUFBZXRNLGlDQUFpQzJULGtCQUFrQjlKO0lBRXhFLE9BQU95QztBQUNUO0FBRU8sU0FBUzFGLDZDQUE2Q21TLHlCQUF5QixFQUFFbFAsT0FBTztJQUM3RixNQUFNLEVBQUVrSCxTQUFTLEVBQUUsR0FBRzdHLGlCQUFRLEVBQ3hCdVcsc0JBQXNCMUgsMEJBQTBCMkgsc0JBQXNCLElBQ3RFQyx3QkFBd0I5VyxRQUFRbUIsWUFBWSxDQUFDeVYsc0JBQzdDeEgsa0JBQWtCbEksVUFBVXNLLG1CQUFtQixDQUFDc0YsdUJBQXVCOVc7SUFFN0UsT0FBT29QO0FBQ1Q7QUFFTyxTQUFTcFMsNkNBQTZDdVMseUJBQXlCLEVBQUV2UCxPQUFPO0lBQzdGLE1BQU0rVyxzQkFBc0J4SCwwQkFBMEJ5SCxzQkFBc0IsSUFDdEVySCxrQkFBa0J4VSwyQkFBMkI0YixxQkFBcUIvVztJQUV4RSxPQUFPMlA7QUFDVDtBQUVPLFNBQVN2WCw4Q0FBOEN3VSxxQkFBcUIsRUFBRTVNLE9BQU87SUFDMUYsTUFBTWlYLDRCQUE0QnJLLHNCQUFzQnNLLDJCQUEyQixJQUM3RXBLLHVCQUF1QnpVLGlEQUFpRDRlLDJCQUEyQmpYO0lBRXpHLE9BQU84TTtBQUNUO0FBRU8sU0FBU2xQLDhDQUE4QzJSLHlCQUF5QixFQUFFaEUsY0FBYyxFQUFFQyxlQUFlO0lBQ3RILElBQUlLLG1CQUFtQjtJQUV2QixNQUFNUCx1QkFBdUJpRSwwQkFBMEI0SCx1QkFBdUI7SUFFOUUsSUFBSTdMLHlCQUF5QixNQUFNO1FBQ2pDTyxtQkFBbUJoTyx5Q0FBeUN5TixzQkFBc0JDLGdCQUFnQkM7SUFDcEc7SUFFQSxPQUFPSztBQUNUO0FBRU8sU0FBUzFYLCtDQUErQ29iLHlCQUF5QixFQUFFaEUsY0FBYyxFQUFFQyxlQUFlO0lBQ3ZILElBQUlVLG9CQUFvQjtJQUV4QixNQUFNSix3QkFBd0J5RCwwQkFBMEI2SCx3QkFBd0I7SUFFaEYsSUFBSXRMLDBCQUEwQixNQUFNO1FBQ2xDSSxvQkFBb0JoWSwyQ0FBMkM0WCx1QkFBdUJQLGdCQUFnQkM7SUFDeEc7SUFFQSxPQUFPVTtBQUNUO0FBRU8sU0FBU3hTLGtEQUFrRHdWLHlCQUF5QixFQUFFbFAsT0FBTztJQUNsRyxNQUFNLEVBQUVrSCxTQUFTLEVBQUUsR0FBRzdHLGlCQUFRLEVBQ3hCZ1gsMkJBQTJCbkksMEJBQTBCb0ksMkJBQTJCLElBQ2hGQyw2QkFBNkJ2WCxRQUFRbUIsWUFBWSxDQUFDa1csMkJBQ2xEaEksdUJBQXVCbkksVUFBVXNLLG1CQUFtQixDQUFDK0YsNEJBQTRCdlg7SUFFdkYsT0FBT3FQO0FBQ1Q7QUFFTyxTQUFTMVYsa0RBQWtENFYseUJBQXlCLEVBQUV2UCxPQUFPO0lBQ2xHLE1BQU13WCwyQkFBMkJqSSwwQkFBMEJrSSwyQkFBMkIsSUFDaEY3SCx1QkFBdUJ6VSwyQkFBMkJxYywwQkFBMEJ4WDtJQUVsRixPQUFPNFA7QUFDVDtBQUVPLFNBQVM1UixtQkFBbUIrVCxTQUFTLEVBQUUvUixPQUFPO0lBQ25ELE1BQU1nSCxRQUFRK0ssVUFBVTJGLEdBQUcsQ0FBQyxDQUFDelc7UUFDM0IsTUFBTUcsT0FBTzFELGlCQUFpQnVELFVBQVVqQjtRQUV4QyxPQUFPb0I7SUFDVDtJQUVBLE9BQU80RjtBQUNUO0FBRU8sU0FBU3RILG1CQUFtQjhVLFNBQVMsRUFBRXhVLE9BQU87SUFDbkQsTUFBTTJYLFlBQVluRCxVQUFVb0QsWUFBWSxJQUNsQ2xELFFBQVFpRCxVQUFVRCxHQUFHLENBQUMsQ0FBQzNYO1FBQ3JCLE1BQU1FLE9BQU9iLGlCQUFpQlcsVUFBVUM7UUFFeEMsT0FBT0M7SUFDVDtJQUVOLE9BQU95VTtBQUNUO0FBRU8sU0FBU2xmLHFCQUFxQithLFVBQVUsRUFBRXZRLE9BQU87SUFDdEQsTUFBTThCLFNBQVN5TyxXQUFXbUgsR0FBRyxDQUFDLENBQUNuVjtRQUM3QixNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHbkMsaUJBQVEsRUFDcEJxUSxjQUFjMVEsUUFBUW1CLFlBQVksQ0FBQ29CLFlBQ25DRyxRQUFRRixNQUFNbU8sZUFBZSxDQUFDRCxhQUFhMVE7UUFFakQsT0FBTzBDO0lBQ1Q7SUFFQSxPQUFPWjtBQUNUO0FBRU8sU0FBUzFLLHlCQUF5QnlaLFlBQVksRUFBRTdRLE9BQU87SUFDNUQsTUFBTStCLFdBQVc4TyxhQUFhNkcsR0FBRyxDQUFDLENBQUN6UztRQUNqQyxNQUFNRyxVQUFVak8sdUJBQXVCOE4sYUFBYWpGO1FBRXBELE9BQU9vRjtJQUNUO0lBRUEsT0FBT3JEO0FBQ1Q7QUFFTyxTQUFTeEcsNkJBQTZCOFosY0FBYyxFQUFFclYsT0FBTztJQUNsRSxNQUFNME0sYUFBYTJJLGVBQWVxQyxHQUFHLENBQUMsQ0FBQzlRO1FBQ3JDLE1BQU1yRixZQUFZcEcsMkJBQTJCeUwsZUFBZTVHO1FBRTVELE9BQU91QjtJQUNUO0lBRUEsT0FBT21MO0FBQ1Q7QUFFTyxTQUFTMVYsNkJBQTZCb2QsY0FBYyxFQUFFcFUsT0FBTztJQUNsRSxNQUFNbUssYUFBYWlLLGVBQWVzRCxHQUFHLENBQUMsQ0FBQ3BRO1FBQ3JDLE1BQU1FLFlBQVl6USwyQkFBMkJ1USxlQUFldEg7UUFFNUQsT0FBT3dIO0lBQ1Q7SUFFQSxPQUFPMkM7QUFDVDtBQUVPLFNBQVN0Viw4QkFBOEI2UCxlQUFlLEVBQUUxRSxPQUFPO0lBQ3BFLE1BQU1vRCxhQUFhc0IsZ0JBQWdCZ1QsR0FBRyxDQUFDLENBQUM5UDtRQUN0QyxNQUFNaVEsYUFBYTlpQiw2QkFBNkI2UyxlQUFlNUg7UUFFL0QsT0FBTzZYO0lBQ1Q7SUFFQSxPQUFPelU7QUFDVDtBQUVPLFNBQVN6UiwrQkFBK0J5Z0IsZUFBZSxFQUFFcFMsT0FBTztJQUNyRSxNQUFNMEQsY0FBYzBPLGdCQUFnQnNGLEdBQUcsQ0FBQyxDQUFDMU87UUFDdkMsTUFBTUUsYUFBYXhYLDZCQUE2QnNYLGdCQUFnQmhKO1FBRWhFLE9BQU9rSjtJQUNUO0lBRUEsT0FBT3hGO0FBQ1Q7QUFFTyxTQUFTOUcsaUNBQWlDb1csZ0JBQWdCLEVBQUVoVCxPQUFPO0lBQ3hFLE1BQU1rRCxlQUFlOFAsaUJBQWlCMEUsR0FBRyxDQUFDLENBQUNwTztRQUN6QyxNQUFNRSxjQUFjL00sK0JBQStCNk0saUJBQWlCdEo7UUFFcEUsT0FBT3dKO0lBQ1Q7SUFFQSxPQUFPdEc7QUFDVDtBQUVPLFNBQVN0SCxtQ0FBbUM4TSxjQUFjLEVBQUUxSSxPQUFPO0lBQ3hFLE1BQU04WCxzQkFBc0JwUCxlQUFlcVAsc0JBQXNCLElBQzNEblAsbUJBQW1Ca1Asb0JBQW9CSixHQUFHLENBQUMsQ0FBQzlNO1FBQzFDLE1BQU1DLGlCQUFpQmxQLHFDQUFxQ2lQLG9CQUFvQjVLO1FBRWhGLE9BQU82SztJQUNUO0lBRU4sT0FBT2pDO0FBQ1Q7QUFFTyxTQUFTL00sc0NBQXNDME8saUJBQWlCLEVBQUV2SyxPQUFPO0lBQzlFLE1BQU04WCxzQkFBc0J2TixrQkFBa0J3TixzQkFBc0IsSUFDOURuUCxtQkFBbUJrUCxvQkFBb0JKLEdBQUcsQ0FBQyxDQUFDOU07UUFDMUMsTUFBTUMsaUJBQWlCbFAscUNBQXFDaVAsb0JBQW9CNUs7UUFFaEYsT0FBTzZLO0lBQ1Q7SUFFTixPQUFPakM7QUFDVDtBQUVPLFNBQVN2USxpREFBaUQ0ZSx5QkFBeUIsRUFBRWpYLE9BQU87SUFDakcsTUFBTWdZLHNCQUFzQmYsMEJBQTBCUyxHQUFHLENBQUMsQ0FBQzdKO1FBQ3pELE1BQU1vSyx1QkFBdUI5ZiwrQ0FBK0MwVix5QkFBeUI3TjtRQUVyRyxPQUFPaVk7SUFDVDtJQUVBLE9BQU9EO0FBQ1QifQ==
|
|
1951
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzLFxuICAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCxcbiAgICAgICAgIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kVG9wTGV2ZWxBc3NlcnRpb24sXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2lnbmF0dXJlQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICAgICAgbm9kZSA9IHJ1bGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gIHJldHVybiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ29hbEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEdvYWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ29hbE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBnb2FsID0gbmV3IEdvYWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGxlbW1hTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTY2hlbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gc2NoZW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNjaGVtYVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzY2hlbWEgPSBuZXcgU2NoZW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgY29uc3RyYWludHMpO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2VjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgdG9wTGV2ZWxBc3NlcnRpb24pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgZGVjbGFyYXRpb24sIHRvcExldmVsQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtID0gbmV3IFRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBpZiAocHJvcGVydHlOb2RlICE9IG51bGwpIHtcbiAgICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gcHJvcGVydHlOb2RlLCAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlKTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBpZGVudGlmaWVyLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mTm9kZSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbiwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2YgPSBuZXcgU3VicHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pO1xuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBnb2FsID0gZ29hbEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgZ29hbCk7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gaHlwb2h0ZXNpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25zdHJhaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZzsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1aXZhbGVuY2UgPSBuZXcgRXF1aXZhbGVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCB0ZXJtLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycyksXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uID0gbmV3IFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRGcmFtZSwgcmVwbGFjZW1lbnRGcmFtZSk7XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1YmplY3RUZXJtID0gc3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YmplY3RUZXJtLCBwcm9wZXJ0eVRlcm0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cyk7XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvdHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZyA9IGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpLFxuICAgICAgICBzdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvdHlwZURlY2xhcmF0aW9uID0gbmV3IENvdHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwsIHByb3BlcnR5RGVjbGFyYXRpb25zKTtcblxuICByZXR1cm4gY290eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlZW5jZSA9IG5ldyBQcm9jZWR1cmVSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBJbXBsaWNpdEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBuZXcgSW1wbGljaXRBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb24gPSBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gbmV3IEJyYWNrZXRlZENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbmV3IEdlbmVyYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGdlbmVyYXRvcik7XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVzb2x2ZWQsIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IHNjaGVtYU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBzY2hlbWFOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZU5vZGVzID0gcnVsZU5vZGUuZ2V0UHJlbWlzZU5vZGVzKCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZ29hbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gZ29hbE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdvYWxOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRHb2FsTm9kZSgpLFxuICAgICAgICBnb2FsID0gZ29hbEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGdlbmVyYXRvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBzY2hlbWFOb2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YW1ldGF2YXJpYWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcblxuICByZXR1cm4gY29uc3RyYWludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc2NoZW1hTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIHx8IGdlbmVyYXRvckRlY2xhcmF0aW9uKTtcblxuICByZXR1cm4gZGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlTm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uc3RyYWludE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24sIFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IEZyYW1lU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gKGZyYW1lU3Vic3RpdHV0aW9uIHx8IHRlcm1TdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBtZXRhdmFyaWFibGVTdHJpbmcsIC8vL1xuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXhpb20gPSBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbW1hID0gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSAoYXhpb20gfHwgbGVtbWEgfHwgdGhlb3JlbSB8fCBjb25qZWN0dXJlKTtcblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhzaWduYXR1cmVOb2RlKTtcblxuICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tU2lnbmF0dXJlU3RyaW5nKHNpZ25hdHVyZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkgezBcbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZ2VuZXJhdG9yRGVjbGFyYXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSgpO1xuXG4gIGlmIChnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVzbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBzaWduYXR1cmVOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHNpZ25hdHVyZU5vZGUpLFxuICAgICAgICBzaWduYXR1cmUgPSBTaWduYXR1cmUuZnJvbVNpZ25hdHVyZVN0cmluZyhzaWduYXR1cmVTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5VGVybU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gdGVybUZyb21UZXJtTm9kZShwcm9wZXJ0eVRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdlbmVyYXRvck5vZGUgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0R2VuZXJhdG9yTm9kZSgpLFxuICAgICAgICBnZW5lcmF0b3IgPSBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZ2VuZXJhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vLy8vXG4gICAgICAgIHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHRhcmdldFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyh0YXJnZXRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlEZWNsY2FyYXRpb24gPSBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlY2xjYXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbHJhdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21TY2hlbWFOb2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlIiwiZ29hbEZyb21Hb2FsTm9kZSIsImdvYWxGcm9tSnVkZ2VtZW50Tm9kZSIsImh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyIsImh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21TY2hlbWFOb2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4TmFtZUZyb21UeXBlTm9kZSIsInByZW1pc2VGcm9tUHJlbWlzZU5vZGUiLCJwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMiLCJwcmVtaXNlc0Zyb21SdWxlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVNjaGVtYU5vZGUiLCJwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUiLCJyZWZlcmVuY2VGcm9tR29hbE5vZGUiLCJyZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJyZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJzY2hlbWFGcm9tU2NoZW1hTm9kZSIsInNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbUdvYWxOb2RlIiwic3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlIiwic3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVOb2RlIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tR2VuZXJhdG9yTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVOb2RlIiwidGVybXNGcm9tVGVybU5vZGVzIiwidGhlb3JlbUZyb21TZWN0aW9uTm9kZSIsInRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUiLCJ0b3BMZXZlbEFzc2VydGlvbkZyb21TZWN0aW9uTm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21HZW5lcmF0b3JOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImdvYWxOb2RlIiwiR29hbCIsImdvYWwiLCJsYWJlbE5vZGUiLCJMYWJlbCIsIm1ldGF2YXJpYWJsZSIsImxhYmVsIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImxlbW1hTm9kZSIsIkxlbW1hIiwidG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJ0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJsZW1tYSIsImZyYW1lTm9kZSIsIkZyYW1lIiwiYXNzdW1wdGlvbnMiLCJmcmFtZSIsInByb29mTm9kZSIsIlByb29mIiwiZGVyaXZhdGlvbiIsImF4aW9tTm9kZSIsIkF4aW9tIiwiYXhpb20iLCJzY2hlbWFOb2RlIiwiU2NoZW1hIiwiY29uc3RyYWludHMiLCJzY2hlbWFTdHJpbmciLCJzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJzY2hlbWEiLCJzZWN0aW9uTm9kZSIsIlNlY3Rpb24iLCJoeXBvdGhlc2lzTm9kZXMiLCJnZXRIeXBvdGhlc2lzTm9kZXMiLCJkZWNsYXJhdGlvbiIsInRvcExldmVsQXNzZXJ0aW9uIiwic2VjdGlvblN0cmluZyIsInNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwicHJlbWlzZU5vZGUiLCJQcmVtaXNlIiwicHJvY2VkdXJlQ2FsbCIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsInN1YnN0aXR1dGlvbiIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJqdWRnZW1lbnROb2RlIiwiSnVkZ2VtZW50IiwianVkZ2VtZW50IiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsImdlbmVyYXRvck5vZGUiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJoeXBvdGhlc2VOb2RlIiwiSHlwb3RoZXNpcyIsImh5cG9odGVzaXMiLCJjb25zdHJhaW50Tm9kZSIsIkNvbnN0cmFpbnQiLCJjb25zdHJhaW50IiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImNvbWJpbmF0b3JOb2RlIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb25jbHVzaW9uTm9kZSIsIkNvbmNsdXNpb24iLCJkZXJpdmF0aW9uTm9kZSIsIkRlcml2YXRpb24iLCJzdGVwc09yU3VicHJvb2ZzIiwidHlwZVByZWZpeE5vZGUiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXZhcmlhYmxlTm9kZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGFUeXBlIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwicGFyYW1ldGVycyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZURlY2xhcmF0aW9uIiwidHlwZURlY2xhcmF0aW9uIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiVGVybVN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsInRhcmdldEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZSIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJzdWJqZWN0VGVybSIsInByb3BlcnR5VGVybSIsInByb3BlcnR5QXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRzIiwic3VicHJvb2ZBc3NlcnRpb24iLCJjb3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJDb3R5cGVEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb25zIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmciLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIiwiY290eXBlRGVjbGFyYXRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsIlNpZ25hdHVyZUFzc2VydGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVlbmNlIiwiaW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsIkltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiUHJvcGVydHlEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwiYnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsIkJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJHZW5lcmF0b3JEZWNsYXJhdGlvbiIsImdlbmVyYXRvckRlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlIiwibGFiZWxTdHJpbmciLCJmcm9tTGFiZWxTdHJpbmciLCJnZXRWYXJpYWJsZU5vZGUiLCJwcmVtaXNlTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBeGlvbU5vZGUiLCJnZXRMZW1tYU5vZGUiLCJnZXRUZXJtTm9kZSIsImdldE5hbWUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVzbWVudE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZVN0cmluZyIsImZyb21SZWZlcmVuY2VTdHJpbmciLCJnZXRHb2FsTm9kZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwiZ2V0RGVkdWN0aW9uTm9kZSIsImdldERlcml2YXRpb25Ob2RlIiwib2Nuc3RydWN0b3JOb2RlIiwiYXNzdW1wdGlvbk5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibWV0YW1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidHlwZW1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRDb25qZWN0dXJlTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZ2V0RXF1YWxpdHlOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRJZGVudGlmaWVyIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsInN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlIiwiaXNTdGVwTm9kZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsImZyb21TdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwidGFyZ2V0VGVybU5vZGUiLCJnZXRUYXJnZXRUZXJtTm9kZSIsImdldFNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVTdHJpbmciLCJmcm9tU2lnbmF0dXJlU3RyaW5nIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiaXNQcm92aXNpb25hbCIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRHZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwiZ2V0UHJvcGVydHlOb2RlIiwic3ViamVjdFRlcm1Ob2RlIiwiZ2V0U3ViamVjdFRlcm1Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiZ2V0Q29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlUZXJtTm9kZSIsImdldEdlbmVyYXRvck5vZGUiLCJpc1Jlc29sdmVkIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRSZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldENvbnN0cnVjdG9yTm9kZSIsInRhcmdldFJlZmVyZW5jZU5vZGUiLCJnZXRUYXJnZXRSZWZlcmVuY2VOb2RlIiwidGFyZ2V0UmVmZXJlbmNlU3RyaW5nIiwidGFyZ2V0U3RhdGVtZW50Tm9kZSIsImdldFRhcmdldFN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzIiwiZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwiZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmciLCJyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9kZXMiLCJwcm9wZXJ0eURlY2xyYXRpb25zIiwicHJvcGVydHlEZWNsY2FyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThnQmdCQTtlQUFBQTs7UUEweURBQztlQUFBQTs7UUF0akNBQztlQUFBQTs7UUFobENBQztlQUFBQTs7UUErMkJBQztlQUFBQTs7UUF6TUFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUEyQ0FDO2VBQUFBOztRQTR3Q0FDO2VBQUFBOztRQWpzREFDO2VBQUFBOztRQWNBQztlQUFBQTs7UUFzc0JBQztlQUFBQTs7UUF6dUJBQztlQUFBQTs7UUF1NUJBQztlQUFBQTs7UUFuNkJBQztlQUFBQTs7UUE2NUJBQztlQUFBQTs7UUF0WkFDO2VBQUFBOztRQTRvQ0FDO2VBQUFBOztRQXFHQUM7ZUFBQUE7O1FBbnBEQUM7ZUFBQUE7O1FBbU9BQztlQUFBQTs7UUErckNBQztlQUFBQTs7UUFqdENBQztlQUFBQTs7UUFpcUJBQztlQUFBQTs7UUFua0NBQztlQUFBQTs7UUF5NEJBQztlQUFBQTs7UUErcUJBQztlQUFBQTs7UUFydUNBQztlQUFBQTs7UUE2ckNBQztlQUFBQTs7UUExMkNBQztlQUFBQTs7UUFzdkJBQztlQUFBQTs7UUEzNkJBQztlQUFBQTs7UUFpakNBQztlQUFBQTs7UUFyekJBQztlQUFBQTs7UUF0Y0FDO2VBQUFBOztRQXVwREFDO2VBQUFBOztRQXRIQUM7ZUFBQUE7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
|