occam-verify-cli 1.0.935 → 1.0.936

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.
Files changed (121) hide show
  1. package/lib/action/verify.js +2 -2
  2. package/lib/element/assertion/contained.js +5 -5
  3. package/lib/element/assertion/defined.js +5 -5
  4. package/lib/element/assertion/property.js +5 -5
  5. package/lib/element/assertion/signature.js +5 -5
  6. package/lib/element/assertion/subproof.js +5 -5
  7. package/lib/element/assertion/type.js +7 -7
  8. package/lib/element/assertion.js +3 -3
  9. package/lib/element/assumption/metaLevel.js +7 -7
  10. package/lib/element/assumption.js +6 -6
  11. package/lib/element/combinator.js +7 -7
  12. package/lib/element/conclusion.js +7 -7
  13. package/lib/element/constructor.js +7 -7
  14. package/lib/element/declaration/combinator.js +3 -3
  15. package/lib/element/declaration/complexType.js +3 -3
  16. package/lib/element/declaration/constructor.js +3 -3
  17. package/lib/element/declaration/metavariable.js +3 -3
  18. package/lib/element/declaration/property.js +3 -3
  19. package/lib/element/declaration/simpleType.js +3 -3
  20. package/lib/element/declaration/typePrefix.js +3 -3
  21. package/lib/element/declaration/variable.js +3 -3
  22. package/lib/element/deduction.js +7 -7
  23. package/lib/element/derivation.js +3 -3
  24. package/lib/element/equality.js +7 -7
  25. package/lib/element/equivalence.js +3 -3
  26. package/lib/element/frame.js +7 -7
  27. package/lib/element/hypothesis.js +7 -7
  28. package/lib/element/judgement.js +7 -7
  29. package/lib/element/label.js +7 -7
  30. package/lib/element/metaType.js +6 -6
  31. package/lib/element/metavariable.js +6 -6
  32. package/lib/element/parameter.js +7 -7
  33. package/lib/element/procedureCall.js +7 -7
  34. package/lib/element/procedureReference.js +7 -7
  35. package/lib/element/proof.js +3 -3
  36. package/lib/element/proofAssertion/premise.js +7 -7
  37. package/lib/element/proofAssertion/step.js +3 -3
  38. package/lib/element/proofAssertion/supposition.js +7 -7
  39. package/lib/element/proofAssertion.js +3 -3
  40. package/lib/element/property.js +7 -7
  41. package/lib/element/propertyRelation.js +7 -7
  42. package/lib/element/reference.js +7 -7
  43. package/lib/element/rule.js +6 -6
  44. package/lib/element/section.js +3 -3
  45. package/lib/element/signature.js +7 -7
  46. package/lib/element/statement.js +5 -5
  47. package/lib/element/subDerivation.js +3 -3
  48. package/lib/element/subproof.js +3 -3
  49. package/lib/element/substitution/frame.js +5 -5
  50. package/lib/element/substitution/reference.js +5 -5
  51. package/lib/element/substitution/statement.js +5 -5
  52. package/lib/element/substitution/term.js +5 -5
  53. package/lib/element/substitution.js +10 -10
  54. package/lib/element/term.js +7 -7
  55. package/lib/element/topLevelAssertion.js +6 -6
  56. package/lib/element/topLevelMetaAssertion.js +6 -6
  57. package/lib/element/type.js +9 -9
  58. package/lib/element/typePrefix.js +7 -7
  59. package/lib/element/variable.js +7 -7
  60. package/lib/utilities/element.js +109 -109
  61. package/package.json +2 -2
  62. package/src/action/verify.js +1 -1
  63. package/src/element/assertion/contained.js +4 -4
  64. package/src/element/assertion/defined.js +4 -4
  65. package/src/element/assertion/property.js +4 -4
  66. package/src/element/assertion/signature.js +4 -4
  67. package/src/element/assertion/subproof.js +4 -4
  68. package/src/element/assertion/type.js +6 -6
  69. package/src/element/assertion.js +2 -2
  70. package/src/element/assumption/metaLevel.js +6 -6
  71. package/src/element/assumption.js +6 -6
  72. package/src/element/combinator.js +6 -6
  73. package/src/element/conclusion.js +6 -6
  74. package/src/element/constructor.js +6 -6
  75. package/src/element/declaration/combinator.js +2 -2
  76. package/src/element/declaration/complexType.js +2 -2
  77. package/src/element/declaration/constructor.js +2 -2
  78. package/src/element/declaration/metavariable.js +2 -2
  79. package/src/element/declaration/property.js +2 -2
  80. package/src/element/declaration/simpleType.js +2 -2
  81. package/src/element/declaration/typePrefix.js +2 -2
  82. package/src/element/declaration/variable.js +2 -2
  83. package/src/element/deduction.js +6 -6
  84. package/src/element/derivation.js +2 -2
  85. package/src/element/equality.js +6 -6
  86. package/src/element/equivalence.js +2 -2
  87. package/src/element/frame.js +6 -6
  88. package/src/element/hypothesis.js +6 -6
  89. package/src/element/judgement.js +6 -6
  90. package/src/element/label.js +6 -6
  91. package/src/element/metaType.js +6 -6
  92. package/src/element/metavariable.js +6 -6
  93. package/src/element/parameter.js +6 -6
  94. package/src/element/procedureCall.js +6 -6
  95. package/src/element/procedureReference.js +6 -6
  96. package/src/element/proof.js +2 -2
  97. package/src/element/proofAssertion/premise.js +6 -6
  98. package/src/element/proofAssertion/step.js +2 -2
  99. package/src/element/proofAssertion/supposition.js +6 -6
  100. package/src/element/proofAssertion.js +2 -2
  101. package/src/element/property.js +6 -6
  102. package/src/element/propertyRelation.js +6 -6
  103. package/src/element/reference.js +6 -6
  104. package/src/element/rule.js +6 -6
  105. package/src/element/section.js +2 -2
  106. package/src/element/signature.js +6 -6
  107. package/src/element/statement.js +4 -4
  108. package/src/element/subDerivation.js +2 -2
  109. package/src/element/subproof.js +2 -2
  110. package/src/element/substitution/frame.js +4 -4
  111. package/src/element/substitution/reference.js +4 -4
  112. package/src/element/substitution/statement.js +4 -4
  113. package/src/element/substitution/term.js +4 -4
  114. package/src/element/substitution.js +9 -9
  115. package/src/element/term.js +6 -6
  116. package/src/element/topLevelAssertion.js +6 -6
  117. package/src/element/topLevelMetaAssertion.js +6 -6
  118. package/src/element/type.js +8 -8
  119. package/src/element/typePrefix.js +6 -6
  120. package/src/element/variable.js +6 -6
  121. package/src/utilities/element.js +122 -122
@@ -669,225 +669,225 @@ function typeFromTypeNode(typeNode, context) {
669
669
  const baseType = (0, _type.baseTypeFromNothing)();
670
670
  type = baseType; ///
671
671
  } else {
672
- const { Type } = _elements.default, node = typeNode, name = nameFromTypeNode(typeNode, context), prefixName = prefixNameFromTypeNode(typeNode, context), superTypes = superTypesFromTypeNode(typeNode, context), properties = propertiesFromTypeNode(typeNode, context), provisional = provisionalFromTypeNode(typeNode, context), nominalTypeName = nominalTypeNameFromTypeNode(typeNode, context), typeString = (0, _string.typeStringFromNominalTypeName)(nominalTypeName), string = typeString, lineIndex = null;
672
+ const { Type } = _elements.default, node = typeNode, name = nameFromTypeNode(typeNode, context), prefixName = prefixNameFromTypeNode(typeNode, context), superTypes = superTypesFromTypeNode(typeNode, context), properties = propertiesFromTypeNode(typeNode, context), provisional = provisionalFromTypeNode(typeNode, context), nominalTypeName = nominalTypeNameFromTypeNode(typeNode, context), typeString = (0, _string.typeStringFromNominalTypeName)(nominalTypeName), string = typeString, breakPoint = null;
673
673
  context = null;
674
- type = new Type(context, string, node, lineIndex, name, prefixName, superTypes, properties, provisional);
674
+ type = new Type(context, string, node, breakPoint, name, prefixName, superTypes, properties, provisional);
675
675
  }
676
676
  return type;
677
677
  }
678
678
  function termFromTermNode(termNode, context) {
679
- const { Term } = _elements.default, node = termNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromTermNode(termNode, context), provisional = provisionalFromTermNode(termNode, context);
679
+ const { Term } = _elements.default, node = termNode, string = context.nodeAsString(node), breakPoint = null, type = typeFromTermNode(termNode, context), provisional = provisionalFromTermNode(termNode, context);
680
680
  context = null;
681
- const term = new Term(context, string, node, lineIndex, type, provisional);
681
+ const term = new Term(context, string, node, breakPoint, type, provisional);
682
682
  return term;
683
683
  }
