@finbourne/lusid-sdk-angular18 0.11.10184 → 0.11.10215
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/applicationMetadata.service.mjs +53 -1
- package/esm2022/lib/.generated/api/funds.service.mjs +7 -1
- package/esm2022/lib/.generated/api/recs.service.mjs +1 -1
- package/esm2022/lib/.generated/api/transactionPortfolios.service.mjs +17 -1
- package/esm2022/lib/.generated/api/transferAgency.service.mjs +76 -2
- package/esm2022/lib/.generated/api/withholdingTax.service.mjs +1 -1
- package/esm2022/lib/.generated/model/allocationMapBasisValue.mjs +1 -1
- package/esm2022/lib/.generated/model/apiEndpoint.mjs +12 -0
- package/esm2022/lib/.generated/model/consentEvent.mjs +1 -1
- package/esm2022/lib/.generated/model/consentGrantedElection.mjs +1 -1
- package/esm2022/lib/.generated/model/createTransferRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/dataQualityCheckResult.mjs +1 -1
- package/esm2022/lib/.generated/model/dealingFlowSummary.mjs +12 -0
- package/esm2022/lib/.generated/model/directionSpreads.mjs +2 -0
- package/esm2022/lib/.generated/model/dualPriceDealing.mjs +12 -0
- package/esm2022/lib/.generated/model/dualPriceDerivation.mjs +12 -0
- package/esm2022/lib/.generated/model/fund.mjs +1 -1
- package/esm2022/lib/.generated/model/fundDefinitionRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/fundShareClass.mjs +1 -1
- package/esm2022/lib/.generated/model/instrumentEventHolder.mjs +1 -1
- package/esm2022/lib/.generated/model/models.mjs +28 -1
- package/esm2022/lib/.generated/model/outputTransaction.mjs +1 -1
- package/esm2022/lib/.generated/model/pricingMethodology.mjs +2 -0
- package/esm2022/lib/.generated/model/pricingMethodologyAudit.mjs +2 -0
- package/esm2022/lib/.generated/model/pricingMethodologyEngineProposal.mjs +12 -0
- package/esm2022/lib/.generated/model/pricingMethodologyOverride.mjs +12 -0
- package/esm2022/lib/.generated/model/pricingMethodologyOverrideRequest.mjs +12 -0
- package/esm2022/lib/.generated/model/pricingMethodologyResult.mjs +2 -0
- package/esm2022/lib/.generated/model/priorityIssueEvent.mjs +1 -1
- package/esm2022/lib/.generated/model/reportingPrice.mjs +12 -0
- package/esm2022/lib/.generated/model/runCheckRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/serviceApiEndpoints.mjs +2 -0
- package/esm2022/lib/.generated/model/shareClassData.mjs +1 -1
- package/esm2022/lib/.generated/model/singlePriceDealing.mjs +12 -0
- package/esm2022/lib/.generated/model/structuredResultDataResult.mjs +12 -0
- package/esm2022/lib/.generated/model/structuredResultDataset.mjs +12 -0
- package/esm2022/lib/.generated/model/subscriptionDefinition.mjs +1 -1
- package/esm2022/lib/.generated/model/swingBaseline.mjs +12 -0
- package/esm2022/lib/.generated/model/swingPolicy.mjs +2 -0
- package/esm2022/lib/.generated/model/swingPricingDecision.mjs +1 -1
- package/esm2022/lib/.generated/model/swingPricingRule.mjs +1 -1
- package/esm2022/lib/.generated/model/swingSpreadApplied.mjs +2 -0
- package/esm2022/lib/.generated/model/swingSpreadTier.mjs +12 -0
- package/esm2022/lib/.generated/model/swingSpreadTierBounds.mjs +12 -0
- package/esm2022/lib/.generated/model/swingSpreads.mjs +2 -0
- package/esm2022/lib/.generated/model/swingTrigger.mjs +12 -0
- package/esm2022/lib/.generated/model/swingTriggerEvaluation.mjs +12 -0
- package/esm2022/lib/.generated/model/transferAgencyTransactionFromOrderResult.mjs +2 -0
- package/esm2022/lib/.generated/model/unitisationData.mjs +1 -1
- package/esm2022/lib/.generated/model/updateValuationPointRequest.mjs +1 -1
- package/esm2022/lib/.generated/model/upsertInstrumentEventsResponse.mjs +1 -1
- package/esm2022/lib/.generated/model/upsertTransferAgencyTransactionFromOrderRequest.mjs +2 -0
- package/esm2022/lib/.generated/model/upsertTransferAgencyTransactionsFromOrdersResponse.mjs +2 -0
- package/fesm2022/finbourne-lusid-sdk-angular18.mjs +324 -0
- package/fesm2022/finbourne-lusid-sdk-angular18.mjs.map +2 -2
- package/lib/.generated/api/applicationMetadata.service.d.ts +22 -0
- package/lib/.generated/api/funds.service.d.ts +3 -1
- package/lib/.generated/api/recs.service.d.ts +4 -4
- package/lib/.generated/api/transactionPortfolios.service.d.ts +9 -1
- package/lib/.generated/api/transferAgency.service.d.ts +33 -1
- package/lib/.generated/api/withholdingTax.service.d.ts +1 -1
- package/lib/.generated/model/allocationMapBasisValue.d.ts +4 -0
- package/lib/.generated/model/apiEndpoint.d.ts +18 -0
- package/lib/.generated/model/consentEvent.d.ts +4 -4
- package/lib/.generated/model/consentGrantedElection.d.ts +1 -1
- package/lib/.generated/model/createTransferRequest.d.ts +8 -0
- package/lib/.generated/model/dataQualityCheckResult.d.ts +2 -0
- package/lib/.generated/model/dealingFlowSummary.d.ts +27 -0
- package/lib/.generated/model/directionSpreads.d.ts +24 -0
- package/lib/.generated/model/dualPriceDealing.d.ts +39 -0
- package/lib/.generated/model/dualPriceDerivation.d.ts +31 -0
- package/lib/.generated/model/fund.d.ts +11 -4
- package/lib/.generated/model/fundDefinitionRequest.d.ts +7 -0
- package/lib/.generated/model/fundShareClass.d.ts +1 -1
- package/lib/.generated/model/instrumentEventHolder.d.ts +2 -0
- package/lib/.generated/model/models.d.ts +27 -0
- package/lib/.generated/model/outputTransaction.d.ts +1 -1
- package/lib/.generated/model/pricingMethodology.d.ts +27 -0
- package/lib/.generated/model/pricingMethodologyAudit.d.ts +34 -0
- package/lib/.generated/model/pricingMethodologyEngineProposal.d.ts +35 -0
- package/lib/.generated/model/pricingMethodologyOverride.d.ts +31 -0
- package/lib/.generated/model/pricingMethodologyOverrideRequest.d.ts +23 -0
- package/lib/.generated/model/pricingMethodologyResult.d.ts +27 -0
- package/lib/.generated/model/priorityIssueEvent.d.ts +1 -1
- package/lib/.generated/model/reportingPrice.d.ts +23 -0
- package/lib/.generated/model/runCheckRequest.d.ts +2 -0
- package/lib/.generated/model/serviceApiEndpoints.d.ts +21 -0
- package/lib/.generated/model/shareClassData.d.ts +2 -0
- package/lib/.generated/model/singlePriceDealing.d.ts +39 -0
- package/lib/.generated/model/structuredResultDataResult.d.ts +53 -0
- package/lib/.generated/model/structuredResultDataset.d.ts +47 -0
- package/lib/.generated/model/subscriptionDefinition.d.ts +2 -2
- package/lib/.generated/model/swingBaseline.d.ts +23 -0
- package/lib/.generated/model/swingPolicy.d.ts +26 -0
- package/lib/.generated/model/swingPricingDecision.d.ts +1 -1
- package/lib/.generated/model/swingPricingRule.d.ts +1 -1
- package/lib/.generated/model/swingSpreadApplied.d.ts +21 -0
- package/lib/.generated/model/swingSpreadTier.d.ts +27 -0
- package/lib/.generated/model/swingSpreadTierBounds.d.ts +23 -0
- package/lib/.generated/model/swingSpreads.d.ts +18 -0
- package/lib/.generated/model/swingTrigger.d.ts +23 -0
- package/lib/.generated/model/swingTriggerEvaluation.d.ts +27 -0
- package/lib/.generated/model/transferAgencyTransactionFromOrderResult.d.ts +18 -0
- package/lib/.generated/model/unitisationData.d.ts +16 -0
- package/lib/.generated/model/updateValuationPointRequest.d.ts +2 -0
- package/lib/.generated/model/upsertInstrumentEventsResponse.d.ts +8 -2
- package/lib/.generated/model/upsertTransferAgencyTransactionFromOrderRequest.d.ts +15 -0
- package/lib/.generated/model/upsertTransferAgencyTransactionsFromOrdersResponse.d.ts +28 -0
- package/package.json +1 -1
|
@@ -883,4 +883,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
883
883
|
}] }, { type: i2.Configuration, decorators: [{
|
|
884
884
|
type: Optional
|
|
885
885
|
}] }] });
|
|
886
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGhvbGRpbmdUYXguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvd2l0aGhvbGRpbmdUYXguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQWtDL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQTBCLGNBQWMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBOEdyRixNQUFNLE9BQU8scUJBQXFCO0lBT1I7SUFMWixRQUFRLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3hFLElBQUksYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQzdCLENBQUM7WUFFRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLElBQUksd0JBQXdCLEVBQUUsQ0FBQztJQUNoRixDQUFDO0lBR0QsYUFBYTtJQUNMLGVBQWUsQ0FBQyxVQUFzQixFQUFFLEtBQVUsRUFBRSxHQUFZO1FBQ3BFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0QsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQzthQUFNLENBQUM7WUFDSixVQUFVLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxVQUFzQixFQUFFLEtBQVcsRUFBRSxHQUFZO1FBQzlFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0QixLQUFlLENBQUMsT0FBTyxDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekcsQ0FBQztpQkFBTSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ2QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFHLEtBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hGLENBQUM7cUJBQU0sQ0FBQztvQkFDTCxNQUFNLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FDdkUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFZTSw4QkFBOEIsQ0FBQyxpQkFBK0QsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQ3pSLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixFQUFFLEtBQUssQ0FBQztRQUN2QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkZBQTZGLENBQUMsQ0FBQztRQUNuSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO1FBQ2xILENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxXQUFXLENBQUM7UUFDbkQsSUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLG1HQUFtRyxDQUFDLENBQUM7UUFDekgsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixFQUFFLFdBQVcsQ0FBQztRQUVuRCxJQUFJLHVCQUF1QixHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEQsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFDL0QsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDLElBQUksa0JBQXNDLENBQUM7UUFDM0MsbUNBQW1DO1FBQ25DLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsSUFBSSxnQ0FBZ0MsR0FBdUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRixJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGlDQUFpQztZQUNqQyxNQUFNLGlCQUFpQixHQUFhO2dCQUNoQyxZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsV0FBVzthQUNkLENBQUM7WUFDRixnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUNELElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksbUJBQW1CLEdBQTRCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlFLElBQUksbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxxQkFBcUIsR0FBd0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbEYsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztRQUdELHVDQUF1QztRQUN2QyxNQUFNLFFBQVEsR0FBYTtZQUN2Qiw2QkFBNkI7WUFDN0Isa0JBQWtCO1lBQ2xCLFdBQVc7WUFDWCxvQkFBb0I7U0FDdkIsQ0FBQztRQUNGLE1BQU0sdUJBQXVCLEdBQXVCLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekcsSUFBSSx1QkFBdUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQTZCLE1BQU0sQ0FBQztRQUNyRCxJQUFJLGdDQUFnQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsNkJBQTZCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsZUFBZSxDQUFDO1FBQzVXLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQW9DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUNySDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLFdBQVc7WUFDakIsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQVlNLDhCQUE4QixDQUFDLGlCQUErRCxFQUFFLFVBQWUsTUFBTSxFQUFFLGlCQUEwQixLQUFLLEVBQUUsT0FBOEg7UUFDelIsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDckMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUM7UUFDbEgsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixFQUFFLFdBQVcsQ0FBQztRQUNuRCxJQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsbUdBQW1HLENBQUMsQ0FBQztRQUN6SCxDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsV0FBVyxDQUFDO1FBRW5ELElBQUksdUJBQXVCLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0RCx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUMvRCxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFMUMsSUFBSSxrQkFBc0MsQ0FBQztRQUMzQyxtQ0FBbUM7UUFDbkMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDckIsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCxJQUFJLGdDQUFnQyxHQUF1QixPQUFPLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQy9GLElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsaUNBQWlDO1lBQ2pDLE1BQU0saUJBQWlCLEdBQWE7Z0JBQ2hDLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixXQUFXO2FBQ2QsQ0FBQztZQUNGLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsSUFBSSxtQkFBbUIsR0FBNEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUUsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxtQkFBbUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLHFCQUFxQixHQUF3QixPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNsRixJQUFJLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO1FBR0QsdUNBQXVDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFhO1lBQ3ZCLDZCQUE2QjtZQUM3QixrQkFBa0I7WUFDbEIsV0FBVztZQUNYLG9CQUFvQjtTQUN2QixDQUFDO1FBQ0YsTUFBTSx1QkFBdUIsR0FBdUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RyxJQUFJLHVCQUF1QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxJQUFJLGFBQWEsR0FBNkIsTUFBTSxDQUFDO1FBQ3JELElBQUksZ0NBQWdDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLGdDQUFnQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyw2QkFBNkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxlQUFlLENBQUM7UUFDNVcsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBeUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQzFIO1lBQ0ksT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixJQUFJLEVBQUUsV0FBVztZQUNqQixNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBWU0sc0NBQXNDLENBQUMsaUJBQXVFLEVBQUUsVUFBZSxNQUFNLEVBQUUsaUJBQTBCLEtBQUssRUFBRSxPQUE4SDtRQUN6UyxNQUFNLDZDQUE2QyxHQUFHLGlCQUFpQixFQUFFLDZDQUE2QyxDQUFDO1FBQ3ZILElBQUksNkNBQTZDLEtBQUssSUFBSSxJQUFJLDZDQUE2QyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hILE1BQU0sSUFBSSxLQUFLLENBQUMsNklBQTZJLENBQUMsQ0FBQztRQUNuSyxDQUFDO1FBRUQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyxJQUFJLGtCQUFzQyxDQUFDO1FBQzNDLG1DQUFtQztRQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksZ0NBQWdDLEdBQXVCLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0YsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxpQ0FBaUM7WUFDakMsTUFBTSxpQkFBaUIsR0FBYTtnQkFDaEMsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLFdBQVc7YUFDZCxDQUFDO1lBQ0YsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUE0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM5RSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1CQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUkscUJBQXFCLEdBQXdCLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ2xGLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFHRCx1Q0FBdUM7UUFDdkMsTUFBTSxRQUFRLEdBQWE7WUFDdkIsNkJBQTZCO1lBQzdCLGtCQUFrQjtZQUNsQixXQUFXO1lBQ1gsb0JBQW9CO1NBQ3ZCLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUF1QixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pHLElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLHdDQUF3QyxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQW1DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUNwSDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLDZDQUE2QztZQUNuRCxZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQVlNLGlDQUFpQyxDQUFDLGlCQUFrRSxFQUFFLFVBQWUsTUFBTSxFQUFFLGlCQUEwQixLQUFLLEVBQUUsT0FBOEg7UUFDL1IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnR0FBZ0csQ0FBQyxDQUFDO1FBQ3RILENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDckMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLCtGQUErRixDQUFDLENBQUM7UUFDckgsQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFMUMsSUFBSSxrQkFBc0MsQ0FBQztRQUMzQyxtQ0FBbUM7UUFDbkMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDckIsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCxJQUFJLGdDQUFnQyxHQUF1QixPQUFPLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQy9GLElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsaUNBQWlDO1lBQ2pDLE1BQU0saUJBQWlCLEdBQWE7Z0JBQ2hDLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixXQUFXO2FBQ2QsQ0FBQztZQUNGLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsSUFBSSxtQkFBbUIsR0FBNEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUUsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxtQkFBbUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLHFCQUFxQixHQUF3QixPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNsRixJQUFJLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO1FBR0QsSUFBSSxhQUFhLEdBQTZCLE1BQU0sQ0FBQztRQUNyRCxJQUFJLGdDQUFnQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsc0NBQXNDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hXLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQXdCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMzRztZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFZTSxxQ0FBcUMsQ0FBQyxpQkFBc0UsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQ3ZTLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixFQUFFLEtBQUssQ0FBQztRQUN2QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0dBQW9HLENBQUMsQ0FBQztRQUMxSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtR0FBbUcsQ0FBQyxDQUFDO1FBQ3pILENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDLElBQUksa0JBQXNDLENBQUM7UUFDM0MsbUNBQW1DO1FBQ25DLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsSUFBSSxnQ0FBZ0MsR0FBdUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRixJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGlDQUFpQztZQUNqQyxNQUFNLGlCQUFpQixHQUFhO2dCQUNoQyxZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsV0FBVzthQUNkLENBQUM7WUFDRixnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUNELElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksbUJBQW1CLEdBQTRCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlFLElBQUksbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxxQkFBcUIsR0FBd0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbEYsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztRQUdELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLDBDQUEwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQztRQUM1VyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUF3QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDM0c7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBWU0sOEJBQThCLENBQUMsaUJBQStELEVBQUUsVUFBZSxNQUFNLEVBQUUsaUJBQTBCLEtBQUssRUFBRSxPQUE4SDtRQUN6UixNQUFNLEtBQUssR0FBRyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7UUFDdkMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDZGQUE2RixDQUFDLENBQUM7UUFDbkgsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUNyQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEZBQTRGLENBQUMsQ0FBQztRQUNsSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBRXJDLElBQUksdUJBQXVCLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4Qyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUMvRCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFMUMsSUFBSSxrQkFBc0MsQ0FBQztRQUMzQyxtQ0FBbUM7UUFDbkMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDckIsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCxJQUFJLGdDQUFnQyxHQUF1QixPQUFPLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQy9GLElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsaUNBQWlDO1lBQ2pDLE1BQU0saUJBQWlCLEdBQWE7Z0JBQ2hDLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixXQUFXO2FBQ2QsQ0FBQztZQUNGLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsSUFBSSxtQkFBbUIsR0FBNEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUUsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxtQkFBbUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLHFCQUFxQixHQUF3QixPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNsRixJQUFJLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO1FBR0QsSUFBSSxhQUFhLEdBQTZCLE1BQU0sQ0FBQztRQUNyRCxJQUFJLGdDQUFnQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsc0NBQXNDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hXLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQThCLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUM5RztZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQVlNLGtDQUFrQyxDQUFDLGlCQUFtRSxFQUFFLFVBQWUsTUFBTSxFQUFFLGlCQUEwQixLQUFLLEVBQUUsT0FBOEg7UUFDalMsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpR0FBaUcsQ0FBQyxDQUFDO1FBQ3ZILENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDckMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLGdHQUFnRyxDQUFDLENBQUM7UUFDdEgsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUVyQyxJQUFJLHVCQUF1QixHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFDL0QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDLElBQUksa0JBQXNDLENBQUM7UUFDM0MsbUNBQW1DO1FBQ25DLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsSUFBSSxnQ0FBZ0MsR0FBdUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRixJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGlDQUFpQztZQUNqQyxNQUFNLGlCQUFpQixHQUFhO2dCQUNoQyxZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsV0FBVzthQUNkLENBQUM7WUFDRixnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUNELElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksbUJBQW1CLEdBQTRCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlFLElBQUksbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxxQkFBcUIsR0FBd0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbEYsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztRQUdELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLDBDQUEwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQztRQUM1VyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUF3QixLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDeEc7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLE1BQU0sRUFBRSx1QkFBdUI7WUFDL0IsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFZTSxnQ0FBZ0MsQ0FBQyxpQkFBaUUsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQzdSLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7UUFFekMsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQy9ELElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4Qyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUMvRCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFDL0QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQy9ELE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdkIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFDL0QsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFMUMsSUFBSSxrQkFBc0MsQ0FBQztRQUMzQyxtQ0FBbUM7UUFDbkMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDckIsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCxJQUFJLGdDQUFnQyxHQUF1QixPQUFPLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQy9GLElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsaUNBQWlDO1lBQ2pDLE1BQU0saUJBQWlCLEdBQWE7Z0JBQ2hDLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixXQUFXO2FBQ2QsQ0FBQztZQUNGLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsSUFBSSxtQkFBbUIsR0FBNEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUUsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxtQkFBbUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLHFCQUFxQixHQUF3QixPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNsRixJQUFJLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO1FBR0QsSUFBSSxhQUFhLEdBQTZCLE1BQU0sQ0FBQztRQUNyRCxJQUFJLGdDQUFnQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsb0NBQW9DLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBaUQsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQ2pJO1lBQ0ksT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBWU0sb0NBQW9DLENBQUMsaUJBQXFFLEVBQUUsVUFBZSxNQUFNLEVBQUUsaUJBQTBCLEtBQUssRUFBRSxPQUE4SDtRQUNyUyxNQUFNLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixFQUFFLEtBQUssQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBRXpDLElBQUksdUJBQXVCLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4Qyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUMvRCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFDL0QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQy9ELEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM1Qyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUMvRCxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3ZCLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQy9ELE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDLElBQUksa0JBQXNDLENBQUM7UUFDM0MsbUNBQW1DO1FBQ25DLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsSUFBSSxnQ0FBZ0MsR0FBdUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRixJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGlDQUFpQztZQUNqQyxNQUFNLGlCQUFpQixHQUFhO2dCQUNoQyxZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsV0FBVzthQUNkLENBQUM7WUFDRixnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUNELElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksbUJBQW1CLEdBQTRCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlFLElBQUksbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxxQkFBcUIsR0FBd0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbEYsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztRQUdELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLHdDQUF3QyxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQTJDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMzSDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQVlNLG9DQUFvQyxDQUFDLGlCQUFxRSxFQUFFLFVBQWUsTUFBTSxFQUFFLGlCQUEwQixLQUFLLEVBQUUsT0FBOEg7UUFDclMsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtR0FBbUcsQ0FBQyxDQUFDO1FBQ3pILENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDckMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLGtHQUFrRyxDQUFDLENBQUM7UUFDeEgsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztRQUMvQyxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsdUdBQXVHLENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBRUQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyxJQUFJLGtCQUFzQyxDQUFDO1FBQzNDLG1DQUFtQztRQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksZ0NBQWdDLEdBQXVCLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0YsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxpQ0FBaUM7WUFDakMsTUFBTSxpQkFBaUIsR0FBYTtnQkFDaEMsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLFdBQVc7YUFDZCxDQUFDO1lBQ0YsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUE0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM5RSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1CQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUkscUJBQXFCLEdBQXdCLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ2xGLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFHRCx1Q0FBdUM7UUFDdkMsTUFBTSxRQUFRLEdBQWE7WUFDdkIsNkJBQTZCO1lBQzdCLGtCQUFrQjtZQUNsQixXQUFXO1lBQ1gsb0JBQW9CO1NBQ3ZCLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUF1QixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pHLElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLDBDQUEwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQztRQUM1VyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUF3QixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDMUc7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSxTQUFTO1lBQ2YsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFZTSxpQ0FBaUMsQ0FBQyxpQkFBa0UsRUFBRSxVQUFlLE1BQU0sRUFBRSxpQkFBMEIsS0FBSyxFQUFFLE9BQThIO1FBQy9SLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixFQUFFLEtBQUssQ0FBQztRQUN2QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0dBQWdHLENBQUMsQ0FBQztRQUN0SCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrRkFBK0YsQ0FBQyxDQUFDO1FBQ3JILENBQUM7UUFDRCxNQUFNLHdDQUF3QyxHQUFHLGlCQUFpQixFQUFFLHdDQUF3QyxDQUFDO1FBQzdHLElBQUksd0NBQXdDLEtBQUssSUFBSSxJQUFJLHdDQUF3QyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlHLE1BQU0sSUFBSSxLQUFLLENBQUMsbUlBQW1JLENBQUMsQ0FBQztRQUN6SixDQUFDO1FBRUQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyxJQUFJLGtCQUFzQyxDQUFDO1FBQzNDLG1DQUFtQztRQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksZ0NBQWdDLEdBQXVCLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0YsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxpQ0FBaUM7WUFDakMsTUFBTSxpQkFBaUIsR0FBYTtnQkFDaEMsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLFdBQVc7YUFDZCxDQUFDO1lBQ0YsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUE0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM5RSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1CQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUkscUJBQXFCLEdBQXdCLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ2xGLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFHRCx1Q0FBdUM7UUFDdkMsTUFBTSxRQUFRLEdBQWE7WUFDdkIsNkJBQTZCO1lBQzdCLGtCQUFrQjtZQUNsQixXQUFXO1lBQ1gsb0JBQW9CO1NBQ3ZCLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUF1QixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pHLElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ25DLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLHNDQUFzQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQztRQUN4VyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUE4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDL0c7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSx3Q0FBd0M7WUFDOUMsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7dUdBMWpDUSxxQkFBcUIsNENBT21DLFNBQVM7MkdBUGpFLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRa0QsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBOEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTFVTSUQgQVBJXG4gKiAjIEludHJvZHVjdGlvbiAgVGhpcyBwYWdlIGRvY3VtZW50cyB0aGUgW0xVU0lEIEFQSXNdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyKSwgd2hpY2ggYWxsb3dzIGF1dGhvcmlzZWQgY2xpZW50cyB0byBxdWVyeSBhbmQgdXBkYXRlIHRoZWlyIGRhdGEgd2l0aGluIHRoZSBMVVNJRCBwbGF0Zm9ybS4gIFNES3MgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgTFVTSUQgQVBJcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBmb2xsb3dpbmcgbGFuZ3VhZ2VzIGFuZCBmcmFtZXdvcmtzOiAgKiBbQyNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWNzaGFycCkgKiBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstamF2YSkgKiBbSmF2YVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstanMpICogW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstcHl0aG9uKSAqIFtBbmd1bGFyXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1hbmd1bGFyKSAgVGhlIExVU0lEIHBsYXRmb3JtIGlzIG1hZGUgdXAgb2YgYSBudW1iZXIgb2Ygc3ViLWFwcGxpY2F0aW9ucy4gWW91IGNhbiBmaW5kIHRoZSBBUEkgLyBzd2FnZ2VyIGRvY3VtZW50YXRpb24gYnkgZm9sbG93aW5nIHRoZSBsaW5rcyBpbiB0aGUgdGFibGUgYmVsb3cuICAgfCBBcHBsaWNhdGlvbiAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQVBJIC8gU3dhZ2dlciBEb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8IExVU0lEICAgICAgICAgfCBPcGVuLCBBUEktZmlyc3QsIGRldmVsb3Blci1mcmllbmRseSBpbnZlc3RtZW50IGRhdGEgcGxhdGZvcm0uICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYXBpL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICAgIHwgfCBXZWIgYXBwICAgICAgIHwgVXNlci1mYWNpbmcgZnJvbnQgZW5kIGZvciBMVVNJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwcC9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgU2NoZWR1bGVyICAgICB8IEF1dG9tYXRlZCBqb2Igc2NoZWR1bGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9zY2hlZHVsZXIyL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgfCB8IEluc2lnaHRzICAgICAgfCBNb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3Rpbmcgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaW5zaWdodHMvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgfCBJZGVudGl0eSAgICAgIHwgSWRlbnRpdHkgbWFuYWdlbWVudCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggQWNjZXNzKSAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2lkZW50aXR5L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgQWNjZXNzICAgICAgICB8IEFjY2VzcyBjb250cm9sIGZvciBMVVNJRCAoaW4gY29uanVuY3Rpb24gd2l0aCBJZGVudGl0eSkgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hY2Nlc3Mvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgfCB8IERyaXZlICAgICAgICAgfCBTZWN1cmUgZmlsZSByZXBvc2l0b3J5IGFuZCBtYW5hZ2VyIGZvciBjb2xsYWJvcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vZHJpdmUvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgIHwgfCBMdW1pbmVzY2UgICAgIHwgRGF0YSB2aXJ0dWFsaXNhdGlvbiBzZXJ2aWNlIChxdWVyeSBkYXRhIGZyb20gbXVsdGlwbGUgcHJvdmlkZXJzLCBpbmNsdWRpbmcgTFVTSUQpIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2hvbmV5Y29tYi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICB8IHwgTm90aWZpY2F0aW9uICB8IE5vdGlmaWNhdGlvbiBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ub3RpZmljYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSAgfCB8IENvbmZpZ3VyYXRpb24gfCBGaWxlIHN0b3JlIGZvciBzZWNyZXRzIGFuZCBvdGhlciBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vY29uZmlndXJhdGlvbi9zd2FnZ2VyL2luZGV4Lmh0bWwpIHwgfCBXb3JrZmxvdyAgICAgIHwgV29ya2Zsb3cgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL3dvcmtmbG93L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8ICAgIyBFcnJvciBDb2RlcyAgfCBDb2RlfE5hbWV8RGVzY3JpcHRpb24gfCB8IC0tLXwtLS18LS0tIHwgfCA8YSBuYW1lPVxcXCItMTBcXFwiPi0xMDwvYT58U2VydmVyIENvbmZpZ3VyYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiLTFcXFwiPi0xPC9hPnxVbmtub3duIGVycm9yfEFuIHVuZXhwZWN0ZWQgZXJyb3Igd2FzIGVuY291bnRlcmVkIG9uIG91ciBzaWRlLiB8IHwgPGEgbmFtZT1cXFwiMTAyXFxcIj4xMDI8L2E+fFZlcnNpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwM1xcXCI+MTAzPC9hPnxBcGkgUmF0ZSBMaW1pdCBWaW9sYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMTA0XFxcIj4xMDQ8L2E+fEluc3RydW1lbnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNVxcXCI+MTA1PC9hPnxQcm9wZXJ0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA2XFxcIj4xMDY8L2E+fFBvcnRmb2xpbyBSZWN1cnNpb24gRGVwdGh8ICB8IHwgPGEgbmFtZT1cXFwiMTA4XFxcIj4xMDg8L2E+fEdyb3VwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDlcXFwiPjEwOTwvYT58UG9ydGZvbGlvIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTBcXFwiPjExMDwvYT58UHJvcGVydHkgU2NoZW1hIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTFcXFwiPjExMTwvYT58UG9ydGZvbGlvIEFuY2VzdHJ5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTJcXFwiPjExMjwvYT58UG9ydGZvbGlvIFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTEzXFxcIj4xMTM8L2E+fE9ycGhhbmVkIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCIxMTlcXFwiPjExOTwvYT58TWlzc2luZyBCYXNlIENsYWltc3wgIHwgfCA8YSBuYW1lPVxcXCIxMjFcXFwiPjEyMTwvYT58UHJvcGVydHkgTm90IERlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTIyXFxcIj4xMjI8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFByb3BlcnR5fCAgfCB8IDxhIG5hbWU9XFxcIjEyM1xcXCI+MTIzPC9hPnxDYW5ub3QgTW9kaWZ5IEltbXV0YWJsZSBQcm9wZXJ0eSBGaWVsZHwgIHwgfCA8YSBuYW1lPVxcXCIxMjRcXFwiPjEyNDwvYT58UHJvcGVydHkgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTI1XFxcIj4xMjU8L2E+fEludmFsaWQgUHJvcGVydHkgTGlmZSBUaW1lfCAgfCB8IDxhIG5hbWU9XFxcIjEyNlxcXCI+MTI2PC9hPnxQcm9wZXJ0eSBDb25zdHJhaW50IFN0eWxlIEV4Y2x1ZGVzIFByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTI3XFxcIj4xMjc8L2E+fENhbm5vdCBNb2RpZnkgRGVmYXVsdCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTI4XFxcIj4xMjg8L2E+fEdyb3VwIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyOVxcXCI+MTI5PC9hPnxObyBTdWNoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzBcXFwiPjEzMDwvYT58VW5kZWZpbmVkIFZhbHVlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMxXFxcIj4xMzE8L2E+fFVuc3VwcG9ydGVkIFZhbHVlIFR5cGUgRGVmaW5lZCBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMyXFxcIj4xMzI8L2E+fFZhbGlkYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMTMzXFxcIj4xMzM8L2E+fExvb3AgRGV0ZWN0ZWQgSW4gR3JvdXAgSGllcmFyY2h5fCAgfCB8IDxhIG5hbWU9XFxcIjEzNFxcXCI+MTM0PC9hPnxVbmRlZmluZWQgQWNjZXB0YWJsZSBWYWx1ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTM1XFxcIj4xMzU8L2E+fFN1YiBHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMzhcXFwiPjEzODwvYT58UHJpY2UgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMzlcXFwiPjEzOTwvYT58QW5hbHl0aWMgU3RvcmUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE0MVxcXCI+MTQxPC9hPnxBbmFseXRpYyBTdG9yZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNDNcXFwiPjE0MzwvYT58Q2xpZW50IEluc3RydW1lbnQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQ0XFxcIj4xNDQ8L2E+fER1cGxpY2F0ZSBJbiBQYXJhbWV0ZXIgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0N1xcXCI+MTQ3PC9hPnxSZXN1bHRzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDhcXFwiPjE0ODwvYT58T3JkZXIgRmllbGQgTm90IEluIFJlc3VsdCBTZXR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ5XFxcIj4xNDk8L2E+fE9wZXJhdGlvbiBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTUwXFxcIj4xNTA8L2E+fEVsYXN0aWMgU2VhcmNoIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjE1MVxcXCI+MTUxPC9hPnxJbnZhbGlkIFBhcmFtZXRlciBWYWx1ZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTNcXFwiPjE1MzwvYT58Q29tbWFuZCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU0XFxcIj4xNTQ8L2E+fEVudGl0eSBTdGF0ZSBDb25zdHJ1Y3Rpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTVcXFwiPjE1NTwvYT58RW50aXR5IFRpbWVsaW5lIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1NlxcXCI+MTU2PC9hPnxDb25jdXJyZW5jeSBDb25mbGljdCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1N1xcXCI+MTU3PC9hPnxJbnZhbGlkIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTU4XFxcIj4xNTg8L2E+fEV2ZW50IFB1Ymxpc2ggVW5rbm93bnwgIHwgfCA8YSBuYW1lPVxcXCIxNTlcXFwiPjE1OTwvYT58RXZlbnQgUXVlcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjBcXFwiPjE2MDwvYT58QmxvYiBEaWQgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE2MlxcXCI+MTYyPC9hPnxTdWIgU3lzdGVtIFJlcXVlc3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjNcXFwiPjE2MzwvYT58U3ViIFN5c3RlbSBDb25maWd1cmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTY1XFxcIj4xNjU8L2E+fEZhaWxlZCBUbyBEZWxldGV8ICB8IHwgPGEgbmFtZT1cXFwiMTY2XFxcIj4xNjY8L2E+fFVwc2VydCBDbGllbnQgSW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2N1xcXCI+MTY3PC9hPnxJbGxlZ2FsIEFzIEF0IEludGVydmFsfCAgfCB8IDxhIG5hbWU9XFxcIjE2OFxcXCI+MTY4PC9hPnxJbGxlZ2FsIEJpdGVtcG9yYWwgUXVlcnl8ICB8IHwgPGEgbmFtZT1cXFwiMTY5XFxcIj4xNjk8L2E+fEludmFsaWQgQWx0ZXJuYXRlIElkfCAgfCB8IDxhIG5hbWU9XFxcIjE3MFxcXCI+MTcwPC9hPnxDYW5ub3QgQWRkIE5vbi1Xcml0YWJsZSBQcm9wZXJ0aWVzIFRvIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCIxNzFcXFwiPjE3MTwvYT58RW50aXR5IEFscmVhZHkgRXhpc3RzIEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3MlxcXCI+MTcyPC9hPnxFbnRpdHkgV2l0aCBJZCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzNcXFwiPjE3MzwvYT58RW50aXR5IFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTc0XFxcIj4xNzQ8L2E+fERlcml2ZWQgUG9ydGZvbGlvIERldGFpbHMgRG8gTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE3NVxcXCI+MTc1PC9hPnxFbnRpdHkgTm90IEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3NlxcXCI+MTc2PC9hPnxQb3J0Zm9saW8gV2l0aCBOYW1lIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3N1xcXCI+MTc3PC9hPnxJbnZhbGlkIFRyYW5zYWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIxNzhcXFwiPjE3ODwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTc5XFxcIj4xNzk8L2E+fER1cGxpY2F0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxODBcXFwiPjE4MDwvYT58Q29tbWFuZCBSZXRyaWV2YWwgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODFcXFwiPjE4MTwvYT58RGF0YSBGaWx0ZXIgQXBwbGljYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODJcXFwiPjE4MjwvYT58U2VhcmNoIEZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCIxODNcXFwiPjE4MzwvYT58TW92ZW1lbnRzIEVuZ2luZSBDb25maWd1cmF0aW9uIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4NFxcXCI+MTg0PC9hPnxGeCBSYXRlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg1XFxcIj4xODU8L2E+fEFjY3J1YWwgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxODZcXFwiPjE4NjwvYT58QWNjZXNzIERlbmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxODdcXFwiPjE4NzwvYT58SW52YWxpZCBJZGVudGl0eSBUb2tlbnwgIHwgfCA8YSBuYW1lPVxcXCIxODhcXFwiPjE4ODwvYT58SW52YWxpZCBSZXF1ZXN0IEhlYWRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiMTg5XFxcIj4xODk8L2E+fFByaWNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTBcXFwiPjE5MDwvYT58SW52YWxpZCBTdWIgSG9sZGluZyBLZXlzIFByb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MVxcXCI+MTkxPC9hPnxEdXBsaWNhdGUgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTJcXFwiPjE5MjwvYT58Q3V0IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE5M1xcXCI+MTkzPC9hPnxDdXQgRGVmaW5pdGlvbiBJbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NFxcXCI+MTk0PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgRGVsZXRpb24gRGF0ZSBVbnNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTVcXFwiPjE5NTwvYT58UGVycGV0dWFsIFByb3BlcnR5IERlbGV0aW9uIERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NlxcXCI+MTk2PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgVXBzZXJ0IERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk3XFxcIj4xOTc8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBVcHNlcnQgRGF0ZSBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjAwXFxcIj4yMDA8L2E+fEludmFsaWQgVW5pdCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMVxcXCI+MjAxPC9hPnxJbnZhbGlkIFR5cGUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDJcXFwiPjIwMjwvYT58SW52YWxpZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwM1xcXCI+MjAzPC9hPnxVbml0IE5vdCBEZWZpbmVkIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA0XFxcIj4yMDQ8L2E+fFVuaXRzIE5vdCBTdXBwb3J0ZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNVxcXCI+MjA1PC9hPnxDYW5ub3QgU3BlY2lmeSBVbml0cyBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA2XFxcIj4yMDY8L2E+fFVuaXQgU2NoZW1hIEluY29uc2lzdGVudCBXaXRoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDdcXFwiPjIwNzwvYT58VW5pdCBEZWZpbml0aW9uIE5vdCBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA4XFxcIj4yMDg8L2E+fER1cGxpY2F0ZSBVbml0IERlZmluaXRpb25zIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDlcXFwiPjIwOTwvYT58SW52YWxpZCBVbml0cyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxMFxcXCI+MjEwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgSWRlbnRpZmllciBVbml0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMVxcXCI+MjExPC9hPnxIb2xkaW5ncyBBZGp1c3RtZW50IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMlxcXCI+MjEyPC9hPnxDb3VsZCBOb3QgQnVpbGQgRXhjZWwgVXJsfCAgfCB8IDxhIG5hbWU9XFxcIjIxM1xcXCI+MjEzPC9hPnxDb3VsZCBOb3QgR2V0IEV4Y2VsIFZlcnNpb258ICB8IHwgPGEgbmFtZT1cXFwiMjE0XFxcIj4yMTQ8L2E+fEluc3RydW1lbnQgQnkgQ29kZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjE1XFxcIj4yMTU8L2E+fEVudGl0eSBTY2hlbWEgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMjE2XFxcIj4yMTY8L2E+fEZlYXR1cmUgTm90IFN1cHBvcnRlZCBPbiBQb3J0Zm9saW8gVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMTdcXFwiPjIxNzwvYT58UXVvdGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxOFxcXCI+MjE4PC9hPnxJbnZhbGlkIFF1b3RlIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiMjE5XFxcIj4yMTk8L2E+fEludmFsaWQgTWV0cmljIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjIwXFxcIj4yMjA8L2E+fEludmFsaWQgSW5zdHJ1bWVudCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIyMVxcXCI+MjIxPC9hPnxJbnN0cnVtZW50IFVwc2VydCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMlxcXCI+MjIyPC9hPnxSZWZlcmVuY2UgUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjNcXFwiPjIyMzwvYT58VHJhbnNhY3Rpb24gUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjRcXFwiPjIyNDwvYT58SW52YWxpZCBQcm9wZXJ0eSBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzMFxcXCI+MjMwPC9hPnxUcmFuc2FjdGlvbiBUeXBlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMzFcXFwiPjIzMTwvYT58VHJhbnNhY3Rpb24gVHlwZSBEdXBsaWNhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMzJcXFwiPjIzMjwvYT58UG9ydGZvbGlvIERvZXMgTm90IEV4aXN0IEF0IEdpdmVuIERhdGV8ICB8IHwgPGEgbmFtZT1cXFwiMjMzXFxcIj4yMzM8L2E+fFF1ZXJ5IFBhcnNlciBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIzNFxcXCI+MjM0PC9hPnxEdXBsaWNhdGUgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM1XFxcIj4yMzU8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBDb25zdGl0dWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzZcXFwiPjIzNjwvYT58VW5yZXNvbHZlZCBJbnN0cnVtZW50IEluIFRyYW5zaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjM3XFxcIj4yMzc8L2E+fE1pc3NpbmcgU2lkZSBEZWZpbml0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIyNDBcXFwiPjI0MDwvYT58RHVwbGljYXRlIENhbGN1bGF0aW9ucyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjI5OVxcXCI+Mjk5PC9hPnxJbnZhbGlkIFJlY2lwZXwgIHwgfCA8YSBuYW1lPVxcXCIzMDBcXFwiPjMwMDwvYT58TWlzc2luZyBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAxXFxcIj4zMDE8L2E+fERlcGVuZGVuY2llc3wgIHwgfCA8YSBuYW1lPVxcXCIzMDRcXFwiPjMwNDwvYT58UG9ydGZvbGlvIFByZXByb2Nlc3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTBcXFwiPjMxMDwvYT58VmFsdWF0aW9uIEVuZ2luZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMVxcXCI+MzExPC9hPnxUYXNrIEZhY3RvcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTJcXFwiPjMxMjwvYT58VGFzayBFdmFsdWF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEzXFxcIj4zMTM8L2E+fFRhc2sgR2VuZXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNFxcXCI+MzE0PC9hPnxFbmdpbmUgQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNVxcXCI+MzE1PC9hPnxNb2RlbCBTcGVjaWZpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIwXFxcIj4zMjA8L2E+fE1hcmtldCBEYXRhIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMVxcXCI+MzIxPC9hPnxNYXJrZXQgUmVzb2x2ZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjJcXFwiPjMyMjwvYT58TWFya2V0IERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzBcXFwiPjMzMDwvYT58Q3VydmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzFcXFwiPjMzMTwvYT58Vm9sYXRpbGl0eSBTdXJmYWNlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMyXFxcIj4zMzI8L2E+fFZvbGF0aWxpdHkgQ3ViZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MFxcXCI+MzUwPC9hPnxJbnN0cnVtZW50IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUxXFxcIj4zNTE8L2E+fENhc2ggRmxvd3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTJcXFwiPjM1MjwvYT58UmVmZXJlbmNlIERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjBcXFwiPjM2MDwvYT58QWdncmVnYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjFcXFwiPjM2MTwvYT58QWdncmVnYXRpb24gTWVhc3VyZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MFxcXCI+MzcwPC9hPnxSZXN1bHQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcxXFxcIj4zNzE8L2E+fFJlc3VsdCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcyXFxcIj4zNzI8L2E+fFZlbmRvciBSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3M1xcXCI+MzczPC9hPnxWZW5kb3IgUmVzdWx0IE1hcHBpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzRcXFwiPjM3NDwvYT58VmVuZG9yIExpYnJhcnkgVW5hdXRob3Jpc2VkfCAgfCB8IDxhIG5hbWU9XFxcIjM3NVxcXCI+Mzc1PC9hPnxWZW5kb3IgQ29ubmVjdGl2aXR5IEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3NlxcXCI+Mzc2PC9hPnxWZW5kb3IgSW50ZXJmYWNlIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3N1xcXCI+Mzc3PC9hPnxWZW5kb3IgUHJpY2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3OFxcXCI+Mzc4PC9hPnxWZW5kb3IgVHJhbnNsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzlcXFwiPjM3OTwvYT58VmVuZG9yIEtleSBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgwXFxcIj4zODA8L2E+fFZlbmRvciBSZWZsZWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgxXFxcIj4zODE8L2E+fFZlbmRvciBQcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgyXFxcIj4zODI8L2E+fFZlbmRvciBTeXN0ZW0gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzOTBcXFwiPjM5MDwvYT58QXR0ZW1wdCBUbyBVcHNlcnQgRHVwbGljYXRlIFF1b3Rlc3wgIHwgfCA8YSBuYW1lPVxcXCIzOTFcXFwiPjM5MTwvYT58Q29ycG9yYXRlIEFjdGlvbiBTb3VyY2UgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMzkyXFxcIj4zOTI8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjM5M1xcXCI+MzkzPC9hPnxJbnN0cnVtZW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiMzk0XFxcIj4zOTQ8L2E+fFByb3BlcnRpZXMgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjM5NVxcXCI+Mzk1PC9hPnxCYXRjaCBPcGVyYXRpb24gQWJvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDBcXFwiPjQwMDwvYT58SW52YWxpZCBJc280MjE3IEN1cnJlbmN5IENvZGV8ICB8IHwgPGEgbmFtZT1cXFwiNDAxXFxcIj40MDE8L2E+fENhbm5vdCBBc3NpZ24gSW5zdHJ1bWVudCBJZGVudGlmaWVyIFRvIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwMlxcXCI+NDAyPC9hPnxDYW5ub3QgQXNzaWduIEN1cnJlbmN5IElkZW50aWZpZXIgVG8gTm9uIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwM1xcXCI+NDAzPC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBCZSBEZWxldGVkfCAgfCB8IDxhIG5hbWU9XFxcIjQwNFxcXCI+NDA0PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIEVjb25vbWljIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNDA1XFxcIj40MDU8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEhhdmUgTG9va3Rocm91Z2ggUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjQwNlxcXCI+NDA2PC9hPnxDYW5ub3QgQ3JlYXRlIEN1cnJlbmN5IEluc3RydW1lbnQgV2l0aCBNdWx0aXBsZSBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MDdcXFwiPjQwNzwvYT58U3BlY2lmaWVkIEN1cnJlbmN5IElzIFVuZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI0MTBcXFwiPjQxMDwvYT58SW5kZXggRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDExXFxcIj40MTE8L2E+fFNvcnQgRmllbGQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDEzXFxcIj40MTM8L2E+fE5lZ2F0aXZlIFBhZ2luYXRpb24gUGFyYW1ldGVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MTRcXFwiPjQxNDwvYT58SW52YWxpZCBTZWFyY2ggU3ludGF4fCAgfCB8IDxhIG5hbWU9XFxcIjQxNVxcXCI+NDE1PC9hPnxGaWx0ZXIgRXhlY3V0aW9uIFRpbWVvdXR8ICB8IHwgPGEgbmFtZT1cXFwiNDIwXFxcIj40MjA8L2E+fFNpZGUgRGVmaW5pdGlvbiBJbmNvbnNpc3RlbnR8ICB8IHwgPGEgbmFtZT1cXFwiNDUwXFxcIj40NTA8L2E+fEludmFsaWQgUXVvdGUgQWNjZXNzIE1ldGFkYXRhIFJ1bGV8ICB8IHwgPGEgbmFtZT1cXFwiNDUxXFxcIj40NTE8L2E+fEFjY2VzcyBNZXRhZGF0YSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDUyXFxcIj40NTI8L2E+fEludmFsaWQgQWNjZXNzIE1ldGFkYXRhIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiNDYwXFxcIj40NjA8L2E+fFN0YW5kYXJkIFJlc291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjFcXFwiPjQ2MTwvYT58U3RhbmRhcmQgUmVzb3VyY2UgQ29uZmxpY3R8ICB8IHwgPGEgbmFtZT1cXFwiNDYyXFxcIj40NjI8L2E+fENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjNcXFwiPjQ2MzwvYT58RGF0ZSBJbiBBIENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjRcXFwiPjQ2NDwvYT58SW52YWxpZCBEYXRlIFNvdXJjZSBEYXRhfCAgfCB8IDxhIG5hbWU9XFxcIjQ2NVxcXCI+NDY1PC9hPnxJbnZhbGlkIFRpbWV6b25lfCAgfCB8IDxhIG5hbWU9XFxcIjYwMVxcXCI+NjAxPC9hPnxQZXJzb24gSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDJcXFwiPjYwMjwvYT58UGVyc29uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2MDNcXFwiPjYwMzwvYT58Q2Fubm90IFNldCBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjYxN1xcXCI+NjE3PC9hPnxJbnZhbGlkIFJlY2lwZSBTcGVjaWZpY2F0aW9uIEluIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiNjE4XFxcIj42MTg8L2E+fElubGluZSBSZWNpcGUgRGVzZXJpYWxpc2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjE5XFxcIj42MTk8L2E+fElkZW50aWZpZXIgVHlwZXMgTm90IFNldCBGb3IgRW50aXR5fCAgfCB8IDxhIG5hbWU9XFxcIjYyMFxcXCI+NjIwPC9hPnxDYW5ub3QgRGVsZXRlIEFsbCBDbGllbnQgRGVmaW5lZCBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI2NTBcXFwiPjY1MDwvYT58VGhlIE9yZGVyIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTRcXFwiPjY1NDwvYT58VGhlIEFsbG9jYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjY1NVxcXCI+NjU1PC9hPnxDYW5ub3QgYnVpbGQgdGhlIGZ4IGZvcndhcmQgdGFyZ2V0IHdpdGggdGhlIGdpdmVuIGhvbGRpbmdzLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTZcXFwiPjY1NjwvYT58R3JvdXAgZG9lcyBub3QgY29udGFpbiBleHBlY3RlZCBlbnRpdGllcy58ICB8IHwgPGEgbmFtZT1cXFwiNjY1XFxcIj42NjU8L2E+fERlc3RpbmF0aW9uIGRpcmVjdG9yeSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjY3XFxcIj42Njc8L2E+fFJlbGF0aW9uIGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjcyXFxcIj42NzI8L2E+fENvdWxkIG5vdCByZXRyaWV2ZSBmaWxlIGNvbnRlbnRzfCAgfCB8IDxhIG5hbWU9XFxcIjY3M1xcXCI+NjczPC9hPnxNaXNzaW5nIGVudGl0bGVtZW50cyBmb3IgZW50aXRpZXMgaW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiNjc0XFxcIj42NzQ8L2E+fE5leHQgQmVzdCBBY3Rpb24gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY3NlxcXCI+Njc2PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIG5vdCBkZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjY3N1xcXCI+Njc3PC9hPnxJbnZhbGlkIGVudGl0eSBpZGVudGlmaWVyIGZvciByZWxhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI2ODFcXFwiPjY4MTwvYT58U29ydGluZyBieSBzcGVjaWZpZWQgZmllbGQgbm90IHN1cHBvcnRlZHxPbmUgb3IgbW9yZSBvZiB0aGUgcHJvdmlkZWQgZmllbGRzIHRvIG9yZGVyIGJ5IHdlcmUgZWl0aGVyIGludmFsaWQgb3Igbm90IHN1cHBvcnRlZC4gfCB8IDxhIG5hbWU9XFxcIjY4MlxcXCI+NjgyPC9hPnxUb28gbWFueSBmaWVsZHMgdG8gc29ydCBieXxUaGUgbnVtYmVyIG9mIGZpZWxkcyB0byBzb3J0IHRoZSBkYXRhIGJ5IGV4Y2VlZHMgdGhlIG51bWJlciBhbGxvd2VkIGJ5IHRoZSBlbmRwb2ludCB8IHwgPGEgbmFtZT1cXFwiNjg0XFxcIj42ODQ8L2E+fFNlcXVlbmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODVcXFwiPjY4NTwvYT58U2VxdWVuY2UgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjg2XFxcIj42ODY8L2E+fE5vbi1jeWNsaW5nIHNlcXVlbmNlIGhhcyBiZWVuIGV4aGF1c3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODdcXFwiPjY4NzwvYT58TGVnYWwgRW50aXR5IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjg4XFxcIj42ODg8L2E+fExlZ2FsIEVudGl0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg5XFxcIj42ODk8L2E+fFRoZSBzdXBwbGllZCBwYWdpbmF0aW9uIHRva2VuIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkwXFxcIj42OTA8L2E+fFByb3BlcnR5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTFcXFwiPjY5MTwvYT58TXVsdGlwbGUgVGF4LWxvdHMgRm9yIEN1cnJlbmN5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTJcXFwiPjY5MjwvYT58VGhpcyBlbmRwb2ludCBkb2VzIG5vdCBzdXBwb3J0IGltcGVyc29uYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjkzXFxcIj42OTM8L2E+fEVudGl0eSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJlbGF0aW9uc2hpcHwgIHwgfCA8YSBuYW1lPVxcXCI2OTRcXFwiPjY5NDwvYT58UmVsYXRpb25zaGlwIFZhbGlkYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI2OTVcXFwiPjY5NTwvYT58UmVsYXRpb25zaGlwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTdcXFwiPjY5NzwvYT58RGVyaXZlZCBQcm9wZXJ0eSBGb3JtdWxhIE5vIExvbmdlciBWYWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI2OThcXFwiPjY5ODwvYT58U3RvcnkgaXMgbm90IGF2YWlsYWJsZXwgIHwgfCA8YSBuYW1lPVxcXCI3MDNcXFwiPjcwMzwvYT58Q29ycG9yYXRlIEFjdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI3MjBcXFwiPjcyMDwvYT58VGhlIHByb3ZpZGVkIHNvcnQgYW5kIGZpbHRlciBjb21iaW5hdGlvbiBpcyBub3QgdmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIxXFxcIj43MjE8L2E+fEEyQiBnZW5lcmF0aW9uIGZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjJcXFwiPjcyMjwvYT58QWdncmVnYXRlZCBSZXR1cm4gQ2FsY3VsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI3MjNcXFwiPjcyMzwvYT58Q3VzdG9tIEVudGl0eSBEZWZpbml0aW9uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNzI0XFxcIj43MjQ8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzI1XFxcIj43MjU8L2E+fFRoZSBQbGFjZW1lbnQgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyNlxcXCI+NzI2PC9hPnxUaGUgRXhlY3V0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjdcXFwiPjcyNzwvYT58VGhlIEJsb2NrIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjhcXFwiPjcyODwvYT58VGhlIFBhcnRpY2lwYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyOVxcXCI+NzI5PC9hPnxUaGUgUGFja2FnZSByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMwXFxcIj43MzA8L2E+fFRoZSBPcmRlckluc3RydWN0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzJcXFwiPjczMjwvYT58Q3VzdG9tIEVudGl0eSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczM1xcXCI+NzMzPC9hPnxDdXN0b20gRW50aXR5IElkZW50aWZpZXIgYWxyZWFkeSBpbiB1c2UufCAgfCB8IDxhIG5hbWU9XFxcIjczNVxcXCI+NzM1PC9hPnxDYWxjdWxhdGlvbiBGYWlsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjczNlxcXCI+NzM2PC9hPnxBbiBleHBlY3RlZCBrZXkgb24gSHR0cFJlc3BvbnNlIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczN1xcXCI+NzM3PC9hPnxBIHJlcXVpcmVkIGZlZSBkZXRhaWwgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzM4XFxcIj43Mzg8L2E+fFplcm8gcm93cyB3ZXJlIHJldHVybmVkIGZyb20gTHVtaW5lc2NlfCAgfCB8IDxhIG5hbWU9XFxcIjczOVxcXCI+NzM5PC9hPnxQcm92aWRlZCBXZWVrZW5kIE1hc2sgd2FzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzQyXFxcIj43NDI8L2E+fEN1c3RvbSBFbnRpdHkgZmllbGRzIGRvIG5vdCBtYXRjaCB0aGUgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3NDZcXFwiPjc0NjwvYT58VGhlIHByb3ZpZGVkIHNlcXVlbmNlIGlzIG5vdCB2YWxpZC58ICB8IHwgPGEgbmFtZT1cXFwiNzUxXFxcIj43NTE8L2E+fFRoZSB0eXBlIG9mIHRoZSBDdXN0b20gRW50aXR5IGlzIGRpZmZlcmVudCB0aGFuIHRoZSB0eXBlIHByb3ZpZGVkIGluIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTJcXFwiPjc1MjwvYT58THVtaW5lc2NlIHByb2Nlc3MgcmV0dXJuZWQgYW4gZXJyb3IufCAgfCB8IDxhIG5hbWU9XFxcIjc1M1xcXCI+NzUzPC9hPnxGaWxlIG5hbWUgb3IgY29udGVudCBpbmNvbXBhdGlibGUgd2l0aCBvcGVyYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjc1NVxcXCI+NzU1PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBEcml2ZSBpcyBub3QgYXMgZXhwZWN0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1N1xcXCI+NzU3PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBMdW1pbmVzY2UgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NThcXFwiPjc1ODwvYT58THVtaW5lc2NlIHRpbWVkIG91dC58ICB8IHwgPGEgbmFtZT1cXFwiNzYzXFxcIj43NjM8L2E+fEludmFsaWQgTHVzaWQgRW50aXR5IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCI3NjhcXFwiPjc2ODwvYT58RmVlIHJ1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3NjlcXFwiPjc2OTwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgYmFzZSBjdXJyZW5jeSBvZiBhIHBvcnRmb2xpbyB3aXRoIHRyYW5zYWN0aW9ucyBsb2FkZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzcxXFxcIj43NzE8L2E+fFRyYW5zYWN0aW9uIGNvbmZpZ3VyYXRpb24gc291cmNlIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI3NzRcXFwiPjc3NDwvYT58Q29tcGxpYW5jZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc1XFxcIj43NzU8L2E+fEZ1bmQgYWNjb3VudGluZyBkb2N1bWVudCBjYW5ub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NzhcXFwiPjc3ODwvYT58VW5hYmxlIHRvIGxvb2sgdXAgRlggcmF0ZSBmcm9tIHRyYWRlIGNjeSB0byBwb3J0Zm9saW8gY2N5IGZvciBzb21lIG9mIHRoZSB0cmFkZXMufCAgfCB8IDxhIG5hbWU9XFxcIjc4MlxcXCI+NzgyPC9hPnxUaGUgUHJvcGVydHkgZGVmaW5pdGlvbiBkYXRhVHlwZSBpcyBub3QgbWF0Y2hpbmcgdGhlIGRlcml2YXRpb24gZm9ybXVsYSBkYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCI3ODNcXFwiPjc4MzwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZG9tYWluIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlcml2ZWQgcHJvcGVydGllc3wgIHwgfCA8YSBuYW1lPVxcXCI3ODhcXFwiPjc4ODwvYT58Q29tcGxpYW5jZSBydW4gbm90IGZvdW5kIGZhaWx1cmUufCAgfCB8IDxhIG5hbWU9XFxcIjc5MFxcXCI+NzkwPC9hPnxDdXN0b20gRW50aXR5IGhhcyBtaXNzaW5nIG9yIGludmFsaWQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNzkxXFxcIj43OTE8L2E+fEN1c3RvbSBFbnRpdHkgZGVmaW5pdGlvbiBhbHJlYWR5IGV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI3OTJcXFwiPjc5MjwvYT58Q29tcGxpYW5jZSBQcm9wZXJ0eUtleSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTNcXFwiPjc5MzwvYT58Q29tcGxpYW5jZSBDcml0ZXJpYSBWYWx1ZSBmb3IgbWF0Y2hpbmcgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzk1XFxcIj43OTU8L2E+fENhbm5vdCBkZWxldGUgaWRlbnRpZmllciBkZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjc5NlxcXCI+Nzk2PC9hPnxUYXggcnVsZSBzZXQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTdcXFwiPjc5NzwvYT58QSB0YXggcnVsZSBzZXQgd2l0aCB0aGlzIGlkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI3OThcXFwiPjc5ODwvYT58TXVsdGlwbGUgcnVsZSBzZXRzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBrZXkgYXJlIGFwcGxpY2FibGUufCAgfCB8IDxhIG5hbWU9XFxcIjc5OVxcXCI+Nzk5PC9hPnxUaGUgcmVxdWVzdCBtdXN0IGNvbnRhaW4gYSBkYXRlIG9yIGRpYXJ5IGVudHJ5LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDBcXFwiPjgwMDwvYT58Q2FuIG5vdCB1cHNlcnQgYW4gaW5zdHJ1bWVudCBldmVudCBvZiB0aGlzIHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgwMVxcXCI+ODAxPC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODAyXFxcIj44MDI8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGlzIG1pc3Npbmcgc2FsaWVudCBpbmZvcm1hdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODAzXFxcIj44MDM8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgwNFxcXCI+ODA0PC9hPnxTb21lIGRhdGEgcmVxdWVzdGVkIGRvZXMgbm90IGZvbGxvdyB0aGUgb3JkZXIgZ3JhcGggYXNzdW1wdGlvbnMufCAgfCB8IDxhIG5hbWU9XFxcIjgwNVxcXCI+ODA1PC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCB0eXBlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDZcXFwiPjgwNjwvYT58VGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwN1xcXCI+ODA3PC9hPnxUaGUgZGVmYXVsdCB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA4XFxcIj44MDg8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODExXFxcIj44MTE8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBvcmRlci58ICB8IHwgPGEgbmFtZT1cXFwiODEyXFxcIj44MTI8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBhbGxvY2F0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTNcXFwiPjgxMzwvYT58Q2hhcnQgb2YgQWNjb3VudHMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTRcXFwiPjgxNDwvYT58QWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNVxcXCI+ODE1PC9hPnxBYm9yIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE2XFxcIj44MTY8L2E+fEFib3IgQ29uZmlndXJhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxN1xcXCI+ODE3PC9hPnxSZWNvbmNpbGlhdGlvbiBtYXBwaW5nIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MThcXFwiPjgxODwvYT58QXR0cmlidXRlIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxOVxcXCI+ODE5PC9hPnxSZWNvbmNpbGlhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMFxcXCI+ODIwPC9hPnxDdXN0b2RpYW4gQWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMVxcXCI+ODIxPC9hPnxBbGxvY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiODIyXFxcIj44MjI8L2E+fFJlY29uY2lsaWF0aW9uIHJ1biBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODIzXFxcIj44MjM8L2E+fFJlY29uY2lsaWF0aW9uIGJyZWFrIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MjRcXFwiPjgyNDwvYT58RW50aXR5IGxpbmsgdHlwZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODI4XFxcIj44Mjg8L2E+fEFkZHJlc3Mga2V5IGRlZmluaXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjlcXFwiPjgyOTwvYT58Q29tcGxpYW5jZSB0ZW1wbGF0ZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzMFxcXCI+ODMwPC9hPnxBY3Rpb24gbm90IHN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI4MzFcXFwiPjgzMTwvYT58UmVmZXJlbmNlIGxpc3Qgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzJcXFwiPjgzMjwvYT58UG9zdGluZyBNb2R1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzNcXFwiPjgzMzwvYT58VGhlIHR5cGUgb2YgcGFyYW1ldGVyIHByb3ZpZGVkIGRpZCBub3QgbWF0Y2ggdGhhdCByZXF1aXJlZCBieSB0aGUgY29tcGxpYW5jZSBydWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzRcXFwiPjgzNDwvYT58VGhlIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgYSBydWxlIGRpZCBub3QgbWF0Y2ggdGhvc2UgcmVxdWlyZWQgYnkgaXRzIHRlbXBsYXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzVcXFwiPjgzNTwvYT58VGhlIGVudGl0eSBoYXMgYSBwcm9wZXJ0eSBpbiBhIGRvbWFpbiB0aGF0IGlzIG5vdCBzdXBwcnRlZCBmb3IgdGhhdCBlbnRpdHkgdHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiODM2XFxcIj44MzY8L2E+fFN0cnVjdHVyZWQgcmVzdWx0IGRhdGEgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzdcXFwiPjgzNzwvYT58RGlhcnkgZW50cnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzhcXFwiPjgzODwvYT58RGlhcnkgZW50cnkgY291bGQgbm90IGJlIGNyZWF0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgzOVxcXCI+ODM5PC9hPnxEaWFyeSBlbnRyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODYxXFxcIj44NjE8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4NjlcXFwiPjg2OTwvYT58Q29uZmxpY3RpbmcgaW5zdHJ1bWVudCBwcm9wZXJ0aWVzIGluIGJhdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzBcXFwiPjg3MDwvYT58Q29tcGxpYW5jZSBydW4gc3VtbWFyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODcxXFxcIj44NzE8L2E+fFRoZSBzcGVjaWZpZWQgaW1wZXJzb25hdGVkIHVzZXIgZG9lcyBub3QgZXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiODc0XFxcIj44NzQ8L2E+fFByb3ZpZGVkIFByb3BlcnR5IERvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBlbnRpdHkgZmlsdGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzVcXFwiPjg3NTwvYT58Q2Fubm90IERlbGV0ZSBTeXN0ZW0gUmVmZXJlbmNlIExpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjg3NlxcXCI+ODc2PC9hPnxDbGVhcmRvd24gTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODc5XFxcIj44Nzk8L2E+fFBvcnRmb2xpb3MgZG8gbm90IGhhdmUgdGhlIHNhbWUgYmFzZSBjdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI4ODBcXFwiPjg4MDwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjb21wbGlhbmNlIGV4cHJlc3Npb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg4MVxcXCI+ODgxPC9hPnxCbG9jayBvdmVycGxhY2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODJcXFwiPjg4MjwvYT58T3JkZXIgbm90IGFwcHJvdmVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODNcXFwiPjg4MzwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgc2hhcmVkIGZpZWxkcyBvZiBhIGJsb2NrIHdpdGggYXNzb2NpYXRlZCBvcmRlcnMufCAgfCB8IDxhIG5hbWU9XFxcIjg4NlxcXCI+ODg2PC9hPnxDYW5ub3QgbG9jayB0aGUgcGVyaW9kLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODdcXFwiPjg4NzwvYT58Q2Fubm90IGFwcGx5IGNsZWFyIGRvd24gbW9kdWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODhcXFwiPjg4ODwvYT58Q2Fubm90IHVwc2VydCBJbnN0cnVtZW50IEV2ZW50IEluc3RydWN0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODlcXFwiPjg4OTwvYT58Q2Fubm90IHJlYWQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODk1XFxcIj44OTU8L2E+fFRoZSBDYXBpdGFsIFJhdGlvIENhbGN1bGF0aW9uIElzIFdyb25nLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTBcXFwiPjkxMDwvYT58Q2Fubm90IHVwZGF0ZSBhIGJsb2NrIHJlZmVyZW5jZWQgYnkgYSBwbGFjZW1lbnQufCAgfCB8IDxhIG5hbWU9XFxcIjkxMVxcXCI+OTExPC9hPnxBIEZ1bmQgdGhhdCByZWZlcmVuY2VzIHRoaXMgQWJvciBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTEyXFxcIj45MTI8L2E+fENhbm5vdCBhZGQgZGVjaXNpb24gdG8gU3RhZ2VkIE1vZGlmaWNhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTEzXFxcIj45MTM8L2E+fFRoZSBTdGFnZWQgTW9kaWZpY2F0aW9uIGNvdWxkIG5vdCBiZSBhcHBsaWVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTRcXFwiPjkxNDwvYT58QWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE1XFxcIj45MTU8L2E+fENhbm5vdCB1cHNlcnQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcHJvcGVydHkgaW4gb25lIHJlcXVlc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkxNlxcXCI+OTE2PC9hPnxQbGFjZW1lbnQgYW5kIGRpcmVjdCBkZXNjZW5kZW50cyBoYXZlIG1vcmUgZXhlY3V0ZWQgcXVhbnRpdHkgdGhhbiB0b3RhbCBwbGFjZW1lbnQgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjkxN1xcXCI+OTE3PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBFbnRyeVR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOFxcXCI+OTE4PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IGluIHRoaXMgU3RhdGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOVxcXCI+OTE5PC9hPnxQbGFjZW1lbnQgY291bGQgbm90IGJlIGNhbmNlbGxlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTIwXFxcIj45MjA8L2E+fFNoYXJlIENsYXNzIG5vdCBjb25maWd1cmVkIGluIEZ1bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTIxXFxcIj45MjE8L2E+fFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleSBub3QgY29uZmlndXJlZCBpbiBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiOTIyXFxcIj45MjI8L2E+fENvdWxkIG5vdCB1cGRhdGUgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjkyM1xcXCI+OTIzPC9hPnxNdWx0aXBsZSBzZXRzIG9mIFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleXMgY29uZmlndXJlZCBhY3Jvc3MgdGhlIFBvcnRmb2xpb3Mgb2YgYSBGdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjRcXFwiPjkyNDwvYT58T25lIG9yIG1vcmUgbWF0cml4IGNlbGxzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbWF0cml4LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjVcXFwiPjkyNTwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBwcm92aWRlZCBtYXRyaXggZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTI2XFxcIj45MjY8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjdcXFwiPjkyNzwvYT58TWF0cml4IGRlZmluaXRpb24gY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkyOFxcXCI+OTI4PC9hPnxEYXRhVHlwZSB3aXRoIElkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjlcXFwiPjkyOTwvYT58U3F1YXJlIG1hdHJpeCBpcyBpbmNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzBcXFwiPjkzMDwvYT58QSBjb25kaXRpb25hbCBsaWNlbnNlIHRlcm0gaGFzIGJlZW4gZXhjZWVkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMVxcXCI+OTMxPC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgcmVxdWVzdGVkIGlzIG5vdCBpbnRlbmRlZCBmb3IgdGhlIGVudGl0eSBwcm92aWRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTMyXFxcIj45MzI8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzNcXFwiPjkzMzwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBoYXMgYSBwcm9wZXJ0eSBub3QgYWxsb3dlZCBieSB0aGUgc3BlY2lmaWVkIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzRcXFwiPjkzNDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBoYXZlIGEgbWFuZGF0b3J5IGlkZW50aWZpZXIgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM1XFxcIj45MzU8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGFuIGlkZW50aWZpZXIgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM2XFxcIj45MzY8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCBpbmNsdWRlZCBhbiBhbGlhcyBvciBzb3J0LWJ5IGF0dHJpYnV0ZSB0aGF0IHdhcyBub3Qgb24gdGhlIGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkzN1xcXCI+OTM3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5MzhcXFwiPjkzODwvYT58VGhlIG5ldyBDbG9zZWQgUGVyaW9kIHdvdWxkIGNhdXNlIHRoZSBUaW1lbGluZSB0byBoYXZlIG5vbi1jb250aWd1b3VzIENsb3NlZCBQZXJpb2RzfCAgfCB8IDxhIG5hbWU9XFxcIjkzOVxcXCI+OTM5PC9hPnxCbG9ja2VkIGJ5IGEgTmV0d29yayBab25lfCAgfCB8IDxhIG5hbWU9XFxcIjk0MFxcXCI+OTQwPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDFcXFwiPjk0MTwvYT58T3JkZXIgbm90IGNvbXBsaWFudC58ICB8IHwgPGEgbmFtZT1cXFwiOTQyXFxcIj45NDI8L2E+fEFjdGlvbiB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBkZXBlbmRlbmN5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NDRcXFwiPjk0NDwvYT58RGVyaXZlZCBQcm9wZXJ0eSBjYWxjdWxhdGlvbiBub3QgY29tcGxldGUufCAgfCB8IDxhIG5hbWU9XFxcIjk0NVxcXCI+OTQ1PC9hPnxEZXJpdmVkIFByb3BlcnR5IGlzIG5vdCBmaWx0ZXJhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDZcXFwiPjk0NjwvYT58VGhlIGNvbmRpdGlvbnMgcHJvdmlkZWQgaGF2ZSBvbmUgb3IgbW9yZSBlcnJvcnMufCAgfCB8IDxhIG5hbWU9XFxcIjk0N1xcXCI+OTQ3PC9hPnxUaGUgcHJvcGVydHkvaWRlbnRpZmllciBkb21haW4gYW5kIGVudGl0eSBkb21haW4gZG8gbm90IG1hdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDhcXFwiPjk0ODwvYT58SW52YWxpZCBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDlcXFwiPjk0OTwvYT58RmlsdGVyYWJsZSBEZXJpdmVkIFByb3BlcnR5IGxpbWl0IHJlYWNoZWQufCAgfCB8IDxhIG5hbWU9XFxcIjk1MFxcXCI+OTUwPC9hPnxJbnZlc3RvciBSZWNvcmQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI5NTFcXFwiPjk1MTwvYT58SW52ZXN0b3IgUmVjb3JkIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTJcXFwiPjk1MjwvYT58SW52ZXN0bWVudCBBY2NvdW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUzXFxcIj45NTM8L2E+fEludmVzdG1lbnQgQWNjb3VudCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTU0XFxcIj45NTQ8L2E+fENvdWxkIE5vdCBTd2VlcCBCbG9ja3wgIHwgfCA8YSBuYW1lPVxcXCI5NTVcXFwiPjk1NTwvYT58RW50aXR5IFVuaXF1ZSBJZCBoYXMgdGhlIHdyb25nIGZvcm1hdHwgIHwgfCA8YSBuYW1lPVxcXCI5NTZcXFwiPjk1NjwvYT58UG9zdCBDbG9zZSBBY3Rpdml0eSBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk1N1xcXCI+OTU3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NThcXFwiPjk1ODwvYT58SW52YWxpZCBTZXR0bGVtZW50IEluc3RydWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCI5NTlcXFwiPjk1OTwvYT58T3JkZXIgcmVxdWlyZXMgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjk2MFxcXCI+OTYwPC9hPnxJbnZhbGlkIERhdGFQb2ludCBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjk2MVxcXCI+OTYxPC9hPnxJbnZhbGlkIFJlbGF0aW9uYWwgRGF0YXNldCBGaWVsZCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2MlxcXCI+OTYyPC9hPnxSZWxhdGlvbmFsIERhdGFzZXQgRGVmaW5pdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI5NjNcXFwiPjk2MzwvYT58VGltZWxpbmUgQm9va21hcmsgTm90IEluIE9wZW4gUGVyaW9kfCAgfCB8IDxhIG5hbWU9XFxcIjk2NFxcXCI+OTY0PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgc3BlY2lmaWVkIGlkZW50aWZpZXJzIGJ1dCB0aGUgZW50aXR5IGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY1XFxcIj45NjU8L2E+fFRoZSBzb3J0IGJ5IHByb3ZpZGVkIGhhcyBvbmUgb3IgbW9yZSBlcnJvcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY2XFxcIj45NjY8L2E+fEludmFsaWQgQ3VzdG9tIERhdGEgTW9kZWwgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjdcXFwiPjk2NzwvYT58UnVsZSBzZXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIENoZWNrIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY4XFxcIj45Njg8L2E+fFRoZSBDbG9zZWQgUGVyaW9kIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTY5XFxcIj45Njk8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIFN0b3AgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MFxcXCI+OTcwPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBMaW1pdCBQcmljZS58ICB8IHwgPGEgbmFtZT1cXFwiOTcxXFxcIj45NzE8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGUgY3VycmVudCBUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzRcXFwiPjk3NDwvYT58Q2Fubm90IFBsYWNlQmxvY2tzIGFnYWluc3QgYW4gXFwnVW5zb2xpY2l0ZWRcXCcgQmxvY2sgKGJsb2NrIGNvbnRhaW5pbmcgMCBPcmRlcnMpLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzVcXFwiPjk3NTwvYT58Tm8gUG9ydGZvbGlvIEdyb3VwIFNlbGVjdGVkfCAgfCB8IDxhIG5hbWU9XFxcIjk3NlxcXCI+OTc2PC9hPnxBbWJpZ3VvdXMgU2NvcGV8ICB8IHwgPGEgbmFtZT1cXFwiOTc3XFxcIj45Nzc8L2E+fFRoZSBwcm92aWRlZCBlbnRpdHkgbWF0Y2ggcmVxdWVzdCBpcyBub3QgdmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTc4XFxcIj45Nzg8L2E+fEludmFsaWQgVHJhbnNmZXJ8ICB8IHwgPGEgbmFtZT1cXFwiOTc5XFxcIj45Nzk8L2E+fFRoZSBuYW1lZCBzZXJpZXMgbWF0Y2hpbmcgcGF0dGVybiBpcyBub3QgdXNhYmxlIG9uIHRoZSBkYXRhc2V0IGF0IHRoZSByZXF1ZXN0ZWQgdGltZXwgIHwgXG4gKlxuICogQ29udGFjdDogaW5mb0BmaW5ib3VybmUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLFxuICAgICAgICAgSHR0cFJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBQYXJhbWV0ZXJDb2RlYywgSHR0cENvbnRleHQgXG4gICAgICAgIH0gICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2VuY29kZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9iYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2UnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9iYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXNwb25zZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC9jcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2RlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZVJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVsZXRlZEVudGl0eVJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvZGVsZXRlZEVudGl0eVJlc3BvbnNlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgT3BlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWwvb3BlcmF0aW9uJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheERhdGFzZXQgfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhEYXRhc2V0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZVJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91cHNlcnRXaXRoaG9sZGluZ1RheFJhdGVSZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uL21vZGVsL3dpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBXaXRoaG9sZGluZ1RheERhdGFzZXQgfSBmcm9tICcuLi9tb2RlbC93aXRoaG9sZGluZ1RheERhdGFzZXQnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMgfSBmcm9tICcuLi9tb2RlbC93aXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hEZWxldGVXaXRoaG9sZGluZ1RheFJhdGVzUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBTY29wZSBvZiB0aGUgcmF0ZSBkYXRhc2V0XFwmIzM5O3MgcmVsYXRpb25hbCBkYXRhc2V0IGRlZmluaXRpb24uICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIENvZGUgb2YgdGhlIHJhdGUgZGF0YXNldFxcJiMzOTtzIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdGUgcm93cyB0byBkZWxldGUsIGtleWVkIGJ5IGEgY29ycmVsYXRpb24gaWQgZWNob2VkIGJhY2sgaW4gdGhlIHJlc3BvbnNlLiAqL1xuICAgIHJlcXVlc3RCb2R5OiB7IFtrZXk6IHN0cmluZ106IERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZVJlcXVlc3Q7IH07XG4gICAgLyoqIEF0b21pYyBvciBQYXJ0aWFsOyBkZWZhdWx0cyB0byBBdG9taWMuIEluIFBhcnRpYWwgbW9kZSBmYWlsdXJlcyBhcmUgcmV0dXJuZWQgICAgICAgICAgICAgIGluIHRoZSByZXNwb25zZSBib2R5IHdpdGggYSAyMDAgc3RhdHVzLiAqL1xuICAgIHN1Y2Nlc3NNb2RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoVXBzZXJ0V2l0aGhvbGRpbmdUYXhSYXRlc1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgU2NvcGUgb2YgdGhlIHJhdGUgZGF0YXNldFxcJiMzOTtzIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBDb2RlIG9mIHRoZSByYXRlIGRhdGFzZXRcXCYjMzk7cyByZWxhdGlvbmFsIGRhdGFzZXQgZGVmaW5pdGlvbi4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXRlIHJvd3MgdG8gdXBzZXJ0LCBrZXllZCBieSBhIGNvcnJlbGF0aW9uIGlkIGVjaG9lZCBiYWNrIGluIHRoZSByZXNwb25zZS4gKi9cbiAgICByZXF1ZXN0Qm9keTogeyBba2V5OiBzdHJpbmddOiBVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVSZXF1ZXN0OyB9O1xuICAgIC8qKiBBdG9taWMgb3IgUGFydGlhbDsgZGVmYXVsdHMgdG8gQXRvbWljLCBiZWNhdXNlIGEgcGFydGx5IGxvYWRlZCBmZWVkIHNpbGVudGx5ICAgICAgICAgICAgICB1bmRlci13aXRoaG9sZHMuIEluIFBhcnRpYWwgbW9kZSBmYWlsdXJlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIGJvZHkgd2l0aCBhIDIwMCBzdGF0dXMuICovXG4gICAgc3VjY2Vzc01vZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlLCBjb2RlIGFuZCBtYXRjaGluZyBkaW1lbnNpb25zIG9mIGVhY2ggb2YgdGhlIHR3byBkYXRhc2V0cyB0byBjcmVhdGUuICovXG4gICAgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0OiBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24gdG8gYmUgZGVsZXRlZC4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29kZSBvZiB0aGUgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24gdG8gYmUgZGVsZXRlZC4gVG9nZXRoZXIgd2l0aCB0aGUgc2NvcGUgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgZGF0YXNldCBkZWZpbml0aW9uIHRvIGJlIGRlbGV0ZWQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIGRhdGFzZXQgZGVmaW5pdGlvbiB0byBiZSBkZWxldGVkLiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGRlZmluaXRpb24uICovXG4gICAgY29kZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbi4gVG9nZXRoZXIgd2l0aCB0aGUgc2NvcGUgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIGFzQXQgZGF0ZXRpbWUgYXQgd2hpY2ggdG8gcmV0cmlldmUgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgZGF0YXNldCBkZWZpbml0aW9uLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBkYXRhc2V0IGRlZmluaXRpb24uIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgZGVmaW5pdGlvbi4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIHJldHJpZXZlIHRoZSBkYXRhc2V0IGRlZmluaXRpb24uIERlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIGxpc3QgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9ucy4gRGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbnM7IHRoaXMgdmFsdWUgaXMgICAgICAgICAgICAgIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuIElmIGEgcGFnaW5hdGlvbiB0b2tlbiBpcyBwcm92aWRlZCwgdGhlIGZpbHRlciBhbmQgYXNBdCBmaWVsZHMgbXVzdCBub3QgaGF2ZSAgICAgICAgICAgICAgY2hhbmdlZCBzaW5jZSB0aGUgb3JpZ2luYWwgcmVxdWVzdC4gKi9cbiAgICBwYWdlPzogc3RyaW5nO1xuICAgIC8qKiBXaGVuIHBhZ2luYXRpbmcsIGxpbWl0IHRoZSByZXN1bHRzIHRvIHRoaXMgbnVtYmVyLiBEZWZhdWx0cyB0byAxMDAgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICAvKiogRXhwcmVzc2lvbiB0byBmaWx0ZXIgdGhlIHJlc3VsdHMuIEZvciBleGFtcGxlLCB0byBmaWx0ZXIgb24gdGhlIHNjb3BlLCBzcGVjaWZ5ICAgICAgICAgICAgICBcXCZxdW90O2lkLlNjb3BlIGVxIFxcJiMzOTtXaXRoaG9sZGluZ1RheFxcJiMzOTtcXCZxdW90OywgYW5kIHRvIGZpbHRlciBvbiB0aGUgY29kZSwgc3BlY2lmeSBcXCZxdW90O2lkLkNvZGUgZXEgXFwmIzM5O1VLLUxJRkUtQkxBR0FCXFwmIzM5O1xcJnF1b3Q7LiBGb3IgbW9yZSAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgZmlsdGVyaW5nIHJlc3VsdHMsIHNlZSAgICAgICAgICAgICAgaHR0cHM6Ly9zdXBwb3J0Lmx1c2lkLmNvbS9kb2NzL2ZpbHRlcmluZy1pbmZvcm1hdGlvbi1yZXRyaWV2ZWQtZnJvbS1sdXNpZC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG4gICAgLyoqIEEgbGlzdCBvZiBmaWVsZCBuYW1lcyBvciBwcm9wZXJ0aWVzIHRvIHNvcnQgYnksIGVhY2ggc3VmZml4ZWQgYnkgXFwmcXVvdDsgQVNDXFwmcXVvdDsgb3IgXFwmcXVvdDsgREVTQ1xcJnF1b3Q7LiAqL1xuICAgIHNvcnRCeT86IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIGxpc3QgdGhlIGRhdGFzZXQgZGVmaW5pdGlvbnMuIERlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZWFjaCBkZWZpbml0aW9uIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbiAgICAvKiogVGhlIHBhZ2luYXRpb24gdG9rZW4gdG8gdXNlIHRvIGNvbnRpbnVlIGxpc3RpbmcgZGF0YXNldCBkZWZpbml0aW9uczsgdGhpcyB2YWx1ZSBpcyByZXR1cm5lZCAgICAgICAgICAgICAgZnJvbSB0aGUgcHJldmlvdXMgY2FsbC4gSWYgYSBwYWdpbmF0aW9uIHRva2VuIGlzIHByb3ZpZGVkLCB0aGUgZmlsdGVyIGFuZCBhc0F0IGZpZWxkcyBtdXN0IG5vdCBoYXZlIGNoYW5nZWQgICAgICAgICAgICAgIHNpbmNlIHRoZSBvcmlnaW5hbCByZXF1ZXN0LiAqL1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIFdoZW4gcGFnaW5hdGluZywgbGltaXQgdGhlIHJlc3VsdHMgdG8gdGhpcyBudW1iZXIuIERlZmF1bHRzIHRvIDEwMCBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIC8qKiBFeHByZXNzaW9uIHRvIGZpbHRlciB0aGUgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHRvIGZpbHRlciBvbiB0aGUgc2NvcGUsIHNwZWNpZnkgICAgICAgICAgICAgIFxcJnF1b3Q7c2NvcGUgZXEgXFwmIzM5O1dpdGhob2xkaW5nVGF4XFwmIzM5O1xcJnF1b3Q7LCBhbmQgdG8gZmlsdGVyIG9uIHRoZSBjb2RlLCBzcGVjaWZ5IFxcJnF1b3Q7Y29kZSBlcSBcXCYjMzk7d2h0LW1haW4tcmF0ZXNcXCYjMzk7XFwmcXVvdDsuIEZvciBtb3JlICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBmaWx0ZXJpbmcgcmVzdWx0cywgc2VlICAgICAgICAgICAgICBodHRwczovL3N1cHBvcnQubHVzaWQuY29tL2RvY3MvZmlsdGVyaW5nLWluZm9ybWF0aW9uLXJldHJpZXZlZC1mcm9tLWx1c2lkLiAqL1xuICAgIGZpbHRlcj86IHN0cmluZztcbiAgICAvKiogQSBsaXN0IG9mIGZpZWxkIG5hbWVzIG9yIHByb3BlcnRpZXMgdG8gc29ydCBieSwgZWFjaCBzdWZmaXhlZCBieSBcXCZxdW90OyBBU0NcXCZxdW90OyBvciBcXCZxdW90OyBERVNDXFwmcXVvdDsuICovXG4gICAgc29ydEJ5PzogQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBkYXRhc2V0IGRlZmluaXRpb24gdG8gYW1lbmQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIGRhdGFzZXQgZGVmaW5pdGlvbiB0byBhbWVuZC4gVG9nZXRoZXIgd2l0aCB0aGUgc2NvcGUgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBkZWZpbml0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIGpzb24gcGF0Y2ggZG9jdW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2OTAyLiAqL1xuICAgIG9wZXJhdGlvbjogQXJyYXk8T3BlcmF0aW9uPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbi4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29kZSBvZiB0aGUgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24uIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb21wbGV0ZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbiB0byBjcmVhdGUgb3IgcmVwbGFjZS4gKi9cbiAgICB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0OiBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0O1xufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdpdGhob2xkaW5nVGF4U2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly93d3cubHVzaWQuY29tL2FwaSc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QmFzZVBhdGggPSBBcnJheS5pc0FycmF5KGJhc2VQYXRoKSA/IGJhc2VQYXRoWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpcnN0QmFzZVBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVyIHx8IG5ldyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMoKTtcbiAgICB9XG5cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtcyhodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZTogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlPzogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueVtdKS5mb3JFYWNoKCBlbGVtID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCBlbGVtLCBrZXkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksICh2YWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaCggayA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMsIHZhbHVlW2tdLCBrZXkgIT0gbnVsbCA/IGAke2tleX0uJHtrfWAgOiBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFQVJMWSBBQ0NFU1NdIEJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlczogQmF0Y2ggZGVsZXRlIFdpdGhob2xkaW5nIFRheCByYXRlIHJvd3MgZnJvbSBhIHJhdGUgZGF0YXNldC5cbiAgICAgKiBBbHNvIGhvdyBhIHJhdGUgd2l0aCBubyByZXBsYWNlbWVudCBpcyBleHBpcmVkLCB0aGVyZSBiZWluZyBubyBlZmZlY3RpdmVUbyBmaWVsZC4gRGVsZXRlcyBhcmUgIGJpdGVtcG9yYWwsIHNvIHJvd3Mgc3RheSByZWFkYWJsZSBhdCBhIHByaW9yIGFzQXQuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlcyhyZXF1ZXN0UGFyYW1ldGVycz86IEJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxCYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2U+O1xuICAgIHB1YmxpYyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgYmF0Y2hEZWxldGVXaXRoaG9sZGluZ1RheFJhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogQmF0Y2hEZWxldGVXaXRoaG9sZGluZ1RheFJhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEJhdGNoRGVsZXRlUmVsYXRpb25hbERhdGFSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSByZXF1ZXN0UGFyYW1ldGVycz8ucmVxdWVzdEJvZHk7XG4gICAgICAgIGlmIChyZXF1ZXN0Qm9keSA9PT0gbnVsbCB8fCByZXF1ZXN0Qm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciByZXF1ZXN0Qm9keSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWNjZXNzTW9kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdWNjZXNzTW9kZTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChzdWNjZXNzTW9kZSAhPT0gdW5kZWZpbmVkICYmIHN1Y2Nlc3NNb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+c3VjY2Vzc01vZGUsICdzdWNjZXNzTW9kZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3dpdGhob2xkaW5ndGF4L3JhdGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJGJhdGNoRGVsZXRlYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEJhdGNoRGVsZXRlUmVsYXRpb25hbERhdGFSZXNwb25zZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXM6IEJhdGNoIHVwc2VydCBXaXRoaG9sZGluZyBUYXggcmF0ZSByb3dzLCBhcHBseWluZyB0aGUgd3JpdGUtdGltZSBnYXRlcyBiZWZvcmUgYW55IHJvdyBsYW5kcy5cbiAgICAgKiBSb3cgaWRlbnRpdHkgaXMgdGhlIG1hdGNoaW5nIGRpbWVuc2lvbnMgcGx1cyBlZmZlY3RpdmVBdDsgYSByYXRlIGlzIHN1cGVyc2VkZWQgYnkgbG9hZGluZyBhIHJvdyB3aXRoIGEgIGxhdGVyIGVmZmVjdGl2ZUF0IGZvciB0aGUgc2FtZSBkaW1lbnNpb25zLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8QmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVzcG9uc2U+O1xuICAgIHB1YmxpYyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgYmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogQmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LnJlcXVlc3RCb2R5O1xuICAgICAgICBpZiAocmVxdWVzdEJvZHkgPT09IG51bGwgfHwgcmVxdWVzdEJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcmVxdWVzdEJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VjY2Vzc01vZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc3VjY2Vzc01vZGU7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoc3VjY2Vzc01vZGUgIT09IHVuZGVmaW5lZCAmJiBzdWNjZXNzTW9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnN1Y2Nlc3NNb2RlLCAnc3VjY2Vzc01vZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9yYXRlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyRiYXRjaFVwc2VydGA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXNwb25zZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uczogQ3JlYXRlIHRoZSBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9ucy5cbiAgICAgKiBDcmVhdGUgdGhlIGFub21hbHkgYW5kIHRoZSBtYWluIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uIGZvciBhIGN1c3RvbWVyIGRvbWFpbiwgaW4gYSBzaW5nbGUgY2FsbC4gICAgICAgICAgICAgICAgVGhlIGRlZmluaXRpb25zIGFyZSBjb25zdHJ1Y3RlZCByYXRoZXIgdGhhbiBhY2NlcHRlZCBhcyBnaXZlbiwgc28gdGhlIGZpZWxkcyB0aGUgZW5naW5lIHJlYWRzIGJ5IG5hbWUgY2Fubm90ICBiZSBhYnNlbnQsIG1pc3NwZWxsZWQgb3IgY3JlYXRlZCBpbiB0aGUgd3JvbmcgZmllbGQgY2F0ZWdvcnkuIExVU0lEIGFkZHMgdGhlIG1hbmRhdG9yeSBjb3JlIHRvIGJvdGg6IHRheENvdW50cnkgIGFuZCBwcm9maWxlVHlwZSBhcyBzZXJpZXMgaWRlbnRpZmllcnMsIGNvdW50cnlSYXRlLCB0cmVhdHlSYXRlLCBiZXR0ZXJSYXRlIGFuZCBlbmhhbmNlZFJhdGUgYXMgdmFsdWUgZmllbGRzLCAgdHJlYXR5UkFTLCBiZXR0ZXJSQVMgYW5kIGVuaGFuY2VkUkFTIGFzIHZhbHVlIGZpZWxkcywgYW5kIHJhbmsgYXMgYSB2YWx1ZSBmaWVsZCBvbiB0aGUgYW5vbWFseSBkZWZpbml0aW9uIG9ubHkuICAgICAgICAgICAgICAgIFRoZSBjYWxsZXIgc3VwcGxpZXMgb25seSB0aGVpciBvd24gbWF0Y2hpbmcgZGltZW5zaW9ucywgZ2l2ZW4gcGVyIGRhdGFzZXQuIFRoZSB0d28gc2NoZW1hcyBuZWVkIG5vdCBiZSAgaWRlbnRpY2FsOiBhIGRpbWVuc2lvbiBwcmVzZW50IG9uIG9ubHkgb25lIGRhdGFzZXQgaXMgc2ltcGx5IG5vdCBtYXRjaGVkIG9uIHdoZW4gdGhlIG90aGVyIGlzIHF1ZXJpZWQsIGFuIElTSU4gIGRpbWVuc2lvbiBvbiB0aGUgYW5vbWFseSBkYXRhc2V0IGFsb25lIGJlaW5nIHRoZSB1c3VhbCBjYXNlLiBUaGUgcmVxdWVzdCBpcyByZWplY3RlZCBpZiBpdCBuYW1lcyBhIGRpbWVuc2lvbiAgdGhhdCBjb2xsaWRlcyB3aXRoIGEgbWFuZGF0b3J5IGNvcmUgZmllbGQsIG9yIGlmIGl0IG9taXRzIGEgc2NvcGUgb3IgYSBjb2RlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zPjtcbiAgICBwdWJsaWMgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zPj47XG4gICAgcHVibGljIGNyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnM+PjtcbiAgICBwdWJsaWMgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdDtcbiAgICAgICAgaWYgKGNyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdCA9PT0gbnVsbCB8fCBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvd2l0aGhvbGRpbmd0YXgvZGF0YXNldGRlZmluaXRpb25zYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VBUkxZIEFDQ0VTU10gRGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uOiBEZWxldGUgYSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbi5cbiAgICAgKiBEZWxldGUgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uIGF0IHRoZSBnaXZlbiBzY29wZSBhbmQgY29kZS4gUmVqZWN0ZWQgaWYgYSBwb3J0Zm9saW8sIGZ1bmQgb3Igc2hhcmUgIGNsYXNzIHN0aWxsIHJlZmVyZW5jZXMgdGhlIGNvbmZpZ3VyYXRpb24sIHJhdGhlciB0aGFuIG9ycGhhbmluZyB0aG9zZSByZWZlcmVuY2VzLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8RGVsZXRlZEVudGl0eVJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RGVsZXRlZEVudGl0eVJlc3BvbnNlPj47XG4gICAgcHVibGljIGRlbGV0ZVdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZVdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxEZWxldGVkRW50aXR5UmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvd2l0aGhvbGRpbmd0YXgvY29uZmlndXJhdGlvbnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxEZWxldGVkRW50aXR5UmVzcG9uc2U+KCdkZWxldGUnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VBUkxZIEFDQ0VTU10gRGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbjogRGVsZXRlIGEgV2l0aGhvbGRpbmcgVGF4IGRhdGFzZXQgZGVmaW5pdGlvbi5cbiAgICAgKiBEZWxldGUgb25lIFdpdGhob2xkaW5nIFRheCByZWxhdGlvbmFsIGRhdGFzZXQgZGVmaW5pdGlvbiwgc3ViamVjdCB0byB0aGUgcGxhdGZvcm1cXCYjMzk7cyBvd24gcnVsZXMgb24gd2hhdCBtYXkgYmUgIGNoYW5nZWQgb24gYSBwb3B1bGF0ZWQgZGF0YXNldC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8RGVsZXRlZEVudGl0eVJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RGVsZXRlZEVudGl0eVJlc3BvbnNlPj47XG4gICAgcHVibGljIGRlbGV0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGRlbGV0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9kYXRhc2V0ZGVmaW5pdGlvbnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxEZWxldGVkRW50aXR5UmVzcG9uc2U+KCdkZWxldGUnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VBUkxZIEFDQ0VTU10gR2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uOiBHZXQgYSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbi5cbiAgICAgKiBSZXRyaWV2ZSBhIHNpbmdsZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbiBieSBzY29wZSBhbmQgY29kZS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj47XG4gICAgcHVibGljIGdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj4+O1xuICAgIHB1YmxpYyBnZXRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uPj47XG4gICAgcHVibGljIGdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvd2l0aGhvbGRpbmd0YXgvY29uZmlndXJhdGlvbnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBHZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uOiBHZXQgYSBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9uLlxuICAgICAqIFJldHJpZXZlIG9uZSBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9uIGJ5IHNjb3BlIGFuZCBjb2RlLCBpbiB0aGUgc2FtZSBzaGFwZSB0aGUgY3JlYXRlIHJldHVybnM6IHRoZSAgbWF0Y2hpbmcgZGltZW5zaW9ucyB0aGUgY2FsbGVyIHN1cHBsaWVkLiBUaGUgbWFuZGF0b3J5IGNvcmUgaXMgbm90IHJldHVybmVkIGhlcmU7IHJlYWQgdGhlIGZ1bGwgZmllbGQgc2NoZW1hICBmcm9tIHRoZSByZWxhdGlvbmFsIGRhdGFzZXQgZGVmaW5pdGlvbiBhdCB0aGUgcmV0dXJuZWQgaHJlZi5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8V2l0aGhvbGRpbmdUYXhEYXRhc2V0PjtcbiAgICBwdWJsaWMgZ2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXaXRoaG9sZGluZ1RheERhdGFzZXQ+PjtcbiAgICBwdWJsaWMgZ2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8V2l0aGhvbGRpbmdUYXhEYXRhc2V0Pj47XG4gICAgcHVibGljIGdldFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXNBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hc0F0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGFzQXQgIT09IHVuZGVmaW5lZCAmJiBhc0F0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+YXNBdCwgJ2FzQXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3dpdGhob2xkaW5ndGF4L2RhdGFzZXRkZWZpbml0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdpdGhob2xkaW5nVGF4RGF0YXNldD4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFQVJMWSBBQ0NFU1NdIExpc3RXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25zOiBMaXN0IFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9ucy5cbiAgICAgKiBMaXN0IHRoZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbnMgYWNyb3NzIGV2ZXJ5IHNjb3BlIHRoZSBjYWxsZXIgaXMgZW50aXRsZWQgdG8uIFRvIGxpc3QgdGhlICBjb25maWd1cmF0aW9ucyBvZiBhIHNpbmdsZSBzY29wZSwgZmlsdGVyIG9uIHRoZSBzY29wZS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxQYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uPjtcbiAgICBwdWJsaWMgbGlzdFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+PjtcbiAgICBwdWJsaWMgbGlzdFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uPj47XG4gICAgcHVibGljIGxpc3RXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGFzQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uYXNBdDtcbiAgICAgICAgY29uc3QgcGFnZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5wYWdlO1xuICAgICAgICBjb25zdCBsaW1pdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5saW1pdDtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gcmVxdWVzdFBhcmFtZXRlcnM/LmZpbHRlcjtcbiAgICAgICAgY29uc3Qgc29ydEJ5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNvcnRCeTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChhc0F0ICE9PSB1bmRlZmluZWQgJiYgYXNBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmFzQXQsICdhc0F0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZ2UgIT09IHVuZGVmaW5lZCAmJiBwYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+cGFnZSwgJ3BhZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmxpbWl0LCAnbGltaXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZmlsdGVyLCAnZmlsdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvcnRCeSkge1xuICAgICAgICAgICAgc29ydEJ5LmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgPGFueT5lbGVtZW50LCAnc29ydEJ5Jyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvd2l0aGhvbGRpbmd0YXgvY29uZmlndXJhdGlvbnNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnZWRSZXNvdXJjZUxpc3RPZldpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFQVJMWSBBQ0NFU1NdIExpc3RXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uczogTGlzdCBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9ucy5cbiAgICAgKiBMaXN0IHRoZSBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9ucyBhY3Jvc3MgZXZlcnkgc2NvcGUgdGhlIGNhbGxlciBpcyBlbnRpdGxlZCB0bywgZWFjaCBpbiB0aGUgc2FtZSAgc2hhcGUgdGhlIGNyZWF0ZSByZXR1cm5zLiBUbyBsaXN0IHRoZSBkZWZpbml0aW9ucyBvZiBhIHNpbmdsZSBzY29wZSwgZmlsdGVyIG9uIHRoZSBzY29wZS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheERhdGFzZXQ+O1xuICAgIHB1YmxpYyBsaXN0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhEYXRhc2V0Pj47XG4gICAgcHVibGljIGxpc3RXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhEYXRhc2V0Pj47XG4gICAgcHVibGljIGxpc3RXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXNBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hc0F0O1xuICAgICAgICBjb25zdCBwYWdlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBhZ2U7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsdGVyO1xuICAgICAgICBjb25zdCBzb3J0QnkgPSByZXF1ZXN0UGFyYW1ldGVycz8uc29ydEJ5O1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGFzQXQgIT09IHVuZGVmaW5lZCAmJiBhc0F0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+YXNBdCwgJ2FzQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFnZSAhPT0gdW5kZWZpbmVkICYmIHBhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5wYWdlLCAncGFnZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+bGltaXQsICdsaW1pdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5maWx0ZXIsICdmaWx0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydEJ5KSB7XG4gICAgICAgICAgICBzb3J0QnkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICA8YW55PmVsZW1lbnQsICdzb3J0QnknKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9kYXRhc2V0ZGVmaW5pdGlvbnNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnZWRSZXNvdXJjZUxpc3RPZldpdGhob2xkaW5nVGF4RGF0YXNldD4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFQVJMWSBBQ0NFU1NdIFBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbjogUGF0Y2ggYSBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9uLlxuICAgICAqIEFtZW5kIG9uZSBXaXRoaG9sZGluZyBUYXggcmVsYXRpb25hbCBkYXRhc2V0IGRlZmluaXRpb24sIGFkZGluZyBhIG1hdGNoaW5nIGRpbWVuc2lvbiBiZWluZyB0aGUgY29tbW9uIGNhc2UuICBTdWJqZWN0IHRvIHRoZSBwbGF0Zm9ybVxcJiMzOTtzIG93biBydWxlcyBvbiB3aGF0IG1heSBiZSBjaGFuZ2VkIG9uIGEgcG9wdWxhdGVkIGRhdGFzZXQuICAgICAgICAgICAgICAgIE9ubHkgdGhlIG1hdGNoaW5nIGRpbWVuc2lvbnMgdGhlIGRvY3VtZW50IGFkZHJlc3NlcyBhcmUgYWZmZWN0ZWQ7IGEgZGltZW5zaW9uIGl0IGRvZXMgbm90IGFkZHJlc3MgaXMgbGVmdCBhcyAgaXQgaXMuIEFwcGVuZCBhIGRpbWVuc2lvbiB3aXRoIGFuIGFkZCBvbiBcXCZxdW90Oy9kaW1lbnNpb25zLy1cXCZxdW90OywgaW5zZXJ0IG9uZSBhdCBhIHBvc2l0aW9uIHdpdGggYW4gYWRkIG9uIGl0cyBpbmRleCwgIGFuZCByZW1vdmUgb25lIHdpdGggYSByZW1vdmUgb24gaXRzIGluZGV4LiBUbyBhbWVuZCBhIGRpbWVuc2lvbiwgcmVtb3ZlIGl0IGFuZCBhZGQgaXQgYWdhaW4uICAgICAgICAgICAgICAgIEEgZGltZW5zaW9uIHdob3NlIG5hbWUgY29sbGlkZXMgd2l0aCBhIG1hbmRhdG9yeSBjb3JlIGZpZWxkIGlzIHJlamVjdGVkLCBhcyBpcyBhbnkgYXR0ZW1wdCB0byBhZGQgYSByYXRlIHRpZXI6ICB0aGUgdGllciBzZXQgaXMgZml4ZWQgYXQgZm91ciBhbmQgY2Fubm90IGJlIGV4dGVuZGVkIGJ5IHNjaGVtYSBldm9sdXRpb24sIGJlY2F1c2UgdGhlIGVuZ2luZSBjb3VsZCBuZXZlciByZWFkICBhIHRpZXIgaXQgZG9lcyBub3Qga25vdyBieSBuYW1lLiBUaGUgbWFuZGF0b3J5IGNvcmUgaXMgbm90IGFkZHJlc3NhYmxlIGJ5IHRoaXMgZW5kcG9pbnQgYXQgYWxsLiAgICAgICAgICAgICAgICBUaGUgYW1lbmRlZCBkYXRhc2V0IGlzIHJldHVybmVkIGluIHRoZSBzYW1lIHNoYXBlIHRoZSBnZXQgYW5kIHRoZSBsaXN0IHJldHVybjogdGhlIG1hdGNoaW5nIGRpbWVuc2lvbnMgYWxvbmUuICBSZWFkIHRoZSBmdWxsIGZpZWxkIHNjaGVtYSBmcm9tIHRoZSByZWxhdGlvbmFsIGRhdGFzZXQgZGVmaW5pdGlvbiBhdCB0aGUgcmV0dXJuZWQgaHJlZi4gIFRoZSBiZWhhdmlvdXIgaXMgZGVmaW5lZCBieSB0aGUgSlNPTiBQYXRjaCBzcGVjaWZpY2F0aW9uLiAgICBDdXJyZW50bHkgc3VwcG9ydGVkIGZpZWxkcyBhcmU6IERpbWVuc2lvbnMuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IFBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXaXRoaG9sZGluZ1RheERhdGFzZXQ+O1xuICAgIHB1YmxpYyBwYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBQYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXaXRoaG9sZGluZ1RheERhdGFzZXQ+PjtcbiAgICBwdWJsaWMgcGF0Y2hXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogUGF0Y2hXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFdpdGhob2xkaW5nVGF4RGF0YXNldD4+O1xuICAgIHB1YmxpYyBwYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBQYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9wZXJhdGlvbjtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gbnVsbCB8fCBvcGVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgb3BlcmF0aW9uIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcGF0Y2hXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3dpdGhob2xkaW5ndGF4L2RhdGFzZXRkZWZpbml0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdpdGhob2xkaW5nVGF4RGF0YXNldD4oJ3BhdGNoJywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBvcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb246IFVwc2VydCBhIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uLlxuICAgICAqIENyZWF0ZSBvciByZXBsYWNlIHRoZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbiBhdCB0aGUgZ2l2ZW4gc2NvcGUgYW5kIGNvZGUuIFRoZSB3cml0ZSBpcyBhIGZ1bGwgcmVwbGFjZSAgb24gdGhlIG9iamVjdCByYXRoZXIgdGhhbiBhIHBhcnRpYWwgdXBkYXRlLCBzbyB0aGUgcmVxdWVzdCBtdXN0IGNhcnJ5IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uLiAgICAgICAgICAgICAgICBUaGUgd3JpdGUgaXMgcmVqZWN0ZWQgaWYgZWl0aGVyIHJlZmVyZW5jZWQgZGF0YXNldCBkb2VzIG5vdCBleGlzdCwgaWYgZWl0aGVyIGlzIG1pc3NpbmcgYSBtYW5kYXRvcnkgY29yZSBmaWVsZCAgb3IgaGFzIG9uZSBpbiB0aGUgd3JvbmcgZmllbGQgY2F0ZWdvcnksIGlmIGFueSBjdXN0b21lci1kZWZpbmVkIGRpbWVuc2lvbiBpbiBlaXRoZXIgZGF0YXNldCBoYXMgbm8gdmFsdWUgc291cmNlICBkZWNsYXJhdGlvbiwgb3IgaWYgYSBkZWNsYXJhdGlvbiBuYW1lcyBhIGRpbWVuc2lvbiBuZWl0aGVyIGRhdGFzZXQgaGFzLiBFcnJvcnMgbmFtZSB0aGUgc3BlY2lmaWMgZmllbGQuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+O1xuICAgIHB1YmxpYyB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+PjtcbiAgICBwdWJsaWMgdXBzZXJ0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBzZXJ0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj4+O1xuICAgIHB1YmxpYyB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBzZXJ0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0O1xuICAgICAgICBpZiAodXBzZXJ0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdCA9PT0gbnVsbCB8fCB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvd2l0aGhvbGRpbmd0YXgvY29uZmlndXJhdGlvbnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=
|
|
886
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGhvbGRpbmdUYXguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvd2l0aGhvbGRpbmdUYXguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQWtDL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQTBCLGNBQWMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBOEdyRixNQUFNLE9BQU8scUJBQXFCO0lBT1I7SUFMWixRQUFRLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFB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LFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQztRQUN4VyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUE4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDL0c7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSx3Q0FBd0M7WUFDOUMsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7dUdBMWpDUSxxQkFBcUIsNENBT21DLFNBQVM7MkdBUGpFLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRa0QsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBOEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTFVTSUQgQVBJXG4gKiAjIEludHJvZHVjdGlvbiAgVGhpcyBwYWdlIGRvY3VtZW50cyB0aGUgW0xVU0lEIEFQSXNdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyKSwgd2hpY2ggYWxsb3dzIGF1dGhvcmlzZWQgY2xpZW50cyB0byBxdWVyeSBhbmQgdXBkYXRlIHRoZWlyIGRhdGEgd2l0aGluIHRoZSBMVVNJRCBwbGF0Zm9ybS4gIFNES3MgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgTFVTSUQgQVBJcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBmb2xsb3dpbmcgbGFuZ3VhZ2VzIGFuZCBmcmFtZXdvcmtzOiAgKiBbQyNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWNzaGFycCkgKiBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstamF2YSkgKiBbSmF2YVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstanMpICogW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstcHl0aG9uKSAqIFtBbmd1bGFyXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1hbmd1bGFyKSAgVGhlIExVU0lEIHBsYXRmb3JtIGlzIG1hZGUgdXAgb2YgYSBudW1iZXIgb2Ygc3ViLWFwcGxpY2F0aW9ucy4gWW91IGNhbiBmaW5kIHRoZSBBUEkgLyBzd2FnZ2VyIGRvY3VtZW50YXRpb24gYnkgZm9sbG93aW5nIHRoZSBsaW5rcyBpbiB0aGUgdGFibGUgYmVsb3cuICAgfCBBcHBsaWNhdGlvbiAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQVBJIC8gU3dhZ2dlciBEb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8IExVU0lEICAgICAgICAgfCBPcGVuLCBBUEktZmlyc3QsIGRldmVsb3Blci1mcmllbmRseSBpbnZlc3RtZW50IGRhdGEgcGxhdGZvcm0uICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYXBpL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICAgIHwgfCBXZWIgYXBwICAgICAgIHwgVXNlci1mYWNpbmcgZnJvbnQgZW5kIGZvciBMVVNJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwcC9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgU2NoZWR1bGVyICAgICB8IEF1dG9tYXRlZCBqb2Igc2NoZWR1bGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9zY2hlZHVsZXIyL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgfCB8IEluc2lnaHRzICAgICAgfCBNb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3Rpbmcgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaW5zaWdodHMvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgfCBJZGVudGl0eSAgICAgIHwgSWRlbnRpdHkgbWFuYWdlbWVudCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggQWNjZXNzKSAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2lkZW50aXR5L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgQWNjZXNzICAgICAgICB8IEFjY2VzcyBjb250cm9sIGZvciBMVVNJRCAoaW4gY29uanVuY3Rpb24gd2l0aCBJZGVudGl0eSkgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hY2Nlc3Mvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgfCB8IERyaXZlICAgICAgICAgfCBTZWN1cmUgZmlsZSByZXBvc2l0b3J5IGFuZCBtYW5hZ2VyIGZvciBjb2xsYWJvcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vZHJpdmUvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgIHwgfCBMdW1pbmVzY2UgICAgIHwgRGF0YSB2aXJ0dWFsaXNhdGlvbiBzZXJ2aWNlIChxdWVyeSBkYXRhIGZyb20gbXVsdGlwbGUgcHJvdmlkZXJzLCBpbmNsdWRpbmcgTFVTSUQpIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2hvbmV5Y29tYi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICB8IHwgTm90aWZpY2F0aW9uICB8IE5vdGlmaWNhdGlvbiBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ub3RpZmljYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSAgfCB8IENvbmZpZ3VyYXRpb24gfCBGaWxlIHN0b3JlIGZvciBzZWNyZXRzIGFuZCBvdGhlciBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vY29uZmlndXJhdGlvbi9zd2FnZ2VyL2luZGV4Lmh0bWwpIHwgfCBXb3JrZmxvdyAgICAgIHwgV29ya2Zsb3cgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL3dvcmtmbG93L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8ICAgIyBFcnJvciBDb2RlcyAgfCBDb2RlfE5hbWV8RGVzY3JpcHRpb24gfCB8IC0tLXwtLS18LS0tIHwgfCA8YSBuYW1lPVxcXCItMTBcXFwiPi0xMDwvYT58U2VydmVyIENvbmZpZ3VyYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiLTFcXFwiPi0xPC9hPnxVbmtub3duIGVycm9yfEFuIHVuZXhwZWN0ZWQgZXJyb3Igd2FzIGVuY291bnRlcmVkIG9uIG91ciBzaWRlLiB8IHwgPGEgbmFtZT1cXFwiMTAyXFxcIj4xMDI8L2E+fFZlcnNpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwM1xcXCI+MTAzPC9hPnxBcGkgUmF0ZSBMaW1pdCBWaW9sYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMTA0XFxcIj4xMDQ8L2E+fEluc3RydW1lbnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNVxcXCI+MTA1PC9hPnxQcm9wZXJ0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA2XFxcIj4xMDY8L2E+fFBvcnRmb2xpbyBSZWN1cnNpb24gRGVwdGh8ICB8IHwgPGEgbmFtZT1cXFwiMTA4XFxcIj4xMDg8L2E+fEdyb3VwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDlcXFwiPjEwOTwvYT58UG9ydGZvbGlvIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTBcXFwiPjExMDwvYT58UHJvcGVydHkgU2NoZW1hIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTFcXFwiPjExMTwvYT58UG9ydGZvbGlvIEFuY2VzdHJ5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTJcXFwiPjExMjwvYT58UG9ydGZvbGlvIFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTEzXFxcIj4xMTM8L2E+fE9ycGhhbmVkIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCIxMTlcXFwiPjExOTwvYT58TWlzc2luZyBCYXNlIENsYWltc3wgIHwgfCA8YSBuYW1lPVxcXCIxMjFcXFwiPjEyMTwvYT58UHJvcGVydHkgTm90IERlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTIyXFxcIj4xMjI8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFByb3BlcnR5fCAgfCB8IDxhIG5hbWU9XFxcIjEyM1xcXCI+MTIzPC9hPnxDYW5ub3QgTW9kaWZ5IEltbXV0YWJsZSBQcm9wZXJ0eSBGaWVsZHwgIHwgfCA8YSBuYW1lPVxcXCIxMjRcXFwiPjEyNDwvYT58UHJvcGVydHkgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTI1XFxcIj4xMjU8L2E+fEludmFsaWQgUHJvcGVydHkgTGlmZSBUaW1lfCAgfCB8IDxhIG5hbWU9XFxcIjEyNlxcXCI+MTI2PC9hPnxQcm9wZXJ0eSBDb25zdHJhaW50IFN0eWxlIEV4Y2x1ZGVzIFByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTI3XFxcIj4xMjc8L2E+fENhbm5vdCBNb2RpZnkgRGVmYXVsdCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTI4XFxcIj4xMjg8L2E+fEdyb3VwIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyOVxcXCI+MTI5PC9hPnxObyBTdWNoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzBcXFwiPjEzMDwvYT58VW5kZWZpbmVkIFZhbHVlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMxXFxcIj4xMzE8L2E+fFVuc3VwcG9ydGVkIFZhbHVlIFR5cGUgRGVmaW5lZCBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMyXFxcIj4xMzI8L2E+fFZhbGlkYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMTMzXFxcIj4xMzM8L2E+fExvb3AgRGV0ZWN0ZWQgSW4gR3JvdXAgSGllcmFyY2h5fCAgfCB8IDxhIG5hbWU9XFxcIjEzNFxcXCI+MTM0PC9hPnxVbmRlZmluZWQgQWNjZXB0YWJsZSBWYWx1ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTM1XFxcIj4xMzU8L2E+fFN1YiBHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMzhcXFwiPjEzODwvYT58UHJpY2UgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMzlcXFwiPjEzOTwvYT58QW5hbHl0aWMgU3RvcmUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE0MVxcXCI+MTQxPC9hPnxBbmFseXRpYyBTdG9yZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNDNcXFwiPjE0MzwvYT58Q2xpZW50IEluc3RydW1lbnQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQ0XFxcIj4xNDQ8L2E+fER1cGxpY2F0ZSBJbiBQYXJhbWV0ZXIgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0N1xcXCI+MTQ3PC9hPnxSZXN1bHRzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDhcXFwiPjE0ODwvYT58T3JkZXIgRmllbGQgTm90IEluIFJlc3VsdCBTZXR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ5XFxcIj4xNDk8L2E+fE9wZXJhdGlvbiBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTUwXFxcIj4xNTA8L2E+fEVsYXN0aWMgU2VhcmNoIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjE1MVxcXCI+MTUxPC9hPnxJbnZhbGlkIFBhcmFtZXRlciBWYWx1ZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTNcXFwiPjE1MzwvYT58Q29tbWFuZCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU0XFxcIj4xNTQ8L2E+fEVudGl0eSBTdGF0ZSBDb25zdHJ1Y3Rpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTVcXFwiPjE1NTwvYT58RW50aXR5IFRpbWVsaW5lIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1NlxcXCI+MTU2PC9hPnxDb25jdXJyZW5jeSBDb25mbGljdCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1N1xcXCI+MTU3PC9hPnxJbnZhbGlkIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTU4XFxcIj4xNTg8L2E+fEV2ZW50IFB1Ymxpc2ggVW5rbm93bnwgIHwgfCA8YSBuYW1lPVxcXCIxNTlcXFwiPjE1OTwvYT58RXZlbnQgUXVlcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjBcXFwiPjE2MDwvYT58QmxvYiBEaWQgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE2MlxcXCI+MTYyPC9hPnxTdWIgU3lzdGVtIFJlcXVlc3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjNcXFwiPjE2MzwvYT58U3ViIFN5c3RlbSBDb25maWd1cmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTY1XFxcIj4xNjU8L2E+fEZhaWxlZCBUbyBEZWxldGV8ICB8IHwgPGEgbmFtZT1cXFwiMTY2XFxcIj4xNjY8L2E+fFVwc2VydCBDbGllbnQgSW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2N1xcXCI+MTY3PC9hPnxJbGxlZ2FsIEFzIEF0IEludGVydmFsfCAgfCB8IDxhIG5hbWU9XFxcIjE2OFxcXCI+MTY4PC9hPnxJbGxlZ2FsIEJpdGVtcG9yYWwgUXVlcnl8ICB8IHwgPGEgbmFtZT1cXFwiMTY5XFxcIj4xNjk8L2E+fEludmFsaWQgQWx0ZXJuYXRlIElkfCAgfCB8IDxhIG5hbWU9XFxcIjE3MFxcXCI+MTcwPC9hPnxDYW5ub3QgQWRkIE5vbi1Xcml0YWJsZSBQcm9wZXJ0aWVzIFRvIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCIxNzFcXFwiPjE3MTwvYT58RW50aXR5IEFscmVhZHkgRXhpc3RzIEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3MlxcXCI+MTcyPC9hPnxFbnRpdHkgV2l0aCBJZCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzNcXFwiPjE3MzwvYT58RW50aXR5IFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTc0XFxcIj4xNzQ8L2E+fERlcml2ZWQgUG9ydGZvbGlvIERldGFpbHMgRG8gTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE3NVxcXCI+MTc1PC9hPnxFbnRpdHkgTm90IEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3NlxcXCI+MTc2PC9hPnxQb3J0Zm9saW8gV2l0aCBOYW1lIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3N1xcXCI+MTc3PC9hPnxJbnZhbGlkIFRyYW5zYWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIxNzhcXFwiPjE3ODwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTc5XFxcIj4xNzk8L2E+fER1cGxpY2F0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxODBcXFwiPjE4MDwvYT58Q29tbWFuZCBSZXRyaWV2YWwgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODFcXFwiPjE4MTwvYT58RGF0YSBGaWx0ZXIgQXBwbGljYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODJcXFwiPjE4MjwvYT58U2VhcmNoIEZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCIxODNcXFwiPjE4MzwvYT58TW92ZW1lbnRzIEVuZ2luZSBDb25maWd1cmF0aW9uIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4NFxcXCI+MTg0PC9hPnxGeCBSYXRlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg1XFxcIj4xODU8L2E+fEFjY3J1YWwgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxODZcXFwiPjE4NjwvYT58QWNjZXNzIERlbmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxODdcXFwiPjE4NzwvYT58SW52YWxpZCBJZGVudGl0eSBUb2tlbnwgIHwgfCA8YSBuYW1lPVxcXCIxODhcXFwiPjE4ODwvYT58SW52YWxpZCBSZXF1ZXN0IEhlYWRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiMTg5XFxcIj4xODk8L2E+fFByaWNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTBcXFwiPjE5MDwvYT58SW52YWxpZCBTdWIgSG9sZGluZyBLZXlzIFByb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MVxcXCI+MTkxPC9hPnxEdXBsaWNhdGUgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTJcXFwiPjE5MjwvYT58Q3V0IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE5M1xcXCI+MTkzPC9hPnxDdXQgRGVmaW5pdGlvbiBJbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NFxcXCI+MTk0PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgRGVsZXRpb24gRGF0ZSBVbnNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTVcXFwiPjE5NTwvYT58UGVycGV0dWFsIFByb3BlcnR5IERlbGV0aW9uIERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NlxcXCI+MTk2PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgVXBzZXJ0IERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk3XFxcIj4xOTc8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBVcHNlcnQgRGF0ZSBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjAwXFxcIj4yMDA8L2E+fEludmFsaWQgVW5pdCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMVxcXCI+MjAxPC9hPnxJbnZhbGlkIFR5cGUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDJcXFwiPjIwMjwvYT58SW52YWxpZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwM1xcXCI+MjAzPC9hPnxVbml0IE5vdCBEZWZpbmVkIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA0XFxcIj4yMDQ8L2E+fFVuaXRzIE5vdCBTdXBwb3J0ZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNVxcXCI+MjA1PC9hPnxDYW5ub3QgU3BlY2lmeSBVbml0cyBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA2XFxcIj4yMDY8L2E+fFVuaXQgU2NoZW1hIEluY29uc2lzdGVudCBXaXRoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDdcXFwiPjIwNzwvYT58VW5pdCBEZWZpbml0aW9uIE5vdCBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA4XFxcIj4yMDg8L2E+fER1cGxpY2F0ZSBVbml0IERlZmluaXRpb25zIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDlcXFwiPjIwOTwvYT58SW52YWxpZCBVbml0cyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxMFxcXCI+MjEwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgSWRlbnRpZmllciBVbml0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMVxcXCI+MjExPC9hPnxIb2xkaW5ncyBBZGp1c3RtZW50IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMlxcXCI+MjEyPC9hPnxDb3VsZCBOb3QgQnVpbGQgRXhjZWwgVXJsfCAgfCB8IDxhIG5hbWU9XFxcIjIxM1xcXCI+MjEzPC9hPnxDb3VsZCBOb3QgR2V0IEV4Y2VsIFZlcnNpb258ICB8IHwgPGEgbmFtZT1cXFwiMjE0XFxcIj4yMTQ8L2E+fEluc3RydW1lbnQgQnkgQ29kZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjE1XFxcIj4yMTU8L2E+fEVudGl0eSBTY2hlbWEgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMjE2XFxcIj4yMTY8L2E+fEZlYXR1cmUgTm90IFN1cHBvcnRlZCBPbiBQb3J0Zm9saW8gVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMTdcXFwiPjIxNzwvYT58UXVvdGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxOFxcXCI+MjE4PC9hPnxJbnZhbGlkIFF1b3RlIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiMjE5XFxcIj4yMTk8L2E+fEludmFsaWQgTWV0cmljIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjIwXFxcIj4yMjA8L2E+fEludmFsaWQgSW5zdHJ1bWVudCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIyMVxcXCI+MjIxPC9hPnxJbnN0cnVtZW50IFVwc2VydCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMlxcXCI+MjIyPC9hPnxSZWZlcmVuY2UgUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjNcXFwiPjIyMzwvYT58VHJhbnNhY3Rpb24gUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjRcXFwiPjIyNDwvYT58SW52YWxpZCBQcm9wZXJ0eSBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzMFxcXCI+MjMwPC9hPnxUcmFuc2FjdGlvbiBUeXBlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMzFcXFwiPjIzMTwvYT58VHJhbnNhY3Rpb24gVHlwZSBEdXBsaWNhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMzJcXFwiPjIzMjwvYT58UG9ydGZvbGlvIERvZXMgTm90IEV4aXN0IEF0IEdpdmVuIERhdGV8ICB8IHwgPGEgbmFtZT1cXFwiMjMzXFxcIj4yMzM8L2E+fFF1ZXJ5IFBhcnNlciBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIzNFxcXCI+MjM0PC9hPnxEdXBsaWNhdGUgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM1XFxcIj4yMzU8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBDb25zdGl0dWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzZcXFwiPjIzNjwvYT58VW5yZXNvbHZlZCBJbnN0cnVtZW50IEluIFRyYW5zaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjM3XFxcIj4yMzc8L2E+fE1pc3NpbmcgU2lkZSBEZWZpbml0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIyNDBcXFwiPjI0MDwvYT58RHVwbGljYXRlIENhbGN1bGF0aW9ucyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjI5OVxcXCI+Mjk5PC9hPnxJbnZhbGlkIFJlY2lwZXwgIHwgfCA8YSBuYW1lPVxcXCIzMDBcXFwiPjMwMDwvYT58TWlzc2luZyBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAxXFxcIj4zMDE8L2E+fERlcGVuZGVuY2llc3wgIHwgfCA8YSBuYW1lPVxcXCIzMDRcXFwiPjMwNDwvYT58UG9ydGZvbGlvIFByZXByb2Nlc3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTBcXFwiPjMxMDwvYT58VmFsdWF0aW9uIEVuZ2luZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMVxcXCI+MzExPC9hPnxUYXNrIEZhY3RvcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTJcXFwiPjMxMjwvYT58VGFzayBFdmFsdWF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEzXFxcIj4zMTM8L2E+fFRhc2sgR2VuZXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNFxcXCI+MzE0PC9hPnxFbmdpbmUgQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNVxcXCI+MzE1PC9hPnxNb2RlbCBTcGVjaWZpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIwXFxcIj4zMjA8L2E+fE1hcmtldCBEYXRhIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMVxcXCI+MzIxPC9hPnxNYXJrZXQgUmVzb2x2ZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjJcXFwiPjMyMjwvYT58TWFya2V0IERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzBcXFwiPjMzMDwvYT58Q3VydmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzFcXFwiPjMzMTwvYT58Vm9sYXRpbGl0eSBTdXJmYWNlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMyXFxcIj4zMzI8L2E+fFZvbGF0aWxpdHkgQ3ViZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MFxcXCI+MzUwPC9hPnxJbnN0cnVtZW50IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUxXFxcIj4zNTE8L2E+fENhc2ggRmxvd3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTJcXFwiPjM1MjwvYT58UmVmZXJlbmNlIERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjBcXFwiPjM2MDwvYT58QWdncmVnYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjFcXFwiPjM2MTwvYT58QWdncmVnYXRpb24gTWVhc3VyZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MFxcXCI+MzcwPC9hPnxSZXN1bHQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcxXFxcIj4zNzE8L2E+fFJlc3VsdCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcyXFxcIj4zNzI8L2E+fFZlbmRvciBSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3M1xcXCI+MzczPC9hPnxWZW5kb3IgUmVzdWx0IE1hcHBpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzRcXFwiPjM3NDwvYT58VmVuZG9yIExpYnJhcnkgVW5hdXRob3Jpc2VkfCAgfCB8IDxhIG5hbWU9XFxcIjM3NVxcXCI+Mzc1PC9hPnxWZW5kb3IgQ29ubmVjdGl2aXR5IEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3NlxcXCI+Mzc2PC9hPnxWZW5kb3IgSW50ZXJmYWNlIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3N1xcXCI+Mzc3PC9hPnxWZW5kb3IgUHJpY2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3OFxcXCI+Mzc4PC9hPnxWZW5kb3IgVHJhbnNsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzlcXFwiPjM3OTwvYT58VmVuZG9yIEtleSBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgwXFxcIj4zODA8L2E+fFZlbmRvciBSZWZsZWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgxXFxcIj4zODE8L2E+fFZlbmRvciBQcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgyXFxcIj4zODI8L2E+fFZlbmRvciBTeXN0ZW0gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzOTBcXFwiPjM5MDwvYT58QXR0ZW1wdCBUbyBVcHNlcnQgRHVwbGljYXRlIFF1b3Rlc3wgIHwgfCA8YSBuYW1lPVxcXCIzOTFcXFwiPjM5MTwvYT58Q29ycG9yYXRlIEFjdGlvbiBTb3VyY2UgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMzkyXFxcIj4zOTI8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjM5M1xcXCI+MzkzPC9hPnxJbnN0cnVtZW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiMzk0XFxcIj4zOTQ8L2E+fFByb3BlcnRpZXMgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjM5NVxcXCI+Mzk1PC9hPnxCYXRjaCBPcGVyYXRpb24gQWJvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDBcXFwiPjQwMDwvYT58SW52YWxpZCBJc280MjE3IEN1cnJlbmN5IENvZGV8ICB8IHwgPGEgbmFtZT1cXFwiNDAxXFxcIj40MDE8L2E+fENhbm5vdCBBc3NpZ24gSW5zdHJ1bWVudCBJZGVudGlmaWVyIFRvIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwMlxcXCI+NDAyPC9hPnxDYW5ub3QgQXNzaWduIEN1cnJlbmN5IElkZW50aWZpZXIgVG8gTm9uIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwM1xcXCI+NDAzPC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBCZSBEZWxldGVkfCAgfCB8IDxhIG5hbWU9XFxcIjQwNFxcXCI+NDA0PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIEVjb25vbWljIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNDA1XFxcIj40MDU8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEhhdmUgTG9va3Rocm91Z2ggUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjQwNlxcXCI+NDA2PC9hPnxDYW5ub3QgQ3JlYXRlIEN1cnJlbmN5IEluc3RydW1lbnQgV2l0aCBNdWx0aXBsZSBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MDdcXFwiPjQwNzwvYT58U3BlY2lmaWVkIEN1cnJlbmN5IElzIFVuZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI0MTBcXFwiPjQxMDwvYT58SW5kZXggRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDExXFxcIj40MTE8L2E+fFNvcnQgRmllbGQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDEzXFxcIj40MTM8L2E+fE5lZ2F0aXZlIFBhZ2luYXRpb24gUGFyYW1ldGVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MTRcXFwiPjQxNDwvYT58SW52YWxpZCBTZWFyY2ggU3ludGF4fCAgfCB8IDxhIG5hbWU9XFxcIjQxNVxcXCI+NDE1PC9hPnxGaWx0ZXIgRXhlY3V0aW9uIFRpbWVvdXR8ICB8IHwgPGEgbmFtZT1cXFwiNDIwXFxcIj40MjA8L2E+fFNpZGUgRGVmaW5pdGlvbiBJbmNvbnNpc3RlbnR8ICB8IHwgPGEgbmFtZT1cXFwiNDUwXFxcIj40NTA8L2E+fEludmFsaWQgUXVvdGUgQWNjZXNzIE1ldGFkYXRhIFJ1bGV8ICB8IHwgPGEgbmFtZT1cXFwiNDUxXFxcIj40NTE8L2E+fEFjY2VzcyBNZXRhZGF0YSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDUyXFxcIj40NTI8L2E+fEludmFsaWQgQWNjZXNzIE1ldGFkYXRhIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiNDYwXFxcIj40NjA8L2E+fFN0YW5kYXJkIFJlc291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjFcXFwiPjQ2MTwvYT58U3RhbmRhcmQgUmVzb3VyY2UgQ29uZmxpY3R8ICB8IHwgPGEgbmFtZT1cXFwiNDYyXFxcIj40NjI8L2E+fENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjNcXFwiPjQ2MzwvYT58RGF0ZSBJbiBBIENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjRcXFwiPjQ2NDwvYT58SW52YWxpZCBEYXRlIFNvdXJjZSBEYXRhfCAgfCB8IDxhIG5hbWU9XFxcIjQ2NVxcXCI+NDY1PC9hPnxJbnZhbGlkIFRpbWV6b25lfCAgfCB8IDxhIG5hbWU9XFxcIjYwMVxcXCI+NjAxPC9hPnxQZXJzb24gSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDJcXFwiPjYwMjwvYT58UGVyc29uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2MDNcXFwiPjYwMzwvYT58Q2Fubm90IFNldCBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjYxN1xcXCI+NjE3PC9hPnxJbnZhbGlkIFJlY2lwZSBTcGVjaWZpY2F0aW9uIEluIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiNjE4XFxcIj42MTg8L2E+fElubGluZSBSZWNpcGUgRGVzZXJpYWxpc2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjE5XFxcIj42MTk8L2E+fElkZW50aWZpZXIgVHlwZXMgTm90IFNldCBGb3IgRW50aXR5fCAgfCB8IDxhIG5hbWU9XFxcIjYyMFxcXCI+NjIwPC9hPnxDYW5ub3QgRGVsZXRlIEFsbCBDbGllbnQgRGVmaW5lZCBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI2NTBcXFwiPjY1MDwvYT58VGhlIE9yZGVyIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTRcXFwiPjY1NDwvYT58VGhlIEFsbG9jYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjY1NVxcXCI+NjU1PC9hPnxDYW5ub3QgYnVpbGQgdGhlIGZ4IGZvcndhcmQgdGFyZ2V0IHdpdGggdGhlIGdpdmVuIGhvbGRpbmdzLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTZcXFwiPjY1NjwvYT58R3JvdXAgZG9lcyBub3QgY29udGFpbiBleHBlY3RlZCBlbnRpdGllcy58ICB8IHwgPGEgbmFtZT1cXFwiNjY1XFxcIj42NjU8L2E+fERlc3RpbmF0aW9uIGRpcmVjdG9yeSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjY3XFxcIj42Njc8L2E+fFJlbGF0aW9uIGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjcyXFxcIj42NzI8L2E+fENvdWxkIG5vdCByZXRyaWV2ZSBmaWxlIGNvbnRlbnRzfCAgfCB8IDxhIG5hbWU9XFxcIjY3M1xcXCI+NjczPC9hPnxNaXNzaW5nIGVudGl0bGVtZW50cyBmb3IgZW50aXRpZXMgaW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiNjc0XFxcIj42NzQ8L2E+fE5leHQgQmVzdCBBY3Rpb24gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY3NlxcXCI+Njc2PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIG5vdCBkZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjY3N1xcXCI+Njc3PC9hPnxJbnZhbGlkIGVudGl0eSBpZGVudGlmaWVyIGZvciByZWxhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI2ODFcXFwiPjY4MTwvYT58U29ydGluZyBieSBzcGVjaWZpZWQgZmllbGQgbm90IHN1cHBvcnRlZHxPbmUgb3IgbW9yZSBvZiB0aGUgcHJvdmlkZWQgZmllbGRzIHRvIG9yZGVyIGJ5IHdlcmUgZWl0aGVyIGludmFsaWQgb3Igbm90IHN1cHBvcnRlZC4gfCB8IDxhIG5hbWU9XFxcIjY4MlxcXCI+NjgyPC9hPnxUb28gbWFueSBmaWVsZHMgdG8gc29ydCBieXxUaGUgbnVtYmVyIG9mIGZpZWxkcyB0byBzb3J0IHRoZSBkYXRhIGJ5IGV4Y2VlZHMgdGhlIG51bWJlciBhbGxvd2VkIGJ5IHRoZSBlbmRwb2ludCB8IHwgPGEgbmFtZT1cXFwiNjg0XFxcIj42ODQ8L2E+fFNlcXVlbmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODVcXFwiPjY4NTwvYT58U2VxdWVuY2UgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjg2XFxcIj42ODY8L2E+fE5vbi1jeWNsaW5nIHNlcXVlbmNlIGhhcyBiZWVuIGV4aGF1c3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODdcXFwiPjY4NzwvYT58TGVnYWwgRW50aXR5IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjg4XFxcIj42ODg8L2E+fExlZ2FsIEVudGl0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg5XFxcIj42ODk8L2E+fFRoZSBzdXBwbGllZCBwYWdpbmF0aW9uIHRva2VuIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkwXFxcIj42OTA8L2E+fFByb3BlcnR5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTFcXFwiPjY5MTwvYT58TXVsdGlwbGUgVGF4LWxvdHMgRm9yIEN1cnJlbmN5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTJcXFwiPjY5MjwvYT58VGhpcyBlbmRwb2ludCBkb2VzIG5vdCBzdXBwb3J0IGltcGVyc29uYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjkzXFxcIj42OTM8L2E+fEVudGl0eSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJlbGF0aW9uc2hpcHwgIHwgfCA8YSBuYW1lPVxcXCI2OTRcXFwiPjY5NDwvYT58UmVsYXRpb25zaGlwIFZhbGlkYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI2OTVcXFwiPjY5NTwvYT58UmVsYXRpb25zaGlwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTdcXFwiPjY5NzwvYT58RGVyaXZlZCBQcm9wZXJ0eSBGb3JtdWxhIE5vIExvbmdlciBWYWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI2OThcXFwiPjY5ODwvYT58U3RvcnkgaXMgbm90IGF2YWlsYWJsZXwgIHwgfCA8YSBuYW1lPVxcXCI3MDNcXFwiPjcwMzwvYT58Q29ycG9yYXRlIEFjdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI3MjBcXFwiPjcyMDwvYT58VGhlIHByb3ZpZGVkIHNvcnQgYW5kIGZpbHRlciBjb21iaW5hdGlvbiBpcyBub3QgdmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIxXFxcIj43MjE8L2E+fEEyQiBnZW5lcmF0aW9uIGZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjJcXFwiPjcyMjwvYT58QWdncmVnYXRlZCBSZXR1cm4gQ2FsY3VsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI3MjNcXFwiPjcyMzwvYT58Q3VzdG9tIEVudGl0eSBEZWZpbml0aW9uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNzI0XFxcIj43MjQ8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzI1XFxcIj43MjU8L2E+fFRoZSBQbGFjZW1lbnQgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyNlxcXCI+NzI2PC9hPnxUaGUgRXhlY3V0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjdcXFwiPjcyNzwvYT58VGhlIEJsb2NrIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjhcXFwiPjcyODwvYT58VGhlIFBhcnRpY2lwYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyOVxcXCI+NzI5PC9hPnxUaGUgUGFja2FnZSByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMwXFxcIj43MzA8L2E+fFRoZSBPcmRlckluc3RydWN0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzJcXFwiPjczMjwvYT58Q3VzdG9tIEVudGl0eSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczM1xcXCI+NzMzPC9hPnxDdXN0b20gRW50aXR5IElkZW50aWZpZXIgYWxyZWFkeSBpbiB1c2UufCAgfCB8IDxhIG5hbWU9XFxcIjczNVxcXCI+NzM1PC9hPnxDYWxjdWxhdGlvbiBGYWlsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjczNlxcXCI+NzM2PC9hPnxBbiBleHBlY3RlZCBrZXkgb24gSHR0cFJlc3BvbnNlIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczN1xcXCI+NzM3PC9hPnxBIHJlcXVpcmVkIGZlZSBkZXRhaWwgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzM4XFxcIj43Mzg8L2E+fFplcm8gcm93cyB3ZXJlIHJldHVybmVkIGZyb20gTHVtaW5lc2NlfCAgfCB8IDxhIG5hbWU9XFxcIjczOVxcXCI+NzM5PC9hPnxQcm92aWRlZCBXZWVrZW5kIE1hc2sgd2FzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzQyXFxcIj43NDI8L2E+fEN1c3RvbSBFbnRpdHkgZmllbGRzIGRvIG5vdCBtYXRjaCB0aGUgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3NDZcXFwiPjc0NjwvYT58VGhlIHByb3ZpZGVkIHNlcXVlbmNlIGlzIG5vdCB2YWxpZC58ICB8IHwgPGEgbmFtZT1cXFwiNzUxXFxcIj43NTE8L2E+fFRoZSB0eXBlIG9mIHRoZSBDdXN0b20gRW50aXR5IGlzIGRpZmZlcmVudCB0aGFuIHRoZSB0eXBlIHByb3ZpZGVkIGluIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTJcXFwiPjc1MjwvYT58THVtaW5lc2NlIHByb2Nlc3MgcmV0dXJuZWQgYW4gZXJyb3IufCAgfCB8IDxhIG5hbWU9XFxcIjc1M1xcXCI+NzUzPC9hPnxGaWxlIG5hbWUgb3IgY29udGVudCBpbmNvbXBhdGlibGUgd2l0aCBvcGVyYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjc1NVxcXCI+NzU1PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBEcml2ZSBpcyBub3QgYXMgZXhwZWN0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1N1xcXCI+NzU3PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBMdW1pbmVzY2UgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NThcXFwiPjc1ODwvYT58THVtaW5lc2NlIHRpbWVkIG91dC58ICB8IHwgPGEgbmFtZT1cXFwiNzYzXFxcIj43NjM8L2E+fEludmFsaWQgTHVzaWQgRW50aXR5IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCI3NjhcXFwiPjc2ODwvYT58RmVlIHJ1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3NjlcXFwiPjc2OTwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgYmFzZSBjdXJyZW5jeSBvZiBhIHBvcnRmb2xpbyB3aXRoIHRyYW5zYWN0aW9ucyBsb2FkZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzcxXFxcIj43NzE8L2E+fFRyYW5zYWN0aW9uIGNvbmZpZ3VyYXRpb24gc291cmNlIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI3NzRcXFwiPjc3NDwvYT58Q29tcGxpYW5jZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc1XFxcIj43NzU8L2E+fEZ1bmQgYWNjb3VudGluZyBkb2N1bWVudCBjYW5ub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NzhcXFwiPjc3ODwvYT58VW5hYmxlIHRvIGxvb2sgdXAgRlggcmF0ZSBmcm9tIHRyYWRlIGNjeSB0byBwb3J0Zm9saW8gY2N5IGZvciBzb21lIG9mIHRoZSB0cmFkZXMufCAgfCB8IDxhIG5hbWU9XFxcIjc4MlxcXCI+NzgyPC9hPnxUaGUgUHJvcGVydHkgZGVmaW5pdGlvbiBkYXRhVHlwZSBpcyBub3QgbWF0Y2hpbmcgdGhlIGRlcml2YXRpb24gZm9ybXVsYSBkYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCI3ODNcXFwiPjc4MzwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZG9tYWluIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlcml2ZWQgcHJvcGVydGllc3wgIHwgfCA8YSBuYW1lPVxcXCI3ODhcXFwiPjc4ODwvYT58Q29tcGxpYW5jZSBydW4gbm90IGZvdW5kIGZhaWx1cmUufCAgfCB8IDxhIG5hbWU9XFxcIjc5MFxcXCI+NzkwPC9hPnxDdXN0b20gRW50aXR5IGhhcyBtaXNzaW5nIG9yIGludmFsaWQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNzkxXFxcIj43OTE8L2E+fEN1c3RvbSBFbnRpdHkgZGVmaW5pdGlvbiBhbHJlYWR5IGV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI3OTJcXFwiPjc5MjwvYT58Q29tcGxpYW5jZSBQcm9wZXJ0eUtleSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTNcXFwiPjc5MzwvYT58Q29tcGxpYW5jZSBDcml0ZXJpYSBWYWx1ZSBmb3IgbWF0Y2hpbmcgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzk1XFxcIj43OTU8L2E+fENhbm5vdCBkZWxldGUgaWRlbnRpZmllciBkZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjc5NlxcXCI+Nzk2PC9hPnxUYXggcnVsZSBzZXQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTdcXFwiPjc5NzwvYT58QSB0YXggcnVsZSBzZXQgd2l0aCB0aGlzIGlkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI3OThcXFwiPjc5ODwvYT58TXVsdGlwbGUgcnVsZSBzZXRzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBrZXkgYXJlIGFwcGxpY2FibGUufCAgfCB8IDxhIG5hbWU9XFxcIjc5OVxcXCI+Nzk5PC9hPnxUaGUgcmVxdWVzdCBtdXN0IGNvbnRhaW4gYSBkYXRlIG9yIGRpYXJ5IGVudHJ5LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDBcXFwiPjgwMDwvYT58Q2FuIG5vdCB1cHNlcnQgYW4gaW5zdHJ1bWVudCBldmVudCBvZiB0aGlzIHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgwMVxcXCI+ODAxPC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODAyXFxcIj44MDI8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGlzIG1pc3Npbmcgc2FsaWVudCBpbmZvcm1hdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODAzXFxcIj44MDM8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgwNFxcXCI+ODA0PC9hPnxTb21lIGRhdGEgcmVxdWVzdGVkIGRvZXMgbm90IGZvbGxvdyB0aGUgb3JkZXIgZ3JhcGggYXNzdW1wdGlvbnMufCAgfCB8IDxhIG5hbWU9XFxcIjgwNVxcXCI+ODA1PC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCB0eXBlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDZcXFwiPjgwNjwvYT58VGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwN1xcXCI+ODA3PC9hPnxUaGUgZGVmYXVsdCB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA4XFxcIj44MDg8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODExXFxcIj44MTE8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBvcmRlci58ICB8IHwgPGEgbmFtZT1cXFwiODEyXFxcIj44MTI8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBhbGxvY2F0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTNcXFwiPjgxMzwvYT58Q2hhcnQgb2YgQWNjb3VudHMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTRcXFwiPjgxNDwvYT58QWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNVxcXCI+ODE1PC9hPnxBYm9yIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE2XFxcIj44MTY8L2E+fEFib3IgQ29uZmlndXJhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxN1xcXCI+ODE3PC9hPnxSZWNvbmNpbGlhdGlvbiBtYXBwaW5nIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MThcXFwiPjgxODwvYT58QXR0cmlidXRlIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxOVxcXCI+ODE5PC9hPnxSZWNvbmNpbGlhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMFxcXCI+ODIwPC9hPnxDdXN0b2RpYW4gQWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMVxcXCI+ODIxPC9hPnxBbGxvY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiODIyXFxcIj44MjI8L2E+fFJlY29uY2lsaWF0aW9uIHJ1biBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODIzXFxcIj44MjM8L2E+fFJlY29uY2lsaWF0aW9uIGJyZWFrIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MjRcXFwiPjgyNDwvYT58RW50aXR5IGxpbmsgdHlwZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODI4XFxcIj44Mjg8L2E+fEFkZHJlc3Mga2V5IGRlZmluaXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjlcXFwiPjgyOTwvYT58Q29tcGxpYW5jZSB0ZW1wbGF0ZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzMFxcXCI+ODMwPC9hPnxBY3Rpb24gbm90IHN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI4MzFcXFwiPjgzMTwvYT58UmVmZXJlbmNlIGxpc3Qgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzJcXFwiPjgzMjwvYT58UG9zdGluZyBNb2R1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzNcXFwiPjgzMzwvYT58VGhlIHR5cGUgb2YgcGFyYW1ldGVyIHByb3ZpZGVkIGRpZCBub3QgbWF0Y2ggdGhhdCByZXF1aXJlZCBieSB0aGUgY29tcGxpYW5jZSBydWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzRcXFwiPjgzNDwvYT58VGhlIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgYSBydWxlIGRpZCBub3QgbWF0Y2ggdGhvc2UgcmVxdWlyZWQgYnkgaXRzIHRlbXBsYXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzVcXFwiPjgzNTwvYT58VGhlIGVudGl0eSBoYXMgYSBwcm9wZXJ0eSBpbiBhIGRvbWFpbiB0aGF0IGlzIG5vdCBzdXBwcnRlZCBmb3IgdGhhdCBlbnRpdHkgdHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiODM2XFxcIj44MzY8L2E+fFN0cnVjdHVyZWQgcmVzdWx0IGRhdGEgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzdcXFwiPjgzNzwvYT58RGlhcnkgZW50cnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzhcXFwiPjgzODwvYT58RGlhcnkgZW50cnkgY291bGQgbm90IGJlIGNyZWF0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgzOVxcXCI+ODM5PC9hPnxEaWFyeSBlbnRyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODYxXFxcIj44NjE8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4NjlcXFwiPjg2OTwvYT58Q29uZmxpY3RpbmcgaW5zdHJ1bWVudCBwcm9wZXJ0aWVzIGluIGJhdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzBcXFwiPjg3MDwvYT58Q29tcGxpYW5jZSBydW4gc3VtbWFyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODcxXFxcIj44NzE8L2E+fFRoZSBzcGVjaWZpZWQgaW1wZXJzb25hdGVkIHVzZXIgZG9lcyBub3QgZXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiODc0XFxcIj44NzQ8L2E+fFByb3ZpZGVkIFByb3BlcnR5IERvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBlbnRpdHkgZmlsdGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzVcXFwiPjg3NTwvYT58Q2Fubm90IERlbGV0ZSBTeXN0ZW0gUmVmZXJlbmNlIExpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjg3NlxcXCI+ODc2PC9hPnxDbGVhcmRvd24gTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODc5XFxcIj44Nzk8L2E+fFBvcnRmb2xpb3MgZG8gbm90IGhhdmUgdGhlIHNhbWUgYmFzZSBjdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI4ODBcXFwiPjg4MDwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjb21wbGlhbmNlIGV4cHJlc3Npb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg4MVxcXCI+ODgxPC9hPnxCbG9jayBvdmVycGxhY2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODJcXFwiPjg4MjwvYT58T3JkZXIgbm90IGFwcHJvdmVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODNcXFwiPjg4MzwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgc2hhcmVkIGZpZWxkcyBvZiBhIGJsb2NrIHdpdGggYXNzb2NpYXRlZCBvcmRlcnMufCAgfCB8IDxhIG5hbWU9XFxcIjg4NlxcXCI+ODg2PC9hPnxDYW5ub3QgbG9jayB0aGUgcGVyaW9kLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODdcXFwiPjg4NzwvYT58Q2Fubm90IGFwcGx5IGNsZWFyIGRvd24gbW9kdWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODhcXFwiPjg4ODwvYT58Q2Fubm90IHVwc2VydCBJbnN0cnVtZW50IEV2ZW50IEluc3RydWN0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODlcXFwiPjg4OTwvYT58Q2Fubm90IHJlYWQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODk1XFxcIj44OTU8L2E+fFRoZSBDYXBpdGFsIFJhdGlvIENhbGN1bGF0aW9uIElzIFdyb25nLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTBcXFwiPjkxMDwvYT58Q2Fubm90IHVwZGF0ZSBhIGJsb2NrIHJlZmVyZW5jZWQgYnkgYSBwbGFjZW1lbnQufCAgfCB8IDxhIG5hbWU9XFxcIjkxMVxcXCI+OTExPC9hPnxBIEZ1bmQgdGhhdCByZWZlcmVuY2VzIHRoaXMgQWJvciBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTEyXFxcIj45MTI8L2E+fENhbm5vdCBhZGQgZGVjaXNpb24gdG8gU3RhZ2VkIE1vZGlmaWNhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTEzXFxcIj45MTM8L2E+fFRoZSBTdGFnZWQgTW9kaWZpY2F0aW9uIGNvdWxkIG5vdCBiZSBhcHBsaWVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTRcXFwiPjkxNDwvYT58QWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE1XFxcIj45MTU8L2E+fENhbm5vdCB1cHNlcnQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcHJvcGVydHkgaW4gb25lIHJlcXVlc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkxNlxcXCI+OTE2PC9hPnxQbGFjZW1lbnQgYW5kIGRpcmVjdCBkZXNjZW5kZW50cyBoYXZlIG1vcmUgZXhlY3V0ZWQgcXVhbnRpdHkgdGhhbiB0b3RhbCBwbGFjZW1lbnQgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjkxN1xcXCI+OTE3PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBFbnRyeVR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOFxcXCI+OTE4PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IGluIHRoaXMgU3RhdGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOVxcXCI+OTE5PC9hPnxQbGFjZW1lbnQgY291bGQgbm90IGJlIGNhbmNlbGxlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTIwXFxcIj45MjA8L2E+fFNoYXJlIENsYXNzIG5vdCBjb25maWd1cmVkIGluIEZ1bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTIxXFxcIj45MjE8L2E+fFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleSBub3QgY29uZmlndXJlZCBpbiBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiOTIyXFxcIj45MjI8L2E+fENvdWxkIG5vdCB1cGRhdGUgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjkyM1xcXCI+OTIzPC9hPnxNdWx0aXBsZSBzZXRzIG9mIFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleXMgY29uZmlndXJlZCBhY3Jvc3MgdGhlIFBvcnRmb2xpb3Mgb2YgYSBGdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjRcXFwiPjkyNDwvYT58T25lIG9yIG1vcmUgbWF0cml4IGNlbGxzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbWF0cml4LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjVcXFwiPjkyNTwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBwcm92aWRlZCBtYXRyaXggZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTI2XFxcIj45MjY8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjdcXFwiPjkyNzwvYT58TWF0cml4IGRlZmluaXRpb24gY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkyOFxcXCI+OTI4PC9hPnxEYXRhVHlwZSB3aXRoIElkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjlcXFwiPjkyOTwvYT58U3F1YXJlIG1hdHJpeCBpcyBpbmNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzBcXFwiPjkzMDwvYT58QSBjb25kaXRpb25hbCBsaWNlbnNlIHRlcm0gaGFzIGJlZW4gZXhjZWVkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMVxcXCI+OTMxPC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgcmVxdWVzdGVkIGlzIG5vdCBpbnRlbmRlZCBmb3IgdGhlIGVudGl0eSBwcm92aWRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTMyXFxcIj45MzI8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzNcXFwiPjkzMzwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBoYXMgYSBwcm9wZXJ0eSBub3QgYWxsb3dlZCBieSB0aGUgc3BlY2lmaWVkIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzRcXFwiPjkzNDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBoYXZlIGEgbWFuZGF0b3J5IGlkZW50aWZpZXIgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM1XFxcIj45MzU8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGFuIGlkZW50aWZpZXIgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM2XFxcIj45MzY8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCBpbmNsdWRlZCBhbiBhbGlhcyBvciBzb3J0LWJ5IGF0dHJpYnV0ZSB0aGF0IHdhcyBub3Qgb24gdGhlIGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkzN1xcXCI+OTM3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5MzhcXFwiPjkzODwvYT58VGhlIG5ldyBDbG9zZWQgUGVyaW9kIHdvdWxkIGNhdXNlIHRoZSBUaW1lbGluZSB0byBoYXZlIG5vbi1jb250aWd1b3VzIENsb3NlZCBQZXJpb2RzfCAgfCB8IDxhIG5hbWU9XFxcIjkzOVxcXCI+OTM5PC9hPnxCbG9ja2VkIGJ5IGEgTmV0d29yayBab25lfCAgfCB8IDxhIG5hbWU9XFxcIjk0MFxcXCI+OTQwPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDFcXFwiPjk0MTwvYT58T3JkZXIgbm90IGNvbXBsaWFudC58ICB8IHwgPGEgbmFtZT1cXFwiOTQyXFxcIj45NDI8L2E+fEFjdGlvbiB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBkZXBlbmRlbmN5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NDRcXFwiPjk0NDwvYT58RGVyaXZlZCBQcm9wZXJ0eSBjYWxjdWxhdGlvbiBub3QgY29tcGxldGUufCAgfCB8IDxhIG5hbWU9XFxcIjk0NVxcXCI+OTQ1PC9hPnxEZXJpdmVkIFByb3BlcnR5IGlzIG5vdCBmaWx0ZXJhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDZcXFwiPjk0NjwvYT58VGhlIGNvbmRpdGlvbnMgcHJvdmlkZWQgaGF2ZSBvbmUgb3IgbW9yZSBlcnJvcnMufCAgfCB8IDxhIG5hbWU9XFxcIjk0N1xcXCI+OTQ3PC9hPnxUaGUgcHJvcGVydHkvaWRlbnRpZmllciBkb21haW4gYW5kIGVudGl0eSBkb21haW4gZG8gbm90IG1hdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDhcXFwiPjk0ODwvYT58SW52YWxpZCBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDlcXFwiPjk0OTwvYT58RmlsdGVyYWJsZSBEZXJpdmVkIFByb3BlcnR5IGxpbWl0IHJlYWNoZWQufCAgfCB8IDxhIG5hbWU9XFxcIjk1MFxcXCI+OTUwPC9hPnxJbnZlc3RvciBSZWNvcmQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI5NTFcXFwiPjk1MTwvYT58SW52ZXN0b3IgUmVjb3JkIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTJcXFwiPjk1MjwvYT58SW52ZXN0bWVudCBBY2NvdW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUzXFxcIj45NTM8L2E+fEludmVzdG1lbnQgQWNjb3VudCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTU0XFxcIj45NTQ8L2E+fENvdWxkIE5vdCBTd2VlcCBCbG9ja3wgIHwgfCA8YSBuYW1lPVxcXCI5NTVcXFwiPjk1NTwvYT58RW50aXR5IFVuaXF1ZSBJZCBoYXMgdGhlIHdyb25nIGZvcm1hdHwgIHwgfCA8YSBuYW1lPVxcXCI5NTZcXFwiPjk1NjwvYT58UG9zdCBDbG9zZSBBY3Rpdml0eSBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk1N1xcXCI+OTU3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NThcXFwiPjk1ODwvYT58SW52YWxpZCBTZXR0bGVtZW50IEluc3RydWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCI5NTlcXFwiPjk1OTwvYT58T3JkZXIgcmVxdWlyZXMgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjk2MFxcXCI+OTYwPC9hPnxJbnZhbGlkIERhdGFQb2ludCBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjk2MVxcXCI+OTYxPC9hPnxJbnZhbGlkIFJlbGF0aW9uYWwgRGF0YXNldCBGaWVsZCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2MlxcXCI+OTYyPC9hPnxSZWxhdGlvbmFsIERhdGFzZXQgRGVmaW5pdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI5NjNcXFwiPjk2MzwvYT58VGltZWxpbmUgQm9va21hcmsgTm90IEluIE9wZW4gUGVyaW9kfCAgfCB8IDxhIG5hbWU9XFxcIjk2NFxcXCI+OTY0PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgc3BlY2lmaWVkIGlkZW50aWZpZXJzIGJ1dCB0aGUgZW50aXR5IGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY1XFxcIj45NjU8L2E+fFRoZSBzb3J0IGJ5IHByb3ZpZGVkIGhhcyBvbmUgb3IgbW9yZSBlcnJvcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY2XFxcIj45NjY8L2E+fEludmFsaWQgQ3VzdG9tIERhdGEgTW9kZWwgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjdcXFwiPjk2NzwvYT58UnVsZSBzZXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIENoZWNrIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY4XFxcIj45Njg8L2E+fFRoZSBDbG9zZWQgUGVyaW9kIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTY5XFxcIj45Njk8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIFN0b3AgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MFxcXCI+OTcwPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBMaW1pdCBQcmljZS58ICB8IHwgPGEgbmFtZT1cXFwiOTcxXFxcIj45NzE8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGUgY3VycmVudCBUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzRcXFwiPjk3NDwvYT58Q2Fubm90IFBsYWNlQmxvY2tzIGFnYWluc3QgYW4gXFwnVW5zb2xpY2l0ZWRcXCcgQmxvY2sgKGJsb2NrIGNvbnRhaW5pbmcgMCBPcmRlcnMpLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzVcXFwiPjk3NTwvYT58Tm8gUG9ydGZvbGlvIEdyb3VwIFNlbGVjdGVkfCAgfCB8IDxhIG5hbWU9XFxcIjk3NlxcXCI+OTc2PC9hPnxBbWJpZ3VvdXMgU2NvcGV8ICB8IHwgPGEgbmFtZT1cXFwiOTc3XFxcIj45Nzc8L2E+fFRoZSBwcm92aWRlZCBlbnRpdHkgbWF0Y2ggcmVxdWVzdCBpcyBub3QgdmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTc4XFxcIj45Nzg8L2E+fEludmFsaWQgVHJhbnNmZXJ8ICB8IHwgPGEgbmFtZT1cXFwiOTc5XFxcIj45Nzk8L2E+fFRoZSBuYW1lZCBzZXJpZXMgbWF0Y2hpbmcgcGF0dGVybiBpcyBub3QgdXNhYmxlIG9uIHRoZSBkYXRhc2V0IGF0IHRoZSByZXF1ZXN0ZWQgdGltZXwgIHwgXG4gKlxuICogQ29udGFjdDogaW5mb0BmaW5ib3VybmUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLFxuICAgICAgICAgSHR0cFJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBQYXJhbWV0ZXJDb2RlYywgSHR0cENvbnRleHQgXG4gICAgICAgIH0gICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2VuY29kZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9iYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2UnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9iYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXNwb25zZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC9jcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2RlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZVJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVsZXRlZEVudGl0eVJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvZGVsZXRlZEVudGl0eVJlc3BvbnNlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgT3BlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWwvb3BlcmF0aW9uJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheERhdGFzZXQgfSBmcm9tICcuLi9tb2RlbC9wYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhEYXRhc2V0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZVJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91cHNlcnRXaXRoaG9sZGluZ1RheFJhdGVSZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uL21vZGVsL3dpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBXaXRoaG9sZGluZ1RheERhdGFzZXQgfSBmcm9tICcuLi9tb2RlbC93aXRoaG9sZGluZ1RheERhdGFzZXQnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMgfSBmcm9tICcuLi9tb2RlbC93aXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hEZWxldGVXaXRoaG9sZGluZ1RheFJhdGVzUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBTY29wZSBvZiB0aGUgcmF0ZSBkYXRhc2V0XFwmIzM5O3MgcmVsYXRpb25hbCBkYXRhc2V0IGRlZmluaXRpb24uICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIENvZGUgb2YgdGhlIHJhdGUgZGF0YXNldFxcJiMzOTtzIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIHJhdGUgcm93cyB0byBkZWxldGUsIGtleWVkIGJ5IGEgY29ycmVsYXRpb24gaWQgZWNob2VkIGJhY2sgaW4gdGhlIHJlc3BvbnNlLiAqL1xuICAgIHJlcXVlc3RCb2R5OiB7IFtrZXk6IHN0cmluZ106IERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZVJlcXVlc3Q7IH07XG4gICAgLyoqIEF0b21pYyBvciBQYXJ0aWFsOyBkZWZhdWx0cyB0byBBdG9taWMuIEluIFBhcnRpYWwgbW9kZSBmYWlsdXJlcyBhcmUgcmV0dXJuZWQgICAgICAgICAgICAgIGluIHRoZSByZXNwb25zZSBib2R5IHdpdGggYSAyMDAgc3RhdHVzLiAqL1xuICAgIHN1Y2Nlc3NNb2RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoVXBzZXJ0V2l0aGhvbGRpbmdUYXhSYXRlc1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgU2NvcGUgb2YgdGhlIHJhdGUgZGF0YXNldFxcJiMzOTtzIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBDb2RlIG9mIHRoZSByYXRlIGRhdGFzZXRcXCYjMzk7cyByZWxhdGlvbmFsIGRhdGFzZXQgZGVmaW5pdGlvbi4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSByYXRlIHJvd3MgdG8gdXBzZXJ0LCBrZXllZCBieSBhIGNvcnJlbGF0aW9uIGlkIGVjaG9lZCBiYWNrIGluIHRoZSByZXNwb25zZS4gKi9cbiAgICByZXF1ZXN0Qm9keTogeyBba2V5OiBzdHJpbmddOiBVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVSZXF1ZXN0OyB9O1xuICAgIC8qKiBBdG9taWMgb3IgUGFydGlhbDsgZGVmYXVsdHMgdG8gQXRvbWljLCBiZWNhdXNlIGEgcGFydGx5IGxvYWRlZCBmZWVkIHNpbGVudGx5ICAgICAgICAgICAgICB1bmRlci13aXRoaG9sZHMuIEluIFBhcnRpYWwgbW9kZSBmYWlsdXJlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIGJvZHkgd2l0aCBhIDIwMCBzdGF0dXMuICovXG4gICAgc3VjY2Vzc01vZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlLCBjb2RlIGFuZCBtYXRjaGluZyBkaW1lbnNpb25zIG9mIGVhY2ggb2YgdGhlIHR3byBkYXRhc2V0cyB0byBjcmVhdGUuICovXG4gICAgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0OiBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24gdG8gYmUgZGVsZXRlZC4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29kZSBvZiB0aGUgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24gdG8gYmUgZGVsZXRlZC4gVG9nZXRoZXIgd2l0aCB0aGUgc2NvcGUgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgZGF0YXNldCBkZWZpbml0aW9uIHRvIGJlIGRlbGV0ZWQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIGRhdGFzZXQgZGVmaW5pdGlvbiB0byBiZSBkZWxldGVkLiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGRlZmluaXRpb24uICovXG4gICAgY29kZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbi4gVG9nZXRoZXIgd2l0aCB0aGUgc2NvcGUgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIGFzQXQgZGF0ZXRpbWUgYXQgd2hpY2ggdG8gcmV0cmlldmUgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgZGF0YXNldCBkZWZpbml0aW9uLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBkYXRhc2V0IGRlZmluaXRpb24uIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgZGVmaW5pdGlvbi4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIHJldHJpZXZlIHRoZSBkYXRhc2V0IGRlZmluaXRpb24uIERlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIGxpc3QgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9ucy4gRGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbnM7IHRoaXMgdmFsdWUgaXMgICAgICAgICAgICAgIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuIElmIGEgcGFnaW5hdGlvbiB0b2tlbiBpcyBwcm92aWRlZCwgdGhlIGZpbHRlciBhbmQgYXNBdCBmaWVsZHMgbXVzdCBub3QgaGF2ZSAgICAgICAgICAgICAgY2hhbmdlZCBzaW5jZSB0aGUgb3JpZ2luYWwgcmVxdWVzdC4gKi9cbiAgICBwYWdlPzogc3RyaW5nO1xuICAgIC8qKiBXaGVuIHBhZ2luYXRpbmcsIGxpbWl0IHRoZSByZXN1bHRzIHRvIHRoaXMgbnVtYmVyLiBEZWZhdWx0cyB0byAxMDAgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICAvKiogRXhwcmVzc2lvbiB0byBmaWx0ZXIgdGhlIHJlc3VsdHMuIEZvciBleGFtcGxlLCB0byBmaWx0ZXIgb24gdGhlIHNjb3BlLCBzcGVjaWZ5ICAgICAgICAgICAgICBcXCZxdW90O2lkLlNjb3BlIGVxIFxcJiMzOTtXaXRoaG9sZGluZ1RheFxcJiMzOTtcXCZxdW90OywgYW5kIHRvIGZpbHRlciBvbiB0aGUgY29kZSwgc3BlY2lmeSBcXCZxdW90O2lkLkNvZGUgZXEgXFwmIzM5O1VLLUxJRkUtQkxBR0FCXFwmIzM5O1xcJnF1b3Q7LiBGb3IgbW9yZSAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgZmlsdGVyaW5nIHJlc3VsdHMsIHNlZSAgICAgICAgICAgICAgaHR0cHM6Ly9zdXBwb3J0Lmx1c2lkLmNvbS9kb2NzL2ZpbHRlcmluZy1pbmZvcm1hdGlvbi1yZXRyaWV2ZWQtZnJvbS1sdXNpZC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG4gICAgLyoqIEEgbGlzdCBvZiBmaWVsZCBuYW1lcyBvciBwcm9wZXJ0aWVzIHRvIHNvcnQgYnksIGVhY2ggc3VmZml4ZWQgYnkgXFwmcXVvdDsgQVNDXFwmcXVvdDsgb3IgXFwmcXVvdDsgREVTQ1xcJnF1b3Q7LiAqL1xuICAgIHNvcnRCeT86IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIGxpc3QgdGhlIGRhdGFzZXQgZGVmaW5pdGlvbnMuIERlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZWFjaCBkZWZpbml0aW9uIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbiAgICAvKiogVGhlIHBhZ2luYXRpb24gdG9rZW4gdG8gdXNlIHRvIGNvbnRpbnVlIGxpc3RpbmcgZGF0YXNldCBkZWZpbml0aW9uczsgdGhpcyB2YWx1ZSBpcyByZXR1cm5lZCAgICAgICAgICAgICAgZnJvbSB0aGUgcHJldmlvdXMgY2FsbC4gSWYgYSBwYWdpbmF0aW9uIHRva2VuIGlzIHByb3ZpZGVkLCB0aGUgZmlsdGVyIGFuZCBhc0F0IGZpZWxkcyBtdXN0IG5vdCBoYXZlIGNoYW5nZWQgICAgICAgICAgICAgIHNpbmNlIHRoZSBvcmlnaW5hbCByZXF1ZXN0LiAqL1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIFdoZW4gcGFnaW5hdGluZywgbGltaXQgdGhlIHJlc3VsdHMgdG8gdGhpcyBudW1iZXIuIERlZmF1bHRzIHRvIDEwMCBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIC8qKiBFeHByZXNzaW9uIHRvIGZpbHRlciB0aGUgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHRvIGZpbHRlciBvbiB0aGUgc2NvcGUsIHNwZWNpZnkgICAgICAgICAgICAgIFxcJnF1b3Q7c2NvcGUgZXEgXFwmIzM5O1dpdGhob2xkaW5nVGF4XFwmIzM5O1xcJnF1b3Q7LCBhbmQgdG8gZmlsdGVyIG9uIHRoZSBjb2RlLCBzcGVjaWZ5IFxcJnF1b3Q7Y29kZSBlcSBcXCYjMzk7d2h0LW1haW4tcmF0ZXNcXCYjMzk7XFwmcXVvdDsuIEZvciBtb3JlICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBmaWx0ZXJpbmcgcmVzdWx0cywgc2VlICAgICAgICAgICAgICBodHRwczovL3N1cHBvcnQubHVzaWQuY29tL2RvY3MvZmlsdGVyaW5nLWluZm9ybWF0aW9uLXJldHJpZXZlZC1mcm9tLWx1c2lkLiAqL1xuICAgIGZpbHRlcj86IHN0cmluZztcbiAgICAvKiogQSBsaXN0IG9mIGZpZWxkIG5hbWVzIG9yIHByb3BlcnRpZXMgdG8gc29ydCBieSwgZWFjaCBzdWZmaXhlZCBieSBcXCZxdW90OyBBU0NcXCZxdW90OyBvciBcXCZxdW90OyBERVNDXFwmcXVvdDsuICovXG4gICAgc29ydEJ5PzogQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBkYXRhc2V0IGRlZmluaXRpb24gdG8gYW1lbmQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIGRhdGFzZXQgZGVmaW5pdGlvbiB0byBhbWVuZC4gVG9nZXRoZXIgd2l0aCB0aGUgc2NvcGUgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBkZWZpbml0aW9uLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIGpzb24gcGF0Y2ggZG9jdW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2OTAyLiAqL1xuICAgIG9wZXJhdGlvbjogQXJyYXk8T3BlcmF0aW9uPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbi4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29kZSBvZiB0aGUgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24uIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb21wbGV0ZSBXaXRoaG9sZGluZyBUYXggQ29uZmlndXJhdGlvbiB0byBjcmVhdGUgb3IgcmVwbGFjZS4gKi9cbiAgICB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0OiBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0O1xufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdpdGhob2xkaW5nVGF4U2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly93d3cubHVzaWQuY29tL2FwaSc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QmFzZVBhdGggPSBBcnJheS5pc0FycmF5KGJhc2VQYXRoKSA/IGJhc2VQYXRoWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpcnN0QmFzZVBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVyIHx8IG5ldyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMoKTtcbiAgICB9XG5cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtcyhodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZTogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlPzogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueVtdKS5mb3JFYWNoKCBlbGVtID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCBlbGVtLCBrZXkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksICh2YWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaCggayA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMsIHZhbHVlW2tdLCBrZXkgIT0gbnVsbCA/IGAke2tleX0uJHtrfWAgOiBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFQVJMWSBBQ0NFU1NdIEJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlczogQmF0Y2ggZGVsZXRlIFdpdGhob2xkaW5nIFRheCByYXRlIHJvd3MgZnJvbSBhIHJhdGUgZGF0YXNldC5cbiAgICAgKiBBbHNvIGhvdyBhIHJhdGUgd2l0aCBubyByZXBsYWNlbWVudCBpcyBleHBpcmVkLCB0aGVyZSBiZWluZyBubyBlZmZlY3RpdmVUbyBmaWVsZC4gRGVsZXRlcyBhcmUgIGJpdGVtcG9yYWwsIHNvIHJvd3Mgc3RheSByZWFkYWJsZSBhdCBhIHByaW9yIGFzQXQuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlcyhyZXF1ZXN0UGFyYW1ldGVycz86IEJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxCYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2U+O1xuICAgIHB1YmxpYyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCYXRjaERlbGV0ZVJlbGF0aW9uYWxEYXRhUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgYmF0Y2hEZWxldGVXaXRoaG9sZGluZ1RheFJhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogQmF0Y2hEZWxldGVXaXRoaG9sZGluZ1RheFJhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEJhdGNoRGVsZXRlUmVsYXRpb25hbERhdGFSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBiYXRjaERlbGV0ZVdpdGhob2xkaW5nVGF4UmF0ZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSByZXF1ZXN0UGFyYW1ldGVycz8ucmVxdWVzdEJvZHk7XG4gICAgICAgIGlmIChyZXF1ZXN0Qm9keSA9PT0gbnVsbCB8fCByZXF1ZXN0Qm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciByZXF1ZXN0Qm9keSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGJhdGNoRGVsZXRlV2l0aGhvbGRpbmdUYXhSYXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWNjZXNzTW9kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdWNjZXNzTW9kZTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChzdWNjZXNzTW9kZSAhPT0gdW5kZWZpbmVkICYmIHN1Y2Nlc3NNb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+c3VjY2Vzc01vZGUsICdzdWNjZXNzTW9kZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3dpdGhob2xkaW5ndGF4L3JhdGVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJGJhdGNoRGVsZXRlYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEJhdGNoRGVsZXRlUmVsYXRpb25hbERhdGFSZXNwb25zZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXM6IEJhdGNoIHVwc2VydCBXaXRoaG9sZGluZyBUYXggcmF0ZSByb3dzLCBhcHBseWluZyB0aGUgd3JpdGUtdGltZSBnYXRlcyBiZWZvcmUgYW55IHJvdyBsYW5kcy5cbiAgICAgKiBSb3cgaWRlbnRpdHkgaXMgdGhlIG1hdGNoaW5nIGRpbWVuc2lvbnMgcGx1cyBlZmZlY3RpdmVBdDsgYSByYXRlIGlzIHN1cGVyc2VkZWQgYnkgbG9hZGluZyBhIHJvdyB3aXRoIGEgIGxhdGVyIGVmZmVjdGl2ZUF0IGZvciB0aGUgc2FtZSBkaW1lbnNpb25zLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8QmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVzcG9uc2U+O1xuICAgIHB1YmxpYyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgYmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogQmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYmF0Y2hVcHNlcnRXaXRoaG9sZGluZ1RheFJhdGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LnJlcXVlc3RCb2R5O1xuICAgICAgICBpZiAocmVxdWVzdEJvZHkgPT09IG51bGwgfHwgcmVxdWVzdEJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcmVxdWVzdEJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBiYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VjY2Vzc01vZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc3VjY2Vzc01vZGU7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoc3VjY2Vzc01vZGUgIT09IHVuZGVmaW5lZCAmJiBzdWNjZXNzTW9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnN1Y2Nlc3NNb2RlLCAnc3VjY2Vzc01vZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9yYXRlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyRiYXRjaFVwc2VydGA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxCYXRjaFVwc2VydFdpdGhob2xkaW5nVGF4UmF0ZXNSZXNwb25zZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uczogQ3JlYXRlIHRoZSBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9ucy5cbiAgICAgKiBDcmVhdGUgdGhlIGFub21hbHkgYW5kIHRoZSBtYWluIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uIGZvciBhIGN1c3RvbWVyIGRvbWFpbiwgaW4gYSBzaW5nbGUgY2FsbC4gICAgICAgICAgICAgICAgVGhlIGRlZmluaXRpb25zIGFyZSBjb25zdHJ1Y3RlZCByYXRoZXIgdGhhbiBhY2NlcHRlZCBhcyBnaXZlbiwgc28gdGhlIGZpZWxkcyB0aGUgZW5naW5lIHJlYWRzIGJ5IG5hbWUgY2Fubm90ICBiZSBhYnNlbnQsIG1pc3NwZWxsZWQgb3IgY3JlYXRlZCBpbiB0aGUgd3JvbmcgZmllbGQgY2F0ZWdvcnkuIExVU0lEIGFkZHMgdGhlIG1hbmRhdG9yeSBjb3JlIHRvIGJvdGg6IHRheENvdW50cnksICBwcm9maWxlVHlwZSBhbmQgcnVsZVNvdXJjZSBhcyBzZXJpZXMgaWRlbnRpZmllcnMgKHJ1bGVTb3VyY2Ugb3B0aW9uYWwpLCBjb3VudHJ5UmF0ZSwgdHJlYXR5UmF0ZSwgYmV0dGVyUmF0ZSBhbmQgIGVuaGFuY2VkUmF0ZSBhcyB2YWx1ZSBmaWVsZHMsIHRyZWF0eVJBUywgYmV0dGVyUkFTIGFuZCBlbmhhbmNlZFJBUyBhcyB2YWx1ZSBmaWVsZHMsIGFuZCByYW5rIGFzIGEgdmFsdWUgZmllbGQgb24gIHRoZSBhbm9tYWx5IGRlZmluaXRpb24gb25seS4gICAgICAgICAgICAgICAgVGhlIGNhbGxlciBzdXBwbGllcyBvbmx5IHRoZWlyIG93biBtYXRjaGluZyBkaW1lbnNpb25zLCBnaXZlbiBwZXIgZGF0YXNldC4gVGhlIHR3byBzY2hlbWFzIG5lZWQgbm90IGJlICBpZGVudGljYWw6IGEgZGltZW5zaW9uIHByZXNlbnQgb24gb25seSBvbmUgZGF0YXNldCBpcyBzaW1wbHkgbm90IG1hdGNoZWQgb24gd2hlbiB0aGUgb3RoZXIgaXMgcXVlcmllZCwgYW4gSVNJTiAgZGltZW5zaW9uIG9uIHRoZSBhbm9tYWx5IGRhdGFzZXQgYWxvbmUgYmVpbmcgdGhlIHVzdWFsIGNhc2UuIFRoZSByZXF1ZXN0IGlzIHJlamVjdGVkIGlmIGl0IG5hbWVzIGEgZGltZW5zaW9uICB0aGF0IGNvbGxpZGVzIHdpdGggYSBtYW5kYXRvcnkgY29yZSBmaWVsZCwgb3IgaWYgaXQgb21pdHMgYSBzY29wZSBvciBhIGNvZGUuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnM+O1xuICAgIHB1YmxpYyBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnM+PjtcbiAgICBwdWJsaWMgY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucz4+O1xuICAgIHB1YmxpYyBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3QgPSByZXF1ZXN0UGFyYW1ldGVycz8uY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0O1xuICAgICAgICBpZiAoY3JlYXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0ID09PSBudWxsIHx8IGNyZWF0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9kYXRhc2V0ZGVmaW5pdGlvbnNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnM+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBjcmVhdGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBEZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb246IERlbGV0ZSBhIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uLlxuICAgICAqIERlbGV0ZSB0aGUgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24gYXQgdGhlIGdpdmVuIHNjb3BlIGFuZCBjb2RlLiBSZWplY3RlZCBpZiBhIHBvcnRmb2xpbywgZnVuZCBvciBzaGFyZSAgY2xhc3Mgc3RpbGwgcmVmZXJlbmNlcyB0aGUgY29uZmlndXJhdGlvbiwgcmF0aGVyIHRoYW4gb3JwaGFuaW5nIHRob3NlIHJlZmVyZW5jZXMuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZVdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZVdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBkZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PERlbGV0ZWRFbnRpdHlSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBkZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9jb25maWd1cmF0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PERlbGV0ZWRFbnRpdHlSZXNwb25zZT4oJ2RlbGV0ZScsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBEZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uOiBEZWxldGUgYSBXaXRoaG9sZGluZyBUYXggZGF0YXNldCBkZWZpbml0aW9uLlxuICAgICAqIERlbGV0ZSBvbmUgV2l0aGhvbGRpbmcgVGF4IHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uLCBzdWJqZWN0IHRvIHRoZSBwbGF0Zm9ybVxcJiMzOTtzIG93biBydWxlcyBvbiB3aGF0IG1heSBiZSAgY2hhbmdlZCBvbiBhIHBvcHVsYXRlZCBkYXRhc2V0LlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBkZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPERlbGV0ZWRFbnRpdHlSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBkZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxEZWxldGVkRW50aXR5UmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZVdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZGVsZXRlV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3dpdGhob2xkaW5ndGF4L2RhdGFzZXRkZWZpbml0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PERlbGV0ZWRFbnRpdHlSZXNwb25zZT4oJ2RlbGV0ZScsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRUFSTFkgQUNDRVNTXSBHZXRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb246IEdldCBhIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uLlxuICAgICAqIFJldHJpZXZlIGEgc2luZ2xlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uIGJ5IHNjb3BlIGFuZCBjb2RlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uPjtcbiAgICBwdWJsaWMgZ2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uPj47XG4gICAgcHVibGljIGdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+PjtcbiAgICBwdWJsaWMgZ2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFzQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uYXNBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChhc0F0ICE9PSB1bmRlZmluZWQgJiYgYXNBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmFzQXQsICdhc0F0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9jb25maWd1cmF0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFQVJMWSBBQ0NFU1NdIEdldFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb246IEdldCBhIFdpdGhob2xkaW5nIFRheCBkYXRhc2V0IGRlZmluaXRpb24uXG4gICAgICogUmV0cmlldmUgb25lIFdpdGhob2xkaW5nIFRheCBkYXRhc2V0IGRlZmluaXRpb24gYnkgc2NvcGUgYW5kIGNvZGUsIGluIHRoZSBzYW1lIHNoYXBlIHRoZSBjcmVhdGUgcmV0dXJuczogdGhlICBtYXRjaGluZyBkaW1lbnNpb25zIHRoZSBjYWxsZXIgc3VwcGxpZWQuIFRoZSBtYW5kYXRvcnkgY29yZSBpcyBub3QgcmV0dXJuZWQgaGVyZTsgcmVhZCB0aGUgZnVsbCBmaWVsZCBzY2hlbWEgIGZyb20gdGhlIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uIGF0IHRoZSByZXR1cm5lZCBocmVmLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxXaXRoaG9sZGluZ1RheERhdGFzZXQ+O1xuICAgIHB1YmxpYyBnZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFdpdGhob2xkaW5nVGF4RGF0YXNldD4+O1xuICAgIHB1YmxpYyBnZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxXaXRoaG9sZGluZ1RheERhdGFzZXQ+PjtcbiAgICBwdWJsaWMgZ2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IEdldFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvd2l0aGhvbGRpbmd0YXgvZGF0YXNldGRlZmluaXRpb25zLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8V2l0aGhvbGRpbmdUYXhEYXRhc2V0PignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VBUkxZIEFDQ0VTU10gTGlzdFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbnM6IExpc3QgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb25zLlxuICAgICAqIExpc3QgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9ucyBhY3Jvc3MgZXZlcnkgc2NvcGUgdGhlIGNhbGxlciBpcyBlbnRpdGxlZCB0by4gVG8gbGlzdCB0aGUgIGNvbmZpZ3VyYXRpb25zIG9mIGEgc2luZ2xlIHNjb3BlLCBmaWx0ZXIgb24gdGhlIHNjb3BlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsaXN0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+O1xuICAgIHB1YmxpYyBsaXN0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8UGFnZWRSZXNvdXJjZUxpc3RPZldpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj4+O1xuICAgIHB1YmxpYyBsaXN0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24+PjtcbiAgICBwdWJsaWMgbGlzdFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXNBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hc0F0O1xuICAgICAgICBjb25zdCBwYWdlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBhZ2U7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSByZXF1ZXN0UGFyYW1ldGVycz8uZmlsdGVyO1xuICAgICAgICBjb25zdCBzb3J0QnkgPSByZXF1ZXN0UGFyYW1ldGVycz8uc29ydEJ5O1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGFzQXQgIT09IHVuZGVmaW5lZCAmJiBhc0F0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+YXNBdCwgJ2FzQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFnZSAhPT0gdW5kZWZpbmVkICYmIHBhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5wYWdlLCAncGFnZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+bGltaXQsICdsaW1pdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5maWx0ZXIsICdmaWx0ZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydEJ5KSB7XG4gICAgICAgICAgICBzb3J0QnkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICA8YW55PmVsZW1lbnQsICdzb3J0QnknKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9jb25maWd1cmF0aW9uc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uPignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VBUkxZIEFDQ0VTU10gTGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zOiBMaXN0IFdpdGhob2xkaW5nIFRheCBkYXRhc2V0IGRlZmluaXRpb25zLlxuICAgICAqIExpc3QgdGhlIFdpdGhob2xkaW5nIFRheCBkYXRhc2V0IGRlZmluaXRpb25zIGFjcm9zcyBldmVyeSBzY29wZSB0aGUgY2FsbGVyIGlzIGVudGl0bGVkIHRvLCBlYWNoIGluIHRoZSBzYW1lICBzaGFwZSB0aGUgY3JlYXRlIHJldHVybnMuIFRvIGxpc3QgdGhlIGRlZmluaXRpb25zIG9mIGEgc2luZ2xlIHNjb3BlLCBmaWx0ZXIgb24gdGhlIHNjb3BlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsaXN0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0V2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbnNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8UGFnZWRSZXNvdXJjZUxpc3RPZldpdGhob2xkaW5nVGF4RGF0YXNldD47XG4gICAgcHVibGljIGxpc3RXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9ucyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheERhdGFzZXQ+PjtcbiAgICBwdWJsaWMgbGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2VkUmVzb3VyY2VMaXN0T2ZXaXRoaG9sZGluZ1RheERhdGFzZXQ+PjtcbiAgICBwdWJsaWMgbGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25zUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGFnZTtcbiAgICAgICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWx0ZXI7XG4gICAgICAgIGNvbnN0IHNvcnRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0Qnk7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdlICE9PSB1bmRlZmluZWQgJiYgcGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnBhZ2UsICdwYWdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmZpbHRlciwgJ2ZpbHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICAgIHNvcnRCeS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3NvcnRCeScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3dpdGhob2xkaW5ndGF4L2RhdGFzZXRkZWZpbml0aW9uc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mV2l0aGhvbGRpbmdUYXhEYXRhc2V0PignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VBUkxZIEFDQ0VTU10gUGF0Y2hXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uOiBQYXRjaCBhIFdpdGhob2xkaW5nIFRheCBkYXRhc2V0IGRlZmluaXRpb24uXG4gICAgICogQW1lbmQgb25lIFdpdGhob2xkaW5nIFRheCByZWxhdGlvbmFsIGRhdGFzZXQgZGVmaW5pdGlvbiwgYWRkaW5nIGEgbWF0Y2hpbmcgZGltZW5zaW9uIGJlaW5nIHRoZSBjb21tb24gY2FzZS4gIFN1YmplY3QgdG8gdGhlIHBsYXRmb3JtXFwmIzM5O3Mgb3duIHJ1bGVzIG9uIHdoYXQgbWF5IGJlIGNoYW5nZWQgb24gYSBwb3B1bGF0ZWQgZGF0YXNldC4gICAgICAgICAgICAgICAgT25seSB0aGUgbWF0Y2hpbmcgZGltZW5zaW9ucyB0aGUgZG9jdW1lbnQgYWRkcmVzc2VzIGFyZSBhZmZlY3RlZDsgYSBkaW1lbnNpb24gaXQgZG9lcyBub3QgYWRkcmVzcyBpcyBsZWZ0IGFzICBpdCBpcy4gQXBwZW5kIGEgZGltZW5zaW9uIHdpdGggYW4gYWRkIG9uIFxcJnF1b3Q7L2RpbWVuc2lvbnMvLVxcJnF1b3Q7LCBpbnNlcnQgb25lIGF0IGEgcG9zaXRpb24gd2l0aCBhbiBhZGQgb24gaXRzIGluZGV4LCAgYW5kIHJlbW92ZSBvbmUgd2l0aCBhIHJlbW92ZSBvbiBpdHMgaW5kZXguIFRvIGFtZW5kIGEgZGltZW5zaW9uLCByZW1vdmUgaXQgYW5kIGFkZCBpdCBhZ2Fpbi4gICAgICAgICAgICAgICAgQSBkaW1lbnNpb24gd2hvc2UgbmFtZSBjb2xsaWRlcyB3aXRoIGEgbWFuZGF0b3J5IGNvcmUgZmllbGQgaXMgcmVqZWN0ZWQsIGFzIGlzIGFueSBhdHRlbXB0IHRvIGFkZCBhIHJhdGUgdGllcjogIHRoZSB0aWVyIHNldCBpcyBmaXhlZCBhdCBmb3VyIGFuZCBjYW5ub3QgYmUgZXh0ZW5kZWQgYnkgc2NoZW1hIGV2b2x1dGlvbiwgYmVjYXVzZSB0aGUgZW5naW5lIGNvdWxkIG5ldmVyIHJlYWQgIGEgdGllciBpdCBkb2VzIG5vdCBrbm93IGJ5IG5hbWUuIFRoZSBtYW5kYXRvcnkgY29yZSBpcyBub3QgYWRkcmVzc2FibGUgYnkgdGhpcyBlbmRwb2ludCBhdCBhbGwuICAgICAgICAgICAgICAgIFRoZSBhbWVuZGVkIGRhdGFzZXQgaXMgcmV0dXJuZWQgaW4gdGhlIHNhbWUgc2hhcGUgdGhlIGdldCBhbmQgdGhlIGxpc3QgcmV0dXJuOiB0aGUgbWF0Y2hpbmcgZGltZW5zaW9ucyBhbG9uZS4gIFJlYWQgdGhlIGZ1bGwgZmllbGQgc2NoZW1hIGZyb20gdGhlIHJlbGF0aW9uYWwgZGF0YXNldCBkZWZpbml0aW9uIGF0IHRoZSByZXR1cm5lZCBocmVmLiAgVGhlIGJlaGF2aW91ciBpcyBkZWZpbmVkIGJ5IHRoZSBKU09OIFBhdGNoIHNwZWNpZmljYXRpb24uICAgIEN1cnJlbnRseSBzdXBwb3J0ZWQgZmllbGRzIGFyZTogRGltZW5zaW9ucy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGF0Y2hXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogUGF0Y2hXaXRoaG9sZGluZ1RheERhdGFzZXREZWZpbml0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFdpdGhob2xkaW5nVGF4RGF0YXNldD47XG4gICAgcHVibGljIHBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IFBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFdpdGhob2xkaW5nVGF4RGF0YXNldD4+O1xuICAgIHB1YmxpYyBwYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBQYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8V2l0aGhvbGRpbmdUYXhEYXRhc2V0Pj47XG4gICAgcHVibGljIHBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IFBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHBhdGNoV2l0aGhvbGRpbmdUYXhEYXRhc2V0RGVmaW5pdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSByZXF1ZXN0UGFyYW1ldGVycz8ub3BlcmF0aW9uO1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBudWxsIHx8IG9wZXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcGVyYXRpb24gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwYXRjaFdpdGhob2xkaW5nVGF4RGF0YXNldERlZmluaXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvd2l0aGhvbGRpbmd0YXgvZGF0YXNldGRlZmluaXRpb25zLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8V2l0aGhvbGRpbmdUYXhEYXRhc2V0PigncGF0Y2gnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFQVJMWSBBQ0NFU1NdIFVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbjogVXBzZXJ0IGEgV2l0aGhvbGRpbmcgVGF4IENvbmZpZ3VyYXRpb24uXG4gICAgICogQ3JlYXRlIG9yIHJlcGxhY2UgdGhlIFdpdGhob2xkaW5nIFRheCBDb25maWd1cmF0aW9uIGF0IHRoZSBnaXZlbiBzY29wZSBhbmQgY29kZS4gVGhlIHdyaXRlIGlzIGEgZnVsbCByZXBsYWNlICBvbiB0aGUgb2JqZWN0IHJhdGhlciB0aGFuIGEgcGFydGlhbCB1cGRhdGUsIHNvIHRoZSByZXF1ZXN0IG11c3QgY2FycnkgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgIFRoZSB3cml0ZSBpcyByZWplY3RlZCBpZiBlaXRoZXIgcmVmZXJlbmNlZCBkYXRhc2V0IGRvZXMgbm90IGV4aXN0LCBpZiBlaXRoZXIgaXMgbWlzc2luZyBhIG1hbmRhdG9yeSBjb3JlIGZpZWxkICBvciBoYXMgb25lIGluIHRoZSB3cm9uZyBmaWVsZCBjYXRlZ29yeSwgaWYgYW55IGN1c3RvbWVyLWRlZmluZWQgZGltZW5zaW9uIGluIGVpdGhlciBkYXRhc2V0IGhhcyBubyB2YWx1ZSBzb3VyY2UgIGRlY2xhcmF0aW9uLCBvciBpZiBhIGRlY2xhcmF0aW9uIG5hbWVzIGEgZGltZW5zaW9uIG5laXRoZXIgZGF0YXNldCBoYXMuIEVycm9ycyBuYW1lIHRoZSBzcGVjaWZpYyBmaWVsZC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBzZXJ0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBzZXJ0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj47XG4gICAgcHVibGljIHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj4+O1xuICAgIHB1YmxpYyB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb24ocmVxdWVzdFBhcmFtZXRlcnM/OiBVcHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uPj47XG4gICAgcHVibGljIHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbihyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3Q7XG4gICAgICAgIGlmICh1cHNlcnRXaXRoaG9sZGluZ1RheENvbmZpZ3VyYXRpb25SZXF1ZXN0ID09PSBudWxsIHx8IHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXBzZXJ0V2l0aGhvbGRpbmdUYXhDb25maWd1cmF0aW9uUmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS93aXRoaG9sZGluZ3RheC9jb25maWd1cmF0aW9ucy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvbj4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHVwc2VydFdpdGhob2xkaW5nVGF4Q29uZmlndXJhdGlvblJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==
|