@finbourne/lusid-sdk-angular18 0.11.10154 → 0.11.10184
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/.generated/api/aggregatedReturns.service.mjs +1 -1
- package/esm2022/lib/.generated/api/allocationMaps.service.mjs +1 -1
- package/esm2022/lib/.generated/api/funds.service.mjs +5 -1
- package/esm2022/lib/.generated/api/instrumentEventTypes.service.mjs +1 -1
- package/esm2022/lib/.generated/api/transfers.service.mjs +83 -1
- package/esm2022/lib/.generated/api/withholdingTax.service.mjs +165 -1
- package/esm2022/lib/.generated/model/accumulationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/adjustGlobalCommitmentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/aggregatedReturnsEntityRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/amendCommitmentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/amortisationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bankruptcyEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/batchUpsertWithholdingTaxRatesResponse.mjs +2 -0
- package/esm2022/lib/.generated/model/bondCouponEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bondDefaultEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bondForwardCashSettlementEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bondForwardTerminationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bondLookupModelOptions.mjs +1 -1
- package/esm2022/lib/.generated/model/bondOptionTerminationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bondPrincipalEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bonusIssueEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/bucketDefinition.mjs +1 -1
- package/esm2022/lib/.generated/model/callOnIntermediateSecuritiesEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/cancelSwapEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/capitalCallEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/capitalDistributionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/capitalGainsDistributionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/capletFloorletCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/cashDividendEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/cashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/cdsCreditEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/cdxCreditEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/changeEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/classActionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/closeEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/commodityCalendarSwapCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/commodityForwardCashSettlementEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/commodityForwardPhysicalSettlementEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/consentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/contractInitialisationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/conversionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/createPropertyDefinitionRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/createTransferRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/createTransferResponse.mjs +1 -1
- package/esm2022/lib/.generated/model/creditPremiumCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/deleteWithholdingTaxRateRequest.mjs +12 -0
- package/esm2022/lib/.generated/model/delistingEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/depositCloseEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/depositInterestPaymentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/depositRollEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/depositSweepEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/dividendOptionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/dividendReinvestmentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/dividendSuspensionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/drawdownEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/drawingEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/dutchAuctionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/earlyCloseOutEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/earlyRedemptionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/exchangeOfferEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/exerciseEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/expiryEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/flexibleRepoCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/flexibleRepoCollateralEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/flexibleRepoFullClosureEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/flexibleRepoInterestPaymentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/flexibleRepoPartialClosureEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/fund.mjs +1 -1
- package/esm2022/lib/.generated/model/fundDefinitionRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/fundDetails.mjs +1 -11
- package/esm2022/lib/.generated/model/fundDistributionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/fundRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/fundStructureDriftMateriality.mjs +12 -0
- package/esm2022/lib/.generated/model/fundStructureNode.mjs +1 -1
- package/esm2022/lib/.generated/model/futureExpiryEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/futureMarkToMarketEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/fxForwardSettlementEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/getTransferRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/globalLoanFacilityContractState.mjs +2 -0
- package/esm2022/lib/.generated/model/globalLoanFacilityReinitialisationEvent.mjs +120 -0
- package/esm2022/lib/.generated/model/hullWhiteModelOptions.mjs +1 -1
- package/esm2022/lib/.generated/model/informationalErrorEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/informationalEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/instrumentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/instrumentEventType.mjs +4 -2
- package/esm2022/lib/.generated/model/interestPaymentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/intermediateSecuritiesDistributionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/investorLoanFacilityReinitialisationEvent.mjs +120 -0
- package/esm2022/lib/.generated/model/liquidationPaymentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/loanFacilityContractRolloverEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/loanFacilityDelayedCompensationPaymentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/loanFacilityTaxLotAllocation.mjs +2 -0
- package/esm2022/lib/.generated/model/loanFacilityTaxLotState.mjs +12 -0
- package/esm2022/lib/.generated/model/loanInterestCapitalisationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/loanInterestRepaymentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/loanPrincipalRepaymentEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/marketContext.mjs +1 -1
- package/esm2022/lib/.generated/model/marketOptions.mjs +1 -1
- package/esm2022/lib/.generated/model/maturityEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/mbsCouponEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/mbsInterestDeferralEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/mbsInterestShortfallEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/mbsPrincipalEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/mbsPrincipalWriteOffEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/mergerEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/models.mjs +20 -2
- package/esm2022/lib/.generated/model/namedPrice.mjs +12 -0
- package/esm2022/lib/.generated/model/navReportEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/navType.mjs +1 -1
- package/esm2022/lib/.generated/model/navTypeDefinition.mjs +1 -1
- package/esm2022/lib/.generated/model/openEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/optionExerciseCashEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/optionExercisePhysicalEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/outputTransaction.mjs +4 -2
- package/esm2022/lib/.generated/model/pariPassuEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/partialDefeasanceEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/paymentInKindEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/pikBondCashCouponEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/pikBondCouponEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/pikBondInterestCapitalisationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/pikBondInterestEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/pikBondPrincipalEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/pricingOptions.mjs +1 -1
- package/esm2022/lib/.generated/model/priorityIssueEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/propertyDefinition.mjs +1 -1
- package/esm2022/lib/.generated/model/protectionPayoutCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/putRedemptionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/{getTransferResponse.mjs → qualifierDefinition.mjs} +1 -1
- package/esm2022/lib/.generated/model/qualifierDefinitionRequest.mjs +2 -0
- package/esm2022/lib/.generated/model/rawVendorEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/repoCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/repoPartialClosureEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/repurchaseOfferEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/resetEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/resourceListOfTransfer.mjs +2 -0
- package/esm2022/lib/.generated/model/reverseStockSplitEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/revertValuationPointResponse.mjs +2 -0
- package/esm2022/lib/.generated/model/scripDividendEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/securityWriteOffEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/spinOffEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/stockDividendEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/stockSplitEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/swapCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/swapPrincipalEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/swingPricingDecision.mjs +12 -0
- package/esm2022/lib/.generated/model/swingPricingRule.mjs +12 -0
- package/esm2022/lib/.generated/model/targetTaxLot.mjs +1 -1
- package/esm2022/lib/.generated/model/targetTaxLotRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/tenderEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/termDepositInterestEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/termDepositPrincipalEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/terminationEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/totalReturnSwapCashFlowEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/transaction.mjs +4 -2
- package/esm2022/lib/.generated/model/transactionSettlementInstruction.mjs +1 -1
- package/esm2022/lib/.generated/model/transactionStatus.mjs +4 -2
- package/esm2022/lib/.generated/model/transactionTemplateSpecification.mjs +1 -1
- package/esm2022/lib/.generated/model/transfer.mjs +2 -0
- package/esm2022/lib/.generated/model/transitionEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/triggerEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/updateDepositAmountEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/updatePropertyDefinitionRequest.mjs +1 -11
- package/esm2022/lib/.generated/model/upsertWithholdingTaxRateRequest.mjs +12 -0
- package/esm2022/lib/.generated/model/valuationPointDataResponse.mjs +1 -1
- package/esm2022/lib/.generated/model/valuationPointDiagnostic.mjs +12 -0
- package/esm2022/lib/.generated/model/valuationRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/warrantsExerciseEvent.mjs +4 -2
- package/esm2022/lib/.generated/model/wholeLoanFacility.mjs +1 -1
- package/esm2022/lib/.generated/model/withholdingTaxRateResponse.mjs +2 -0
- package/esm2022/lib/.generated/model/worthlessEvent.mjs +4 -2
- package/fesm2022/finbourne-lusid-sdk-angular18.mjs +930 -140
- package/fesm2022/finbourne-lusid-sdk-angular18.mjs.map +2 -2
- package/lib/.generated/api/aggregatedReturns.service.d.ts +1 -1
- package/lib/.generated/api/allocationMaps.service.d.ts +2 -2
- package/lib/.generated/api/funds.service.d.ts +7 -4
- package/lib/.generated/api/instrumentEventTypes.service.d.ts +5 -5
- package/lib/.generated/api/transfers.service.d.ts +41 -4
- package/lib/.generated/api/withholdingTax.service.d.ts +72 -0
- package/lib/.generated/model/accumulationEvent.d.ts +4 -2
- package/lib/.generated/model/adjustGlobalCommitmentEvent.d.ts +4 -2
- package/lib/.generated/model/aggregatedReturnsEntityRequest.d.ts +3 -2
- package/lib/.generated/model/amendCommitmentEvent.d.ts +4 -2
- package/lib/.generated/model/amortisationEvent.d.ts +4 -2
- package/lib/.generated/model/bankruptcyEvent.d.ts +4 -2
- package/lib/.generated/model/batchUpsertWithholdingTaxRatesResponse.d.ts +32 -0
- package/lib/.generated/model/bondCouponEvent.d.ts +4 -2
- package/lib/.generated/model/bondDefaultEvent.d.ts +4 -2
- package/lib/.generated/model/bondForwardCashSettlementEvent.d.ts +4 -2
- package/lib/.generated/model/bondForwardTerminationEvent.d.ts +4 -2
- package/lib/.generated/model/bondLookupModelOptions.d.ts +8 -0
- package/lib/.generated/model/bondOptionTerminationEvent.d.ts +4 -2
- package/lib/.generated/model/bondPrincipalEvent.d.ts +4 -2
- package/lib/.generated/model/bonusIssueEvent.d.ts +4 -2
- package/lib/.generated/model/bucketDefinition.d.ts +5 -0
- package/lib/.generated/model/callOnIntermediateSecuritiesEvent.d.ts +4 -2
- package/lib/.generated/model/cancelSwapEvent.d.ts +4 -2
- package/lib/.generated/model/capitalCallEvent.d.ts +4 -2
- package/lib/.generated/model/capitalDistributionEvent.d.ts +4 -2
- package/lib/.generated/model/capitalGainsDistributionEvent.d.ts +4 -2
- package/lib/.generated/model/capletFloorletCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/cashDividendEvent.d.ts +4 -2
- package/lib/.generated/model/cashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/cdsCreditEvent.d.ts +4 -2
- package/lib/.generated/model/cdxCreditEvent.d.ts +4 -2
- package/lib/.generated/model/changeEvent.d.ts +4 -2
- package/lib/.generated/model/classActionEvent.d.ts +4 -2
- package/lib/.generated/model/closeEvent.d.ts +4 -2
- package/lib/.generated/model/commodityCalendarSwapCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/commodityForwardCashSettlementEvent.d.ts +4 -2
- package/lib/.generated/model/commodityForwardPhysicalSettlementEvent.d.ts +4 -2
- package/lib/.generated/model/consentEvent.d.ts +4 -2
- package/lib/.generated/model/contractInitialisationEvent.d.ts +4 -2
- package/lib/.generated/model/conversionEvent.d.ts +4 -2
- package/lib/.generated/model/createPropertyDefinitionRequest.d.ts +5 -0
- package/lib/.generated/model/createTransferRequest.d.ts +63 -3
- package/lib/.generated/model/createTransferResponse.d.ts +9 -0
- package/lib/.generated/model/creditPremiumCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/{getTransferResponse.d.ts → deleteWithholdingTaxRateRequest.d.ts} +10 -15
- package/lib/.generated/model/delistingEvent.d.ts +4 -2
- package/lib/.generated/model/depositCloseEvent.d.ts +4 -2
- package/lib/.generated/model/depositInterestPaymentEvent.d.ts +4 -2
- package/lib/.generated/model/depositRollEvent.d.ts +4 -2
- package/lib/.generated/model/depositSweepEvent.d.ts +4 -2
- package/lib/.generated/model/dividendOptionEvent.d.ts +4 -2
- package/lib/.generated/model/dividendReinvestmentEvent.d.ts +4 -2
- package/lib/.generated/model/dividendSuspensionEvent.d.ts +4 -2
- package/lib/.generated/model/drawdownEvent.d.ts +4 -2
- package/lib/.generated/model/drawingEvent.d.ts +4 -2
- package/lib/.generated/model/dutchAuctionEvent.d.ts +4 -2
- package/lib/.generated/model/earlyCloseOutEvent.d.ts +4 -2
- package/lib/.generated/model/earlyRedemptionEvent.d.ts +4 -2
- package/lib/.generated/model/exchangeOfferEvent.d.ts +4 -2
- package/lib/.generated/model/exerciseEvent.d.ts +4 -2
- package/lib/.generated/model/expiryEvent.d.ts +4 -2
- package/lib/.generated/model/flexibleRepoCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/flexibleRepoCollateralEvent.d.ts +4 -2
- package/lib/.generated/model/flexibleRepoFullClosureEvent.d.ts +4 -2
- package/lib/.generated/model/flexibleRepoInterestPaymentEvent.d.ts +4 -2
- package/lib/.generated/model/flexibleRepoPartialClosureEvent.d.ts +4 -2
- package/lib/.generated/model/fund.d.ts +5 -1
- package/lib/.generated/model/fundDefinitionRequest.d.ts +5 -1
- package/lib/.generated/model/fundDetails.d.ts +6 -0
- package/lib/.generated/model/fundDistributionEvent.d.ts +4 -2
- package/lib/.generated/model/fundRequest.d.ts +1 -1
- package/lib/.generated/model/fundStructureDriftMateriality.d.ts +23 -0
- package/lib/.generated/model/fundStructureNode.d.ts +2 -0
- package/lib/.generated/model/futureExpiryEvent.d.ts +4 -2
- package/lib/.generated/model/futureMarkToMarketEvent.d.ts +4 -2
- package/lib/.generated/model/fxForwardSettlementEvent.d.ts +4 -2
- package/lib/.generated/model/getTransferRequest.d.ts +3 -0
- package/lib/.generated/model/globalLoanFacilityContractState.d.ts +29 -0
- package/lib/.generated/model/globalLoanFacilityReinitialisationEvent.d.ts +152 -0
- package/lib/.generated/model/hullWhiteModelOptions.d.ts +8 -0
- package/lib/.generated/model/informationalErrorEvent.d.ts +4 -2
- package/lib/.generated/model/informationalEvent.d.ts +4 -2
- package/lib/.generated/model/instrumentEvent.d.ts +4 -2
- package/lib/.generated/model/instrumentEventType.d.ts +3 -1
- package/lib/.generated/model/interestPaymentEvent.d.ts +4 -2
- package/lib/.generated/model/intermediateSecuritiesDistributionEvent.d.ts +4 -2
- package/lib/.generated/model/investorLoanFacilityReinitialisationEvent.d.ts +161 -0
- package/lib/.generated/model/liquidationPaymentEvent.d.ts +4 -2
- package/lib/.generated/model/loanFacilityContractRolloverEvent.d.ts +4 -2
- package/lib/.generated/model/loanFacilityDelayedCompensationPaymentEvent.d.ts +4 -2
- package/lib/.generated/model/loanFacilityTaxLotAllocation.d.ts +37 -0
- package/lib/.generated/model/loanFacilityTaxLotState.d.ts +35 -0
- package/lib/.generated/model/loanInterestCapitalisationEvent.d.ts +4 -2
- package/lib/.generated/model/loanInterestRepaymentEvent.d.ts +4 -2
- package/lib/.generated/model/loanPrincipalRepaymentEvent.d.ts +4 -2
- package/lib/.generated/model/marketContext.d.ts +8 -0
- package/lib/.generated/model/marketOptions.d.ts +4 -0
- package/lib/.generated/model/maturityEvent.d.ts +4 -2
- package/lib/.generated/model/mbsCouponEvent.d.ts +4 -2
- package/lib/.generated/model/mbsInterestDeferralEvent.d.ts +4 -2
- package/lib/.generated/model/mbsInterestShortfallEvent.d.ts +4 -2
- package/lib/.generated/model/mbsPrincipalEvent.d.ts +4 -2
- package/lib/.generated/model/mbsPrincipalWriteOffEvent.d.ts +4 -2
- package/lib/.generated/model/mergerEvent.d.ts +4 -2
- package/lib/.generated/model/models.d.ts +19 -1
- package/lib/.generated/model/namedPrice.d.ts +27 -0
- package/lib/.generated/model/navReportEvent.d.ts +4 -2
- package/lib/.generated/model/navType.d.ts +7 -0
- package/lib/.generated/model/navTypeDefinition.d.ts +7 -0
- package/lib/.generated/model/openEvent.d.ts +4 -2
- package/lib/.generated/model/optionExerciseCashEvent.d.ts +4 -2
- package/lib/.generated/model/optionExercisePhysicalEvent.d.ts +4 -2
- package/lib/.generated/model/outputTransaction.d.ts +4 -2
- package/lib/.generated/model/pariPassuEvent.d.ts +4 -2
- package/lib/.generated/model/partialDefeasanceEvent.d.ts +4 -2
- package/lib/.generated/model/paymentInKindEvent.d.ts +4 -2
- package/lib/.generated/model/pikBondCashCouponEvent.d.ts +4 -2
- package/lib/.generated/model/pikBondCouponEvent.d.ts +4 -2
- package/lib/.generated/model/pikBondInterestCapitalisationEvent.d.ts +4 -2
- package/lib/.generated/model/pikBondInterestEvent.d.ts +4 -2
- package/lib/.generated/model/pikBondPrincipalEvent.d.ts +4 -2
- package/lib/.generated/model/pricingOptions.d.ts +5 -0
- package/lib/.generated/model/priorityIssueEvent.d.ts +4 -2
- package/lib/.generated/model/propertyDefinition.d.ts +5 -0
- package/lib/.generated/model/protectionPayoutCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/putRedemptionEvent.d.ts +4 -2
- package/lib/.generated/model/qualifierDefinition.d.ts +37 -0
- package/lib/.generated/model/qualifierDefinitionRequest.d.ts +33 -0
- package/lib/.generated/model/rawVendorEvent.d.ts +4 -2
- package/lib/.generated/model/repoCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/repoPartialClosureEvent.d.ts +4 -2
- package/lib/.generated/model/repurchaseOfferEvent.d.ts +4 -2
- package/lib/.generated/model/resetEvent.d.ts +4 -2
- package/lib/.generated/model/resourceListOfTransfer.d.ts +19 -0
- package/lib/.generated/model/reverseStockSplitEvent.d.ts +4 -2
- package/lib/.generated/model/revertValuationPointResponse.d.ts +50 -0
- package/lib/.generated/model/scripDividendEvent.d.ts +4 -2
- package/lib/.generated/model/securityWriteOffEvent.d.ts +4 -2
- package/lib/.generated/model/spinOffEvent.d.ts +4 -2
- package/lib/.generated/model/stockDividendEvent.d.ts +4 -2
- package/lib/.generated/model/stockSplitEvent.d.ts +4 -2
- package/lib/.generated/model/swapCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/swapPrincipalEvent.d.ts +4 -2
- package/lib/.generated/model/swingPricingDecision.d.ts +35 -0
- package/lib/.generated/model/swingPricingRule.d.ts +27 -0
- package/lib/.generated/model/targetTaxLot.d.ts +4 -0
- package/lib/.generated/model/targetTaxLotRequest.d.ts +4 -0
- package/lib/.generated/model/tenderEvent.d.ts +4 -2
- package/lib/.generated/model/termDepositInterestEvent.d.ts +4 -2
- package/lib/.generated/model/termDepositPrincipalEvent.d.ts +4 -2
- package/lib/.generated/model/terminationEvent.d.ts +5 -3
- package/lib/.generated/model/totalReturnSwapCashFlowEvent.d.ts +4 -2
- package/lib/.generated/model/transaction.d.ts +4 -2
- package/lib/.generated/model/transactionSettlementInstruction.d.ts +4 -0
- package/lib/.generated/model/transactionStatus.d.ts +3 -1
- package/lib/.generated/model/transactionTemplateSpecification.d.ts +1 -1
- package/lib/.generated/model/transfer.d.ts +41 -0
- package/lib/.generated/model/transitionEvent.d.ts +4 -2
- package/lib/.generated/model/triggerEvent.d.ts +4 -2
- package/lib/.generated/model/updateDepositAmountEvent.d.ts +4 -2
- package/lib/.generated/model/updatePropertyDefinitionRequest.d.ts +5 -0
- package/lib/.generated/model/upsertWithholdingTaxRateRequest.d.ts +34 -0
- package/lib/.generated/model/valuationPointDataResponse.d.ts +9 -0
- package/lib/.generated/model/valuationPointDiagnostic.d.ts +29 -0
- package/lib/.generated/model/valuationRequest.d.ts +1 -0
- package/lib/.generated/model/warrantsExerciseEvent.d.ts +4 -2
- package/lib/.generated/model/wholeLoanFacility.d.ts +1 -1
- package/lib/.generated/model/withholdingTaxRateResponse.d.ts +43 -0
- package/lib/.generated/model/worthlessEvent.d.ts +4 -2
- package/package.json +1 -1
|
@@ -597,4 +597,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
597
597
|
}] }, { type: i2.Configuration, decorators: [{
|
|
598
598
|
type: Optional
|
|
599
599
|
}] }] });
|
|
600
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudEV2ZW50VHlwZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvaW5zdHJ1bWVudEV2ZW50VHlwZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQWtCL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQTBCLGNBQWMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBZ0ZyRixNQUFNLE9BQU8sMkJBQTJCO0lBT2Q7SUFMWixRQUFRLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxP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QWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQzt1R0F2c0JRLDJCQUEyQiw0Q0FPNkIsU0FBUzsyR0FQakUsMkJBQTJCLGNBRjFCLE1BQU07OzJGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFrRCxRQUFROzswQkFBRyxNQUFNOzJCQUFDLFNBQVM7OzBCQUE4QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMVVNJRCBBUElcbiAqICMgSW50cm9kdWN0aW9uICBUaGlzIHBhZ2UgZG9jdW1lbnRzIHRoZSBbTFVTSUQgQVBJc10oLi4vLi4vLi4vYXBpL3N3YWdnZXIpLCB3aGljaCBhbGxvd3MgYXV0aG9yaXNlZCBjbGllbnRzIHRvIHF1ZXJ5IGFuZCB1cGRhdGUgdGhlaXIgZGF0YSB3aXRoaW4gdGhlIExVU0lEIHBsYXRmb3JtLiAgU0RLcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBMVVNJRCBBUElzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGZvbGxvd2luZyBsYW5ndWFnZXMgYW5kIGZyYW1ld29ya3M6ICAqIFtDI10oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstY3NoYXJwKSAqIFtKYXZhXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1qYXZhKSAqIFtKYXZhU2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1qcykgKiBbUHl0aG9uXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1weXRob24pICogW0FuZ3VsYXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWFuZ3VsYXIpICBUaGUgTFVTSUQgcGxhdGZvcm0gaXMgbWFkZSB1cCBvZiBhIG51bWJlciBvZiBzdWItYXBwbGljYXRpb25zLiBZb3UgY2FuIGZpbmQgdGhlIEFQSSAvIHN3YWdnZXIgZG9jdW1lbnRhdGlvbiBieSBmb2xsb3dpbmcgdGhlIGxpbmtzIGluIHRoZSB0YWJsZSBiZWxvdy4gICB8IEFwcGxpY2F0aW9uICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBUEkgLyBTd2FnZ2VyIERvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgTFVTSUQgICAgICAgICB8IE9wZW4sIEFQSS1maXJzdCwgZGV2ZWxvcGVyLWZyaWVuZGx5IGludmVzdG1lbnQgZGF0YSBwbGF0Zm9ybS4gICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hcGkvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgICAgfCB8IFdlYiBhcHAgICAgICAgfCBVc2VyLWZhY2luZyBmcm9udCBlbmQgZm9yIExVU0lELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYXBwL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICAgIHwgfCBTY2hlZHVsZXIgICAgIHwgQXV0b21hdGVkIGpvYiBzY2hlZHVsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL3NjaGVkdWxlcjIvc3dhZ2dlci9pbmRleC5odG1sKSAgICB8IHwgSW5zaWdodHMgICAgICB8IE1vbml0b3JpbmcgYW5kIHRyb3VibGVzaG9vdGluZyBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9pbnNpZ2h0cy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCB8IElkZW50aXR5ICAgICAgfCBJZGVudGl0eSBtYW5hZ2VtZW50IGZvciBMVVNJRCAoaW4gY29uanVuY3Rpb24gd2l0aCBBY2Nlc3MpICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaWRlbnRpdHkvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgfCBBY2Nlc3MgICAgICAgIHwgQWNjZXNzIGNvbnRyb2wgZm9yIExVU0lEIChpbiBjb25qdW5jdGlvbiB3aXRoIElkZW50aXR5KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FjY2Vzcy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICB8IHwgRHJpdmUgICAgICAgICB8IFNlY3VyZSBmaWxlIHJlcG9zaXRvcnkgYW5kIG1hbmFnZXIgZm9yIGNvbGxhYm9yYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9kcml2ZS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgfCB8IEx1bWluZXNjZSAgICAgfCBEYXRhIHZpcnR1YWxpc2F0aW9uIHNlcnZpY2UgKHF1ZXJ5IGRhdGEgZnJvbSBtdWx0aXBsZSBwcm92aWRlcnMsIGluY2x1ZGluZyBMVVNJRCkgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaG9uZXljb21iL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgIHwgfCBOb3RpZmljYXRpb24gIHwgTm90aWZpY2F0aW9uIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL25vdGlmaWNhdGlvbi9zd2FnZ2VyL2luZGV4Lmh0bWwpICB8IHwgQ29uZmlndXJhdGlvbiB8IEZpbGUgc3RvcmUgZm9yIHNlY3JldHMgYW5kIG90aGVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9jb25maWd1cmF0aW9uL3N3YWdnZXIvaW5kZXguaHRtbCkgfCB8IFdvcmtmbG93ICAgICAgfCBXb3JrZmxvdyBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vd29ya2Zsb3cvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgICAjIEVycm9yIENvZGVzICB8IENvZGV8TmFtZXxEZXNjcmlwdGlvbiB8IHwgLS0tfC0tLXwtLS0gfCB8IDxhIG5hbWU9XFxcIi0xMFxcXCI+LTEwPC9hPnxTZXJ2ZXIgQ29uZmlndXJhdGlvbiBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCItMVxcXCI+LTE8L2E+fFVua25vd24gZXJyb3J8QW4gdW5leHBlY3RlZCBlcnJvciB3YXMgZW5jb3VudGVyZWQgb24gb3VyIHNpZGUuIHwgfCA8YSBuYW1lPVxcXCIxMDJcXFwiPjEwMjwvYT58VmVyc2lvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTAzXFxcIj4xMDM8L2E+fEFwaSBSYXRlIExpbWl0IFZpb2xhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIxMDRcXFwiPjEwNDwvYT58SW5zdHJ1bWVudCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA1XFxcIj4xMDU8L2E+fFByb3BlcnR5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDZcXFwiPjEwNjwvYT58UG9ydGZvbGlvIFJlY3Vyc2lvbiBEZXB0aHwgIHwgfCA8YSBuYW1lPVxcXCIxMDhcXFwiPjEwODwvYT58R3JvdXAgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwOVxcXCI+MTA5PC9hPnxQb3J0Zm9saW8gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMFxcXCI+MTEwPC9hPnxQcm9wZXJ0eSBTY2hlbWEgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMVxcXCI+MTExPC9hPnxQb3J0Zm9saW8gQW5jZXN0cnkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMlxcXCI+MTEyPC9hPnxQb3J0Zm9saW8gV2l0aCBJZCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMTNcXFwiPjExMzwvYT58T3JwaGFuZWQgUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjExOVxcXCI+MTE5PC9hPnxNaXNzaW5nIEJhc2UgQ2xhaW1zfCAgfCB8IDxhIG5hbWU9XFxcIjEyMVxcXCI+MTIxPC9hPnxQcm9wZXJ0eSBOb3QgRGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCIxMjJcXFwiPjEyMjwvYT58Q2Fubm90IERlbGV0ZSBTeXN0ZW0gUHJvcGVydHl8ICB8IHwgPGEgbmFtZT1cXFwiMTIzXFxcIj4xMjM8L2E+fENhbm5vdCBNb2RpZnkgSW1tdXRhYmxlIFByb3BlcnR5IEZpZWxkfCAgfCB8IDxhIG5hbWU9XFxcIjEyNFxcXCI+MTI0PC9hPnxQcm9wZXJ0eSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMjVcXFwiPjEyNTwvYT58SW52YWxpZCBQcm9wZXJ0eSBMaWZlIFRpbWV8ICB8IHwgPGEgbmFtZT1cXFwiMTI2XFxcIj4xMjY8L2E+fFByb3BlcnR5IENvbnN0cmFpbnQgU3R5bGUgRXhjbHVkZXMgUHJvcGVydGllc3wgIHwgfCA8YSBuYW1lPVxcXCIxMjdcXFwiPjEyNzwvYT58Q2Fubm90IE1vZGlmeSBEZWZhdWx0IERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMjhcXFwiPjEyODwvYT58R3JvdXAgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTI5XFxcIj4xMjk8L2E+fE5vIFN1Y2ggRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMFxcXCI+MTMwPC9hPnxVbmRlZmluZWQgVmFsdWUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzFcXFwiPjEzMTwvYT58VW5zdXBwb3J0ZWQgVmFsdWUgVHlwZSBEZWZpbmVkIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzJcXFwiPjEzMjwvYT58VmFsaWRhdGlvbiBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIxMzNcXFwiPjEzMzwvYT58TG9vcCBEZXRlY3RlZCBJbiBHcm91cCBIaWVyYXJjaHl8ICB8IHwgPGEgbmFtZT1cXFwiMTM0XFxcIj4xMzQ8L2E+fFVuZGVmaW5lZCBBY2NlcHRhYmxlIFZhbHVlc3wgIHwgfCA8YSBuYW1lPVxcXCIxMzVcXFwiPjEzNTwvYT58U3ViIEdyb3VwIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEzOFxcXCI+MTM4PC9hPnxQcmljZSBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEzOVxcXCI+MTM5PC9hPnxBbmFseXRpYyBTdG9yZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTQxXFxcIj4xNDE8L2E+fEFuYWx5dGljIFN0b3JlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE0M1xcXCI+MTQzPC9hPnxDbGllbnQgSW5zdHJ1bWVudCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNDRcXFwiPjE0NDwvYT58RHVwbGljYXRlIEluIFBhcmFtZXRlciBTZXR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ3XFxcIj4xNDc8L2E+fFJlc3VsdHMgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE0OFxcXCI+MTQ4PC9hPnxPcmRlciBGaWVsZCBOb3QgSW4gUmVzdWx0IFNldHwgIHwgfCA8YSBuYW1lPVxcXCIxNDlcXFwiPjE0OTwvYT58T3BlcmF0aW9uIEZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCIxNTBcXFwiPjE1MDwvYT58RWxhc3RpYyBTZWFyY2ggRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMTUxXFxcIj4xNTE8L2E+fEludmFsaWQgUGFyYW1ldGVyIFZhbHVlfCAgfCB8IDxhIG5hbWU9XFxcIjE1M1xcXCI+MTUzPC9hPnxDb21tYW5kIFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTRcXFwiPjE1NDwvYT58RW50aXR5IFN0YXRlIENvbnN0cnVjdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1NVxcXCI+MTU1PC9hPnxFbnRpdHkgVGltZWxpbmUgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTU2XFxcIj4xNTY8L2E+fENvbmN1cnJlbmN5IENvbmZsaWN0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU3XFxcIj4xNTc8L2E+fEludmFsaWQgUmVxdWVzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNThcXFwiPjE1ODwvYT58RXZlbnQgUHVibGlzaCBVbmtub3dufCAgfCB8IDxhIG5hbWU9XFxcIjE1OVxcXCI+MTU5PC9hPnxFdmVudCBRdWVyeSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2MFxcXCI+MTYwPC9hPnxCbG9iIERpZCBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTYyXFxcIj4xNjI8L2E+fFN1YiBTeXN0ZW0gUmVxdWVzdCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2M1xcXCI+MTYzPC9hPnxTdWIgU3lzdGVtIENvbmZpZ3VyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjVcXFwiPjE2NTwvYT58RmFpbGVkIFRvIERlbGV0ZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjZcXFwiPjE2NjwvYT58VXBzZXJ0IENsaWVudCBJbnN0cnVtZW50IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTY3XFxcIj4xNjc8L2E+fElsbGVnYWwgQXMgQXQgSW50ZXJ2YWx8ICB8IHwgPGEgbmFtZT1cXFwiMTY4XFxcIj4xNjg8L2E+fElsbGVnYWwgQml0ZW1wb3JhbCBRdWVyeXwgIHwgfCA8YSBuYW1lPVxcXCIxNjlcXFwiPjE2OTwvYT58SW52YWxpZCBBbHRlcm5hdGUgSWR8ICB8IHwgPGEgbmFtZT1cXFwiMTcwXFxcIj4xNzA8L2E+fENhbm5vdCBBZGQgTm9uLVdyaXRhYmxlIFByb3BlcnRpZXMgVG8gRW50aXR5fCAgfCB8IDxhIG5hbWU9XFxcIjE3MVxcXCI+MTcxPC9hPnxFbnRpdHkgQWxyZWFkeSBFeGlzdHMgSW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiMTcyXFxcIj4xNzI8L2E+fEVudGl0eSBXaXRoIElkIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE3M1xcXCI+MTczPC9hPnxFbnRpdHkgV2l0aCBJZCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNzRcXFwiPjE3NDwvYT58RGVyaXZlZCBQb3J0Zm9saW8gRGV0YWlscyBEbyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTc1XFxcIj4xNzU8L2E+fEVudGl0eSBOb3QgSW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiMTc2XFxcIj4xNzY8L2E+fFBvcnRmb2xpbyBXaXRoIE5hbWUgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTc3XFxcIj4xNzc8L2E+fEludmFsaWQgVHJhbnNhY3Rpb25zfCAgfCB8IDxhIG5hbWU9XFxcIjE3OFxcXCI+MTc4PC9hPnxSZWZlcmVuY2UgUG9ydGZvbGlvIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNzlcXFwiPjE3OTwvYT58RHVwbGljYXRlIElkfCAgfCB8IDxhIG5hbWU9XFxcIjE4MFxcXCI+MTgwPC9hPnxDb21tYW5kIFJldHJpZXZhbCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4MVxcXCI+MTgxPC9hPnxEYXRhIEZpbHRlciBBcHBsaWNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4MlxcXCI+MTgyPC9hPnxTZWFyY2ggRmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE4M1xcXCI+MTgzPC9hPnxNb3ZlbWVudHMgRW5naW5lIENvbmZpZ3VyYXRpb24gS2V5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTg0XFxcIj4xODQ8L2E+fEZ4IFJhdGUgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxODVcXFwiPjE4NTwvYT58QWNjcnVhbCBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE4NlxcXCI+MTg2PC9hPnxBY2Nlc3MgRGVuaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE4N1xcXCI+MTg3PC9hPnxJbnZhbGlkIElkZW50aXR5IFRva2VufCAgfCB8IDxhIG5hbWU9XFxcIjE4OFxcXCI+MTg4PC9hPnxJbnZhbGlkIFJlcXVlc3QgSGVhZGVyc3wgIHwgfCA8YSBuYW1lPVxcXCIxODlcXFwiPjE4OTwvYT58UHJpY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE5MFxcXCI+MTkwPC9hPnxJbnZhbGlkIFN1YiBIb2xkaW5nIEtleXMgUHJvdmlkZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTkxXFxcIj4xOTE8L2E+fER1cGxpY2F0ZSBTdWIgSG9sZGluZyBLZXlzIFByb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MlxcXCI+MTkyPC9hPnxDdXQgRGVmaW5pdGlvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkzXFxcIj4xOTM8L2E+fEN1dCBEZWZpbml0aW9uIEludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk0XFxcIj4xOTQ8L2E+fFRpbWUgVmFyaWFudCBQcm9wZXJ0eSBEZWxldGlvbiBEYXRlIFVuc3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NVxcXCI+MTk1PC9hPnxQZXJwZXR1YWwgUHJvcGVydHkgRGVsZXRpb24gRGF0ZSBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk2XFxcIj4xOTY8L2E+fFRpbWUgVmFyaWFudCBQcm9wZXJ0eSBVcHNlcnQgRGF0ZSBVbnNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTdcXFwiPjE5NzwvYT58UGVycGV0dWFsIFByb3BlcnR5IFVwc2VydCBEYXRlIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDBcXFwiPjIwMDwvYT58SW52YWxpZCBVbml0IEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAxXFxcIj4yMDE8L2E+fEludmFsaWQgVHlwZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMlxcXCI+MjAyPC9hPnxJbnZhbGlkIFZhbHVlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAzXFxcIj4yMDM8L2E+fFVuaXQgTm90IERlZmluZWQgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDRcXFwiPjIwNDwvYT58VW5pdHMgTm90IFN1cHBvcnRlZCBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA1XFxcIj4yMDU8L2E+fENhbm5vdCBTcGVjaWZ5IFVuaXRzIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDZcXFwiPjIwNjwvYT58VW5pdCBTY2hlbWEgSW5jb25zaXN0ZW50IFdpdGggRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwN1xcXCI+MjA3PC9hPnxVbml0IERlZmluaXRpb24gTm90IFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDhcXFwiPjIwODwvYT58RHVwbGljYXRlIFVuaXQgRGVmaW5pdGlvbnMgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwOVxcXCI+MjA5PC9hPnxJbnZhbGlkIFVuaXRzIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjEwXFxcIj4yMTA8L2E+fEludmFsaWQgSW5zdHJ1bWVudCBJZGVudGlmaWVyIFVuaXR8ICB8IHwgPGEgbmFtZT1cXFwiMjExXFxcIj4yMTE8L2E+fEhvbGRpbmdzIEFkanVzdG1lbnQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMjEyXFxcIj4yMTI8L2E+fENvdWxkIE5vdCBCdWlsZCBFeGNlbCBVcmx8ICB8IHwgPGEgbmFtZT1cXFwiMjEzXFxcIj4yMTM8L2E+fENvdWxkIE5vdCBHZXQgRXhjZWwgVmVyc2lvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMTRcXFwiPjIxNDwvYT58SW5zdHJ1bWVudCBCeSBDb2RlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMTVcXFwiPjIxNTwvYT58RW50aXR5IFNjaGVtYSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTZcXFwiPjIxNjwvYT58RmVhdHVyZSBOb3QgU3VwcG9ydGVkIE9uIFBvcnRmb2xpbyBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIxN1xcXCI+MjE3PC9hPnxRdW90ZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjE4XFxcIj4yMTg8L2E+fEludmFsaWQgUXVvdGUgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCIyMTlcXFwiPjIxOTwvYT58SW52YWxpZCBNZXRyaWMgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMjBcXFwiPjIyMDwvYT58SW52YWxpZCBJbnN0cnVtZW50IERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjIxXFxcIj4yMjE8L2E+fEluc3RydW1lbnQgVXBzZXJ0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjIyXFxcIj4yMjI8L2E+fFJlZmVyZW5jZSBQb3J0Zm9saW8gUmVxdWVzdCBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjIyM1xcXCI+MjIzPC9hPnxUcmFuc2FjdGlvbiBQb3J0Zm9saW8gUmVxdWVzdCBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjIyNFxcXCI+MjI0PC9hPnxJbnZhbGlkIFByb3BlcnR5IFZhbHVlIEFzc2lnbm1lbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjMwXFxcIj4yMzA8L2E+fFRyYW5zYWN0aW9uIFR5cGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIzMVxcXCI+MjMxPC9hPnxUcmFuc2FjdGlvbiBUeXBlIER1cGxpY2F0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIzMlxcXCI+MjMyPC9hPnxQb3J0Zm9saW8gRG9lcyBOb3QgRXhpc3QgQXQgR2l2ZW4gRGF0ZXwgIHwgfCA8YSBuYW1lPVxcXCIyMzNcXFwiPjIzMzwvYT58UXVlcnkgUGFyc2VyIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjM0XFxcIj4yMzQ8L2E+fER1cGxpY2F0ZSBDb25zdGl0dWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzVcXFwiPjIzNTwvYT58VW5yZXNvbHZlZCBJbnN0cnVtZW50IENvbnN0aXR1ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzNlxcXCI+MjM2PC9hPnxVbnJlc29sdmVkIEluc3RydW1lbnQgSW4gVHJhbnNpdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMzdcXFwiPjIzNzwvYT58TWlzc2luZyBTaWRlIERlZmluaXRpb25zfCAgfCB8IDxhIG5hbWU9XFxcIjI0MFxcXCI+MjQwPC9hPnxEdXBsaWNhdGUgQ2FsY3VsYXRpb25zIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjk5XFxcIj4yOTk8L2E+fEludmFsaWQgUmVjaXBlfCAgfCB8IDxhIG5hbWU9XFxcIjMwMFxcXCI+MzAwPC9hPnxNaXNzaW5nIFJlY2lwZXwgIHwgfCA8YSBuYW1lPVxcXCIzMDFcXFwiPjMwMTwvYT58RGVwZW5kZW5jaWVzfCAgfCB8IDxhIG5hbWU9XFxcIjMwNFxcXCI+MzA0PC9hPnxQb3J0Zm9saW8gUHJlcHJvY2VzcyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMFxcXCI+MzEwPC9hPnxWYWx1YXRpb24gRW5naW5lIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzExXFxcIj4zMTE8L2E+fFRhc2sgRmFjdG9yeSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMlxcXCI+MzEyPC9hPnxUYXNrIEV2YWx1YXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTNcXFwiPjMxMzwvYT58VGFzayBHZW5lcmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzE0XFxcIj4zMTQ8L2E+fEVuZ2luZSBDb25maWd1cmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzE1XFxcIj4zMTU8L2E+fE1vZGVsIFNwZWNpZmljYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjBcXFwiPjMyMDwvYT58TWFya2V0IERhdGEgS2V5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIxXFxcIj4zMjE8L2E+fE1hcmtldCBSZXNvbHZlciBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMlxcXCI+MzIyPC9hPnxNYXJrZXQgRGF0YSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMFxcXCI+MzMwPC9hPnxDdXJ2ZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMVxcXCI+MzMxPC9hPnxWb2xhdGlsaXR5IFN1cmZhY2UgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzJcXFwiPjMzMjwvYT58Vm9sYXRpbGl0eSBDdWJlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUwXFxcIj4zNTA8L2E+fEluc3RydW1lbnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTFcXFwiPjM1MTwvYT58Q2FzaCBGbG93cyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MlxcXCI+MzUyPC9hPnxSZWZlcmVuY2UgRGF0YSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM2MFxcXCI+MzYwPC9hPnxBZ2dyZWdhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM2MVxcXCI+MzYxPC9hPnxBZ2dyZWdhdGlvbiBNZWFzdXJlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcwXFxcIj4zNzA8L2E+fFJlc3VsdCBSZXRyaWV2YWwgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzFcXFwiPjM3MTwvYT58UmVzdWx0IFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzJcXFwiPjM3MjwvYT58VmVuZG9yIFJlc3VsdCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzczXFxcIj4zNzM8L2E+fFZlbmRvciBSZXN1bHQgTWFwcGluZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3NFxcXCI+Mzc0PC9hPnxWZW5kb3IgTGlicmFyeSBVbmF1dGhvcmlzZWR8ICB8IHwgPGEgbmFtZT1cXFwiMzc1XFxcIj4zNzU8L2E+fFZlbmRvciBDb25uZWN0aXZpdHkgRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMzc2XFxcIj4zNzY8L2E+fFZlbmRvciBJbnRlcmZhY2UgRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMzc3XFxcIj4zNzc8L2E+fFZlbmRvciBQcmljaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc4XFxcIj4zNzg8L2E+fFZlbmRvciBUcmFuc2xhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3OVxcXCI+Mzc5PC9hPnxWZW5kb3IgS2V5IE1hcHBpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzODBcXFwiPjM4MDwvYT58VmVuZG9yIFJlZmxlY3Rpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzODFcXFwiPjM4MTwvYT58VmVuZG9yIFByb2Nlc3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzODJcXFwiPjM4MjwvYT58VmVuZG9yIFN5c3RlbSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM5MFxcXCI+MzkwPC9hPnxBdHRlbXB0IFRvIFVwc2VydCBEdXBsaWNhdGUgUXVvdGVzfCAgfCB8IDxhIG5hbWU9XFxcIjM5MVxcXCI+MzkxPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIFNvdXJjZSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIzOTJcXFwiPjM5MjwvYT58Q29ycG9yYXRlIEFjdGlvbiBTb3VyY2UgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMzkzXFxcIj4zOTM8L2E+fEluc3RydW1lbnQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCIzOTRcXFwiPjM5NDwvYT58UHJvcGVydGllcyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMzk1XFxcIj4zOTU8L2E+fEJhdGNoIE9wZXJhdGlvbiBBYm9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjQwMFxcXCI+NDAwPC9hPnxJbnZhbGlkIElzbzQyMTcgQ3VycmVuY3kgQ29kZXwgIHwgfCA8YSBuYW1lPVxcXCI0MDFcXFwiPjQwMTwvYT58Q2Fubm90IEFzc2lnbiBJbnN0cnVtZW50IElkZW50aWZpZXIgVG8gQ3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiNDAyXFxcIj40MDI8L2E+fENhbm5vdCBBc3NpZ24gQ3VycmVuY3kgSWRlbnRpZmllciBUbyBOb24gQ3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiNDAzXFxcIj40MDM8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEJlIERlbGV0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDA0XFxcIj40MDQ8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEhhdmUgRWNvbm9taWMgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI0MDVcXFwiPjQwNTwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgSGF2ZSBMb29rdGhyb3VnaCBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiNDA2XFxcIj40MDY8L2E+fENhbm5vdCBDcmVhdGUgQ3VycmVuY3kgSW5zdHJ1bWVudCBXaXRoIE11bHRpcGxlIElkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjQwN1xcXCI+NDA3PC9hPnxTcGVjaWZpZWQgQ3VycmVuY3kgSXMgVW5kZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjQxMFxcXCI+NDEwPC9hPnxJbmRleCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI0MTFcXFwiPjQxMTwvYT58U29ydCBGaWVsZCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI0MTNcXFwiPjQxMzwvYT58TmVnYXRpdmUgUGFnaW5hdGlvbiBQYXJhbWV0ZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjQxNFxcXCI+NDE0PC9hPnxJbnZhbGlkIFNlYXJjaCBTeW50YXh8ICB8IHwgPGEgbmFtZT1cXFwiNDE1XFxcIj40MTU8L2E+fEZpbHRlciBFeGVjdXRpb24gVGltZW91dHwgIHwgfCA8YSBuYW1lPVxcXCI0MjBcXFwiPjQyMDwvYT58U2lkZSBEZWZpbml0aW9uIEluY29uc2lzdGVudHwgIHwgfCA8YSBuYW1lPVxcXCI0NTBcXFwiPjQ1MDwvYT58SW52YWxpZCBRdW90ZSBBY2Nlc3MgTWV0YWRhdGEgUnVsZXwgIHwgfCA8YSBuYW1lPVxcXCI0NTFcXFwiPjQ1MTwvYT58QWNjZXNzIE1ldGFkYXRhIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NTJcXFwiPjQ1MjwvYT58SW52YWxpZCBBY2Nlc3MgTWV0YWRhdGEgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCI0NjBcXFwiPjQ2MDwvYT58U3RhbmRhcmQgUmVzb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ2MVxcXCI+NDYxPC9hPnxTdGFuZGFyZCBSZXNvdXJjZSBDb25mbGljdHwgIHwgfCA8YSBuYW1lPVxcXCI0NjJcXFwiPjQ2MjwvYT58Q2FsZW5kYXIgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ2M1xcXCI+NDYzPC9hPnxEYXRlIEluIEEgQ2FsZW5kYXIgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ2NFxcXCI+NDY0PC9hPnxJbnZhbGlkIERhdGUgU291cmNlIERhdGF8ICB8IHwgPGEgbmFtZT1cXFwiNDY1XFxcIj40NjU8L2E+fEludmFsaWQgVGltZXpvbmV8ICB8IHwgPGEgbmFtZT1cXFwiNjAxXFxcIj42MDE8L2E+fFBlcnNvbiBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjYwMlxcXCI+NjAyPC9hPnxQZXJzb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjYwM1xcXCI+NjAzPC9hPnxDYW5ub3QgU2V0IElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiNjE3XFxcIj42MTc8L2E+fEludmFsaWQgUmVjaXBlIFNwZWNpZmljYXRpb24gSW4gUmVxdWVzdHwgIHwgfCA8YSBuYW1lPVxcXCI2MThcXFwiPjYxODwvYT58SW5saW5lIFJlY2lwZSBEZXNlcmlhbGlzYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI2MTlcXFwiPjYxOTwvYT58SWRlbnRpZmllciBUeXBlcyBOb3QgU2V0IEZvciBFbnRpdHl8ICB8IHwgPGEgbmFtZT1cXFwiNjIwXFxcIj42MjA8L2E+fENhbm5vdCBEZWxldGUgQWxsIENsaWVudCBEZWZpbmVkIElkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjY1MFxcXCI+NjUwPC9hPnxUaGUgT3JkZXIgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjY1NFxcXCI+NjU0PC9hPnxUaGUgQWxsb2NhdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNjU1XFxcIj42NTU8L2E+fENhbm5vdCBidWlsZCB0aGUgZnggZm9yd2FyZCB0YXJnZXQgd2l0aCB0aGUgZ2l2ZW4gaG9sZGluZ3MufCAgfCB8IDxhIG5hbWU9XFxcIjY1NlxcXCI+NjU2PC9hPnxHcm91cCBkb2VzIG5vdCBjb250YWluIGV4cGVjdGVkIGVudGl0aWVzLnwgIHwgfCA8YSBuYW1lPVxcXCI2NjVcXFwiPjY2NTwvYT58RGVzdGluYXRpb24gZGlyZWN0b3J5IG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2NjdcXFwiPjY2NzwvYT58UmVsYXRpb24gZGVmaW5pdGlvbiBhbHJlYWR5IGV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI2NzJcXFwiPjY3MjwvYT58Q291bGQgbm90IHJldHJpZXZlIGZpbGUgY29udGVudHN8ICB8IHwgPGEgbmFtZT1cXFwiNjczXFxcIj42NzM8L2E+fE1pc3NpbmcgZW50aXRsZW1lbnRzIGZvciBlbnRpdGllcyBpbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCI2NzRcXFwiPjY3NDwvYT58TmV4dCBCZXN0IEFjdGlvbiBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjc2XFxcIj42NzY8L2E+fFJlbGF0aW9uIGRlZmluaXRpb24gbm90IGRlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjc3XFxcIj42Nzc8L2E+fEludmFsaWQgZW50aXR5IGlkZW50aWZpZXIgZm9yIHJlbGF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjY4MVxcXCI+NjgxPC9hPnxTb3J0aW5nIGJ5IHNwZWNpZmllZCBmaWVsZCBub3Qgc3VwcG9ydGVkfE9uZSBvciBtb3JlIG9mIHRoZSBwcm92aWRlZCBmaWVsZHMgdG8gb3JkZXIgYnkgd2VyZSBlaXRoZXIgaW52YWxpZCBvciBub3Qgc3VwcG9ydGVkLiB8IHwgPGEgbmFtZT1cXFwiNjgyXFxcIj42ODI8L2E+fFRvbyBtYW55IGZpZWxkcyB0byBzb3J0IGJ5fFRoZSBudW1iZXIgb2YgZmllbGRzIHRvIHNvcnQgdGhlIGRhdGEgYnkgZXhjZWVkcyB0aGUgbnVtYmVyIGFsbG93ZWQgYnkgdGhlIGVuZHBvaW50IHwgfCA8YSBuYW1lPVxcXCI2ODRcXFwiPjY4NDwvYT58U2VxdWVuY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY4NVxcXCI+Njg1PC9hPnxTZXF1ZW5jZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI2ODZcXFwiPjY4NjwvYT58Tm9uLWN5Y2xpbmcgc2VxdWVuY2UgaGFzIGJlZW4gZXhoYXVzdGVkfCAgfCB8IDxhIG5hbWU9XFxcIjY4N1xcXCI+Njg3PC9hPnxMZWdhbCBFbnRpdHkgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI2ODhcXFwiPjY4ODwvYT58TGVnYWwgRW50aXR5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODlcXFwiPjY4OTwvYT58VGhlIHN1cHBsaWVkIHBhZ2luYXRpb24gdG9rZW4gaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTBcXFwiPjY5MDwvYT58UHJvcGVydHkgVHlwZSBJcyBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MVxcXCI+NjkxPC9hPnxNdWx0aXBsZSBUYXgtbG90cyBGb3IgQ3VycmVuY3kgVHlwZSBJcyBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MlxcXCI+NjkyPC9hPnxUaGlzIGVuZHBvaW50IGRvZXMgbm90IHN1cHBvcnQgaW1wZXJzb25hdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI2OTNcXFwiPjY5MzwvYT58RW50aXR5IHR5cGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgUmVsYXRpb25zaGlwfCAgfCB8IDxhIG5hbWU9XFxcIjY5NFxcXCI+Njk0PC9hPnxSZWxhdGlvbnNoaXAgVmFsaWRhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjY5NVxcXCI+Njk1PC9hPnxSZWxhdGlvbnNoaXAgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY5N1xcXCI+Njk3PC9hPnxEZXJpdmVkIFByb3BlcnR5IEZvcm11bGEgTm8gTG9uZ2VyIFZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjY5OFxcXCI+Njk4PC9hPnxTdG9yeSBpcyBub3QgYXZhaWxhYmxlfCAgfCB8IDxhIG5hbWU9XFxcIjcwM1xcXCI+NzAzPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjcyMFxcXCI+NzIwPC9hPnxUaGUgcHJvdmlkZWQgc29ydCBhbmQgZmlsdGVyIGNvbWJpbmF0aW9uIGlzIG5vdCB2YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjFcXFwiPjcyMTwvYT58QTJCIGdlbmVyYXRpb24gZmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjcyMlxcXCI+NzIyPC9hPnxBZ2dyZWdhdGVkIFJldHVybiBDYWxjdWxhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjcyM1xcXCI+NzIzPC9hPnxDdXN0b20gRW50aXR5IERlZmluaXRpb24gSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI3MjRcXFwiPjcyNDwvYT58Q3VzdG9tIEVudGl0eSBEZWZpbml0aW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjVcXFwiPjcyNTwvYT58VGhlIFBsYWNlbWVudCByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI2XFxcIj43MjY8L2E+fFRoZSBFeGVjdXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyN1xcXCI+NzI3PC9hPnxUaGUgQmxvY2sgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyOFxcXCI+NzI4PC9hPnxUaGUgUGFydGljaXBhdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI5XFxcIj43Mjk8L2E+fFRoZSBQYWNrYWdlIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzBcXFwiPjczMDwvYT58VGhlIE9yZGVySW5zdHJ1Y3Rpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczMlxcXCI+NzMyPC9hPnxDdXN0b20gRW50aXR5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMzXFxcIj43MzM8L2E+fEN1c3RvbSBFbnRpdHkgSWRlbnRpZmllciBhbHJlYWR5IGluIHVzZS58ICB8IHwgPGEgbmFtZT1cXFwiNzM1XFxcIj43MzU8L2E+fENhbGN1bGF0aW9uIEZhaWxlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzM2XFxcIj43MzY8L2E+fEFuIGV4cGVjdGVkIGtleSBvbiBIdHRwUmVzcG9uc2UgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzM3XFxcIj43Mzc8L2E+fEEgcmVxdWlyZWQgZmVlIGRldGFpbCBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzhcXFwiPjczODwvYT58WmVybyByb3dzIHdlcmUgcmV0dXJuZWQgZnJvbSBMdW1pbmVzY2V8ICB8IHwgPGEgbmFtZT1cXFwiNzM5XFxcIj43Mzk8L2E+fFByb3ZpZGVkIFdlZWtlbmQgTWFzayB3YXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI3NDJcXFwiPjc0MjwvYT58Q3VzdG9tIEVudGl0eSBmaWVsZHMgZG8gbm90IG1hdGNoIHRoZSBkZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjc0NlxcXCI+NzQ2PC9hPnxUaGUgcHJvdmlkZWQgc2VxdWVuY2UgaXMgbm90IHZhbGlkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTFcXFwiPjc1MTwvYT58VGhlIHR5cGUgb2YgdGhlIEN1c3RvbSBFbnRpdHkgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHR5cGUgcHJvdmlkZWQgaW4gdGhlIGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjc1MlxcXCI+NzUyPC9hPnxMdW1pbmVzY2UgcHJvY2VzcyByZXR1cm5lZCBhbiBlcnJvci58ICB8IHwgPGEgbmFtZT1cXFwiNzUzXFxcIj43NTM8L2E+fEZpbGUgbmFtZSBvciBjb250ZW50IGluY29tcGF0aWJsZSB3aXRoIG9wZXJhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiNzU1XFxcIj43NTU8L2E+fFNjaGVtYSBvZiByZXNwb25zZSBmcm9tIERyaXZlIGlzIG5vdCBhcyBleHBlY3RlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzU3XFxcIj43NTc8L2E+fFNjaGVtYSBvZiByZXNwb25zZSBmcm9tIEx1bWluZXNjZSBpcyBub3QgYXMgZXhwZWN0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1OFxcXCI+NzU4PC9hPnxMdW1pbmVzY2UgdGltZWQgb3V0LnwgIHwgfCA8YSBuYW1lPVxcXCI3NjNcXFwiPjc2MzwvYT58SW52YWxpZCBMdXNpZCBFbnRpdHkgSWRlbnRpZmllciBVbml0fCAgfCB8IDxhIG5hbWU9XFxcIjc2OFxcXCI+NzY4PC9hPnxGZWUgcnVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc2OVxcXCI+NzY5PC9hPnxDYW5ub3QgdXBkYXRlIHRoZSBiYXNlIGN1cnJlbmN5IG9mIGEgcG9ydGZvbGlvIHdpdGggdHJhbnNhY3Rpb25zIGxvYWRlZHwgIHwgfCA8YSBuYW1lPVxcXCI3NzFcXFwiPjc3MTwvYT58VHJhbnNhY3Rpb24gY29uZmlndXJhdGlvbiBzb3VyY2Ugbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjc3NFxcXCI+Nzc0PC9hPnxDb21wbGlhbmNlIHJ1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3NzVcXFwiPjc3NTwvYT58RnVuZCBhY2NvdW50aW5nIGRvY3VtZW50IGNhbm5vdCBiZSBwcm9jZXNzZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc3OFxcXCI+Nzc4PC9hPnxVbmFibGUgdG8gbG9vayB1cCBGWCByYXRlIGZyb20gdHJhZGUgY2N5IHRvIHBvcnRmb2xpbyBjY3kgZm9yIHNvbWUgb2YgdGhlIHRyYWRlcy58ICB8IHwgPGEgbmFtZT1cXFwiNzgyXFxcIj43ODI8L2E+fFRoZSBQcm9wZXJ0eSBkZWZpbml0aW9uIGRhdGFUeXBlIGlzIG5vdCBtYXRjaGluZyB0aGUgZGVyaXZhdGlvbiBmb3JtdWxhIGRhdGFUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjc4M1xcXCI+NzgzPC9hPnxUaGUgUHJvcGVydHkgZGVmaW5pdGlvbiBkb21haW4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVyaXZlZCBwcm9wZXJ0aWVzfCAgfCB8IDxhIG5hbWU9XFxcIjc4OFxcXCI+Nzg4PC9hPnxDb21wbGlhbmNlIHJ1biBub3QgZm91bmQgZmFpbHVyZS58ICB8IHwgPGEgbmFtZT1cXFwiNzkwXFxcIj43OTA8L2E+fEN1c3RvbSBFbnRpdHkgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBpZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI3OTFcXFwiPjc5MTwvYT58Q3VzdG9tIEVudGl0eSBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjc5MlxcXCI+NzkyPC9hPnxDb21wbGlhbmNlIFByb3BlcnR5S2V5IGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjc5M1xcXCI+NzkzPC9hPnxDb21wbGlhbmNlIENyaXRlcmlhIFZhbHVlIGZvciBtYXRjaGluZyBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTVcXFwiPjc5NTwvYT58Q2Fubm90IGRlbGV0ZSBpZGVudGlmaWVyIGRlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNzk2XFxcIj43OTY8L2E+fFRheCBydWxlIHNldCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc5N1xcXCI+Nzk3PC9hPnxBIHRheCBydWxlIHNldCB3aXRoIHRoaXMgaWQgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjc5OFxcXCI+Nzk4PC9hPnxNdWx0aXBsZSBydWxlIHNldHMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGtleSBhcmUgYXBwbGljYWJsZS58ICB8IHwgPGEgbmFtZT1cXFwiNzk5XFxcIj43OTk8L2E+fFRoZSByZXF1ZXN0IG11c3QgY29udGFpbiBhIGRhdGUgb3IgZGlhcnkgZW50cnkufCAgfCB8IDxhIG5hbWU9XFxcIjgwMFxcXCI+ODAwPC9hPnxDYW4gbm90IHVwc2VydCBhbiBpbnN0cnVtZW50IGV2ZW50IG9mIHRoaXMgdHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiODAxXFxcIj44MDE8L2E+fFRoZSBpbnN0cnVtZW50IGV2ZW50IGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDJcXFwiPjgwMjwvYT58VGhlIEluc3RydW1lbnQgZXZlbnQgaXMgbWlzc2luZyBzYWxpZW50IGluZm9ybWF0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDNcXFwiPjgwMzwvYT58VGhlIEluc3RydW1lbnQgZXZlbnQgY291bGQgbm90IGJlIHByb2Nlc3NlZC58ICB8IHwgPGEgbmFtZT1cXFwiODA0XFxcIj44MDQ8L2E+fFNvbWUgZGF0YSByZXF1ZXN0ZWQgZG9lcyBub3QgZm9sbG93IHRoZSBvcmRlciBncmFwaCBhc3N1bXB0aW9ucy58ICB8IHwgPGEgbmFtZT1cXFwiODA1XFxcIj44MDU8L2E+fFRoZSBpbnN0cnVtZW50IGV2ZW50IHR5cGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwNlxcXCI+ODA2PC9hPnxUaGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA3XFxcIj44MDc8L2E+fFRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIHRlbXBsYXRlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDhcXFwiPjgwODwvYT58VGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MTFcXFwiPjgxMTwvYT58QSBwcmljZSBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGFuIG9yZGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTJcXFwiPjgxMjwvYT58QSBwcmljZSBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGFuIGFsbG9jYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjgxM1xcXCI+ODEzPC9hPnxDaGFydCBvZiBBY2NvdW50cyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNFxcXCI+ODE0PC9hPnxBY2NvdW50IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE1XFxcIj44MTU8L2E+fEFib3Igbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTZcXFwiPjgxNjwvYT58QWJvciBDb25maWd1cmF0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE3XFxcIj44MTc8L2E+fFJlY29uY2lsaWF0aW9uIG1hcHBpbmcgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgxOFxcXCI+ODE4PC9hPnxBdHRyaWJ1dGUgdHlwZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODE5XFxcIj44MTk8L2E+fFJlY29uY2lsaWF0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODIwXFxcIj44MjA8L2E+fEN1c3RvZGlhbiBBY2NvdW50IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODIxXFxcIj44MjE8L2E+fEFsbG9jYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI4MjJcXFwiPjgyMjwvYT58UmVjb25jaWxpYXRpb24gcnVuIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MjNcXFwiPjgyMzwvYT58UmVjb25jaWxpYXRpb24gYnJlYWsgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgyNFxcXCI+ODI0PC9hPnxFbnRpdHkgbGluayB0eXBlIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MjhcXFwiPjgyODwvYT58QWRkcmVzcyBrZXkgZGVmaW5pdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyOVxcXCI+ODI5PC9hPnxDb21wbGlhbmNlIHRlbXBsYXRlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMwXFxcIj44MzA8L2E+fEFjdGlvbiBub3Qgc3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjgzMVxcXCI+ODMxPC9hPnxSZWZlcmVuY2UgbGlzdCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzMlxcXCI+ODMyPC9hPnxQb3N0aW5nIE1vZHVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzM1xcXCI+ODMzPC9hPnxUaGUgdHlwZSBvZiBwYXJhbWV0ZXIgcHJvdmlkZWQgZGlkIG5vdCBtYXRjaCB0aGF0IHJlcXVpcmVkIGJ5IHRoZSBjb21wbGlhbmNlIHJ1bGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNFxcXCI+ODM0PC9hPnxUaGUgcGFyYW1ldGVycyBwcm92aWRlZCBieSBhIHJ1bGUgZGlkIG5vdCBtYXRjaCB0aG9zZSByZXF1aXJlZCBieSBpdHMgdGVtcGxhdGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNVxcXCI+ODM1PC9hPnxUaGUgZW50aXR5IGhhcyBhIHByb3BlcnR5IGluIGEgZG9tYWluIHRoYXQgaXMgbm90IHN1cHBydGVkIGZvciB0aGF0IGVudGl0eSB0eXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzZcXFwiPjgzNjwvYT58U3RydWN0dXJlZCByZXN1bHQgZGF0YSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzN1xcXCI+ODM3PC9hPnxEaWFyeSBlbnRyeSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzOFxcXCI+ODM4PC9hPnxEaWFyeSBlbnRyeSBjb3VsZCBub3QgYmUgY3JlYXRlZC58ICB8IHwgPGEgbmFtZT1cXFwiODM5XFxcIj44Mzk8L2E+fERpYXJ5IGVudHJ5IGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI4NjFcXFwiPjg2MTwvYT58Q29tcGxpYW5jZSBydW4gc3VtbWFyeSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjg2OVxcXCI+ODY5PC9hPnxDb25mbGljdGluZyBpbnN0cnVtZW50IHByb3BlcnRpZXMgaW4gYmF0Y2gufCAgfCB8IDxhIG5hbWU9XFxcIjg3MFxcXCI+ODcwPC9hPnxDb21wbGlhbmNlIHJ1biBzdW1tYXJ5IGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzFcXFwiPjg3MTwvYT58VGhlIHNwZWNpZmllZCBpbXBlcnNvbmF0ZWQgdXNlciBkb2VzIG5vdCBleGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI4NzRcXFwiPjg3NDwvYT58UHJvdmlkZWQgUHJvcGVydHkgRG9tYWluIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGVudGl0eSBmaWx0ZXIufCAgfCB8IDxhIG5hbWU9XFxcIjg3NVxcXCI+ODc1PC9hPnxDYW5ub3QgRGVsZXRlIFN5c3RlbSBSZWZlcmVuY2UgTGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODc2XFxcIj44NzY8L2E+fENsZWFyZG93biBNb2R1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzlcXFwiPjg3OTwvYT58UG9ydGZvbGlvcyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBiYXNlIGN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjg4MFxcXCI+ODgwPC9hPnxUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGNvbXBsaWFuY2UgZXhwcmVzc2lvbi58ICB8IHwgPGEgbmFtZT1cXFwiODgxXFxcIj44ODE8L2E+fEJsb2NrIG92ZXJwbGFjZWQufCAgfCB8IDxhIG5hbWU9XFxcIjg4MlxcXCI+ODgyPC9hPnxPcmRlciBub3QgYXBwcm92ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjg4M1xcXCI+ODgzPC9hPnxDYW5ub3QgdXBkYXRlIHRoZSBzaGFyZWQgZmllbGRzIG9mIGEgYmxvY2sgd2l0aCBhc3NvY2lhdGVkIG9yZGVycy58ICB8IHwgPGEgbmFtZT1cXFwiODg2XFxcIj44ODY8L2E+fENhbm5vdCBsb2NrIHRoZSBwZXJpb2QufCAgfCB8IDxhIG5hbWU9XFxcIjg4N1xcXCI+ODg3PC9hPnxDYW5ub3QgYXBwbHkgY2xlYXIgZG93biBtb2R1bGUufCAgfCB8IDxhIG5hbWU9XFxcIjg4OFxcXCI+ODg4PC9hPnxDYW5ub3QgdXBzZXJ0IEluc3RydW1lbnQgRXZlbnQgSW5zdHJ1Y3Rpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg4OVxcXCI+ODg5PC9hPnxDYW5ub3QgcmVhZCBJbnN0cnVtZW50IEV2ZW50IEluc3RydWN0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4OTVcXFwiPjg5NTwvYT58VGhlIENhcGl0YWwgUmF0aW8gQ2FsY3VsYXRpb24gSXMgV3JvbmcufCAgfCB8IDxhIG5hbWU9XFxcIjkxMFxcXCI+OTEwPC9hPnxDYW5ub3QgdXBkYXRlIGEgYmxvY2sgcmVmZXJlbmNlZCBieSBhIHBsYWNlbWVudC58ICB8IHwgPGEgbmFtZT1cXFwiOTExXFxcIj45MTE8L2E+fEEgRnVuZCB0aGF0IHJlZmVyZW5jZXMgdGhpcyBBYm9yIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTJcXFwiPjkxMjwvYT58Q2Fubm90IGFkZCBkZWNpc2lvbiB0byBTdGFnZWQgTW9kaWZpY2F0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTNcXFwiPjkxMzwvYT58VGhlIFN0YWdlZCBNb2RpZmljYXRpb24gY291bGQgbm90IGJlIGFwcGxpZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkxNFxcXCI+OTE0PC9hPnxBY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTVcXFwiPjkxNTwvYT58Q2Fubm90IHVwc2VydCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBpbiBvbmUgcmVxdWVzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTE2XFxcIj45MTY8L2E+fFBsYWNlbWVudCBhbmQgZGlyZWN0IGRlc2NlbmRlbnRzIGhhdmUgbW9yZSBleGVjdXRlZCBxdWFudGl0eSB0aGFuIHRvdGFsIHBsYWNlbWVudCBxdWFudGl0eS58ICB8IHwgPGEgbmFtZT1cXFwiOTE3XFxcIj45MTc8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIEVudHJ5VHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiOTE4XFxcIj45MTg8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgaW4gdGhpcyBTdGF0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTE5XFxcIj45MTk8L2E+fFBsYWNlbWVudCBjb3VsZCBub3QgYmUgY2FuY2VsbGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjBcXFwiPjkyMDwvYT58U2hhcmUgQ2xhc3Mgbm90IGNvbmZpZ3VyZWQgaW4gRnVuZHwgIHwgfCA8YSBuYW1lPVxcXCI5MjFcXFwiPjkyMTwvYT58U2hhcmUgQ2xhc3MgU3ViIEhvbGRpbmcgS2V5IG5vdCBjb25maWd1cmVkIGluIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCI5MjJcXFwiPjkyMjwvYT58Q291bGQgbm90IHVwZGF0ZSBhbiBvcmRlci58ICB8IHwgPGEgbmFtZT1cXFwiOTIzXFxcIj45MjM8L2E+fE11bHRpcGxlIHNldHMgb2YgU2hhcmUgQ2xhc3MgU3ViIEhvbGRpbmcgS2V5cyBjb25maWd1cmVkIGFjcm9zcyB0aGUgUG9ydGZvbGlvcyBvZiBhIEZ1bmQufCAgfCB8IDxhIG5hbWU9XFxcIjkyNFxcXCI+OTI0PC9hPnxPbmUgb3IgbW9yZSBtYXRyaXggY2VsbHMgY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBtYXRyaXgufCAgfCB8IDxhIG5hbWU9XFxcIjkyNVxcXCI+OTI1PC9hPnxUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIHByb3ZpZGVkIG1hdHJpeCBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjZcXFwiPjkyNjwvYT58TWF0cml4IGRlZmluaXRpb24gZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkyN1xcXCI+OTI3PC9hPnxNYXRyaXggZGVmaW5pdGlvbiBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTI4XFxcIj45Mjg8L2E+fERhdGFUeXBlIHdpdGggSWQgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjkyOVxcXCI+OTI5PC9hPnxTcXVhcmUgbWF0cml4IGlzIGluY29tcGxldGUufCAgfCB8IDxhIG5hbWU9XFxcIjkzMFxcXCI+OTMwPC9hPnxBIGNvbmRpdGlvbmFsIGxpY2Vuc2UgdGVybSBoYXMgYmVlbiBleGNlZWRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTMxXFxcIj45MzE8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCByZXF1ZXN0ZWQgaXMgbm90IGludGVuZGVkIGZvciB0aGUgZW50aXR5IHByb3ZpZGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzJcXFwiPjkzMjwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBoYXZlIGEgbWFuZGF0b3J5IHByb3BlcnR5IHNwZWNpZmllZCBieSB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzM1xcXCI+OTMzPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBhIHByb3BlcnR5IG5vdCBhbGxvd2VkIGJ5IHRoZSBzcGVjaWZpZWQgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNFxcXCI+OTM0PC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IGhhdmUgYSBtYW5kYXRvcnkgaWRlbnRpZmllciBzcGVjaWZpZWQgYnkgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzVcXFwiPjkzNTwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBoYXMgYW4gaWRlbnRpZmllciBub3QgYWxsb3dlZCBieSB0aGUgc3BlY2lmaWVkIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzZcXFwiPjkzNjwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIGluY2x1ZGVkIGFuIGFsaWFzIG9yIHNvcnQtYnkgYXR0cmlidXRlIHRoYXQgd2FzIG5vdCBvbiB0aGUgZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTM3XFxcIj45Mzc8L2E+fFRoZSBDbG9zZWRQZXJpb2Qgd2l0aCB0aGUgSWQgYWxyZWFkeSBleGlzdHMgb24gdGhlIFRpbWVsaW5lfCAgfCB8IDxhIG5hbWU9XFxcIjkzOFxcXCI+OTM4PC9hPnxUaGUgbmV3IENsb3NlZCBQZXJpb2Qgd291bGQgY2F1c2UgdGhlIFRpbWVsaW5lIHRvIGhhdmUgbm9uLWNvbnRpZ3VvdXMgQ2xvc2VkIFBlcmlvZHN8ICB8IHwgPGEgbmFtZT1cXFwiOTM5XFxcIj45Mzk8L2E+fEJsb2NrZWQgYnkgYSBOZXR3b3JrIFpvbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTQwXFxcIj45NDA8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgbWVldCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjk0MVxcXCI+OTQxPC9hPnxPcmRlciBub3QgY29tcGxpYW50LnwgIHwgfCA8YSBuYW1lPVxcXCI5NDJcXFwiPjk0MjwvYT58QWN0aW9uIHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kufCAgfCB8IDxhIG5hbWU9XFxcIjk0NFxcXCI+OTQ0PC9hPnxEZXJpdmVkIFByb3BlcnR5IGNhbGN1bGF0aW9uIG5vdCBjb21wbGV0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ1XFxcIj45NDU8L2E+fERlcml2ZWQgUHJvcGVydHkgaXMgbm90IGZpbHRlcmFibGUufCAgfCB8IDxhIG5hbWU9XFxcIjk0NlxcXCI+OTQ2PC9hPnxUaGUgY29uZGl0aW9ucyBwcm92aWRlZCBoYXZlIG9uZSBvciBtb3JlIGVycm9ycy58ICB8IHwgPGEgbmFtZT1cXFwiOTQ3XFxcIj45NDc8L2E+fFRoZSBwcm9wZXJ0eS9pZGVudGlmaWVyIGRvbWFpbiBhbmQgZW50aXR5IGRvbWFpbiBkbyBub3QgbWF0Y2gufCAgfCB8IDxhIG5hbWU9XFxcIjk0OFxcXCI+OTQ4PC9hPnxJbnZhbGlkIFRpbWVsaW5lfCAgfCB8IDxhIG5hbWU9XFxcIjk0OVxcXCI+OTQ5PC9hPnxGaWx0ZXJhYmxlIERlcml2ZWQgUHJvcGVydHkgbGltaXQgcmVhY2hlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTUwXFxcIj45NTA8L2E+fEludmVzdG9yIFJlY29yZCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjk1MVxcXCI+OTUxPC9hPnxJbnZlc3RvciBSZWNvcmQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjk1MlxcXCI+OTUyPC9hPnxJbnZlc3RtZW50IEFjY291bnQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI5NTNcXFwiPjk1MzwvYT58SW52ZXN0bWVudCBBY2NvdW50IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTRcXFwiPjk1NDwvYT58Q291bGQgTm90IFN3ZWVwIEJsb2NrfCAgfCB8IDxhIG5hbWU9XFxcIjk1NVxcXCI+OTU1PC9hPnxFbnRpdHkgVW5pcXVlIElkIGhhcyB0aGUgd3JvbmcgZm9ybWF0fCAgfCB8IDxhIG5hbWU9XFxcIjk1NlxcXCI+OTU2PC9hPnxQb3N0IENsb3NlIEFjdGl2aXR5IGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTU3XFxcIj45NTc8L2E+fFRoZSBDbG9zZWRQZXJpb2Qgd2l0aCB0aGUgSWQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIFRpbWVsaW5lfCAgfCB8IDxhIG5hbWU9XFxcIjk1OFxcXCI+OTU4PC9hPnxJbnZhbGlkIFNldHRsZW1lbnQgSW5zdHJ1Y3Rpb25zfCAgfCB8IDxhIG5hbWU9XFxcIjk1OVxcXCI+OTU5PC9hPnxPcmRlciByZXF1aXJlcyBxdWFudGl0eS58ICB8IHwgPGEgbmFtZT1cXFwiOTYwXFxcIj45NjA8L2E+fEludmFsaWQgRGF0YVBvaW50IFZhbHVlIEFzc2lnbm1lbnR8ICB8IHwgPGEgbmFtZT1cXFwiOTYxXFxcIj45NjE8L2E+fEludmFsaWQgUmVsYXRpb25hbCBEYXRhc2V0IEZpZWxkIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTYyXFxcIj45NjI8L2E+fFJlbGF0aW9uYWwgRGF0YXNldCBEZWZpbml0aW9uIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjk2M1xcXCI+OTYzPC9hPnxUaW1lbGluZSBCb29rbWFyayBOb3QgSW4gT3BlbiBQZXJpb2R8ICB8IHwgPGEgbmFtZT1cXFwiOTY0XFxcIj45NjQ8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCBzcGVjaWZpZWQgaWRlbnRpZmllcnMgYnV0IHRoZSBlbnRpdHkgZG9lcyBub3Qgc3VwcG9ydCBpZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI5NjVcXFwiPjk2NTwvYT58VGhlIHNvcnQgYnkgcHJvdmlkZWQgaGFzIG9uZSBvciBtb3JlIGVycm9yc3wgIHwgfCA8YSBuYW1lPVxcXCI5NjZcXFwiPjk2NjwvYT58SW52YWxpZCBDdXN0b20gRGF0YSBNb2RlbCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2N1xcXCI+OTY3PC9hPnxSdWxlIHNldCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgQ2hlY2sgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjhcXFwiPjk2ODwvYT58VGhlIENsb3NlZCBQZXJpb2QgaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NjlcXFwiPjk2OTwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgU3RvcCBQcmljZS58ICB8IHwgPGEgbmFtZT1cXFwiOTcwXFxcIj45NzA8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIExpbWl0IFByaWNlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzFcXFwiPjk3MTwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoZSBjdXJyZW50IFR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjk3NFxcXCI+OTc0PC9hPnxDYW5ub3QgUGxhY2VCbG9ja3MgYWdhaW5zdCBhbiBcXCdVbnNvbGljaXRlZFxcJyBCbG9jayAoYmxvY2sgY29udGFpbmluZyAwIE9yZGVycykufCAgfCB8IDxhIG5hbWU9XFxcIjk3NVxcXCI+OTc1PC9hPnxObyBQb3J0Zm9saW8gR3JvdXAgU2VsZWN0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiOTc2XFxcIj45NzY8L2E+fEFtYmlndW91cyBTY29wZXwgIHwgfCA8YSBuYW1lPVxcXCI5NzdcXFwiPjk3NzwvYT58VGhlIHByb3ZpZGVkIGVudGl0eSBtYXRjaCByZXF1ZXN0IGlzIG5vdCB2YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NzhcXFwiPjk3ODwvYT58SW52YWxpZCBUcmFuc2ZlcnwgIHwgfCA8YSBuYW1lPVxcXCI5NzlcXFwiPjk3OTwvYT58VGhlIG5hbWVkIHNlcmllcyBtYXRjaGluZyBwYXR0ZXJuIGlzIG5vdCB1c2FibGUgb24gdGhlIGRhdGFzZXQgYXQgdGhlIHJlcXVlc3RlZCB0aW1lfCAgfCBcbiAqXG4gKiBDb250YWN0OiBpbmZvQGZpbmJvdXJuZS5jb21cbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwQ29udGV4dCBcbiAgICAgICAgfSAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZW5jb2Rlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24gfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24nO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVHJhbnNhY3Rpb25UZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVsL3RyYW5zYWN0aW9uVGVtcGxhdGUnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC90cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbiB9IGZyb20gJy4uL21vZGVsL3RyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGluc3RydW1lbnQgZXZlbnRzIHRoYXQgdGhlIHRlbXBsYXRlIGlzIGFwcGxpZWQgdG8uIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBsaWVzLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIEEgcmVxdWVzdCBkZWZpbmluZyBhIG5ldyB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSB0byBiZSBjcmVhdGVkLiAqL1xuICAgIHRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0OiBUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGluc3RydW1lbnQgZXZlbnRzIHRoYXQgdGhlIHRlbXBsYXRlIGlzIGFwcGxpZWQgdG8uIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIGluc3RydW1lbnQgZXZlbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBsaWVzLiBXaGVuIG5vdCBzdXBwbGllZCB0aGUgc2NvcGUgaXMgXFwmIzM5O2RlZmF1bHRcXCYjMzk7LiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBBc0F0IHRpbWUgb2YgdGhlIHJlcXVlc3RlZCBUcmFuc2FjdGlvbiBUZW1wbGF0ZSAqL1xuICAgIGFzQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHJlcXVlc3RlZCBpbnN0cnVtZW50IGV2ZW50IHR5cGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIEFzQXQgb2YgdGhlIHJlcXVlc3QgKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBUcmFuc2FjdGlvbiBUZW1wbGF0ZSBTcGVjaWZpY2F0aW9ucyBmcm9tICAgICAgICAgICAgICBhIHByZXZpb3VzIGNhbGwgdG8gbGlzdCBUcmFuc2FjdGlvbiBUZW1wbGF0ZSBTcGVjaWZpY2F0aW9ucy4gICAgICAgICAgICAgIFRoaXMgdmFsdWUgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcHJldmlvdXMgY2FsbC4gSWYgYSBwYWdpbmF0aW9uIHRva2VuIGlzIHByb3ZpZGVkIHRoZSBzb3J0QnksIGZpbHRlciwgYW5kIGFzQXQgICAgICAgICAgICAgIGZpZWxkcyBtdXN0IG5vdCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIG9yaWdpbmFsIHJlcXVlc3QuICovXG4gICAgcGFnZT86IHN0cmluZztcbiAgICAvKiogV2hlbiBwYWdpbmF0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIHJldHVybmVkIHJlc3VsdHMgdG8gdGhpcyBtYW55LiAqL1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIC8qKiBFeHByZXNzaW9uIHRvIGZpbHRlciB0aGUgcmVzdWx0IHNldC4gUmVhZCBtb3JlIGFib3V0IGZpbHRlcmluZyByZXN1bHRzIGZyb20gTFVTSUQgaGVyZTogICAgICAgICAgICAgIGh0dHBzOi8vc3VwcG9ydC5sdXNpZC5jb20vZmlsdGVyaW5nLXJlc3VsdHMtZnJvbS1sdXNpZC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG4gICAgLyoqIEEgbGlzdCBvZiBmaWVsZCBuYW1lcyB0byBzb3J0IGJ5LCBlYWNoIHN1ZmZpeGVkIGJ5IFxcJnF1b3Q7IEFTQ1xcJnF1b3Q7IG9yIFxcJnF1b3Q7IERFU0NcXCZxdW90Oy4gKi9cbiAgICBzb3J0Qnk/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RUcmFuc2FjdGlvblRlbXBsYXRlc1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgQXNBdCB0aW1lIGF0IHdoaWNoIHRvIHJldHJpZXZlIHRoZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZXMgKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBUcmFuc2FjdGlvbiBUZW1wbGF0ZXMgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gbGlzdCBUcmFuc2FjdGlvbiBUZW1wbGF0ZXMuICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuIElmIGEgcGFnaW5hdGlvbiB0b2tlbiBpcyBwcm92aWRlZCB0aGUgc29ydEJ5LCBmaWx0ZXIsIGxpbWl0LCBhbmQgYXNBdCBmaWVsZHMgICAgICAgICAgICAgIG11c3Qgbm90IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgb3JpZ2luYWwgcmVxdWVzdC4gKi9cbiAgICBwYWdlPzogc3RyaW5nO1xuICAgIC8qKiBXaGVuIHBhZ2luYXRpbmcsIGxpbWl0IHRoZSBudW1iZXIgb2YgcmV0dXJuZWQgcmVzdWx0cyB0byB0aGlzIG1hbnkuICovXG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgLyoqIEV4cHJlc3Npb24gdG8gZmlsdGVyIHRoZSByZXN1bHQgc2V0LiBSZWFkIG1vcmUgYWJvdXQgZmlsdGVyaW5nIHJlc3VsdHMgZnJvbSBMVVNJRCBoZXJlOiAgICAgICAgICAgICAgaHR0cHM6Ly9zdXBwb3J0Lmx1c2lkLmNvbS9maWx0ZXJpbmctcmVzdWx0cy1mcm9tLWx1c2lkLiAqL1xuICAgIGZpbHRlcj86IHN0cmluZztcbiAgICAvKiogQSBsaXN0IG9mIGZpZWxkIG5hbWVzIHRvIHNvcnQgYnksIGVhY2ggc3VmZml4ZWQgYnkgXFwmcXVvdDsgQVNDXFwmcXVvdDsgb3IgXFwmcXVvdDsgREVTQ1xcJnF1b3Q7ICovXG4gICAgc29ydEJ5PzogQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGluc3RydW1lbnQgZXZlbnRzIHRoYXQgdGhlIHRlbXBsYXRlIGlzIGFwcGxpZWQgdG8uIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBsaWVzLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIEEgcmVxdWVzdCBkZWZpbmluZyB0aGUgdXBkYXRlZCB2YWx1ZXMgZm9yIHRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZS4gKi9cbiAgICB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdDogVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3Q7XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSW5zdHJ1bWVudEV2ZW50VHlwZXNTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwczovL3d3dy5sdXNpZC5jb20vYXBpJztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKUBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nfHN0cmluZ1tdLCBAT3B0aW9uYWwoKSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IGZpcnN0QmFzZVBhdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmVuY29kZXIgfHwgbmV3IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYygpO1xuICAgIH1cblxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZTogQ3JlYXRlIFRyYW5zYWN0aW9uIFRlbXBsYXRlXG4gICAgICogQ3JlYXRlIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZm9yIGEgcGFydGljdWxhciBpbnN0cnVtZW50IGV2ZW50IHR5cGUgaW4gYSBzY29wZS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8VHJhbnNhY3Rpb25UZW1wbGF0ZT47XG4gICAgcHVibGljIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8VHJhbnNhY3Rpb25UZW1wbGF0ZT4+O1xuICAgIHB1YmxpYyBjcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxUcmFuc2FjdGlvblRlbXBsYXRlPj47XG4gICAgcHVibGljIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50RXZlbnRUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/Lmluc3RydW1lbnRFdmVudFR5cGU7XG4gICAgICAgIGlmIChpbnN0cnVtZW50RXZlbnRUeXBlID09PSBudWxsIHx8IGluc3RydW1lbnRFdmVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW5zdHJ1bWVudEV2ZW50VHlwZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudFR5cGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uaW5zdHJ1bWVudFR5cGU7XG4gICAgICAgIGlmIChpbnN0cnVtZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnN0cnVtZW50VHlwZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgPSByZXF1ZXN0UGFyYW1ldGVycz8udHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3Q7XG4gICAgICAgIGlmICh0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCA9PT0gbnVsbCB8fCB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvaW5zdHJ1bWVudGV2ZW50dHlwZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudEV2ZW50VHlwZVwiLCB2YWx1ZTogaW5zdHJ1bWVudEV2ZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vdHJhbnNhY3Rpb250ZW1wbGF0ZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRUeXBlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRyYW5zYWN0aW9uVGVtcGxhdGU+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGU6IERlbGV0ZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZVxuICAgICAqIERlbGV0ZSBhIHRyYW5zYWN0aW9uIHRlbXBsYXRlIGZvciBhIHBhcnRpY3VsYXIgaW5zdHJ1bWVudCBldmVudCB0eXBlIGluIGEgc2NvcGUuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHVibGljIGRlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8c3RyaW5nPj47XG4gICAgcHVibGljIGRlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHN0cmluZz4+O1xuICAgIHB1YmxpYyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudEV2ZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50RXZlbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50RXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRFdmVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/Lmluc3RydW1lbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudFR5cGUgPT09IG51bGwgfHwgaW5zdHJ1bWVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW5zdHJ1bWVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvaW5zdHJ1bWVudGV2ZW50dHlwZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudEV2ZW50VHlwZVwiLCB2YWx1ZTogaW5zdHJ1bWVudEV2ZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vdHJhbnNhY3Rpb250ZW1wbGF0ZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRUeXBlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PHN0cmluZz4oJ2RlbGV0ZScsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlOiBHZXQgVHJhbnNhY3Rpb24gVGVtcGxhdGVcbiAgICAgKiBHZXRzIHRoZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZSB0aGF0IGZvciB0aGUgaW5zdHJ1bWVudCBldmVudCB0eXBlIHdpdGhpbiB0aGUgc2NvcGUgc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvblRlbXBsYXRlPjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IEdldFRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxUcmFuc2FjdGlvblRlbXBsYXRlPj47XG4gICAgcHVibGljIGdldFRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFRyYW5zYWN0aW9uVGVtcGxhdGU+PjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IEdldFRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRFdmVudFR5cGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uaW5zdHJ1bWVudEV2ZW50VHlwZTtcbiAgICAgICAgaWYgKGluc3RydW1lbnRFdmVudFR5cGUgPT09IG51bGwgfHwgaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnN0cnVtZW50RXZlbnRUeXBlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnN0cnVtZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50VHlwZTtcbiAgICAgICAgaWYgKGluc3RydW1lbnRUeXBlID09PSBudWxsIHx8IGluc3RydW1lbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRUeXBlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvaW5zdHJ1bWVudGV2ZW50dHlwZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudEV2ZW50VHlwZVwiLCB2YWx1ZTogaW5zdHJ1bWVudEV2ZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vdHJhbnNhY3Rpb250ZW1wbGF0ZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRUeXBlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRyYW5zYWN0aW9uVGVtcGxhdGU+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbjogR2V0IFRyYW5zYWN0aW9uIFRlbXBsYXRlIFNwZWNpZmljYXRpb24uXG4gICAgICogUmV0cmlldmUgdGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIHNwZWNpZmljYXRpb24gZm9yIGEgcGFydGljdWxhciBldmVudCB0eXBlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPj47XG4gICAgcHVibGljIGdldFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24+PjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudEV2ZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50RXZlbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50RXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRFdmVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2luc3RydW1lbnRldmVudHR5cGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImluc3RydW1lbnRFdmVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRFdmVudFR5cGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L3RyYW5zYWN0aW9udGVtcGxhdGVzcGVjaWZpY2F0aW9uYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnM6IExpc3QgVHJhbnNhY3Rpb24gVGVtcGxhdGUgU3BlY2lmaWNhdGlvbnMuXG4gICAgICogUmV0cmlldmVzIGFsbCB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9ucy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8UGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24+PjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPj47XG4gICAgcHVibGljIGxpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGFnZTtcbiAgICAgICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWx0ZXI7XG4gICAgICAgIGNvbnN0IHNvcnRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0Qnk7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdlICE9PSB1bmRlZmluZWQgJiYgcGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnBhZ2UsICdwYWdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmZpbHRlciwgJ2ZpbHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICAgIHNvcnRCeS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3NvcnRCeScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2luc3RydW1lbnRldmVudHR5cGVzL3RyYW5zYWN0aW9udGVtcGxhdGVzcGVjaWZpY2F0aW9uc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0VHJhbnNhY3Rpb25UZW1wbGF0ZXM6IExpc3QgVHJhbnNhY3Rpb24gVGVtcGxhdGVzXG4gICAgICogTGlzdHMgYWxsIFRyYW5zYWN0aW9uIFRlbXBsYXRlcy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZUcmFuc2FjdGlvblRlbXBsYXRlPjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8UGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGU+PjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2VkUmVzb3VyY2VMaXN0T2ZUcmFuc2FjdGlvblRlbXBsYXRlPj47XG4gICAgcHVibGljIGxpc3RUcmFuc2FjdGlvblRlbXBsYXRlcyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXNBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hc0F0O1xuICAgICAgICBjb25zdCBwYWdlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBhZ2U7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsdGVyO1xuICAgICAgICBjb25zdCBzb3J0QnkgPSByZXF1ZXN0UGFyYW1ldGVycz8uc29ydEJ5O1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGFzQXQgIT09IHVuZGVmaW5lZCAmJiBhc0F0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+YXNBdCwgJ2FzQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFnZSAhPT0gdW5kZWZpbmVkICYmIHBhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5wYWdlLCAncGFnZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+bGltaXQsICdsaW1pdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5maWx0ZXIsICdmaWx0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydEJ5KSB7XG4gICAgICAgICAgICBzb3J0QnkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICA8YW55PmVsZW1lbnQsICdzb3J0QnknKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9pbnN0cnVtZW50ZXZlbnR0eXBlcy90cmFuc2FjdGlvbnRlbXBsYXRlc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZVRyYW5zYWN0aW9uVGVtcGxhdGU6IFVwZGF0ZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZVxuICAgICAqIFVwZGF0ZSBhIHRyYW5zYWN0aW9uIHRlbXBsYXRlIGZvciBhIHBhcnRpY3VsYXIgaW5zdHJ1bWVudCBldmVudCB0eXBlIGluIGEgc2NvcGUuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBVcGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uVGVtcGxhdGU+O1xuICAgIHB1YmxpYyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBkYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFRyYW5zYWN0aW9uVGVtcGxhdGU+PjtcbiAgICBwdWJsaWMgdXBkYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IFVwZGF0ZVRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VHJhbnNhY3Rpb25UZW1wbGF0ZT4+O1xuICAgIHB1YmxpYyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBkYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudEV2ZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50RXZlbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50RXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRFdmVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/Lmluc3RydW1lbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudFR5cGUgPT09IG51bGwgfHwgaW5zdHJ1bWVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW5zdHJ1bWVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LnRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0O1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgPT09IG51bGwgfHwgdHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2luc3RydW1lbnRldmVudHR5cGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImluc3RydW1lbnRFdmVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRFdmVudFR5cGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L3RyYW5zYWN0aW9udGVtcGxhdGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImluc3RydW1lbnRUeXBlXCIsIHZhbHVlOiBpbnN0cnVtZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxUcmFuc2FjdGlvblRlbXBsYXRlPigncHV0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxufVxuIl19
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudEV2ZW50VHlwZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvaW5zdHJ1bWVudEV2ZW50VHlwZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQWtCL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQTBCLGNBQWMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBZ0ZyRixNQUFNLE9BQU8sMkJBQTJCO0lBT2Q7SUFMWixRQUFRLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxP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QWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQzt1R0F2c0JRLDJCQUEyQiw0Q0FPNkIsU0FBUzsyR0FQakUsMkJBQTJCLGNBRjFCLE1BQU07OzJGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFrRCxRQUFROzswQkFBRyxNQUFNOzJCQUFDLFNBQVM7OzBCQUE4QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMVVNJRCBBUElcbiAqICMgSW50cm9kdWN0aW9uICBUaGlzIHBhZ2UgZG9jdW1lbnRzIHRoZSBbTFVTSUQgQVBJc10oLi4vLi4vLi4vYXBpL3N3YWdnZXIpLCB3aGljaCBhbGxvd3MgYXV0aG9yaXNlZCBjbGllbnRzIHRvIHF1ZXJ5IGFuZCB1cGRhdGUgdGhlaXIgZGF0YSB3aXRoaW4gdGhlIExVU0lEIHBsYXRmb3JtLiAgU0RLcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBMVVNJRCBBUElzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGZvbGxvd2luZyBsYW5ndWFnZXMgYW5kIGZyYW1ld29ya3M6ICAqIFtDI10oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstY3NoYXJwKSAqIFtKYXZhXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1qYXZhKSAqIFtKYXZhU2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1qcykgKiBbUHl0aG9uXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1weXRob24pICogW0FuZ3VsYXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWFuZ3VsYXIpICBUaGUgTFVTSUQgcGxhdGZvcm0gaXMgbWFkZSB1cCBvZiBhIG51bWJlciBvZiBzdWItYXBwbGljYXRpb25zLiBZb3UgY2FuIGZpbmQgdGhlIEFQSSAvIHN3YWdnZXIgZG9jdW1lbnRhdGlvbiBieSBmb2xsb3dpbmcgdGhlIGxpbmtzIGluIHRoZSB0YWJsZSBiZWxvdy4gICB8IEFwcGxpY2F0aW9uICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBUEkgLyBTd2FnZ2VyIERvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgTFVTSUQgICAgICAgICB8IE9wZW4sIEFQSS1maXJzdCwgZGV2ZWxvcGVyLWZyaWVuZGx5IGludmVzdG1lbnQgZGF0YSBwbGF0Zm9ybS4gICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hcGkvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgICAgfCB8IFdlYiBhcHAgICAgICAgfCBVc2VyLWZhY2luZyBmcm9udCBlbmQgZm9yIExVU0lELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYXBwL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICAgIHwgfCBTY2hlZHVsZXIgICAgIHwgQXV0b21hdGVkIGpvYiBzY2hlZHVsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL3NjaGVkdWxlcjIvc3dhZ2dlci9pbmRleC5odG1sKSAgICB8IHwgSW5zaWdodHMgICAgICB8IE1vbml0b3JpbmcgYW5kIHRyb3VibGVzaG9vdGluZyBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9pbnNpZ2h0cy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCB8IElkZW50aXR5ICAgICAgfCBJZGVudGl0eSBtYW5hZ2VtZW50IGZvciBMVVNJRCAoaW4gY29uanVuY3Rpb24gd2l0aCBBY2Nlc3MpICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaWRlbnRpdHkvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgfCBBY2Nlc3MgICAgICAgIHwgQWNjZXNzIGNvbnRyb2wgZm9yIExVU0lEIChpbiBjb25qdW5jdGlvbiB3aXRoIElkZW50aXR5KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FjY2Vzcy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICB8IHwgRHJpdmUgICAgICAgICB8IFNlY3VyZSBmaWxlIHJlcG9zaXRvcnkgYW5kIG1hbmFnZXIgZm9yIGNvbGxhYm9yYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9kcml2ZS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgfCB8IEx1bWluZXNjZSAgICAgfCBEYXRhIHZpcnR1YWxpc2F0aW9uIHNlcnZpY2UgKHF1ZXJ5IGRhdGEgZnJvbSBtdWx0aXBsZSBwcm92aWRlcnMsIGluY2x1ZGluZyBMVVNJRCkgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaG9uZXljb21iL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgIHwgfCBOb3RpZmljYXRpb24gIHwgTm90aWZpY2F0aW9uIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL25vdGlmaWNhdGlvbi9zd2FnZ2VyL2luZGV4Lmh0bWwpICB8IHwgQ29uZmlndXJhdGlvbiB8IEZpbGUgc3RvcmUgZm9yIHNlY3JldHMgYW5kIG90aGVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9jb25maWd1cmF0aW9uL3N3YWdnZXIvaW5kZXguaHRtbCkgfCB8IFdvcmtmbG93ICAgICAgfCBXb3JrZmxvdyBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vd29ya2Zsb3cvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgICAjIEVycm9yIENvZGVzICB8IENvZGV8TmFtZXxEZXNjcmlwdGlvbiB8IHwgLS0tfC0tLXwtLS0gfCB8IDxhIG5hbWU9XFxcIi0xMFxcXCI+LTEwPC9hPnxTZXJ2ZXIgQ29uZmlndXJhdGlvbiBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCItMVxcXCI+LTE8L2E+fFVua25vd24gZXJyb3J8QW4gdW5leHBlY3RlZCBlcnJvciB3YXMgZW5jb3VudGVyZWQgb24gb3VyIHNpZGUuIHwgfCA8YSBuYW1lPVxcXCIxMDJcXFwiPjEwMjwvYT58VmVyc2lvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTAzXFxcIj4xMDM8L2E+fEFwaSBSYXRlIExpbWl0IFZpb2xhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIxMDRcXFwiPjEwNDwvYT58SW5zdHJ1bWVudCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA1XFxcIj4xMDU8L2E+fFByb3BlcnR5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDZcXFwiPjEwNjwvYT58UG9ydGZvbGlvIFJlY3Vyc2lvbiBEZXB0aHwgIHwgfCA8YSBuYW1lPVxcXCIxMDhcXFwiPjEwODwvYT58R3JvdXAgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwOVxcXCI+MTA5PC9hPnxQb3J0Zm9saW8gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMFxcXCI+MTEwPC9hPnxQcm9wZXJ0eSBTY2hlbWEgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMVxcXCI+MTExPC9hPnxQb3J0Zm9saW8gQW5jZXN0cnkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMlxcXCI+MTEyPC9hPnxQb3J0Zm9saW8gV2l0aCBJZCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMTNcXFwiPjExMzwvYT58T3JwaGFuZWQgUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjExOVxcXCI+MTE5PC9hPnxNaXNzaW5nIEJhc2UgQ2xhaW1zfCAgfCB8IDxhIG5hbWU9XFxcIjEyMVxcXCI+MTIxPC9hPnxQcm9wZXJ0eSBOb3QgRGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCIxMjJcXFwiPjEyMjwvYT58Q2Fubm90IERlbGV0ZSBTeXN0ZW0gUHJvcGVydHl8ICB8IHwgPGEgbmFtZT1cXFwiMTIzXFxcIj4xMjM8L2E+fENhbm5vdCBNb2RpZnkgSW1tdXRhYmxlIFByb3BlcnR5IEZpZWxkfCAgfCB8IDxhIG5hbWU9XFxcIjEyNFxcXCI+MTI0PC9hPnxQcm9wZXJ0eSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMjVcXFwiPjEyNTwvYT58SW52YWxpZCBQcm9wZXJ0eSBMaWZlIFRpbWV8ICB8IHwgPGEgbmFtZT1cXFwiMTI2XFxcIj4xMjY8L2E+fFByb3BlcnR5IENvbnN0cmFpbnQgU3R5bGUgRXhjbHVkZXMgUHJvcGVydGllc3wgIHwgfCA8YSBuYW1lPVxcXCIxMjdcXFwiPjEyNzwvYT58Q2Fubm90IE1vZGlmeSBEZWZhdWx0IERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMjhcXFwiPjEyODwvYT58R3JvdXAgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTI5XFxcIj4xMjk8L2E+fE5vIFN1Y2ggRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMFxcXCI+MTMwPC9hPnxVbmRlZmluZWQgVmFsdWUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzFcXFwiPjEzMTwvYT58VW5zdXBwb3J0ZWQgVmFsdWUgVHlwZSBEZWZpbmVkIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzJcXFwiPjEzMjwvYT58VmFsaWRhdGlvbiBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIxMzNcXFwiPjEzMzwvYT58TG9vcCBEZXRlY3RlZCBJbiBHcm91cCBIaWVyYXJjaHl8ICB8IHwgPGEgbmFtZT1cXFwiMTM0XFxcIj4xMzQ8L2E+fFVuZGVmaW5lZCBBY2NlcHRhYmxlIFZhbHVlc3wgIHwgfCA8YSBuYW1lPVxcXCIxMzVcXFwiPjEzNTwvYT58U3ViIEdyb3VwIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEzOFxcXCI+MTM4PC9hPnxQcmljZSBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEzOVxcXCI+MTM5PC9hPnxBbmFseXRpYyBTdG9yZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTQxXFxcIj4xNDE8L2E+fEFuYWx5dGljIFN0b3JlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE0M1xcXCI+MTQzPC9hPnxDbGllbnQgSW5zdHJ1bWVudCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNDRcXFwiPjE0NDwvYT58RHVwbGljYXRlIEluIFBhcmFtZXRlciBTZXR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ3XFxcIj4xNDc8L2E+fFJlc3VsdHMgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE0OFxcXCI+MTQ4PC9hPnxPcmRlciBGaWVsZCBOb3QgSW4gUmVzdWx0IFNldHwgIHwgfCA8YSBuYW1lPVxcXCIxNDlcXFwiPjE0OTwvYT58T3BlcmF0aW9uIEZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCIxNTBcXFwiPjE1MDwvYT58RWxhc3RpYyBTZWFyY2ggRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMTUxXFxcIj4xNTE8L2E+fEludmFsaWQgUGFyYW1ldGVyIFZhbHVlfCAgfCB8IDxhIG5hbWU9XFxcIjE1M1xcXCI+MTUzPC9hPnxDb21tYW5kIFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTRcXFwiPjE1NDwvYT58RW50aXR5IFN0YXRlIENvbnN0cnVjdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1NVxcXCI+MTU1PC9hPnxFbnRpdHkgVGltZWxpbmUgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTU2XFxcIj4xNTY8L2E+fENvbmN1cnJlbmN5IENvbmZsaWN0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU3XFxcIj4xNTc8L2E+fEludmFsaWQgUmVxdWVzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNThcXFwiPjE1ODwvYT58RXZlbnQgUHVibGlzaCBVbmtub3dufCAgfCB8IDxhIG5hbWU9XFxcIjE1OVxcXCI+MTU5PC9hPnxFdmVudCBRdWVyeSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2MFxcXCI+MTYwPC9hPnxCbG9iIERpZCBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTYyXFxcIj4xNjI8L2E+fFN1YiBTeXN0ZW0gUmVxdWVzdCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2M1xcXCI+MTYzPC9hPnxTdWIgU3lzdGVtIENvbmZpZ3VyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjVcXFwiPjE2NTwvYT58RmFpbGVkIFRvIERlbGV0ZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjZcXFwiPjE2NjwvYT58VXBzZXJ0IENsaWVudCBJbnN0cnVtZW50IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTY3XFxcIj4xNjc8L2E+fElsbGVnYWwgQXMgQXQgSW50ZXJ2YWx8ICB8IHwgPGEgbmFtZT1cXFwiMTY4XFxcIj4xNjg8L2E+fElsbGVnYWwgQml0ZW1wb3JhbCBRdWVyeXwgIHwgfCA8YSBuYW1lPVxcXCIxNjlcXFwiPjE2OTwvYT58SW52YWxpZCBBbHRlcm5hdGUgSWR8ICB8IHwgPGEgbmFtZT1cXFwiMTcwXFxcIj4xNzA8L2E+fENhbm5vdCBBZGQgTm9uLVdyaXRhYmxlIFByb3BlcnRpZXMgVG8gRW50aXR5fCAgfCB8IDxhIG5hbWU9XFxcIjE3MVxcXCI+MTcxPC9hPnxFbnRpdHkgQWxyZWFkeSBFeGlzdHMgSW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiMTcyXFxcIj4xNzI8L2E+fEVudGl0eSBXaXRoIElkIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE3M1xcXCI+MTczPC9hPnxFbnRpdHkgV2l0aCBJZCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNzRcXFwiPjE3NDwvYT58RGVyaXZlZCBQb3J0Zm9saW8gRGV0YWlscyBEbyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTc1XFxcIj4xNzU8L2E+fEVudGl0eSBOb3QgSW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiMTc2XFxcIj4xNzY8L2E+fFBvcnRmb2xpbyBXaXRoIE5hbWUgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTc3XFxcIj4xNzc8L2E+fEludmFsaWQgVHJhbnNhY3Rpb25zfCAgfCB8IDxhIG5hbWU9XFxcIjE3OFxcXCI+MTc4PC9hPnxSZWZlcmVuY2UgUG9ydGZvbGlvIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNzlcXFwiPjE3OTwvYT58RHVwbGljYXRlIElkfCAgfCB8IDxhIG5hbWU9XFxcIjE4MFxcXCI+MTgwPC9hPnxDb21tYW5kIFJldHJpZXZhbCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4MVxcXCI+MTgxPC9hPnxEYXRhIEZpbHRlciBBcHBsaWNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4MlxcXCI+MTgyPC9hPnxTZWFyY2ggRmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE4M1xcXCI+MTgzPC9hPnxNb3ZlbWVudHMgRW5naW5lIENvbmZpZ3VyYXRpb24gS2V5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTg0XFxcIj4xODQ8L2E+fEZ4IFJhdGUgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxODVcXFwiPjE4NTwvYT58QWNjcnVhbCBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE4NlxcXCI+MTg2PC9hPnxBY2Nlc3MgRGVuaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE4N1xcXCI+MTg3PC9hPnxJbnZhbGlkIElkZW50aXR5IFRva2VufCAgfCB8IDxhIG5hbWU9XFxcIjE4OFxcXCI+MTg4PC9hPnxJbnZhbGlkIFJlcXVlc3QgSGVhZGVyc3wgIHwgfCA8YSBuYW1lPVxcXCIxODlcXFwiPjE4OTwvYT58UHJpY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE5MFxcXCI+MTkwPC9hPnxJbnZhbGlkIFN1YiBIb2xkaW5nIEtleXMgUHJvdmlkZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTkxXFxcIj4xOTE8L2E+fER1cGxpY2F0ZSBTdWIgSG9sZGluZyBLZXlzIFByb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MlxcXCI+MTkyPC9hPnxDdXQgRGVmaW5pdGlvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkzXFxcIj4xOTM8L2E+fEN1dCBEZWZpbml0aW9uIEludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk0XFxcIj4xOTQ8L2E+fFRpbWUgVmFyaWFudCBQcm9wZXJ0eSBEZWxldGlvbiBEYXRlIFVuc3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NVxcXCI+MTk1PC9hPnxQZXJwZXR1YWwgUHJvcGVydHkgRGVsZXRpb24gRGF0ZSBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk2XFxcIj4xOTY8L2E+fFRpbWUgVmFyaWFudCBQcm9wZXJ0eSBVcHNlcnQgRGF0ZSBVbnNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTdcXFwiPjE5NzwvYT58UGVycGV0dWFsIFByb3BlcnR5IFVwc2VydCBEYXRlIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDBcXFwiPjIwMDwvYT58SW52YWxpZCBVbml0IEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAxXFxcIj4yMDE8L2E+fEludmFsaWQgVHlwZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMlxcXCI+MjAyPC9hPnxJbnZhbGlkIFZhbHVlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAzXFxcIj4yMDM8L2E+fFVuaXQgTm90IERlZmluZWQgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDRcXFwiPjIwNDwvYT58VW5pdHMgTm90IFN1cHBvcnRlZCBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA1XFxcIj4yMDU8L2E+fENhbm5vdCBTcGVjaWZ5IFVuaXRzIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDZcXFwiPjIwNjwvYT58VW5pdCBTY2hlbWEgSW5jb25zaXN0ZW50IFdpdGggRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwN1xcXCI+MjA3PC9hPnxVbml0IERlZmluaXRpb24gTm90IFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDhcXFwiPjIwODwvYT58RHVwbGljYXRlIFVuaXQgRGVmaW5pdGlvbnMgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwOVxcXCI+MjA5PC9hPnxJbnZhbGlkIFVuaXRzIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjEwXFxcIj4yMTA8L2E+fEludmFsaWQgSW5zdHJ1bWVudCBJZGVudGlmaWVyIFVuaXR8ICB8IHwgPGEgbmFtZT1cXFwiMjExXFxcIj4yMTE8L2E+fEhvbGRpbmdzIEFkanVzdG1lbnQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMjEyXFxcIj4yMTI8L2E+fENvdWxkIE5vdCBCdWlsZCBFeGNlbCBVcmx8ICB8IHwgPGEgbmFtZT1cXFwiMjEzXFxcIj4yMTM8L2E+fENvdWxkIE5vdCBHZXQgRXhjZWwgVmVyc2lvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMTRcXFwiPjIxNDwvYT58SW5zdHJ1bWVudCBCeSBDb2RlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMTVcXFwiPjIxNTwvYT58RW50aXR5IFNjaGVtYSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTZcXFwiPjIxNjwvYT58RmVhdHVyZSBOb3QgU3VwcG9ydGVkIE9uIFBvcnRmb2xpbyBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIxN1xcXCI+MjE3PC9hPnxRdW90ZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjE4XFxcIj4yMTg8L2E+fEludmFsaWQgUXVvdGUgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCIyMTlcXFwiPjIxOTwvYT58SW52YWxpZCBNZXRyaWMgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMjBcXFwiPjIyMDwvYT58SW52YWxpZCBJbnN0cnVtZW50IERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjIxXFxcIj4yMjE8L2E+fEluc3RydW1lbnQgVXBzZXJ0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjIyXFxcIj4yMjI8L2E+fFJlZmVyZW5jZSBQb3J0Zm9saW8gUmVxdWVzdCBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjIyM1xcXCI+MjIzPC9hPnxUcmFuc2FjdGlvbiBQb3J0Zm9saW8gUmVxdWVzdCBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjIyNFxcXCI+MjI0PC9hPnxJbnZhbGlkIFByb3BlcnR5IFZhbHVlIEFzc2lnbm1lbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjMwXFxcIj4yMzA8L2E+fFRyYW5zYWN0aW9uIFR5cGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIzMVxcXCI+MjMxPC9hPnxUcmFuc2FjdGlvbiBUeXBlIER1cGxpY2F0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIzMlxcXCI+MjMyPC9hPnxQb3J0Zm9saW8gRG9lcyBOb3QgRXhpc3QgQXQgR2l2ZW4gRGF0ZXwgIHwgfCA8YSBuYW1lPVxcXCIyMzNcXFwiPjIzMzwvYT58UXVlcnkgUGFyc2VyIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjM0XFxcIj4yMzQ8L2E+fER1cGxpY2F0ZSBDb25zdGl0dWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzVcXFwiPjIzNTwvYT58VW5yZXNvbHZlZCBJbnN0cnVtZW50IENvbnN0aXR1ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzNlxcXCI+MjM2PC9hPnxVbnJlc29sdmVkIEluc3RydW1lbnQgSW4gVHJhbnNpdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMzdcXFwiPjIzNzwvYT58TWlzc2luZyBTaWRlIERlZmluaXRpb25zfCAgfCB8IDxhIG5hbWU9XFxcIjI0MFxcXCI+MjQwPC9hPnxEdXBsaWNhdGUgQ2FsY3VsYXRpb25zIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjk5XFxcIj4yOTk8L2E+fEludmFsaWQgUmVjaXBlfCAgfCB8IDxhIG5hbWU9XFxcIjMwMFxcXCI+MzAwPC9hPnxNaXNzaW5nIFJlY2lwZXwgIHwgfCA8YSBuYW1lPVxcXCIzMDFcXFwiPjMwMTwvYT58RGVwZW5kZW5jaWVzfCAgfCB8IDxhIG5hbWU9XFxcIjMwNFxcXCI+MzA0PC9hPnxQb3J0Zm9saW8gUHJlcHJvY2VzcyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMFxcXCI+MzEwPC9hPnxWYWx1YXRpb24gRW5naW5lIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzExXFxcIj4zMTE8L2E+fFRhc2sgRmFjdG9yeSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMlxcXCI+MzEyPC9hPnxUYXNrIEV2YWx1YXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTNcXFwiPjMxMzwvYT58VGFzayBHZW5lcmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzE0XFxcIj4zMTQ8L2E+fEVuZ2luZSBDb25maWd1cmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzE1XFxcIj4zMTU8L2E+fE1vZGVsIFNwZWNpZmljYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjBcXFwiPjMyMDwvYT58TWFya2V0IERhdGEgS2V5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIxXFxcIj4zMjE8L2E+fE1hcmtldCBSZXNvbHZlciBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMlxcXCI+MzIyPC9hPnxNYXJrZXQgRGF0YSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMFxcXCI+MzMwPC9hPnxDdXJ2ZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMVxcXCI+MzMxPC9hPnxWb2xhdGlsaXR5IFN1cmZhY2UgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzJcXFwiPjMzMjwvYT58Vm9sYXRpbGl0eSBDdWJlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUwXFxcIj4zNTA8L2E+fEluc3RydW1lbnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTFcXFwiPjM1MTwvYT58Q2FzaCBGbG93cyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MlxcXCI+MzUyPC9hPnxSZWZlcmVuY2UgRGF0YSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM2MFxcXCI+MzYwPC9hPnxBZ2dyZWdhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM2MVxcXCI+MzYxPC9hPnxBZ2dyZWdhdGlvbiBNZWFzdXJlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcwXFxcIj4zNzA8L2E+fFJlc3VsdCBSZXRyaWV2YWwgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzFcXFwiPjM3MTwvYT58UmVzdWx0IFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzJcXFwiPjM3MjwvYT58VmVuZG9yIFJlc3VsdCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzczXFxcIj4zNzM8L2E+fFZlbmRvciBSZXN1bHQgTWFwcGluZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3NFxcXCI+Mzc0PC9hPnxWZW5kb3IgTGlicmFyeSBVbmF1dGhvcmlzZWR8ICB8IHwgPGEgbmFtZT1cXFwiMzc1XFxcIj4zNzU8L2E+fFZlbmRvciBDb25uZWN0aXZpdHkgRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMzc2XFxcIj4zNzY8L2E+fFZlbmRvciBJbnRlcmZhY2UgRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMzc3XFxcIj4zNzc8L2E+fFZlbmRvciBQcmljaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc4XFxcIj4zNzg8L2E+fFZlbmRvciBUcmFuc2xhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3OVxcXCI+Mzc5PC9hPnxWZW5kb3IgS2V5IE1hcHBpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzODBcXFwiPjM4MDwvYT58VmVuZG9yIFJlZmxlY3Rpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzODFcXFwiPjM4MTwvYT58VmVuZG9yIFByb2Nlc3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzODJcXFwiPjM4MjwvYT58VmVuZG9yIFN5c3RlbSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM5MFxcXCI+MzkwPC9hPnxBdHRlbXB0IFRvIFVwc2VydCBEdXBsaWNhdGUgUXVvdGVzfCAgfCB8IDxhIG5hbWU9XFxcIjM5MVxcXCI+MzkxPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIFNvdXJjZSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIzOTJcXFwiPjM5MjwvYT58Q29ycG9yYXRlIEFjdGlvbiBTb3VyY2UgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMzkzXFxcIj4zOTM8L2E+fEluc3RydW1lbnQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCIzOTRcXFwiPjM5NDwvYT58UHJvcGVydGllcyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMzk1XFxcIj4zOTU8L2E+fEJhdGNoIE9wZXJhdGlvbiBBYm9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjQwMFxcXCI+NDAwPC9hPnxJbnZhbGlkIElzbzQyMTcgQ3VycmVuY3kgQ29kZXwgIHwgfCA8YSBuYW1lPVxcXCI0MDFcXFwiPjQwMTwvYT58Q2Fubm90IEFzc2lnbiBJbnN0cnVtZW50IElkZW50aWZpZXIgVG8gQ3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiNDAyXFxcIj40MDI8L2E+fENhbm5vdCBBc3NpZ24gQ3VycmVuY3kgSWRlbnRpZmllciBUbyBOb24gQ3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiNDAzXFxcIj40MDM8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEJlIERlbGV0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDA0XFxcIj40MDQ8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEhhdmUgRWNvbm9taWMgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI0MDVcXFwiPjQwNTwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgSGF2ZSBMb29rdGhyb3VnaCBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiNDA2XFxcIj40MDY8L2E+fENhbm5vdCBDcmVhdGUgQ3VycmVuY3kgSW5zdHJ1bWVudCBXaXRoIE11bHRpcGxlIElkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjQwN1xcXCI+NDA3PC9hPnxTcGVjaWZpZWQgQ3VycmVuY3kgSXMgVW5kZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjQxMFxcXCI+NDEwPC9hPnxJbmRleCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI0MTFcXFwiPjQxMTwvYT58U29ydCBGaWVsZCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI0MTNcXFwiPjQxMzwvYT58TmVnYXRpdmUgUGFnaW5hdGlvbiBQYXJhbWV0ZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjQxNFxcXCI+NDE0PC9hPnxJbnZhbGlkIFNlYXJjaCBTeW50YXh8ICB8IHwgPGEgbmFtZT1cXFwiNDE1XFxcIj40MTU8L2E+fEZpbHRlciBFeGVjdXRpb24gVGltZW91dHwgIHwgfCA8YSBuYW1lPVxcXCI0MjBcXFwiPjQyMDwvYT58U2lkZSBEZWZpbml0aW9uIEluY29uc2lzdGVudHwgIHwgfCA8YSBuYW1lPVxcXCI0NTBcXFwiPjQ1MDwvYT58SW52YWxpZCBRdW90ZSBBY2Nlc3MgTWV0YWRhdGEgUnVsZXwgIHwgfCA8YSBuYW1lPVxcXCI0NTFcXFwiPjQ1MTwvYT58QWNjZXNzIE1ldGFkYXRhIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NTJcXFwiPjQ1MjwvYT58SW52YWxpZCBBY2Nlc3MgTWV0YWRhdGEgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCI0NjBcXFwiPjQ2MDwvYT58U3RhbmRhcmQgUmVzb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ2MVxcXCI+NDYxPC9hPnxTdGFuZGFyZCBSZXNvdXJjZSBDb25mbGljdHwgIHwgfCA8YSBuYW1lPVxcXCI0NjJcXFwiPjQ2MjwvYT58Q2FsZW5kYXIgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ2M1xcXCI+NDYzPC9hPnxEYXRlIEluIEEgQ2FsZW5kYXIgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ2NFxcXCI+NDY0PC9hPnxJbnZhbGlkIERhdGUgU291cmNlIERhdGF8ICB8IHwgPGEgbmFtZT1cXFwiNDY1XFxcIj40NjU8L2E+fEludmFsaWQgVGltZXpvbmV8ICB8IHwgPGEgbmFtZT1cXFwiNjAxXFxcIj42MDE8L2E+fFBlcnNvbiBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjYwMlxcXCI+NjAyPC9hPnxQZXJzb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjYwM1xcXCI+NjAzPC9hPnxDYW5ub3QgU2V0IElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiNjE3XFxcIj42MTc8L2E+fEludmFsaWQgUmVjaXBlIFNwZWNpZmljYXRpb24gSW4gUmVxdWVzdHwgIHwgfCA8YSBuYW1lPVxcXCI2MThcXFwiPjYxODwvYT58SW5saW5lIFJlY2lwZSBEZXNlcmlhbGlzYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI2MTlcXFwiPjYxOTwvYT58SWRlbnRpZmllciBUeXBlcyBOb3QgU2V0IEZvciBFbnRpdHl8ICB8IHwgPGEgbmFtZT1cXFwiNjIwXFxcIj42MjA8L2E+fENhbm5vdCBEZWxldGUgQWxsIENsaWVudCBEZWZpbmVkIElkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjY1MFxcXCI+NjUwPC9hPnxUaGUgT3JkZXIgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjY1NFxcXCI+NjU0PC9hPnxUaGUgQWxsb2NhdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNjU1XFxcIj42NTU8L2E+fENhbm5vdCBidWlsZCB0aGUgZnggZm9yd2FyZCB0YXJnZXQgd2l0aCB0aGUgZ2l2ZW4gaG9sZGluZ3MufCAgfCB8IDxhIG5hbWU9XFxcIjY1NlxcXCI+NjU2PC9hPnxHcm91cCBkb2VzIG5vdCBjb250YWluIGV4cGVjdGVkIGVudGl0aWVzLnwgIHwgfCA8YSBuYW1lPVxcXCI2NjVcXFwiPjY2NTwvYT58RGVzdGluYXRpb24gZGlyZWN0b3J5IG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2NjdcXFwiPjY2NzwvYT58UmVsYXRpb24gZGVmaW5pdGlvbiBhbHJlYWR5IGV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI2NzJcXFwiPjY3MjwvYT58Q291bGQgbm90IHJldHJpZXZlIGZpbGUgY29udGVudHN8ICB8IHwgPGEgbmFtZT1cXFwiNjczXFxcIj42NzM8L2E+fE1pc3NpbmcgZW50aXRsZW1lbnRzIGZvciBlbnRpdGllcyBpbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCI2NzRcXFwiPjY3NDwvYT58TmV4dCBCZXN0IEFjdGlvbiBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjc2XFxcIj42NzY8L2E+fFJlbGF0aW9uIGRlZmluaXRpb24gbm90IGRlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjc3XFxcIj42Nzc8L2E+fEludmFsaWQgZW50aXR5IGlkZW50aWZpZXIgZm9yIHJlbGF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjY4MVxcXCI+NjgxPC9hPnxTb3J0aW5nIGJ5IHNwZWNpZmllZCBmaWVsZCBub3Qgc3VwcG9ydGVkfE9uZSBvciBtb3JlIG9mIHRoZSBwcm92aWRlZCBmaWVsZHMgdG8gb3JkZXIgYnkgd2VyZSBlaXRoZXIgaW52YWxpZCBvciBub3Qgc3VwcG9ydGVkLiB8IHwgPGEgbmFtZT1cXFwiNjgyXFxcIj42ODI8L2E+fFRvbyBtYW55IGZpZWxkcyB0byBzb3J0IGJ5fFRoZSBudW1iZXIgb2YgZmllbGRzIHRvIHNvcnQgdGhlIGRhdGEgYnkgZXhjZWVkcyB0aGUgbnVtYmVyIGFsbG93ZWQgYnkgdGhlIGVuZHBvaW50IHwgfCA8YSBuYW1lPVxcXCI2ODRcXFwiPjY4NDwvYT58U2VxdWVuY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY4NVxcXCI+Njg1PC9hPnxTZXF1ZW5jZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI2ODZcXFwiPjY4NjwvYT58Tm9uLWN5Y2xpbmcgc2VxdWVuY2UgaGFzIGJlZW4gZXhoYXVzdGVkfCAgfCB8IDxhIG5hbWU9XFxcIjY4N1xcXCI+Njg3PC9hPnxMZWdhbCBFbnRpdHkgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI2ODhcXFwiPjY4ODwvYT58TGVnYWwgRW50aXR5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODlcXFwiPjY4OTwvYT58VGhlIHN1cHBsaWVkIHBhZ2luYXRpb24gdG9rZW4gaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTBcXFwiPjY5MDwvYT58UHJvcGVydHkgVHlwZSBJcyBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MVxcXCI+NjkxPC9hPnxNdWx0aXBsZSBUYXgtbG90cyBGb3IgQ3VycmVuY3kgVHlwZSBJcyBOb3QgU3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MlxcXCI+NjkyPC9hPnxUaGlzIGVuZHBvaW50IGRvZXMgbm90IHN1cHBvcnQgaW1wZXJzb25hdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI2OTNcXFwiPjY5MzwvYT58RW50aXR5IHR5cGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgUmVsYXRpb25zaGlwfCAgfCB8IDxhIG5hbWU9XFxcIjY5NFxcXCI+Njk0PC9hPnxSZWxhdGlvbnNoaXAgVmFsaWRhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjY5NVxcXCI+Njk1PC9hPnxSZWxhdGlvbnNoaXAgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY5N1xcXCI+Njk3PC9hPnxEZXJpdmVkIFByb3BlcnR5IEZvcm11bGEgTm8gTG9uZ2VyIFZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjY5OFxcXCI+Njk4PC9hPnxTdG9yeSBpcyBub3QgYXZhaWxhYmxlfCAgfCB8IDxhIG5hbWU9XFxcIjcwM1xcXCI+NzAzPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjcyMFxcXCI+NzIwPC9hPnxUaGUgcHJvdmlkZWQgc29ydCBhbmQgZmlsdGVyIGNvbWJpbmF0aW9uIGlzIG5vdCB2YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjFcXFwiPjcyMTwvYT58QTJCIGdlbmVyYXRpb24gZmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjcyMlxcXCI+NzIyPC9hPnxBZ2dyZWdhdGVkIFJldHVybiBDYWxjdWxhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjcyM1xcXCI+NzIzPC9hPnxDdXN0b20gRW50aXR5IERlZmluaXRpb24gSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI3MjRcXFwiPjcyNDwvYT58Q3VzdG9tIEVudGl0eSBEZWZpbml0aW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjVcXFwiPjcyNTwvYT58VGhlIFBsYWNlbWVudCByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI2XFxcIj43MjY8L2E+fFRoZSBFeGVjdXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyN1xcXCI+NzI3PC9hPnxUaGUgQmxvY2sgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyOFxcXCI+NzI4PC9hPnxUaGUgUGFydGljaXBhdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI5XFxcIj43Mjk8L2E+fFRoZSBQYWNrYWdlIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzBcXFwiPjczMDwvYT58VGhlIE9yZGVySW5zdHJ1Y3Rpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczMlxcXCI+NzMyPC9hPnxDdXN0b20gRW50aXR5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMzXFxcIj43MzM8L2E+fEN1c3RvbSBFbnRpdHkgSWRlbnRpZmllciBhbHJlYWR5IGluIHVzZS58ICB8IHwgPGEgbmFtZT1cXFwiNzM1XFxcIj43MzU8L2E+fENhbGN1bGF0aW9uIEZhaWxlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzM2XFxcIj43MzY8L2E+fEFuIGV4cGVjdGVkIGtleSBvbiBIdHRwUmVzcG9uc2UgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzM3XFxcIj43Mzc8L2E+fEEgcmVxdWlyZWQgZmVlIGRldGFpbCBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzhcXFwiPjczODwvYT58WmVybyByb3dzIHdlcmUgcmV0dXJuZWQgZnJvbSBMdW1pbmVzY2V8ICB8IHwgPGEgbmFtZT1cXFwiNzM5XFxcIj43Mzk8L2E+fFByb3ZpZGVkIFdlZWtlbmQgTWFzayB3YXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI3NDJcXFwiPjc0MjwvYT58Q3VzdG9tIEVudGl0eSBmaWVsZHMgZG8gbm90IG1hdGNoIHRoZSBkZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjc0NlxcXCI+NzQ2PC9hPnxUaGUgcHJvdmlkZWQgc2VxdWVuY2UgaXMgbm90IHZhbGlkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTFcXFwiPjc1MTwvYT58VGhlIHR5cGUgb2YgdGhlIEN1c3RvbSBFbnRpdHkgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHR5cGUgcHJvdmlkZWQgaW4gdGhlIGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjc1MlxcXCI+NzUyPC9hPnxMdW1pbmVzY2UgcHJvY2VzcyByZXR1cm5lZCBhbiBlcnJvci58ICB8IHwgPGEgbmFtZT1cXFwiNzUzXFxcIj43NTM8L2E+fEZpbGUgbmFtZSBvciBjb250ZW50IGluY29tcGF0aWJsZSB3aXRoIG9wZXJhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiNzU1XFxcIj43NTU8L2E+fFNjaGVtYSBvZiByZXNwb25zZSBmcm9tIERyaXZlIGlzIG5vdCBhcyBleHBlY3RlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzU3XFxcIj43NTc8L2E+fFNjaGVtYSBvZiByZXNwb25zZSBmcm9tIEx1bWluZXNjZSBpcyBub3QgYXMgZXhwZWN0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1OFxcXCI+NzU4PC9hPnxMdW1pbmVzY2UgdGltZWQgb3V0LnwgIHwgfCA8YSBuYW1lPVxcXCI3NjNcXFwiPjc2MzwvYT58SW52YWxpZCBMdXNpZCBFbnRpdHkgSWRlbnRpZmllciBVbml0fCAgfCB8IDxhIG5hbWU9XFxcIjc2OFxcXCI+NzY4PC9hPnxGZWUgcnVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc2OVxcXCI+NzY5PC9hPnxDYW5ub3QgdXBkYXRlIHRoZSBiYXNlIGN1cnJlbmN5IG9mIGEgcG9ydGZvbGlvIHdpdGggdHJhbnNhY3Rpb25zIGxvYWRlZHwgIHwgfCA8YSBuYW1lPVxcXCI3NzFcXFwiPjc3MTwvYT58VHJhbnNhY3Rpb24gY29uZmlndXJhdGlvbiBzb3VyY2Ugbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjc3NFxcXCI+Nzc0PC9hPnxDb21wbGlhbmNlIHJ1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3NzVcXFwiPjc3NTwvYT58RnVuZCBhY2NvdW50aW5nIGRvY3VtZW50IGNhbm5vdCBiZSBwcm9jZXNzZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc3OFxcXCI+Nzc4PC9hPnxVbmFibGUgdG8gbG9vayB1cCBGWCByYXRlIGZyb20gdHJhZGUgY2N5IHRvIHBvcnRmb2xpbyBjY3kgZm9yIHNvbWUgb2YgdGhlIHRyYWRlcy58ICB8IHwgPGEgbmFtZT1cXFwiNzgyXFxcIj43ODI8L2E+fFRoZSBQcm9wZXJ0eSBkZWZpbml0aW9uIGRhdGFUeXBlIGlzIG5vdCBtYXRjaGluZyB0aGUgZGVyaXZhdGlvbiBmb3JtdWxhIGRhdGFUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjc4M1xcXCI+NzgzPC9hPnxUaGUgUHJvcGVydHkgZGVmaW5pdGlvbiBkb21haW4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVyaXZlZCBwcm9wZXJ0aWVzfCAgfCB8IDxhIG5hbWU9XFxcIjc4OFxcXCI+Nzg4PC9hPnxDb21wbGlhbmNlIHJ1biBub3QgZm91bmQgZmFpbHVyZS58ICB8IHwgPGEgbmFtZT1cXFwiNzkwXFxcIj43OTA8L2E+fEN1c3RvbSBFbnRpdHkgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBpZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI3OTFcXFwiPjc5MTwvYT58Q3VzdG9tIEVudGl0eSBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjc5MlxcXCI+NzkyPC9hPnxDb21wbGlhbmNlIFByb3BlcnR5S2V5IGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjc5M1xcXCI+NzkzPC9hPnxDb21wbGlhbmNlIENyaXRlcmlhIFZhbHVlIGZvciBtYXRjaGluZyBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTVcXFwiPjc5NTwvYT58Q2Fubm90IGRlbGV0ZSBpZGVudGlmaWVyIGRlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNzk2XFxcIj43OTY8L2E+fFRheCBydWxlIHNldCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc5N1xcXCI+Nzk3PC9hPnxBIHRheCBydWxlIHNldCB3aXRoIHRoaXMgaWQgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjc5OFxcXCI+Nzk4PC9hPnxNdWx0aXBsZSBydWxlIHNldHMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGtleSBhcmUgYXBwbGljYWJsZS58ICB8IHwgPGEgbmFtZT1cXFwiNzk5XFxcIj43OTk8L2E+fFRoZSByZXF1ZXN0IG11c3QgY29udGFpbiBhIGRhdGUgb3IgZGlhcnkgZW50cnkufCAgfCB8IDxhIG5hbWU9XFxcIjgwMFxcXCI+ODAwPC9hPnxDYW4gbm90IHVwc2VydCBhbiBpbnN0cnVtZW50IGV2ZW50IG9mIHRoaXMgdHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiODAxXFxcIj44MDE8L2E+fFRoZSBpbnN0cnVtZW50IGV2ZW50IGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDJcXFwiPjgwMjwvYT58VGhlIEluc3RydW1lbnQgZXZlbnQgaXMgbWlzc2luZyBzYWxpZW50IGluZm9ybWF0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDNcXFwiPjgwMzwvYT58VGhlIEluc3RydW1lbnQgZXZlbnQgY291bGQgbm90IGJlIHByb2Nlc3NlZC58ICB8IHwgPGEgbmFtZT1cXFwiODA0XFxcIj44MDQ8L2E+fFNvbWUgZGF0YSByZXF1ZXN0ZWQgZG9lcyBub3QgZm9sbG93IHRoZSBvcmRlciBncmFwaCBhc3N1bXB0aW9ucy58ICB8IHwgPGEgbmFtZT1cXFwiODA1XFxcIj44MDU8L2E+fFRoZSBpbnN0cnVtZW50IGV2ZW50IHR5cGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwNlxcXCI+ODA2PC9hPnxUaGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA3XFxcIj44MDc8L2E+fFRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIHRlbXBsYXRlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDhcXFwiPjgwODwvYT58VGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MTFcXFwiPjgxMTwvYT58QSBwcmljZSBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGFuIG9yZGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTJcXFwiPjgxMjwvYT58QSBwcmljZSBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGFuIGFsbG9jYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjgxM1xcXCI+ODEzPC9hPnxDaGFydCBvZiBBY2NvdW50cyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNFxcXCI+ODE0PC9hPnxBY2NvdW50IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE1XFxcIj44MTU8L2E+fEFib3Igbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTZcXFwiPjgxNjwvYT58QWJvciBDb25maWd1cmF0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE3XFxcIj44MTc8L2E+fFJlY29uY2lsaWF0aW9uIG1hcHBpbmcgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgxOFxcXCI+ODE4PC9hPnxBdHRyaWJ1dGUgdHlwZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODE5XFxcIj44MTk8L2E+fFJlY29uY2lsaWF0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODIwXFxcIj44MjA8L2E+fEN1c3RvZGlhbiBBY2NvdW50IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODIxXFxcIj44MjE8L2E+fEFsbG9jYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI4MjJcXFwiPjgyMjwvYT58UmVjb25jaWxpYXRpb24gcnVuIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MjNcXFwiPjgyMzwvYT58UmVjb25jaWxpYXRpb24gYnJlYWsgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgyNFxcXCI+ODI0PC9hPnxFbnRpdHkgbGluayB0eXBlIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MjhcXFwiPjgyODwvYT58QWRkcmVzcyBrZXkgZGVmaW5pdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyOVxcXCI+ODI5PC9hPnxDb21wbGlhbmNlIHRlbXBsYXRlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMwXFxcIj44MzA8L2E+fEFjdGlvbiBub3Qgc3VwcG9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjgzMVxcXCI+ODMxPC9hPnxSZWZlcmVuY2UgbGlzdCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzMlxcXCI+ODMyPC9hPnxQb3N0aW5nIE1vZHVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzM1xcXCI+ODMzPC9hPnxUaGUgdHlwZSBvZiBwYXJhbWV0ZXIgcHJvdmlkZWQgZGlkIG5vdCBtYXRjaCB0aGF0IHJlcXVpcmVkIGJ5IHRoZSBjb21wbGlhbmNlIHJ1bGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNFxcXCI+ODM0PC9hPnxUaGUgcGFyYW1ldGVycyBwcm92aWRlZCBieSBhIHJ1bGUgZGlkIG5vdCBtYXRjaCB0aG9zZSByZXF1aXJlZCBieSBpdHMgdGVtcGxhdGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNVxcXCI+ODM1PC9hPnxUaGUgZW50aXR5IGhhcyBhIHByb3BlcnR5IGluIGEgZG9tYWluIHRoYXQgaXMgbm90IHN1cHBydGVkIGZvciB0aGF0IGVudGl0eSB0eXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzZcXFwiPjgzNjwvYT58U3RydWN0dXJlZCByZXN1bHQgZGF0YSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzN1xcXCI+ODM3PC9hPnxEaWFyeSBlbnRyeSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzOFxcXCI+ODM4PC9hPnxEaWFyeSBlbnRyeSBjb3VsZCBub3QgYmUgY3JlYXRlZC58ICB8IHwgPGEgbmFtZT1cXFwiODM5XFxcIj44Mzk8L2E+fERpYXJ5IGVudHJ5IGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI4NjFcXFwiPjg2MTwvYT58Q29tcGxpYW5jZSBydW4gc3VtbWFyeSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjg2OVxcXCI+ODY5PC9hPnxDb25mbGljdGluZyBpbnN0cnVtZW50IHByb3BlcnRpZXMgaW4gYmF0Y2gufCAgfCB8IDxhIG5hbWU9XFxcIjg3MFxcXCI+ODcwPC9hPnxDb21wbGlhbmNlIHJ1biBzdW1tYXJ5IGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzFcXFwiPjg3MTwvYT58VGhlIHNwZWNpZmllZCBpbXBlcnNvbmF0ZWQgdXNlciBkb2VzIG5vdCBleGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI4NzRcXFwiPjg3NDwvYT58UHJvdmlkZWQgUHJvcGVydHkgRG9tYWluIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGVudGl0eSBmaWx0ZXIufCAgfCB8IDxhIG5hbWU9XFxcIjg3NVxcXCI+ODc1PC9hPnxDYW5ub3QgRGVsZXRlIFN5c3RlbSBSZWZlcmVuY2UgTGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODc2XFxcIj44NzY8L2E+fENsZWFyZG93biBNb2R1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzlcXFwiPjg3OTwvYT58UG9ydGZvbGlvcyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBiYXNlIGN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjg4MFxcXCI+ODgwPC9hPnxUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGNvbXBsaWFuY2UgZXhwcmVzc2lvbi58ICB8IHwgPGEgbmFtZT1cXFwiODgxXFxcIj44ODE8L2E+fEJsb2NrIG92ZXJwbGFjZWQufCAgfCB8IDxhIG5hbWU9XFxcIjg4MlxcXCI+ODgyPC9hPnxPcmRlciBub3QgYXBwcm92ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjg4M1xcXCI+ODgzPC9hPnxDYW5ub3QgdXBkYXRlIHRoZSBzaGFyZWQgZmllbGRzIG9mIGEgYmxvY2sgd2l0aCBhc3NvY2lhdGVkIG9yZGVycy58ICB8IHwgPGEgbmFtZT1cXFwiODg2XFxcIj44ODY8L2E+fENhbm5vdCBsb2NrIHRoZSBwZXJpb2QufCAgfCB8IDxhIG5hbWU9XFxcIjg4N1xcXCI+ODg3PC9hPnxDYW5ub3QgYXBwbHkgY2xlYXIgZG93biBtb2R1bGUufCAgfCB8IDxhIG5hbWU9XFxcIjg4OFxcXCI+ODg4PC9hPnxDYW5ub3QgdXBzZXJ0IEluc3RydW1lbnQgRXZlbnQgSW5zdHJ1Y3Rpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg4OVxcXCI+ODg5PC9hPnxDYW5ub3QgcmVhZCBJbnN0cnVtZW50IEV2ZW50IEluc3RydWN0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4OTVcXFwiPjg5NTwvYT58VGhlIENhcGl0YWwgUmF0aW8gQ2FsY3VsYXRpb24gSXMgV3JvbmcufCAgfCB8IDxhIG5hbWU9XFxcIjkxMFxcXCI+OTEwPC9hPnxDYW5ub3QgdXBkYXRlIGEgYmxvY2sgcmVmZXJlbmNlZCBieSBhIHBsYWNlbWVudC58ICB8IHwgPGEgbmFtZT1cXFwiOTExXFxcIj45MTE8L2E+fEEgRnVuZCB0aGF0IHJlZmVyZW5jZXMgdGhpcyBBYm9yIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTJcXFwiPjkxMjwvYT58Q2Fubm90IGFkZCBkZWNpc2lvbiB0byBTdGFnZWQgTW9kaWZpY2F0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTNcXFwiPjkxMzwvYT58VGhlIFN0YWdlZCBNb2RpZmljYXRpb24gY291bGQgbm90IGJlIGFwcGxpZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkxNFxcXCI+OTE0PC9hPnxBY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTVcXFwiPjkxNTwvYT58Q2Fubm90IHVwc2VydCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBpbiBvbmUgcmVxdWVzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTE2XFxcIj45MTY8L2E+fFBsYWNlbWVudCBhbmQgZGlyZWN0IGRlc2NlbmRlbnRzIGhhdmUgbW9yZSBleGVjdXRlZCBxdWFudGl0eSB0aGFuIHRvdGFsIHBsYWNlbWVudCBxdWFudGl0eS58ICB8IHwgPGEgbmFtZT1cXFwiOTE3XFxcIj45MTc8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIEVudHJ5VHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiOTE4XFxcIj45MTg8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgaW4gdGhpcyBTdGF0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTE5XFxcIj45MTk8L2E+fFBsYWNlbWVudCBjb3VsZCBub3QgYmUgY2FuY2VsbGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjBcXFwiPjkyMDwvYT58U2hhcmUgQ2xhc3Mgbm90IGNvbmZpZ3VyZWQgaW4gRnVuZHwgIHwgfCA8YSBuYW1lPVxcXCI5MjFcXFwiPjkyMTwvYT58U2hhcmUgQ2xhc3MgU3ViIEhvbGRpbmcgS2V5IG5vdCBjb25maWd1cmVkIGluIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCI5MjJcXFwiPjkyMjwvYT58Q291bGQgbm90IHVwZGF0ZSBhbiBvcmRlci58ICB8IHwgPGEgbmFtZT1cXFwiOTIzXFxcIj45MjM8L2E+fE11bHRpcGxlIHNldHMgb2YgU2hhcmUgQ2xhc3MgU3ViIEhvbGRpbmcgS2V5cyBjb25maWd1cmVkIGFjcm9zcyB0aGUgUG9ydGZvbGlvcyBvZiBhIEZ1bmQufCAgfCB8IDxhIG5hbWU9XFxcIjkyNFxcXCI+OTI0PC9hPnxPbmUgb3IgbW9yZSBtYXRyaXggY2VsbHMgY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBtYXRyaXgufCAgfCB8IDxhIG5hbWU9XFxcIjkyNVxcXCI+OTI1PC9hPnxUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIHByb3ZpZGVkIG1hdHJpeCBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjZcXFwiPjkyNjwvYT58TWF0cml4IGRlZmluaXRpb24gZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkyN1xcXCI+OTI3PC9hPnxNYXRyaXggZGVmaW5pdGlvbiBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTI4XFxcIj45Mjg8L2E+fERhdGFUeXBlIHdpdGggSWQgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjkyOVxcXCI+OTI5PC9hPnxTcXVhcmUgbWF0cml4IGlzIGluY29tcGxldGUufCAgfCB8IDxhIG5hbWU9XFxcIjkzMFxcXCI+OTMwPC9hPnxBIGNvbmRpdGlvbmFsIGxpY2Vuc2UgdGVybSBoYXMgYmVlbiBleGNlZWRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTMxXFxcIj45MzE8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCByZXF1ZXN0ZWQgaXMgbm90IGludGVuZGVkIGZvciB0aGUgZW50aXR5IHByb3ZpZGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzJcXFwiPjkzMjwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBoYXZlIGEgbWFuZGF0b3J5IHByb3BlcnR5IHNwZWNpZmllZCBieSB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzM1xcXCI+OTMzPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBhIHByb3BlcnR5IG5vdCBhbGxvd2VkIGJ5IHRoZSBzcGVjaWZpZWQgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNFxcXCI+OTM0PC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IGhhdmUgYSBtYW5kYXRvcnkgaWRlbnRpZmllciBzcGVjaWZpZWQgYnkgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzVcXFwiPjkzNTwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBoYXMgYW4gaWRlbnRpZmllciBub3QgYWxsb3dlZCBieSB0aGUgc3BlY2lmaWVkIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzZcXFwiPjkzNjwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIGluY2x1ZGVkIGFuIGFsaWFzIG9yIHNvcnQtYnkgYXR0cmlidXRlIHRoYXQgd2FzIG5vdCBvbiB0aGUgZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTM3XFxcIj45Mzc8L2E+fFRoZSBDbG9zZWRQZXJpb2Qgd2l0aCB0aGUgSWQgYWxyZWFkeSBleGlzdHMgb24gdGhlIFRpbWVsaW5lfCAgfCB8IDxhIG5hbWU9XFxcIjkzOFxcXCI+OTM4PC9hPnxUaGUgbmV3IENsb3NlZCBQZXJpb2Qgd291bGQgY2F1c2UgdGhlIFRpbWVsaW5lIHRvIGhhdmUgbm9uLWNvbnRpZ3VvdXMgQ2xvc2VkIFBlcmlvZHN8ICB8IHwgPGEgbmFtZT1cXFwiOTM5XFxcIj45Mzk8L2E+fEJsb2NrZWQgYnkgYSBOZXR3b3JrIFpvbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTQwXFxcIj45NDA8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgbWVldCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjk0MVxcXCI+OTQxPC9hPnxPcmRlciBub3QgY29tcGxpYW50LnwgIHwgfCA8YSBuYW1lPVxcXCI5NDJcXFwiPjk0MjwvYT58QWN0aW9uIHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kufCAgfCB8IDxhIG5hbWU9XFxcIjk0NFxcXCI+OTQ0PC9hPnxEZXJpdmVkIFByb3BlcnR5IGNhbGN1bGF0aW9uIG5vdCBjb21wbGV0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ1XFxcIj45NDU8L2E+fERlcml2ZWQgUHJvcGVydHkgaXMgbm90IGZpbHRlcmFibGUufCAgfCB8IDxhIG5hbWU9XFxcIjk0NlxcXCI+OTQ2PC9hPnxUaGUgY29uZGl0aW9ucyBwcm92aWRlZCBoYXZlIG9uZSBvciBtb3JlIGVycm9ycy58ICB8IHwgPGEgbmFtZT1cXFwiOTQ3XFxcIj45NDc8L2E+fFRoZSBwcm9wZXJ0eS9pZGVudGlmaWVyIGRvbWFpbiBhbmQgZW50aXR5IGRvbWFpbiBkbyBub3QgbWF0Y2gufCAgfCB8IDxhIG5hbWU9XFxcIjk0OFxcXCI+OTQ4PC9hPnxJbnZhbGlkIFRpbWVsaW5lfCAgfCB8IDxhIG5hbWU9XFxcIjk0OVxcXCI+OTQ5PC9hPnxGaWx0ZXJhYmxlIERlcml2ZWQgUHJvcGVydHkgbGltaXQgcmVhY2hlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTUwXFxcIj45NTA8L2E+fEludmVzdG9yIFJlY29yZCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjk1MVxcXCI+OTUxPC9hPnxJbnZlc3RvciBSZWNvcmQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjk1MlxcXCI+OTUyPC9hPnxJbnZlc3RtZW50IEFjY291bnQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI5NTNcXFwiPjk1MzwvYT58SW52ZXN0bWVudCBBY2NvdW50IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTRcXFwiPjk1NDwvYT58Q291bGQgTm90IFN3ZWVwIEJsb2NrfCAgfCB8IDxhIG5hbWU9XFxcIjk1NVxcXCI+OTU1PC9hPnxFbnRpdHkgVW5pcXVlIElkIGhhcyB0aGUgd3JvbmcgZm9ybWF0fCAgfCB8IDxhIG5hbWU9XFxcIjk1NlxcXCI+OTU2PC9hPnxQb3N0IENsb3NlIEFjdGl2aXR5IGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTU3XFxcIj45NTc8L2E+fFRoZSBDbG9zZWRQZXJpb2Qgd2l0aCB0aGUgSWQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIFRpbWVsaW5lfCAgfCB8IDxhIG5hbWU9XFxcIjk1OFxcXCI+OTU4PC9hPnxJbnZhbGlkIFNldHRsZW1lbnQgSW5zdHJ1Y3Rpb25zfCAgfCB8IDxhIG5hbWU9XFxcIjk1OVxcXCI+OTU5PC9hPnxPcmRlciByZXF1aXJlcyBxdWFudGl0eS58ICB8IHwgPGEgbmFtZT1cXFwiOTYwXFxcIj45NjA8L2E+fEludmFsaWQgRGF0YVBvaW50IFZhbHVlIEFzc2lnbm1lbnR8ICB8IHwgPGEgbmFtZT1cXFwiOTYxXFxcIj45NjE8L2E+fEludmFsaWQgUmVsYXRpb25hbCBEYXRhc2V0IEZpZWxkIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTYyXFxcIj45NjI8L2E+fFJlbGF0aW9uYWwgRGF0YXNldCBEZWZpbml0aW9uIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjk2M1xcXCI+OTYzPC9hPnxUaW1lbGluZSBCb29rbWFyayBOb3QgSW4gT3BlbiBQZXJpb2R8ICB8IHwgPGEgbmFtZT1cXFwiOTY0XFxcIj45NjQ8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCBzcGVjaWZpZWQgaWRlbnRpZmllcnMgYnV0IHRoZSBlbnRpdHkgZG9lcyBub3Qgc3VwcG9ydCBpZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI5NjVcXFwiPjk2NTwvYT58VGhlIHNvcnQgYnkgcHJvdmlkZWQgaGFzIG9uZSBvciBtb3JlIGVycm9yc3wgIHwgfCA8YSBuYW1lPVxcXCI5NjZcXFwiPjk2NjwvYT58SW52YWxpZCBDdXN0b20gRGF0YSBNb2RlbCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2N1xcXCI+OTY3PC9hPnxSdWxlIHNldCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgQ2hlY2sgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjhcXFwiPjk2ODwvYT58VGhlIENsb3NlZCBQZXJpb2QgaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NjlcXFwiPjk2OTwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgU3RvcCBQcmljZS58ICB8IHwgPGEgbmFtZT1cXFwiOTcwXFxcIj45NzA8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIExpbWl0IFByaWNlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzFcXFwiPjk3MTwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoZSBjdXJyZW50IFR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjk3NFxcXCI+OTc0PC9hPnxDYW5ub3QgUGxhY2VCbG9ja3MgYWdhaW5zdCBhbiBcXCdVbnNvbGljaXRlZFxcJyBCbG9jayAoYmxvY2sgY29udGFpbmluZyAwIE9yZGVycykufCAgfCB8IDxhIG5hbWU9XFxcIjk3NVxcXCI+OTc1PC9hPnxObyBQb3J0Zm9saW8gR3JvdXAgU2VsZWN0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiOTc2XFxcIj45NzY8L2E+fEFtYmlndW91cyBTY29wZXwgIHwgfCA8YSBuYW1lPVxcXCI5NzdcXFwiPjk3NzwvYT58VGhlIHByb3ZpZGVkIGVudGl0eSBtYXRjaCByZXF1ZXN0IGlzIG5vdCB2YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NzhcXFwiPjk3ODwvYT58SW52YWxpZCBUcmFuc2ZlcnwgIHwgfCA8YSBuYW1lPVxcXCI5NzlcXFwiPjk3OTwvYT58VGhlIG5hbWVkIHNlcmllcyBtYXRjaGluZyBwYXR0ZXJuIGlzIG5vdCB1c2FibGUgb24gdGhlIGRhdGFzZXQgYXQgdGhlIHJlcXVlc3RlZCB0aW1lfCAgfCBcbiAqXG4gKiBDb250YWN0OiBpbmZvQGZpbmJvdXJuZS5jb21cbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwQ29udGV4dCBcbiAgICAgICAgfSAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZW5jb2Rlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24gfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24nO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVHJhbnNhY3Rpb25UZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVsL3RyYW5zYWN0aW9uVGVtcGxhdGUnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC90cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbiB9IGZyb20gJy4uL21vZGVsL3RyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGluc3RydW1lbnQgZXZlbnRzIHRoYXQgdGhlIHRlbXBsYXRlIGlzIGFwcGxpZWQgdG8uIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LCBHbG9iYWxMb2FuRmFjaWxpdHlSZWluaXRpYWxpc2F0aW9uRXZlbnQsIEludmVzdG9yTG9hbkZhY2lsaXR5UmVpbml0aWFsaXNhdGlvbkV2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBsaWVzLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIEEgcmVxdWVzdCBkZWZpbmluZyBhIG5ldyB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSB0byBiZSBjcmVhdGVkLiAqL1xuICAgIHRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0OiBUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGluc3RydW1lbnQgZXZlbnRzIHRoYXQgdGhlIHRlbXBsYXRlIGlzIGFwcGxpZWQgdG8uIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LCBHbG9iYWxMb2FuRmFjaWxpdHlSZWluaXRpYWxpc2F0aW9uRXZlbnQsIEludmVzdG9yTG9hbkZhY2lsaXR5UmVpbml0aWFsaXNhdGlvbkV2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIGluc3RydW1lbnQgZXZlbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LCBHbG9iYWxMb2FuRmFjaWxpdHlSZWluaXRpYWxpc2F0aW9uRXZlbnQsIEludmVzdG9yTG9hbkZhY2lsaXR5UmVpbml0aWFsaXNhdGlvbkV2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBsaWVzLiBXaGVuIG5vdCBzdXBwbGllZCB0aGUgc2NvcGUgaXMgXFwmIzM5O2RlZmF1bHRcXCYjMzk7LiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBBc0F0IHRpbWUgb2YgdGhlIHJlcXVlc3RlZCBUcmFuc2FjdGlvbiBUZW1wbGF0ZSAqL1xuICAgIGFzQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHJlcXVlc3RlZCBpbnN0cnVtZW50IGV2ZW50IHR5cGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LCBHbG9iYWxMb2FuRmFjaWxpdHlSZWluaXRpYWxpc2F0aW9uRXZlbnQsIEludmVzdG9yTG9hbkZhY2lsaXR5UmVpbml0aWFsaXNhdGlvbkV2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIEFzQXQgb2YgdGhlIHJlcXVlc3QgKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBUcmFuc2FjdGlvbiBUZW1wbGF0ZSBTcGVjaWZpY2F0aW9ucyBmcm9tICAgICAgICAgICAgICBhIHByZXZpb3VzIGNhbGwgdG8gbGlzdCBUcmFuc2FjdGlvbiBUZW1wbGF0ZSBTcGVjaWZpY2F0aW9ucy4gICAgICAgICAgICAgIFRoaXMgdmFsdWUgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcHJldmlvdXMgY2FsbC4gSWYgYSBwYWdpbmF0aW9uIHRva2VuIGlzIHByb3ZpZGVkIHRoZSBzb3J0QnksIGZpbHRlciwgYW5kIGFzQXQgICAgICAgICAgICAgIGZpZWxkcyBtdXN0IG5vdCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIG9yaWdpbmFsIHJlcXVlc3QuICovXG4gICAgcGFnZT86IHN0cmluZztcbiAgICAvKiogV2hlbiBwYWdpbmF0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIHJldHVybmVkIHJlc3VsdHMgdG8gdGhpcyBtYW55LiAqL1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIC8qKiBFeHByZXNzaW9uIHRvIGZpbHRlciB0aGUgcmVzdWx0IHNldC4gUmVhZCBtb3JlIGFib3V0IGZpbHRlcmluZyByZXN1bHRzIGZyb20gTFVTSUQgaGVyZTogICAgICAgICAgICAgIGh0dHBzOi8vc3VwcG9ydC5sdXNpZC5jb20vZmlsdGVyaW5nLXJlc3VsdHMtZnJvbS1sdXNpZC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG4gICAgLyoqIEEgbGlzdCBvZiBmaWVsZCBuYW1lcyB0byBzb3J0IGJ5LCBlYWNoIHN1ZmZpeGVkIGJ5IFxcJnF1b3Q7IEFTQ1xcJnF1b3Q7IG9yIFxcJnF1b3Q7IERFU0NcXCZxdW90Oy4gKi9cbiAgICBzb3J0Qnk/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RUcmFuc2FjdGlvblRlbXBsYXRlc1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgQXNBdCB0aW1lIGF0IHdoaWNoIHRvIHJldHJpZXZlIHRoZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZXMgKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBUcmFuc2FjdGlvbiBUZW1wbGF0ZXMgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8gbGlzdCBUcmFuc2FjdGlvbiBUZW1wbGF0ZXMuICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuIElmIGEgcGFnaW5hdGlvbiB0b2tlbiBpcyBwcm92aWRlZCB0aGUgc29ydEJ5LCBmaWx0ZXIsIGxpbWl0LCBhbmQgYXNBdCBmaWVsZHMgICAgICAgICAgICAgIG11c3Qgbm90IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgb3JpZ2luYWwgcmVxdWVzdC4gKi9cbiAgICBwYWdlPzogc3RyaW5nO1xuICAgIC8qKiBXaGVuIHBhZ2luYXRpbmcsIGxpbWl0IHRoZSBudW1iZXIgb2YgcmV0dXJuZWQgcmVzdWx0cyB0byB0aGlzIG1hbnkuICovXG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgLyoqIEV4cHJlc3Npb24gdG8gZmlsdGVyIHRoZSByZXN1bHQgc2V0LiBSZWFkIG1vcmUgYWJvdXQgZmlsdGVyaW5nIHJlc3VsdHMgZnJvbSBMVVNJRCBoZXJlOiAgICAgICAgICAgICAgaHR0cHM6Ly9zdXBwb3J0Lmx1c2lkLmNvbS9maWx0ZXJpbmctcmVzdWx0cy1mcm9tLWx1c2lkLiAqL1xuICAgIGZpbHRlcj86IHN0cmluZztcbiAgICAvKiogQSBsaXN0IG9mIGZpZWxkIG5hbWVzIHRvIHNvcnQgYnksIGVhY2ggc3VmZml4ZWQgYnkgXFwmcXVvdDsgQVNDXFwmcXVvdDsgb3IgXFwmcXVvdDsgREVTQ1xcJnF1b3Q7ICovXG4gICAgc29ydEJ5PzogQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSB0eXBlIG9mIGluc3RydW1lbnQgZXZlbnRzIHRoYXQgdGhlIHRlbXBsYXRlIGlzIGFwcGxpZWQgdG8uIEF2YWlsYWJsZSB2YWx1ZXM6IFRyYW5zaXRpb25FdmVudCwgSW5mb3JtYXRpb25hbEV2ZW50LCBPcGVuRXZlbnQsIENsb3NlRXZlbnQsIFN0b2NrU3BsaXRFdmVudCwgQm9uZERlZmF1bHRFdmVudCwgQ2FzaERpdmlkZW5kRXZlbnQsIEFtb3J0aXNhdGlvbkV2ZW50LCBDYXNoRmxvd0V2ZW50LCBFeGVyY2lzZUV2ZW50LCBSZXNldEV2ZW50LCBUcmlnZ2VyRXZlbnQsIFJhd1ZlbmRvckV2ZW50LCBJbmZvcm1hdGlvbmFsRXJyb3JFdmVudCwgQm9uZENvdXBvbkV2ZW50LCBEaXZpZGVuZFJlaW52ZXN0bWVudEV2ZW50LCBBY2N1bXVsYXRpb25FdmVudCwgQm9uZFByaW5jaXBhbEV2ZW50LCBEaXZpZGVuZE9wdGlvbkV2ZW50LCBNYXR1cml0eUV2ZW50LCBGeEZvcndhcmRTZXR0bGVtZW50RXZlbnQsIEV4cGlyeUV2ZW50LCBTY3JpcERpdmlkZW5kRXZlbnQsIFN0b2NrRGl2aWRlbmRFdmVudCwgUmV2ZXJzZVN0b2NrU3BsaXRFdmVudCwgQ2FwaXRhbERpc3RyaWJ1dGlvbkV2ZW50LCBTcGluT2ZmRXZlbnQsIE1lcmdlckV2ZW50LCBGdXR1cmVFeHBpcnlFdmVudCwgU3dhcENhc2hGbG93RXZlbnQsIFN3YXBQcmluY2lwYWxFdmVudCwgQ3JlZGl0UHJlbWl1bUNhc2hGbG93RXZlbnQsIENkc0NyZWRpdEV2ZW50LCBDZHhDcmVkaXRFdmVudCwgTWJzQ291cG9uRXZlbnQsIE1ic1ByaW5jaXBhbEV2ZW50LCBCb251c0lzc3VlRXZlbnQsIE1ic1ByaW5jaXBhbFdyaXRlT2ZmRXZlbnQsIE1ic0ludGVyZXN0RGVmZXJyYWxFdmVudCwgTWJzSW50ZXJlc3RTaG9ydGZhbGxFdmVudCwgVGVuZGVyRXZlbnQsIENhbGxPbkludGVybWVkaWF0ZVNlY3VyaXRpZXNFdmVudCwgSW50ZXJtZWRpYXRlU2VjdXJpdGllc0Rpc3RyaWJ1dGlvbkV2ZW50LCBPcHRpb25FeGVyY2lzZVBoeXNpY2FsRXZlbnQsIE9wdGlvbkV4ZXJjaXNlQ2FzaEV2ZW50LCBQcm90ZWN0aW9uUGF5b3V0Q2FzaEZsb3dFdmVudCwgVGVybURlcG9zaXRJbnRlcmVzdEV2ZW50LCBUZXJtRGVwb3NpdFByaW5jaXBhbEV2ZW50LCBFYXJseVJlZGVtcHRpb25FdmVudCwgRnV0dXJlTWFya1RvTWFya2V0RXZlbnQsIEFkanVzdEdsb2JhbENvbW1pdG1lbnRFdmVudCwgQ29udHJhY3RJbml0aWFsaXNhdGlvbkV2ZW50LCBEcmF3ZG93bkV2ZW50LCBMb2FuSW50ZXJlc3RSZXBheW1lbnRFdmVudCwgVXBkYXRlRGVwb3NpdEFtb3VudEV2ZW50LCBMb2FuUHJpbmNpcGFsUmVwYXltZW50RXZlbnQsIERlcG9zaXRJbnRlcmVzdFBheW1lbnRFdmVudCwgRGVwb3NpdENsb3NlRXZlbnQsIExvYW5GYWNpbGl0eUNvbnRyYWN0Um9sbG92ZXJFdmVudCwgUmVwdXJjaGFzZU9mZmVyRXZlbnQsIFJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBSZXBvQ2FzaEZsb3dFdmVudCwgRmxleGlibGVSZXBvSW50ZXJlc3RQYXltZW50RXZlbnQsIEZsZXhpYmxlUmVwb0Nhc2hGbG93RXZlbnQsIEZsZXhpYmxlUmVwb0NvbGxhdGVyYWxFdmVudCwgQ29udmVyc2lvbkV2ZW50LCBGbGV4aWJsZVJlcG9QYXJ0aWFsQ2xvc3VyZUV2ZW50LCBGbGV4aWJsZVJlcG9GdWxsQ2xvc3VyZUV2ZW50LCBDYXBsZXRGbG9vcmxldENhc2hGbG93RXZlbnQsIEVhcmx5Q2xvc2VPdXRFdmVudCwgRGVwb3NpdFJvbGxFdmVudCwgQ29uc2VudEV2ZW50LCBEcmF3aW5nRXZlbnQsIENhcGl0YWxHYWluc0Rpc3RyaWJ1dGlvbkV2ZW50LCBFeGNoYW5nZU9mZmVyRXZlbnQsIER1dGNoQXVjdGlvbkV2ZW50LCBXb3J0aGxlc3NFdmVudCwgUHV0UmVkZW1wdGlvbkV2ZW50LCBMb2FuRmFjaWxpdHlEZWxheWVkQ29tcGVuc2F0aW9uUGF5bWVudEV2ZW50LCBJbnRlcmVzdFBheW1lbnRFdmVudCwgUHJpb3JpdHlJc3N1ZUV2ZW50LCBDbGFzc0FjdGlvbkV2ZW50LCBCYW5rcnVwdGN5RXZlbnQsIExpcXVpZGF0aW9uUGF5bWVudEV2ZW50LCBQYXJ0aWFsRGVmZWFzYW5jZUV2ZW50LCBTZWN1cml0eVdyaXRlT2ZmRXZlbnQsIFdhcnJhbnRzRXhlcmNpc2VFdmVudCwgUGFyaVBhc3N1RXZlbnQsIENoYW5nZUV2ZW50LCBQaWtCb25kQ291cG9uRXZlbnQsIFBpa0JvbmRDYXNoQ291cG9uRXZlbnQsIFBpa0JvbmRJbnRlcmVzdENhcGl0YWxpc2F0aW9uRXZlbnQsIFBpa0JvbmRQcmluY2lwYWxFdmVudCwgRGVsaXN0aW5nRXZlbnQsIFBpa0JvbmRJbnRlcmVzdEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkQ2FzaFNldHRsZW1lbnRFdmVudCwgUGF5bWVudEluS2luZEV2ZW50LCBDb21tb2RpdHlGb3J3YXJkUGh5c2ljYWxTZXR0bGVtZW50RXZlbnQsIENhbmNlbFN3YXBFdmVudCwgQm9uZE9wdGlvblRlcm1pbmF0aW9uRXZlbnQsIFRlcm1pbmF0aW9uRXZlbnQsIENvbW1vZGl0eUNhbGVuZGFyU3dhcENhc2hGbG93RXZlbnQsIERlcG9zaXRTd2VlcEV2ZW50LCBCb25kRm9yd2FyZENhc2hTZXR0bGVtZW50RXZlbnQsIEJvbmRGb3J3YXJkVGVybWluYXRpb25FdmVudCwgQW1lbmRDb21taXRtZW50RXZlbnQsIENhcGl0YWxDYWxsRXZlbnQsIEZ1bmREaXN0cmlidXRpb25FdmVudCwgTmF2UmVwb3J0RXZlbnQsIERpdmlkZW5kU3VzcGVuc2lvbkV2ZW50LCBMb2FuSW50ZXJlc3RDYXBpdGFsaXNhdGlvbkV2ZW50LCBUb3RhbFJldHVyblN3YXBDYXNoRmxvd0V2ZW50LCBHbG9iYWxMb2FuRmFjaWxpdHlSZWluaXRpYWxpc2F0aW9uRXZlbnQsIEludmVzdG9yTG9hbkZhY2lsaXR5UmVpbml0aWFsaXNhdGlvbkV2ZW50LiAqL1xuICAgIGluc3RydW1lbnRFdmVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIGluc3RydW1lbnQgdHlwZSBvZiB0aGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgaW5zdHJ1bWVudCAgICAgICAgICAgICAgZXZlbnQgdHlwZSwgaW5zdHJ1bWVudCB0eXBlIGFuZCBzY29wZSB1bmlxdWVseSBpZGVudGlmaWVzIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUuIEF2YWlsYWJsZSB2YWx1ZXM6IFF1b3RlZFNlY3VyaXR5LCBJbnRlcmVzdFJhdGVTd2FwLCBGeEZvcndhcmQsIEZ1dHVyZSwgRXhvdGljSW5zdHJ1bWVudCwgRnhPcHRpb24sIENyZWRpdERlZmF1bHRTd2FwLCBJbnRlcmVzdFJhdGVTd2FwdGlvbiwgQm9uZCwgRXF1aXR5T3B0aW9uLCBGaXhlZExlZywgRmxvYXRpbmdMZWcsIEJlc3Bva2VDYXNoRmxvd3NMZWcsIFVua25vd24sIFRlcm1EZXBvc2l0LCBDb250cmFjdEZvckRpZmZlcmVuY2UsIEVxdWl0eVN3YXAsIENhc2hQZXJwZXR1YWwsIENhcEZsb29yLCBDYXNoU2V0dGxlZCwgQ2RzSW5kZXgsIEJhc2tldCwgRnVuZGluZ0xlZywgRnhTd2FwLCBGb3J3YXJkUmF0ZUFncmVlbWVudCwgU2ltcGxlSW5zdHJ1bWVudCwgUmVwbywgRXF1aXR5LCBFeGNoYW5nZVRyYWRlZE9wdGlvbiwgUmVmZXJlbmNlSW5zdHJ1bWVudCwgQ29tcGxleEJvbmQsIEluZmxhdGlvbkxpbmtlZEJvbmQsIEluZmxhdGlvblN3YXAsIFNpbXBsZUNhc2hGbG93TG9hbiwgVG90YWxSZXR1cm5Td2FwLCBJbmZsYXRpb25MZWcsIEZ1bmRTaGFyZUNsYXNzLCBGbGV4aWJsZUxvYW4sIFVuc2V0dGxlZENhc2gsIENhc2gsIE1hc3RlcmVkSW5zdHJ1bWVudCwgTG9hbkZhY2lsaXR5LCBGbGV4aWJsZURlcG9zaXQsIEZsZXhpYmxlUmVwbywgVG9CZUFubm91bmNlZCwgVm9sYXRpbGl0eVN3YXAsIFRvQmVBbm5vdW5jZWRPcHRpb24sIENvbW1vZGl0eUZvcndhcmQsIEJvbmRPcHRpb24sIENkc09wdGlvbiwgQ29tbW9kaXR5Q2FsZW5kYXJTd2FwLCBCb25kRm9yd2FyZCwgUHJlZmVycmVkU2hhcmUsIENhcGl0YWxJbnRlcmVzdCwgV2hvbGVMb2FuRmFjaWxpdHkuICovXG4gICAgaW5zdHJ1bWVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBsaWVzLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIEEgcmVxdWVzdCBkZWZpbmluZyB0aGUgdXBkYXRlZCB2YWx1ZXMgZm9yIHRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZS4gKi9cbiAgICB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdDogVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3Q7XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSW5zdHJ1bWVudEV2ZW50VHlwZXNTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwczovL3d3dy5sdXNpZC5jb20vYXBpJztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKUBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nfHN0cmluZ1tdLCBAT3B0aW9uYWwoKSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IGZpcnN0QmFzZVBhdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmVuY29kZXIgfHwgbmV3IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYygpO1xuICAgIH1cblxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZTogQ3JlYXRlIFRyYW5zYWN0aW9uIFRlbXBsYXRlXG4gICAgICogQ3JlYXRlIGEgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZm9yIGEgcGFydGljdWxhciBpbnN0cnVtZW50IGV2ZW50IHR5cGUgaW4gYSBzY29wZS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8VHJhbnNhY3Rpb25UZW1wbGF0ZT47XG4gICAgcHVibGljIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8VHJhbnNhY3Rpb25UZW1wbGF0ZT4+O1xuICAgIHB1YmxpYyBjcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxUcmFuc2FjdGlvblRlbXBsYXRlPj47XG4gICAgcHVibGljIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50RXZlbnRUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/Lmluc3RydW1lbnRFdmVudFR5cGU7XG4gICAgICAgIGlmIChpbnN0cnVtZW50RXZlbnRUeXBlID09PSBudWxsIHx8IGluc3RydW1lbnRFdmVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW5zdHJ1bWVudEV2ZW50VHlwZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudFR5cGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uaW5zdHJ1bWVudFR5cGU7XG4gICAgICAgIGlmIChpbnN0cnVtZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnN0cnVtZW50VHlwZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgPSByZXF1ZXN0UGFyYW1ldGVycz8udHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3Q7XG4gICAgICAgIGlmICh0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCA9PT0gbnVsbCB8fCB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvaW5zdHJ1bWVudGV2ZW50dHlwZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudEV2ZW50VHlwZVwiLCB2YWx1ZTogaW5zdHJ1bWVudEV2ZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vdHJhbnNhY3Rpb250ZW1wbGF0ZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRUeXBlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRyYW5zYWN0aW9uVGVtcGxhdGU+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGU6IERlbGV0ZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZVxuICAgICAqIERlbGV0ZSBhIHRyYW5zYWN0aW9uIHRlbXBsYXRlIGZvciBhIHBhcnRpY3VsYXIgaW5zdHJ1bWVudCBldmVudCB0eXBlIGluIGEgc2NvcGUuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHVibGljIGRlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8c3RyaW5nPj47XG4gICAgcHVibGljIGRlbGV0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHN0cmluZz4+O1xuICAgIHB1YmxpYyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudEV2ZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50RXZlbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50RXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRFdmVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/Lmluc3RydW1lbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudFR5cGUgPT09IG51bGwgfHwgaW5zdHJ1bWVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW5zdHJ1bWVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvaW5zdHJ1bWVudGV2ZW50dHlwZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudEV2ZW50VHlwZVwiLCB2YWx1ZTogaW5zdHJ1bWVudEV2ZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vdHJhbnNhY3Rpb250ZW1wbGF0ZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRUeXBlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PHN0cmluZz4oJ2RlbGV0ZScsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlOiBHZXQgVHJhbnNhY3Rpb24gVGVtcGxhdGVcbiAgICAgKiBHZXRzIHRoZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZSB0aGF0IGZvciB0aGUgaW5zdHJ1bWVudCBldmVudCB0eXBlIHdpdGhpbiB0aGUgc2NvcGUgc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvblRlbXBsYXRlPjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IEdldFRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxUcmFuc2FjdGlvblRlbXBsYXRlPj47XG4gICAgcHVibGljIGdldFRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFRyYW5zYWN0aW9uVGVtcGxhdGU+PjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IEdldFRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRFdmVudFR5cGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uaW5zdHJ1bWVudEV2ZW50VHlwZTtcbiAgICAgICAgaWYgKGluc3RydW1lbnRFdmVudFR5cGUgPT09IG51bGwgfHwgaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnN0cnVtZW50RXZlbnRUeXBlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnN0cnVtZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50VHlwZTtcbiAgICAgICAgaWYgKGluc3RydW1lbnRUeXBlID09PSBudWxsIHx8IGluc3RydW1lbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRUeXBlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvaW5zdHJ1bWVudGV2ZW50dHlwZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudEV2ZW50VHlwZVwiLCB2YWx1ZTogaW5zdHJ1bWVudEV2ZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vdHJhbnNhY3Rpb250ZW1wbGF0ZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW5zdHJ1bWVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRUeXBlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRyYW5zYWN0aW9uVGVtcGxhdGU+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbjogR2V0IFRyYW5zYWN0aW9uIFRlbXBsYXRlIFNwZWNpZmljYXRpb24uXG4gICAgICogUmV0cmlldmUgdGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIHNwZWNpZmljYXRpb24gZm9yIGEgcGFydGljdWxhciBldmVudCB0eXBlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPj47XG4gICAgcHVibGljIGdldFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24+PjtcbiAgICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudEV2ZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50RXZlbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50RXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRFdmVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2luc3RydW1lbnRldmVudHR5cGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImluc3RydW1lbnRFdmVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRFdmVudFR5cGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L3RyYW5zYWN0aW9udGVtcGxhdGVzcGVjaWZpY2F0aW9uYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnM6IExpc3QgVHJhbnNhY3Rpb24gVGVtcGxhdGUgU3BlY2lmaWNhdGlvbnMuXG4gICAgICogUmV0cmlldmVzIGFsbCB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9ucy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8UGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24+PjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGVTcGVjaWZpY2F0aW9uPj47XG4gICAgcHVibGljIGxpc3RUcmFuc2FjdGlvblRlbXBsYXRlU3BlY2lmaWNhdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0VHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGFnZTtcbiAgICAgICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWx0ZXI7XG4gICAgICAgIGNvbnN0IHNvcnRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0Qnk7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdlICE9PSB1bmRlZmluZWQgJiYgcGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnBhZ2UsICdwYWdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmZpbHRlciwgJ2ZpbHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICAgIHNvcnRCeS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3NvcnRCeScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2luc3RydW1lbnRldmVudHR5cGVzL3RyYW5zYWN0aW9udGVtcGxhdGVzcGVjaWZpY2F0aW9uc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZVNwZWNpZmljYXRpb24+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0VHJhbnNhY3Rpb25UZW1wbGF0ZXM6IExpc3QgVHJhbnNhY3Rpb24gVGVtcGxhdGVzXG4gICAgICogTGlzdHMgYWxsIFRyYW5zYWN0aW9uIFRlbXBsYXRlcy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZUcmFuc2FjdGlvblRlbXBsYXRlPjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8UGFnZWRSZXNvdXJjZUxpc3RPZlRyYW5zYWN0aW9uVGVtcGxhdGU+PjtcbiAgICBwdWJsaWMgbGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFRyYW5zYWN0aW9uVGVtcGxhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2VkUmVzb3VyY2VMaXN0T2ZUcmFuc2FjdGlvblRlbXBsYXRlPj47XG4gICAgcHVibGljIGxpc3RUcmFuc2FjdGlvblRlbXBsYXRlcyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RUcmFuc2FjdGlvblRlbXBsYXRlc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXNBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hc0F0O1xuICAgICAgICBjb25zdCBwYWdlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBhZ2U7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsdGVyO1xuICAgICAgICBjb25zdCBzb3J0QnkgPSByZXF1ZXN0UGFyYW1ldGVycz8uc29ydEJ5O1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGFzQXQgIT09IHVuZGVmaW5lZCAmJiBhc0F0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+YXNBdCwgJ2FzQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFnZSAhPT0gdW5kZWZpbmVkICYmIHBhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5wYWdlLCAncGFnZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+bGltaXQsICdsaW1pdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5maWx0ZXIsICdmaWx0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydEJ5KSB7XG4gICAgICAgICAgICBzb3J0QnkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICA8YW55PmVsZW1lbnQsICdzb3J0QnknKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9pbnN0cnVtZW50ZXZlbnR0eXBlcy90cmFuc2FjdGlvbnRlbXBsYXRlc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mVHJhbnNhY3Rpb25UZW1wbGF0ZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZVRyYW5zYWN0aW9uVGVtcGxhdGU6IFVwZGF0ZSBUcmFuc2FjdGlvbiBUZW1wbGF0ZVxuICAgICAqIFVwZGF0ZSBhIHRyYW5zYWN0aW9uIHRlbXBsYXRlIGZvciBhIHBhcnRpY3VsYXIgaW5zdHJ1bWVudCBldmVudCB0eXBlIGluIGEgc2NvcGUuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVRyYW5zYWN0aW9uVGVtcGxhdGUocmVxdWVzdFBhcmFtZXRlcnM/OiBVcGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uVGVtcGxhdGU+O1xuICAgIHB1YmxpYyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBkYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFRyYW5zYWN0aW9uVGVtcGxhdGU+PjtcbiAgICBwdWJsaWMgdXBkYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZShyZXF1ZXN0UGFyYW1ldGVycz86IFVwZGF0ZVRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VHJhbnNhY3Rpb25UZW1wbGF0ZT4+O1xuICAgIHB1YmxpYyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlKHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBkYXRlVHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudEV2ZW50VHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pbnN0cnVtZW50RXZlbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudEV2ZW50VHlwZSA9PT0gbnVsbCB8fCBpbnN0cnVtZW50RXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGluc3RydW1lbnRFdmVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/Lmluc3RydW1lbnRUeXBlO1xuICAgICAgICBpZiAoaW5zdHJ1bWVudFR5cGUgPT09IG51bGwgfHwgaW5zdHJ1bWVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW5zdHJ1bWVudFR5cGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LnRyYW5zYWN0aW9uVGVtcGxhdGVSZXF1ZXN0O1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgPT09IG51bGwgfHwgdHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdHJhbnNhY3Rpb25UZW1wbGF0ZVJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVUcmFuc2FjdGlvblRlbXBsYXRlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2luc3RydW1lbnRldmVudHR5cGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImluc3RydW1lbnRFdmVudFR5cGVcIiwgdmFsdWU6IGluc3RydW1lbnRFdmVudFR5cGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L3RyYW5zYWN0aW9udGVtcGxhdGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImluc3RydW1lbnRUeXBlXCIsIHZhbHVlOiBpbnN0cnVtZW50VHlwZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxUcmFuc2FjdGlvblRlbXBsYXRlPigncHV0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB0cmFuc2FjdGlvblRlbXBsYXRlUmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxufVxuIl19
|