684
684
  function stepFromStepNode(stepNode, context) {
685
- const { Step } = _elements.default, node = stepNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), signatureAssertion = signatureAssertionFromStepNode(stepNode, context);
685
+ const { Step } = _elements.default, node = stepNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), signatureAssertion = signatureAssertionFromStepNode(stepNode, context);
686
686
  context = null;
687
- const step = new Step(context, string, node, lineIndex, statement, reference, signatureAssertion);
687
+ const step = new Step(context, string, node, breakPoint, statement, reference, signatureAssertion);
688
688
  return step;
689
689
  }
690
690
  function ruleFromRuleNode(ruleNode, context) {
691
- const { Rule } = _elements.default, proof = proofFromRuleNode(ruleNode, context), labels = labelsFromRuleNode(ruleNode, context), premises = premisesFromRuleNode(ruleNode, context), conclusion = conclusionFromRuleNode(ruleNode, context), ruleString = (0, _string.rulsStringFromLabelsPremisesAndConclusion)(labels, premises, conclusion), node = ruleNode, string = ruleString, lineIndex = null;
691
+ const { Rule } = _elements.default, proof = proofFromRuleNode(ruleNode, context), labels = labelsFromRuleNode(ruleNode, context), premises = premisesFromRuleNode(ruleNode, context), conclusion = conclusionFromRuleNode(ruleNode, context), ruleString = (0, _string.rulsStringFromLabelsPremisesAndConclusion)(labels, premises, conclusion), node = ruleNode, string = ruleString, breakPoint = null;
692
692
  context = null;
693
- const rule = new Rule(context, string, node, lineIndex, proof, labels, premises, conclusion);
693
+ const rule = new Rule(context, string, node, breakPoint, proof, labels, premises, conclusion);
694
694
  return rule;
695
695
  }
696
696
  function labelFromLabelNode(labelNode, context) {
697
- const { Label } = _elements.default, node = labelNode, string = context.nodeAsString(node), lineIndex = null, metavariable = metavariableFromLabelNode(labelNode, context), label = new Label(context, string, node, lineIndex, metavariable);
697
+ const { Label } = _elements.default, node = labelNode, string = context.nodeAsString(node), breakPoint = null, metavariable = metavariableFromLabelNode(labelNode, context), label = new Label(context, string, node, breakPoint, metavariable);
698
698
  return label;
699
699
  }
700
700
  function errorFromErrorNode(errorNode, context) {
701
- const { Error } = _elements.default, node = errorNode, string = context.nodeAsString(node), lineIndex = null;
701
+ const { Error } = _elements.default, node = errorNode, string = context.nodeAsString(node), breakPoint = null;
702
702
  context = null;
703
- const error = new Error(context, string, node, lineIndex);
703
+ const error = new Error(context, string, node, breakPoint);
704
704
  return error;
705
705
  }
706
706
  function lemmaFromLemmaNode(lemmaNode, context) {
707
- const { Lemma } = _elements.default, topLevelAsssertionNode = lemmaNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = lemmaNode, string = topLevelAsssertionString, lineIndex = null;
707
+ const { Lemma } = _elements.default, topLevelAsssertionNode = lemmaNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = lemmaNode, string = topLevelAsssertionString, breakPoint = null;
708
708
  context = null;
709
- const lemma = new Lemma(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
709
+ const lemma = new Lemma(context, string, node, breakPoint, labels, suppositions, deduction, proof, signature, hypotheses);
710
710
  return lemma;
711
711
  }
712
712
  function frameFromFrameNode(frameNode, context) {
713
- const { Frame } = _elements.default, node = frameNode, string = context.nodeAsString(node), lineIndex = null, assumptions = assumptionsFromFrameNode(frameNode, context), metavariable = metavariableFromFrameNode(frameNode, context);
713
+ const { Frame } = _elements.default, node = frameNode, string = context.nodeAsString(node), breakPoint = null, assumptions = assumptionsFromFrameNode(frameNode, context), metavariable = metavariableFromFrameNode(frameNode, context);
714
714
  context = null;
715
- const frame = new Frame(context, string, node, lineIndex, assumptions, metavariable);
715
+ const frame = new Frame(context, string, node, breakPoint, assumptions, metavariable);
716
716
  return frame;
717
717
  }
718
718
  function proofFromProofNode(proofNode, context) {
719
- const { Proof } = _elements.default, node = proofNode, string = null, lineIndex = null, derivation = derivationFromProofNode(proofNode, context);
719
+ const { Proof } = _elements.default, node = proofNode, string = null, breakPoint = null, derivation = derivationFromProofNode(proofNode, context);
720
720
  context = null;
721
- const proof = new Proof(context, string, node, lineIndex, derivation);
721
+ const proof = new Proof(context, string, node, breakPoint, derivation);
722
722
  return proof;
723
723
  }
724
724
  function axiomFromAxiomNode(axiomNode, context) {
725
- const { Axiom } = _elements.default, topLevelAsssertionNode = axiomNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = axiomNode, string = topLevelAsssertionString, lineIndex = null;
725
+ const { Axiom } = _elements.default, topLevelAsssertionNode = axiomNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = axiomNode, string = topLevelAsssertionString, breakPoint = null;
726
726
  context = null;
727
- const axiom = new Axiom(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
727
+ const axiom = new Axiom(context, string, node, breakPoint, labels, suppositions, deduction, proof, signature, hypotheses);
728
728
  return axiom;
729
729
  }
730
730
  function sectionFromSectionNode(sectionNode, context) {
731
- const { Section } = _elements.default, hypothesisNodes = sectionNode.getHypothesisNodes(), hypotheses = hypothesesFromHypothesisNodes(hypothesisNodes, context), topLevelAssertion = topLevelAssertionFromSectionNode(sectionNode, context), sectionString = (0, _string.sectionStringFromHypothesesAndTopLevelAssertion)(hypotheses, topLevelAssertion), node = sectionNode, string = sectionString, lineIndex = null;
731
+ const { Section } = _elements.default, hypothesisNodes = sectionNode.getHypothesisNodes(), hypotheses = hypothesesFromHypothesisNodes(hypothesisNodes, context), topLevelAssertion = topLevelAssertionFromSectionNode(sectionNode, context), sectionString = (0, _string.sectionStringFromHypothesesAndTopLevelAssertion)(hypotheses, topLevelAssertion), node = sectionNode, string = sectionString, breakPoint = null;
732
732
  context = null;
733
- const section = new Section(context, string, node, lineIndex, hypotheses, topLevelAssertion);
733
+ const section = new Section(context, string, node, breakPoint, hypotheses, topLevelAssertion);
734
734
  return section;
735
735
  }
736
736
  function premiseFromPremiseNode(premiseNode, context) {
737
- const { Premise } = _elements.default, node = premiseNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromPremiseNode(premiseNode, context), procedureCall = procedureCallFromPremiseNode(premiseNode, context), premise = new Premise(context, string, node, lineIndex, statement, procedureCall);
737
+ const { Premise } = _elements.default, node = premiseNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromPremiseNode(premiseNode, context), procedureCall = procedureCallFromPremiseNode(premiseNode, context), premise = new Premise(context, string, node, breakPoint, statement, procedureCall);
738
738
  return premise;
739
739
  }
740
740
  function theoremFromTheoremNode(theoremNode, context) {
741
- const { Theorem } = _elements.default, topLevelAsssertionNode = theoremNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = theoremNode, string = topLevelAsssertionString, lineIndex = null;
741
+ const { Theorem } = _elements.default, topLevelAsssertionNode = theoremNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = theoremNode, string = topLevelAsssertionString, breakPoint = null;
742
742
  context = null;
743
- const theorem = new Theorem(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
743
+ const theorem = new Theorem(context, string, node, breakPoint, labels, suppositions, deduction, proof, signature, hypotheses);
744
744
  return theorem;
745
745
  }
746
746
  function propertyFromPropertyNode(propertyNode, context) {
747
747
  let property = null;
748
748
  if (propertyNode != null) {
749
- const { Property } = _elements.default, node = propertyNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromPropertyNode(propertyNode, context), type = typeFromPropertyNode(propertyNode, context);
749
+ const { Property } = _elements.default, node = propertyNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromPropertyNode(propertyNode, context), type = typeFromPropertyNode(propertyNode, context);
750
750
  context = null;
751
- property = new Property(context, string, node, lineIndex, name, type);
751
+ property = new Property(context, string, node, breakPoint, name, type);
752
752
  }
753
753
  return property;
754
754
  }
755
755
  function variableFromVariableNode(variableNode, context) {
756
- const { Variable } = _elements.default, node = variableNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromVariableNode(variableNode, context), identifier = identifierFromVariableNode(variableNode, context), provisional = provisionalFromVariableNode(variableNode, context);
756
+ const { Variable } = _elements.default, node = variableNode, string = context.nodeAsString(node), breakPoint = null, type = typeFromVariableNode(variableNode, context), identifier = identifierFromVariableNode(variableNode, context), provisional = provisionalFromVariableNode(variableNode, context);
757
757
  context = null;
758
- const variable = new Variable(context, string, node, lineIndex, type, identifier, provisional);
758
+ const variable = new Variable(context, string, node, breakPoint, type, identifier, provisional);
759
759
  return variable;
760
760
  }
761
761
  function subproofFromSubproofNode(subproofNode, context) {
762
- const { Subproof } = _elements.default, node = subproofNode, lineIndex = null, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSuppositionsAndSubDerivation)(suppositions, subDerivation, context), string = subproofString; ///
762
+ const { Subproof } = _elements.default, node = subproofNode, breakPoint = null, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSuppositionsAndSubDerivation)(suppositions, subDerivation, context), string = subproofString; ///
763
763
  context = null;
764
- const subproof = new Subproof(context, string, node, lineIndex, suppositions, subDerivation);
764
+ const subproof = new Subproof(context, string, node, breakPoint, suppositions, subDerivation);
765
765
  return subproof;
766
766
  }
767
767
  function equalityFromEqualityNode(equalityNode, context) {
768
- const { Equality } = _elements.default, node = equalityNode, string = context.nodeAsString(node), lineIndex = null, leftTerm = leftTermFromEqualityNode(equalityNode, context), rightTerm = rightTermFromEqualityNode(equalityNode, context);
768
+ const { Equality } = _elements.default, node = equalityNode, string = context.nodeAsString(node), breakPoint = null, leftTerm = leftTermFromEqualityNode(equalityNode, context), rightTerm = rightTermFromEqualityNode(equalityNode, context);
769
769
  context = null;
770
- const equality = new Equality(context, string, node, lineIndex, leftTerm, rightTerm);
770
+ const equality = new Equality(context, string, node, breakPoint, leftTerm, rightTerm);
771
771
  return equality;
772
772
  }
773
773
  function deductionFromDeductionNode(deductionNode, context) {
774
- const { Deduction } = _elements.default, node = deductionNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromDeductionNode(deductionNode, context), deduction = new Deduction(context, string, node, lineIndex, statement);
774
+ const { Deduction } = _elements.default, node = deductionNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromDeductionNode(deductionNode, context), deduction = new Deduction(context, string, node, breakPoint, statement);
775
775
  return deduction;
776
776
  }
777
777
  function statementFromStatementNode(statementNode, context) {
778
- const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), lineIndex = null;
778
+ const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null;
779
779
  context = null;
780
- const statement = new Statement(context, string, node, lineIndex);
780
+ const statement = new Statement(context, string, node, breakPoint);
781
781
  return statement;
782
782
  }
783
783
  function signatureFromSignatureNode(signatureNode, context) {
784
- const { Signature } = _elements.default, node = signatureNode, string = context.nodeAsString(node), lineIndex = null, terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(context, string, node, lineIndex, terms);
784
+ const { Signature } = _elements.default, node = signatureNode, string = context.nodeAsString(node), breakPoint = null, terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(context, string, node, breakPoint, terms);
785
785
  return signature;
786
786
  }
787
787
  function referenceFromReferenceNode(referenceNode, context) {
788
- const { Reference } = _elements.default, node = referenceNode, string = context.nodeAsString(node), lineIndex = null, metavariable = metavariableFromReferenceNode(referenceNode, context), topLevelMetaAssertion = topLevelMetaAssertionFromReferenceNode(referenceNode, context), reference = new Reference(context, string, node, lineIndex, metavariable, topLevelMetaAssertion);
788
+ const { Reference } = _elements.default, node = referenceNode, string = context.nodeAsString(node), breakPoint = null, metavariable = metavariableFromReferenceNode(referenceNode, context), topLevelMetaAssertion = topLevelMetaAssertionFromReferenceNode(referenceNode, context), reference = new Reference(context, string, node, breakPoint, metavariable, topLevelMetaAssertion);
789
789
  return reference;
790
790
  }
791
791
  function judgementFromJudgementNode(judgementNode, context) {
792
- const { Judgement } = _elements.default, node = judgementNode, string = context.nodeAsString(node), lineIndex = null, frame = frameFromJudgementNode(judgementNode, context), assumption = assumptionFromJudgementNode(judgementNode, context);
792
+ const { Judgement } = _elements.default, node = judgementNode, string = context.nodeAsString(node), breakPoint = null, frame = frameFromJudgementNode(judgementNode, context), assumption = assumptionFromJudgementNode(judgementNode, context);
793
793
  context = null;
794
- const judgement = new Judgement(context, string, node, lineIndex, frame, assumption);
794
+ const judgement = new Judgement(context, string, node, breakPoint, frame, assumption);
795
795
  return judgement;
796
796
  }
797
797
  function metaLemmaFromMetaLemmaNode(metaLemmaNode, context) {
798
- const { MetaLemma } = _elements.default, metaLemmaMetathoremNode = metaLemmaNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, lineIndex = null;
798
+ const { MetaLemma } = _elements.default, metaLemmaMetathoremNode = metaLemmaNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, breakPoint = null;
799
799
  context = null;
800
- const metaLemma = new MetaLemma(context, string, node, lineIndex, label, suppositions, deduction, proof, metaLevelAssumptions);
800
+ const metaLemma = new MetaLemma(context, string, node, breakPoint, label, suppositions, deduction, proof, metaLevelAssumptions);
801
801
  return metaLemma;
802
802
  }
803
803
  function parameterFromParameterNode(parameterNode, context) {
804
- const { Parameter } = _elements.default, node = parameterNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromParamterNode(parameterNode, context), identifier = identifierFromParamterNode(parameterNode, context);
804
+ const { Parameter } = _elements.default, node = parameterNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromParamterNode(parameterNode, context), identifier = identifierFromParamterNode(parameterNode, context);
805
805
  context = null;
806
- const parameter = new Parameter(context, string, node, lineIndex, name, identifier);
806
+ const parameter = new Parameter(context, string, node, breakPoint, name, identifier);
807
807
  return parameter;
808
808
  }
809
809
  function hypothesisFromHypothesisNode(hypotheseNode, context) {
810
- const { Hypothesis } = _elements.default, node = hypotheseNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromHypothesisNode(hypotheseNode, context);
810
+ const { Hypothesis } = _elements.default, node = hypotheseNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromHypothesisNode(hypotheseNode, context);
811
811
  context = null;
812
- const hypohtesis = new Hypothesis(context, string, node, lineIndex, statement);
812
+ const hypohtesis = new Hypothesis(context, string, node, breakPoint, statement);
813
813
  return hypohtesis;
814
814
  }
815
815
  function conjectureFromConjectureNode(conjectureNode, context) {
816
- const { Conjecture } = _elements.default, topLevelAsssertionNode = conjectureNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = conjectureNode, string = topLevelAsssertionString, lineIndex = null;
816
+ const { Conjecture } = _elements.default, topLevelAsssertionNode = conjectureNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSignatureSuppositionsAndDeduction)(labels, signature, suppositions, deduction), node = conjectureNode, string = topLevelAsssertionString, breakPoint = null;
817
817
  context = null;
818
- const conjecture = new Conjecture(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
818
+ const conjecture = new Conjecture(context, string, node, breakPoint, labels, suppositions, deduction, proof, signature, hypotheses);
819
819
  return conjecture;
820
820
  }
821
821
  function combinatorFromCombinatorNode(combinatorNode, context) {
822
- const { Combinator } = _elements.default, node = combinatorNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromCombinatorNode(combinatorNode, context);
822
+ const { Combinator } = _elements.default, node = combinatorNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromCombinatorNode(combinatorNode, context);
823
823
  context = null;
824
- const combinator = new Combinator(context, string, node, lineIndex, statement);
824
+ const combinator = new Combinator(context, string, node, breakPoint, statement);
825
825
  return combinator;
826
826
  }
827
827
  function conclusionFromConclusionNode(conclusionNode, context) {
828
- const { Conclusion } = _elements.default, node = conclusionNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromConclusionNode(conclusionNode, context), conclusion = new Conclusion(context, string, node, lineIndex, statement);
828
+ const { Conclusion } = _elements.default, node = conclusionNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromConclusionNode(conclusionNode, context), conclusion = new Conclusion(context, string, node, breakPoint, statement);
829
829
  return conclusion;
830
830
  }
831
831
  function derivationFromDerivationNode(derivationNode, context) {
832
- const { Derivation } = _elements.default, node = derivationNode, string = null, lineIndex = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context);
832
+ const { Derivation } = _elements.default, node = derivationNode, string = null, breakPoint = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context);
833
833
  context = null;
834
- const derivation = new Derivation(context, string, node, lineIndex, stepsOrSubproofs);
834
+ const derivation = new Derivation(context, string, node, breakPoint, stepsOrSubproofs);
835
835
  return derivation;
836
836
  }
837
837
  function typePrefixFromTypePrefixNode(typePrefixNode, context) {
838
- const { TypePrefix } = _elements.default, node = typePrefixNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromTypePrefixNode(typePrefixNode, context);
838
+ const { TypePrefix } = _elements.default, node = typePrefixNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromTypePrefixNode(typePrefixNode, context);
839
839
  context = null;
840
- const typePrefix = new TypePrefix(context, string, node, lineIndex, name);
840
+ const typePrefix = new TypePrefix(context, string, node, breakPoint, name);
841
841
  return typePrefix;
842
842
  }
843
843
  function assumptionFromAssumptionNode(assumptionNode, context) {
844
- const { Assumption } = _elements.default, node = assumptionNode, string = context.nodeAsString(node), lineIndex = null, reference = referenceFromAssumptionNode(assumptionNode, context), statement = statementFromAssumptionNode(assumptionNode, context), assumption = new Assumption(context, string, node, lineIndex, reference, statement);
844
+ const { Assumption } = _elements.default, node = assumptionNode, string = context.nodeAsString(node), breakPoint = null, reference = referenceFromAssumptionNode(assumptionNode, context), statement = statementFromAssumptionNode(assumptionNode, context), assumption = new Assumption(context, string, node, breakPoint, reference, statement);
845
845
  return assumption;
846
846
  }
847
847
  function constructorFromConstructorNode(constructorNode, context) {
848
- const { Constructor } = _elements.default, node = constructorNode, string = context.nodeAsString(node), lineIndex = null, term = termFromConstructorNode(constructorNode, context), type = typeFromConstructorNode(constructorNode, context);
848
+ const { Constructor } = _elements.default, node = constructorNode, string = context.nodeAsString(node), breakPoint = null, term = termFromConstructorNode(constructorNode, context), type = typeFromConstructorNode(constructorNode, context);
849
849
  context = null;
850
- const constructor = new Constructor(context, string, node, lineIndex, term, type);
850
+ const constructor = new Constructor(context, string, node, breakPoint, term, type);
851
851
  return constructor;
852
852
  }
853
853
  function suppositionFromSuppositionNode(suppositionNode, context) {
854
- const { Supposition } = _elements.default, node = suppositionNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromSuppositionNode(suppositionNode, context), procedureCall = procedureCallFromSuppositionNode(suppositionNode, context), supposition = new Supposition(context, string, node, lineIndex, statement, procedureCall);
854
+ const { Supposition } = _elements.default, node = suppositionNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromSuppositionNode(suppositionNode, context), procedureCall = procedureCallFromSuppositionNode(suppositionNode, context), supposition = new Supposition(context, string, node, breakPoint, statement, procedureCall);
855
855
  return supposition;
856
856
  }
857
857
  function equivalenceFromEquivalenceNode(equivalenceNode, context) {
858
- const { Equivalence } = _elements.default, node = equivalenceNode, lineIndex = null, type = typeFromEquivalenceNode(equivalenceNode, context), terms = termsFromEquivalenceNode(equivalenceNode, context), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString; ///
858
+ const { Equivalence } = _elements.default, node = equivalenceNode, breakPoint = null, type = typeFromEquivalenceNode(equivalenceNode, context), terms = termsFromEquivalenceNode(equivalenceNode, context), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString; ///
859
859
  context = null;
860
- const equivalence = new Equivalence(context, string, node, lineIndex, type, terms);
860
+ const equivalence = new Equivalence(context, string, node, breakPoint, type, terms);
861
861
  return equivalence;
862
862
  }
863
863
  function metatheoremFromMetatheoremNode(metatheoremNode, context) {
864
- const { Metatheorem } = _elements.default, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, lineIndex = null;
864
+ const { Metatheorem } = _elements.default, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, breakPoint = null;
865
865
  context = null;
866
- const metatheorem = new Metatheorem(context, string, node, lineIndex, label, suppositions, deduction, proof, metaLevelAssumptions);
866
+ const metatheorem = new Metatheorem(context, string, node, breakPoint, label, suppositions, deduction, proof, metaLevelAssumptions);
867
867
  return metatheorem;
868
868
  }
869
869
  function metavariableFromMetavariableNode(metavariableNode, context) {
870
- const { Metavariable } = _elements.default, node = metavariableNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromMetavariableNode(metavariableNode, context), term = termFromMetavariableNode(metavariableNode, context), type = typeFromMetavariableNode(metavariableNode, context), metaType = null;
870
+ const { Metavariable } = _elements.default, node = metavariableNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromMetavariableNode(metavariableNode, context), term = termFromMetavariableNode(metavariableNode, context), type = typeFromMetavariableNode(metavariableNode, context), metaType = null;
871
871
  context = null;
872
- const metavariable = new Metavariable(context, string, node, lineIndex, name, term, type, metaType);
872
+ const metavariable = new Metavariable(context, string, node, breakPoint, name, term, type, metaType);
873
873
  return metavariable;
874
874
  }
875
875
  function subDerivationFromSubDerivationNode(subDerivationNode, context) {
876
- const { SubDerivation } = _elements.default, node = subDerivationNode, string = null, lineIndex = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context);
876
+ const { SubDerivation } = _elements.default, node = subDerivationNode, string = null, breakPoint = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context);
877
877
  context = null;
878
- const subDerivation = new SubDerivation(context, string, node, lineIndex, stepsOrSubproofs);
878
+ const subDerivation = new SubDerivation(context, string, node, breakPoint, stepsOrSubproofs);
879
879
  return subDerivation;
880
880
  }
881
881
  function typeAssertionFromTypeAssertionNode(typeAssertionNode, context) {
882
- const { TypeAssertion } = _elements.default, node = typeAssertionNode, string = context.nodeAsString(node), lineIndex = null, term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context);
882
+ const { TypeAssertion } = _elements.default, node = typeAssertionNode, string = context.nodeAsString(node), breakPoint = null, term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context);
883
883
  context = null;
884
- const typeAssertion = new TypeAssertion(context, string, node, lineIndex, term, type);
884
+ const typeAssertion = new TypeAssertion(context, string, node, breakPoint, term, type);
885
885
  return typeAssertion;
886
886
  }
887
887
  function procedureCallFromProcedureCallNode(procedureCallNode, context) {
888
- const { ProcedureCall } = _elements.default, parameters = parametersFromProcedureCallNode(procedureCallNode, context), procedureReference = procedureReferenceFromProcedureCallNode(procedureCallNode, context), procedureCallString = (0, _string.procedureCallStringFromProcedureReferenceAndParameters)(procedureReference, parameters), node = procedureCallNode, string = procedureCallString, lineIndex = null;
888
+ const { ProcedureCall } = _elements.default, parameters = parametersFromProcedureCallNode(procedureCallNode, context), procedureReference = procedureReferenceFromProcedureCallNode(procedureCallNode, context), procedureCallString = (0, _string.procedureCallStringFromProcedureReferenceAndParameters)(procedureReference, parameters), node = procedureCallNode, string = procedureCallString, breakPoint = null;
889
889
  context = null;
890
- const procedureCall = new ProcedureCall(context, string, node, lineIndex, parameters, procedureReference);
890
+ const procedureCall = new ProcedureCall(context, string, node, breakPoint, parameters, procedureReference);
891
891
  return procedureCall;
892
892
  }
893
893
  function stepOrSubproofFromStepOrSubproofNode(stepOrSubproofNode, context) {
@@ -895,135 +895,135 @@ function stepOrSubproofFromStepOrSubproofNode(stepOrSubproofNode, context) {
895
895
  return stepOrSubproof;
896
896
  }
897
897
  function definedAssertionFromDefinedAssertionNode(definedAssertionNode, context) {
898
- const { DefinedAssertion } = _elements.default, node = definedAssertionNode, string = context.nodeAsString(node), lineIndex = null, negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context);
898
+ const { DefinedAssertion } = _elements.default, node = definedAssertionNode, string = context.nodeAsString(node), breakPoint = null, negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context);
899
899
  context = null;
900
- const definedAssertion = new DefinedAssertion(context, string, node, lineIndex, term, frame, negated);
900
+ const definedAssertion = new DefinedAssertion(context, string, node, breakPoint, term, frame, negated);
901
901
  return definedAssertion;
902
902
  }
903
903
  function propertyRelationFromPropertyRelationNode(propertyRelationNode, context) {
904
- const { PropertyRelation } = _elements.default, node = propertyRelationNode, string = context.nodeAsString(node), lineIndex = null, term = termFromPropertyRelationNode(propertyRelationNode, context), property = propertyFromPropertyRelationNode(propertyRelationNode, context);
904
+ const { PropertyRelation } = _elements.default, node = propertyRelationNode, string = context.nodeAsString(node), breakPoint = null, term = termFromPropertyRelationNode(propertyRelationNode, context), property = propertyFromPropertyRelationNode(propertyRelationNode, context);
905
905
  context = null;
906
- const propertyRelation = new PropertyRelation(context, string, node, lineIndex, term, property);
906
+ const propertyRelation = new PropertyRelation(context, string, node, breakPoint, term, property);
907
907
  return propertyRelation;
908
908
  }
909
909
  function termSubstitutionFromTermSubstitutionNode(termSubstitutionNode, generalContext, specificContext) {
910
910
  const { TermSubstitution } = _elements.default, node = termSubstitutionNode, context = specificContext, contexts = [
911
911
  generalContext,
912
912
  specificContext
913
- ], string = context.nodeAsString(node), lineIndex = null, targetTerm = targetTermFromTermSubstitutionNode(termSubstitutionNode, context), replacementTerm = replacementTermFromTermSubstitutionNode(termSubstitutionNode, context), termSubstitution = new TermSubstitution(contexts, string, node, lineIndex, targetTerm, replacementTerm);
913
+ ], string = context.nodeAsString(node), breakPoint = null, targetTerm = targetTermFromTermSubstitutionNode(termSubstitutionNode, context), replacementTerm = replacementTermFromTermSubstitutionNode(termSubstitutionNode, context), termSubstitution = new TermSubstitution(contexts, string, node, breakPoint, targetTerm, replacementTerm);
914
914
  return termSubstitution;
915
915
  }
916
916
  function frameSubstitutionFromFrameSubstitutionNode(frameSubstitutionNode, generalContext, specificContext) {
917
917
  const { FrameSubstitution } = _elements.default, node = frameSubstitutionNode, context = specificContext, contexts = [
918
918
  generalContext,
919
919
  specificContext
920
- ], string = context.nodeAsString(node), lineIndex = null, targetFrame = targetFrameFromFrameSubstitutionNode(frameSubstitutionNode, context), replacementFrame = replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, context), frameSubstitution = new FrameSubstitution(contexts, string, node, lineIndex, targetFrame, replacementFrame);
920
+ ], string = context.nodeAsString(node), breakPoint = null, targetFrame = targetFrameFromFrameSubstitutionNode(frameSubstitutionNode, context), replacementFrame = replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, context), frameSubstitution = new FrameSubstitution(contexts, string, node, breakPoint, targetFrame, replacementFrame);
921
921
  return frameSubstitution;
922
922
  }
923
923
  function propertyAssertionFromPropertyAssertionNode(propertyAssertionNode, context) {
924
- const { PropertyAssertion } = _elements.default, node = propertyAssertionNode, string = context.nodeAsString(node), lineIndex = null, term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context);
924
+ const { PropertyAssertion } = _elements.default, node = propertyAssertionNode, string = context.nodeAsString(node), breakPoint = null, term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context);
925
925
  context = null;
926
- const propertyAssertion = new PropertyAssertion(context, string, node, lineIndex, term, propertyRelation);
926
+ const propertyAssertion = new PropertyAssertion(context, string, node, breakPoint, term, propertyRelation);
927
927
  return propertyAssertion;
928
928
  }
929
929
  function subproofAssertionFromSubproofAssertionNode(subproofAssertionNode, context) {
930
- const { SubproofAssertion } = _elements.default, node = subproofAssertionNode, string = context.nodeAsString(node), lineIndex = null, statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context);
930
+ const { SubproofAssertion } = _elements.default, node = subproofAssertionNode, string = context.nodeAsString(node), breakPoint = null, statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context);
931
931
  context = null;
932
- const subproofAssertion = new SubproofAssertion(context, string, node, lineIndex, statements);
932
+ const subproofAssertion = new SubproofAssertion(context, string, node, breakPoint, statements);
933
933
  return subproofAssertion;
934
934
  }
935
935
  function containedAssertionFromContainedAssertionNode(containedAssertionNode, context) {
936
- const { ContainedAssertion } = _elements.default, node = containedAssertionNode, string = context.nodeAsString(node), lineIndex = null, term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), negated = negatedFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context);
936
+ const { ContainedAssertion } = _elements.default, node = containedAssertionNode, string = context.nodeAsString(node), breakPoint = null, term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), negated = negatedFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context);
937
937
  context = null;
938
- const containedAssertion = new ContainedAssertion(context, string, node, lineIndex, term, frame, negated, statement);
938
+ const containedAssertion = new ContainedAssertion(context, string, node, breakPoint, term, frame, negated, statement);
939
939
  return containedAssertion;
940
940
  }
941
941
  function signatureAssertionFromSignatureAssertionNode(signatureAssertionNode, context) {
942
- const { SignatureAssertion } = _elements.default, node = signatureAssertionNode, string = context.nodeAsString(node), lineIndex = null, signature = signatureFromSignatureAssertionNode(signatureAssertionNode, context), reference = referenceFromSignatureAssertionNode(signatureAssertionNode, context);
942
+ const { SignatureAssertion } = _elements.default, node = signatureAssertionNode, string = context.nodeAsString(node), breakPoint = null, signature = signatureFromSignatureAssertionNode(signatureAssertionNode, context), reference = referenceFromSignatureAssertionNode(signatureAssertionNode, context);
943
943
  context = null;
944
- const signatureAssertion = new SignatureAssertion(context, string, node, lineIndex, signature, reference);
944
+ const signatureAssertion = new SignatureAssertion(context, string, node, breakPoint, signature, reference);
945
945
  return signatureAssertion;
946
946
  }
947
947
  function procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context) {
948
- const { ProcedureReference } = _elements.default, node = procedureReferenceNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromProcedureReferenceNode(procedureReferenceNode, context);
948
+ const { ProcedureReference } = _elements.default, node = procedureReferenceNode, string = context.nodeAsString(node), breakPoint = null, name = nameFromProcedureReferenceNode(procedureReferenceNode, context);
949
949
  context = null;
950
- const procedureRefereence = new ProcedureReference(context, string, node, lineIndex, name);
950
+ const procedureRefereence = new ProcedureReference(context, string, node, breakPoint, name);
951
951
  return procedureRefereence;
952
952
  }
953
953
  function propertyDeclarationFromPropertyDeclarationNode(propertyDeclarationNode, context) {
954
- const { PropertyDeclaration } = _elements.default, node = propertyDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromPropertyDeclarationNode(propertyDeclarationNode, context), property = propertyFromPropertyDeclarationNode(propertyDeclarationNode, context);
954
+ const { PropertyDeclaration } = _elements.default, node = propertyDeclarationNode, string = context.nodeAsString(node), breakPoint = null, type = typeFromPropertyDeclarationNode(propertyDeclarationNode, context), property = propertyFromPropertyDeclarationNode(propertyDeclarationNode, context);
955
955
  context = null;
956
- const propertyDeclaration = new PropertyDeclaration(context, string, node, lineIndex, property, type);
956
+ const propertyDeclaration = new PropertyDeclaration(context, string, node, breakPoint, property, type);
957
957
  return propertyDeclaration;
958
958
  }
959
959
  function variableDeclarationFromVariableDeclarationNode(variableDeclarationNode, context) {
960
- const { VariableDeclaration } = _elements.default, node = variableDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromVariableDeclarationNode(variableDeclarationNode, context), variable = variableFromVariableDeclarationNode(variableDeclarationNode, context), provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, context);
960
+ const { VariableDeclaration } = _elements.default, node = variableDeclarationNode, string = context.nodeAsString(node), breakPoint = null, type = typeFromVariableDeclarationNode(variableDeclarationNode, context), variable = variableFromVariableDeclarationNode(variableDeclarationNode, context), provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, context);
961
961
  context = null;
962
- const variableDeclaration = new VariableDeclaration(context, string, node, lineIndex, type, variable, provisional);
962
+ const variableDeclaration = new VariableDeclaration(context, string, node, breakPoint, type, variable, provisional);
963
963
  return variableDeclaration;
964
964
  }
965
965
  function metaLevelAssumptionFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context) {
966
- const { MetaLevelAssumption } = _elements.default, node = metaLevelAssumptionNode, string = context.nodeAsString(node), lineIndex = null, reference = referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context), statement = statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context);
966
+ const { MetaLevelAssumption } = _elements.default, node = metaLevelAssumptionNode, string = context.nodeAsString(node), breakPoint = null, reference = referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context), statement = statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context);
967
967
  context = null;
968
- const metaLevelAssumption = new MetaLevelAssumption(context, string, node, lineIndex, reference, statement);
968
+ const metaLevelAssumption = new MetaLevelAssumption(context, string, node, breakPoint, reference, statement);
969
969
  return metaLevelAssumption;
970
970
  }
971
971
  function bracketedCombinatorFromBracketedCombinatorNode(bracketedCombinatorNode, context) {
972
- const { BracketedCombinator } = _elements.default, node = bracketedCombinatorNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromBracketedCombinatorNode(bracketedCombinatorNode, context), bracketedCombinator = new BracketedCombinator(context, string, node, lineIndex, statement);
972
+ const { BracketedCombinator } = _elements.default, node = bracketedCombinatorNode, string = context.nodeAsString(node), breakPoint = null, statement = statementFromBracketedCombinatorNode(bracketedCombinatorNode, context), bracketedCombinator = new BracketedCombinator(context, string, node, breakPoint, statement);
973
973
  return bracketedCombinator;
974
974
  }
975
975
  function bracketedConstructorFromBracketedConstructorNode(bracketedConstructorNode, context) {
976
- const { BracketedConstructor } = _elements.default, node = bracketedConstructorNode, string = context.nodeAsString(node), lineIndex = null, term = termFromBracketedConstructorNode(bracketedConstructorNode, context), type = typeFromBracketedConstructorNode(bracketedConstructorNode, context), bracketedConstructor = new BracketedConstructor(context, string, node, lineIndex, term, type);
976
+ const { BracketedConstructor } = _elements.default, node = bracketedConstructorNode, string = context.nodeAsString(node), breakPoint = null, term = termFromBracketedConstructorNode(bracketedConstructorNode, context), type = typeFromBracketedConstructorNode(bracketedConstructorNode, context), bracketedConstructor = new BracketedConstructor(context, string, node, breakPoint, term, type);
977
977
  return bracketedConstructor;
978
978
  }
979
979
  function typePrefixDeclarationFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context) {
980
- const { TypePrefixDeclaration } = _elements.default, node = typePrefixDeclarationNode, string = context.nodeAsString(node), lineIndex = null, typePrefix = typePrefixFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context);
980
+ const { TypePrefixDeclaration } = _elements.default, node = typePrefixDeclarationNode, string = context.nodeAsString(node), breakPoint = null, typePrefix = typePrefixFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context);
981
981
  context = null;
982
- const typePrefixDeclaration = new TypePrefixDeclaration(context, string, node, lineIndex, typePrefix);
982
+ const typePrefixDeclaration = new TypePrefixDeclaration(context, string, node, breakPoint, typePrefix);
983
983
  return typePrefixDeclaration;
984
984
  }
985
985
  function combinatorDeclarationFromCombinatorDeclarationNode(combinatorDeclarationNode, context) {
986
- const { CombinatorDeclaration } = _elements.default, node = combinatorDeclarationNode, string = context.nodeAsString(node), lineIndex = null, combinator = combinatorFromCombinatorDeclarationNode(combinatorDeclarationNode, context);
986
+ const { CombinatorDeclaration } = _elements.default, node = combinatorDeclarationNode, string = context.nodeAsString(node), breakPoint = null, combinator = combinatorFromCombinatorDeclarationNode(combinatorDeclarationNode, context);
987
987
  context = null;
988
- const combinatorDeclaration = new CombinatorDeclaration(context, string, node, lineIndex, combinator);
988
+ const combinatorDeclaration = new CombinatorDeclaration(context, string, node, breakPoint, combinator);
989
989
  return combinatorDeclaration;
990
990
  }
991
991
  function simpleTypeDeclarationFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context) {
992
- const { SimpleTypeDeclaration } = _elements.default, node = simpleTypeDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), superTypes = superTypesFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), provisional = provisionalFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context);
992
+ const { SimpleTypeDeclaration } = _elements.default, node = simpleTypeDeclarationNode, string = context.nodeAsString(node), breakPoint = null, type = typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), superTypes = superTypesFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), provisional = provisionalFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context);
993
993
  context = null;
994
- const simpleTypeDeclaration = new SimpleTypeDeclaration(context, string, node, lineIndex, type, superTypes, provisional);
994
+ const simpleTypeDeclaration = new SimpleTypeDeclaration(context, string, node, breakPoint, type, superTypes, provisional);
995
995
  return simpleTypeDeclaration;
996
996
  }
997
997
  function referenceSubstitutionFromReferenceSubstitutionNode(referenceSubstitutionNode, generalContext, specificContext) {
998
998
  const { ReferenceSubstitution } = _elements.default, node = referenceSubstitutionNode, context = specificContext, contexts = [
999
999
  generalContext,
1000
1000
  specificContext
1001
- ], string = context.nodeAsString(node), lineIndex = null, targetReference = targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context), replacementReference = replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context), referenceSubstitution = new ReferenceSubstitution(contexts, string, node, lineIndex, targetReference, replacementReference);
1001
+ ], string = context.nodeAsString(node), breakPoint = null, targetReference = targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context), replacementReference = replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context), referenceSubstitution = new ReferenceSubstitution(contexts, string, node, breakPoint, targetReference, replacementReference);
1002
1002
  return referenceSubstitution;
1003
1003
  }
1004
1004
  function statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext) {
1005
1005
  const { StatementSubstitution } = _elements.default, node = statementSubstitutionNode, context = specificContext, contexts = [
1006
1006
  generalContext,
1007
1007
  specificContext
1008
- ], string = context.nodeAsString(node), lineIndex = null, resolved = resolvedFromStatementSubstitutionNode(statementSubstitutionNode, context), substitution = substitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext), targetStatement = targetStatementFromStatementSubstitutionNode(statementSubstitutionNode, context), replacementStatement = replacementStatementFromStatementSubstitutionNode(statementSubstitutionNode, context), statementSubstitution = new StatementSubstitution(contexts, string, node, lineIndex, resolved, substitution, targetStatement, replacementStatement);
1008
+ ], string = context.nodeAsString(node), breakPoint = null, resolved = resolvedFromStatementSubstitutionNode(statementSubstitutionNode, context), substitution = substitutionFromStatementSubstitutionNode(statementSubstitutionNode, generalContext, specificContext), targetStatement = targetStatementFromStatementSubstitutionNode(statementSubstitutionNode, context), replacementStatement = replacementStatementFromStatementSubstitutionNode(statementSubstitutionNode, context), statementSubstitution = new StatementSubstitution(contexts, string, node, breakPoint, resolved, substitution, targetStatement, replacementStatement);
1009
1009
  return statementSubstitution;
1010
1010
  }
1011
1011
  function constructorDeclarationFromConstructorDeclarationNode(constructorDeclarationNode, context) {
1012
- const { ConstructorDeclaration } = _elements.default, node = constructorDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromConstructorDeclarationNode(constructorDeclarationNode, context), provisional = provisionalFromConstructorDeclarationNode(constructorDeclarationNode, context), constructor = constructorFromConstructorDeclarationNode(constructorDeclarationNode, context);
1012
+ const { ConstructorDeclaration } = _elements.default, node = constructorDeclarationNode, string = context.nodeAsString(node), breakPoint = null, type = typeFromConstructorDeclarationNode(constructorDeclarationNode, context), provisional = provisionalFromConstructorDeclarationNode(constructorDeclarationNode, context), constructor = constructorFromConstructorDeclarationNode(constructorDeclarationNode, context);
1013
1013
  context = null;
1014
- const constructorDeclaration = new ConstructorDeclaration(context, string, node, lineIndex, type, provisional, constructor);
1014
+ const constructorDeclaration = new ConstructorDeclaration(context, string, node, breakPoint, type, provisional, constructor);
1015
1015
  return constructorDeclaration;
1016
1016
  }
1017
1017
  function complexTypeDeclarationFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context) {
1018
- const { ComplexTypeDeclaration } = _elements.default, node = complexTypeDeclarationNode, lineIndex = null, type = typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), superTypes = superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), provisional = provisionalFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), propertyDeclarations = propertyDeclarationsFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), complexTypeDeclarationString = (0, _string.complexTypeDeclarationStringFromTypeSuperTypesAndProvisional)(type, superTypes, provisional), string = complexTypeDeclarationString; ///
1018
+ const { ComplexTypeDeclaration } = _elements.default, node = complexTypeDeclarationNode, breakPoint = null, type = typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), superTypes = superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), provisional = provisionalFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), propertyDeclarations = propertyDeclarationsFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), complexTypeDeclarationString = (0, _string.complexTypeDeclarationStringFromTypeSuperTypesAndProvisional)(type, superTypes, provisional), string = complexTypeDeclarationString; ///
1019
1019
  context = null;
1020
- const complexTypeDeclaration = new ComplexTypeDeclaration(context, string, node, lineIndex, type, superTypes, provisional, propertyDeclarations);
1020
+ const complexTypeDeclaration = new ComplexTypeDeclaration(context, string, node, breakPoint, type, superTypes, provisional, propertyDeclarations);
1021
1021
  return complexTypeDeclaration;
1022
1022
  }
1023
1023
  function metavariableDeclarationFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
1024
- const { MetavariableDeclaration } = _elements.default, node = metavariableDeclarationNode, string = context.nodeAsString(node), lineIndex = null, metaType = metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariable = metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context);
1024
+ const { MetavariableDeclaration } = _elements.default, node = metavariableDeclarationNode, string = context.nodeAsString(node), breakPoint = null, metaType = metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariable = metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context);
1025
1025
  context = null;
1026
- const metavariableDeclaration = new MetavariableDeclaration(context, string, node, lineIndex, metaType, metavariable);
1026
+ const metavariableDeclaration = new MetavariableDeclaration(context, string, node, breakPoint, metaType, metavariable);
1027
1027
  return metavariableDeclaration;
1028
1028
  }
1029
1029
  function nameFromTypeNode(typeNode, context) {
@@ -1850,4 +1850,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
1850
1850
  return propertyDeclrations;
1851
1851
  }
1852
1852
 
1853
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2lnbmF0dXJlQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICAgICAgbm9kZSA9IHJ1bGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mID0gbmV3IFByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNlY3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24oaHlwb3RoZXNlcywgdG9wTGV2ZWxBc3NlcnRpb24pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGh5cG90aGVzZXMsIHRvcExldmVsQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBwcmVtaXNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtID0gbmV3IFRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCB0eXBlKTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgaWRlbnRpZmllciwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbiwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2YgPSBuZXcgU3VicHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbWV0YXZhcmlhYmxlLCB0b3BMZXZlbE1ldGFBc3NlcnRpb24pO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGp1ZGdlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGZyYW1lLCBhc3N1bXB0aW9uKTtcblxuICByZXR1cm4ganVkZ2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUobWV0YUxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGFMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YUxlbW1hTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YUxlbW1hID0gbmV3IE1ldGFMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhTGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZSA9IG5ldyBDb25qZWN0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uY2x1c2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IG5ldyBDb25jbHVzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb24gPSBuZXcgRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWl2YWxlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWl2YWxlbmNlTm9kZSwgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmc7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWl2YWxlbmNlID0gbmV3IEVxdWl2YWxlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF0aGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF0aGVvcmVtID0gbmV3IE1ldGF0aGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJEZXJpdmF0aW9uID0gbmV3IFN1YkRlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycyksXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBPclN1YnByb29mID0gKHN0ZXAgfHwgc3VicHJvb2YpO1xuXG4gIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gbmV3IFByb3BlcnR5UmVsYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRGcmFtZSwgcmVwbGFjZW1lbnRGcmFtZSk7XG5cbiAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHNpZ25hdHVyZSwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb24gPSBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcHJvcGVydHksIHR5cGUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGV2ZWxBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb24gPSBuZXcgTWV0YUxldmVsQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvciA9IG5ldyBCcmFja2V0ZWRDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbmV3IEJyYWNrZXRlZENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpbXBsZVR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaW1wbGVUeXBlRGVjbGFyYXRpb24gPSBuZXcgU2ltcGxlVHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbmV3IFJlZmVyZW5jZVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHJlc29sdmVkID0gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCByZXNvbHZlZCwgc3Vic3RpdHV0aW9uLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBwcm92aXNpb25hbCwgY29uc3RydWN0b3IpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBsZXhUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCh0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCksXG4gICAgICAgIHN0cmluZyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21wbGV4VHlwZURlY2xhcmF0aW9uID0gbmV3IENvbXBsZXhUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGFUeXBlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICBuYW1lID0gdHlwZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHJ1bGVOb2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBydWxlTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZU5vZGVzID0gcnVsZU5vZGUuZ2V0UHJlbWlzZU5vZGVzKCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOb2RlLmdldFByb3BlcnR5TmFtZSgpLFxuICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlcyA9IG51bGw7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25jbHVzaW9uTm9kZSA9IHJ1bGVOb2RlLmdldENvbmNsdXNpb25Ob2RlKCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW0gPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW1Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0VGhlb3JlbU5vZGUoKTtcblxuICBpZiAodGhlb3JlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4Tm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBuYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyYWlibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhdmFyYWlibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGp1ZGdlbWVudCA9IG51bGw7XG5cbiAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0SnVkZ2VtZW50Tm9kZSgpO1xuXG4gIGlmIChqdWRnZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4ganVkZ2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwID0gbnVsbDtcblxuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZS5pc1N0ZXBOb2RlKCk7XG5cbiAgaWYgKHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlKSB7XG4gICAgY29uc3Qgc3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN0ZXAgPSBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gIHJldHVybiBub21pbmFsVHlwZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVzbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uY2x1c2lub05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsQXNzZXJ0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gKGF4aW9tIHx8IGxlbW1hIHx8IHRoZW9yZW0gfHwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhzaWduYXR1cmVOb2RlKTtcblxuICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tU2lnbmF0dXJlU3RyaW5nKHNpZ25hdHVyZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRQcm9vZk5vZGUoKSxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHNpZ25hdHVyZU5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcoc2lnbmF0dXJlTm9kZSksXG4gICAgICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tU2lnbmF0dXJlU3RyaW5nKHNpZ25hdHVyZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4geXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlOb2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlOb2RlKCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gbWV0YUxldmVsQXNzdW1wdGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBudWxsO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50VGVybU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyZXBsYWNlbWVudFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVQcmVmaXhOb2RlKCksXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRDb21iaW5hdG9yTm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50RnJhbWVOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUocmVwbGFjZW1lbnRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb25Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5UmVsYXRpb25Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gKGZyYW1lU3Vic3RpdHV0aW9uIHx8IHRlcm1TdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRDb25zdHJ1Y3Rvck5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHRhcmdldFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyh0YXJnZXRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUodGFyZ2V0U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25zID0gW107XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMoKSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNscmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5RGVjbGNhcmF0aW9uID0gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlEZWNsY2FyYXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xyYXRpb25zO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tUnVsZU5vZGUiLCJjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlIiwiY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyIsImh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUiLCJqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGFiZWxzRnJvbVJ1bGVOb2RlIiwibGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsIm1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZSIsIm5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm5hbWVGcm9tUGFyYW10ZXJOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21Qcm9wZXJ0eU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlOb2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVOb2RlIiwidGVybXNGcm9tVGVybU5vZGVzIiwidGhlb3JlbUZyb21TZWN0aW9uTm9kZSIsInRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUiLCJ0b3BMZXZlbEFzc2VydGlvbkZyb21TZWN0aW9uTm9kZSIsInRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImxpbmVJbmRleCIsInRlcm1Ob2RlIiwiVGVybSIsIm5vZGVBc1N0cmluZyIsInRlcm0iLCJzdGVwTm9kZSIsIlN0ZXAiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwIiwicnVsZU5vZGUiLCJSdWxlIiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJydWxlIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsInRvcExldmVsQXNzc2VydGlvbk5vZGUiLCJkZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwidG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2VjdGlvbk5vZGUiLCJTZWN0aW9uIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwicHJlbWlzZU5vZGUiLCJQcmVtaXNlIiwicHJvY2VkdXJlQ2FsbCIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJqdWRnZW1lbnROb2RlIiwiSnVkZ2VtZW50IiwiYXNzdW1wdGlvbiIsImp1ZGdlbWVudCIsIm1ldGFMZW1tYU5vZGUiLCJNZXRhTGVtbWEiLCJtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25zIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibWV0YUxlbW1hIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsImh5cG90aGVzZU5vZGUiLCJIeXBvdGhlc2lzIiwiaHlwb2h0ZXNpcyIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIlByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIlRlcm1TdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZWVuY2UiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJicmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsIkJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsIlNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJSZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJ0YXJnZXRSZWZlcmVuY2UiLCJyZXBsYWNlbWVudFJlZmVyZW5jZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXNvbHZlZCIsInN1YnN0aXR1dGlvbiIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiQ29tcGxleFR5cGVEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb25zIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwiZ2V0TmFtZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidHlwZW1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJzdGF0ZXNtZW50Tm9kZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZVN0cmluZyIsImZyb21TaWduYXR1cmVTdHJpbmciLCJnZXRMYWJlbE5vZGUiLCJsYWJlbFN0cmluZyIsImZyb21MYWJlbFN0cmluZyIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwieXBvdGhlc2VzIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImlzUHJvdmlzaW9uYWwiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsImdlbmVyYWxDb250eHQiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZVN0cmluZyIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJnZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9kZXMiLCJwcm9wZXJ0eURlY2xyYXRpb25zIiwicHJvcGVydHlEZWNsY2FyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXdlZ0JBO2VBQUFBOztRQXc0QkFDO2VBQUFBOztRQXExQkFDO2VBQUFBOztRQXBoQ0FDO2VBQUFBOztRQTNnQ0FDO2VBQUFBOztRQXcxQkFDO2VBQUFBOztRQTNNQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQTBCQUM7ZUFBQUE7O1FBc29DQUM7ZUFBQUE7O1FBM2lEQUM7ZUFBQUE7O1FBdWZBQztlQUFBQTs7UUF6ZUFDO2VBQUFBOztRQWtxQkFDO2VBQUFBOztRQXJzQkFDO2VBQUFBOztRQXMyQkFDO2VBQUFBOztRQTFXQUM7ZUFBQUE7O1FBbW9DQUM7ZUFBQUE7O1FBemlEQUM7ZUFBQUE7O1FBbU9BQztlQUFBQTs7UUE0bENBQztlQUFBQTs7UUFwZ0RBQztlQUFBQTs7UUF3N0NBQztlQUFBQTs7UUF1TUFDO2VBQUFBOztRQXJ6Q0FDO2VBQUFBOztRQThrQ0FDO2VBQUFBOztRQTN2Q0FDO2VBQUFBOztRQTJzQkFDO2VBQUFBOztRQXYzQkFDO2VBQUFBOztRQXUvQkFDO2VBQUFBOztRQXh3QkFDO2VBQUFBOztRQXhhQUM7ZUFBQUE7O1FBOGdEQUM7ZUFBQUE7O1FBMUdBQztlQUFBQTs7UUFsNENBQztlQUFBQTs7UUE2NkNBQztlQUFBQTs7UUFoY0FDO2VBQUFB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
1853
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2lnbmF0dXJlQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICAgICAgbm9kZSA9IHJ1bGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gIHJldHVybiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2VjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSB0b3BMZXZlbEFzc2VydGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBbmRUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCB0b3BMZXZlbEFzc2VydGlvbiksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBoeXBvdGhlc2VzLCB0b3BMZXZlbEFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBwcmVtaXNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgdHlwZSk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgaWRlbnRpZmllciwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24sIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBzdWJwcm9vZlN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mID0gbmV3IFN1YnByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVkdWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZHVjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlLCB0b3BMZXZlbE1ldGFBc3NlcnRpb24pO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGp1ZGdlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZnJhbWUsIGFzc3VtcHRpb24pO1xuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhTGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YUxlbW1hID0gbmV3IE1ldGFMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YUxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3RoZXNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGh5cG9odGVzaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGNvbmplY3R1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZSA9IG5ldyBDb25qZWN0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uY2x1c2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb24gPSBuZXcgRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWl2YWxlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWl2YWxlbmNlTm9kZSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbUZyb21NZXRhdGhlb3JlbU5vZGUobWV0YXRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGF0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF0aGVvcmVtID0gbmV3IE1ldGF0aGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBPclN1YnByb29mID0gKHN0ZXAgfHwgc3VicHJvb2YpO1xuXG4gIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eVJlbGF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gbmV3IFByb3BlcnR5UmVsYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlZW5jZSA9IG5ldyBQcm9jZWR1cmVSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9wZXJ0eSwgdHlwZSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxldmVsQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbiA9IG5ldyBNZXRhTGV2ZWxBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBuZXcgQnJhY2tldGVkQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbmV3IEJyYWNrZXRlZENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2ltcGxlVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaW1wbGVUeXBlRGVjbGFyYXRpb24gPSBuZXcgU2ltcGxlVHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBzaW1wbGVUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wbGV4VHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nID0gY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHJ1bGVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlTm9kZXMgPSBydWxlTm9kZS5nZXRQcmVtaXNlTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXhpb20gPSBudWxsO1xuXG4gIGNvbnN0IGF4aW9tTm9kZSA9IHNlY3Rpb25Ob2RlLmdldEF4aW9tTm9kZSgpO1xuXG4gIGlmIChheGlvbU5vZGUgIT09IG51bGwpIHtcbiAgICBheGlvbSA9IGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxlbW1hID0gbnVsbDtcblxuICBjb25zdCBsZW1tYU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRMZW1tYU5vZGUoKTtcblxuICBpZiAobGVtbWFOb2RlICE9PSBudWxsKSB7XG4gICAgbGVtbWEgPSBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWU7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVyaXZhdGlvbk5vZGUgPSBwcm9vZk5vZGUuZ2V0RGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gZXF1aXZhbGVuY2VOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJhaWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGF2YXJhaWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICBpZGVudGlmaWVyID0gdmFyaWFibGVJZGVudGlmaWVyOyAgLy8vXG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGRlZHVjdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQganVkZ2VtZW50ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRKdWRnZW1lbnROb2RlKCk7XG5cbiAgaWYgKGp1ZGdlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0ganVkZ2VtZW50Tm9kZS5nZXRBc3N1bXB0aW9uTm9kZSgpLFxuICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25jbHVzaW5vTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdWJEZXJpdmF0aW9uTm9kZSA9IHN1YnByb29mTm9kZS5nZXRTdWJEZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBzdWJEZXJ2aWF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1YkRlcnZpYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBtZXRhdmFyaWFibGVTdHJpbmcsIC8vL1xuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXhpb20gPSBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbW1hID0gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSAoYXhpb20gfHwgbGVtbWEgfHwgdGhlb3JlbSB8fCBjb25qZWN0dXJlKTtcblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHNpZ25hdHVyZU5vZGUpO1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21TaWduYXR1cmVTdHJpbmcoc2lnbmF0dXJlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkgezBcbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc2lnbmF0dXJlTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhzaWduYXR1cmVOb2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21TaWduYXR1cmVTdHJpbmcoc2lnbmF0dXJlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldEZyYW1lTm9kZSgpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZSh0YXJnZXRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmlzUmVzb2x2ZWQoKTtcblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvbiA9IG51bGw7XG5cbiAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJlcGxhY2VtZW50VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKSxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbWJpbmF0b3JOb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YVR5cGVOYW1lID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShyZXBsYWNlbWVudEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbk5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSAoZnJhbWVTdWJzdGl0dXRpb24gfHwgdGVybVN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBbXTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcygpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlEZWNsY2FyYXRpb24gPSBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlY2xjYXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbHJhdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzIiwiaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbXRlck5vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVByb3BlcnR5Tm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4TmFtZUZyb21UeXBlTm9kZSIsInByZW1pc2VGcm9tUHJlbWlzZU5vZGUiLCJwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMiLCJwcmVtaXNlc0Zyb21SdWxlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb29mRnJvbVJ1bGVOb2RlIiwicHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwicHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsInByb3BlcnRpZXNGcm9tVHlwZU5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVGVybU5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZSIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInN0YXRlbWVudEZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlTm9kZSIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyIsInN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsInRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRvcExldmVsQXNzZXJ0aW9uRnJvbVNlY3Rpb25Ob2RlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJ0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Qcm9wZXJ0eU5vZGUiLCJ0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVRlcm1Ob2RlIiwidHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tVHlwZU5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUiLCJ0eXBlc0Zyb21UeXBlc05vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVOb2RlIiwiY29udGV4dCIsInR5cGUiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJUeXBlIiwiZWxlbWVudHMiLCJub2RlIiwibmFtZSIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwic3RyaW5nIiwiYnJlYWtQb2ludCIsInRlcm1Ob2RlIiwiVGVybSIsIm5vZGVBc1N0cmluZyIsInRlcm0iLCJzdGVwTm9kZSIsIlN0ZXAiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwIiwicnVsZU5vZGUiLCJSdWxlIiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJydWxlIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsInRvcExldmVsQXNzc2VydGlvbk5vZGUiLCJkZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwidG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2VjdGlvbk5vZGUiLCJTZWN0aW9uIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzQW5kVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwicHJlbWlzZU5vZGUiLCJQcmVtaXNlIiwicHJvY2VkdXJlQ2FsbCIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJqdWRnZW1lbnROb2RlIiwiSnVkZ2VtZW50IiwiYXNzdW1wdGlvbiIsImp1ZGdlbWVudCIsIm1ldGFMZW1tYU5vZGUiLCJNZXRhTGVtbWEiLCJtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25zIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibWV0YUxlbW1hIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsImh5cG90aGVzZU5vZGUiLCJIeXBvdGhlc2lzIiwiaHlwb2h0ZXNpcyIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIlByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIlRlcm1TdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZWVuY2UiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJicmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsIkJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsIlNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJSZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJ0YXJnZXRSZWZlcmVuY2UiLCJyZXBsYWNlbWVudFJlZmVyZW5jZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXNvbHZlZCIsInN1YnN0aXR1dGlvbiIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiQ29tcGxleFR5cGVEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb25zIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwiZ2V0TmFtZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidHlwZW1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJzdGF0ZXNtZW50Tm9kZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZVN0cmluZyIsImZyb21TaWduYXR1cmVTdHJpbmciLCJnZXRMYWJlbE5vZGUiLCJsYWJlbFN0cmluZyIsImZyb21MYWJlbFN0cmluZyIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwieXBvdGhlc2VzIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImlzUHJvdmlzaW9uYWwiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsImdlbmVyYWxDb250eHQiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZVN0cmluZyIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJnZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9kZXMiLCJwcm9wZXJ0eURlY2xyYXRpb25zIiwicHJvcGVydHlEZWNsY2FyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXdlZ0JBO2VBQUFBOztRQXc0QkFDO2VBQUFBOztRQXExQkFDO2VBQUFBOztRQXBoQ0FDO2VBQUFBOztRQTNnQ0FDO2VBQUFBOztRQXcxQkFDO2VBQUFBOztRQTNNQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQTBCQUM7ZUFBQUE7O1FBc29DQUM7ZUFBQUE7O1FBM2lEQUM7ZUFBQUE7O1FBdWZBQztlQUFBQTs7UUF6ZUFDO2VBQUFBOztRQWtxQkFDO2VBQUFBOztRQXJzQkFDO2VBQUFBOztRQXMyQkFDO2VBQUFBOztRQTFXQUM7ZUFBQUE7O1FBbW9DQUM7ZUFBQUE7O1FBemlEQUM7ZUFBQUE7O1FBbU9BQztlQUFBQTs7UUE0bENBQztlQUFBQTs7UUFwZ0RBQztlQUFBQTs7UUF3N0NBQztlQUFBQTs7UUF1TUFDO2VBQUFBOztRQXJ6Q0FDO2VBQUFBOztRQThrQ0FDO2VBQUFBOztRQTN2Q0FDO2VBQUFBOztRQTJzQkFDO2VBQUFBOztRQXYzQkFD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