@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
253 lines • 29.9 kB
JavaScript
import { WizardStep } from './models';
import { WizardStage } from './models/wizard-stage';
export class WizardBuilder {
/**
* Initializes a new instance of the WizardBuilder class.
*/
constructor() {
this.hideStepsListSidePane = false;
this.showExitButton = true;
this.showExitConfirmationDialog = true;
this.isInPreviewState = false;
this.canNavigateToPreviousStep = true;
this.wizardStages = [];
this.wizardBannerItems = [];
}
/**
* Resource strings for the component.
*/
get strings() {
return MsftSme.getStrings();
}
/**
* Gets the array of wizard stages (each containing the corresponding wizard steps).
*/
get stages() {
return this.wizardStages;
}
get bannerItems() {
return this.wizardBannerItems;
}
/**
* Gets the wizard finish view.
*/
get finishView() {
return this.wizardFinishView;
}
/**
* Sets the wizard finish view.
*/
set finishView(value) {
this.wizardFinishView = value;
}
/**
* Gets the wizard heading.
*/
get heading() {
return this.wizardHeading;
}
/**
* Sets the wizard heading.
*/
set heading(value) {
this.wizardHeading = value;
}
/**
* Gets the heading subtitle.
*/
get headerData() {
return this.wizardHeaderData;
}
/**
* Sets the heading subtitle.
*/
set headerData(value) {
this.wizardHeaderData = value;
}
/**
* Gets the wizard exit button title.
*/
get exitButtonTitle() {
return this.wizardExitButtonTitle;
}
/**
* Sets the wizard exit button title.
*/
set exitButtonTitle(value) {
this.wizardExitButtonTitle = value;
}
/**
* Gets the wizard finish button title.
*/
get finishButtonTitle() {
return this.wizardFinishButtonTitle;
}
/**
* Sets the wizard finish button title.
*/
set finishButtonTitle(value) {
this.wizardFinishButtonTitle = value;
}
/**
* Gets the boolean indicating whether the steps list will be hidden (default is false).
*/
get hideStepsListSidePane() {
return this.wizardHideStepsListSidePane;
}
/**
* Sets whether the steps list will be hidden or not (useful if there is just one step per stage for all stages).
*/
set hideStepsListSidePane(value) {
this.wizardHideStepsListSidePane = value;
}
/**
* Gets the boolean indicating whether a exit button is shown throughout the wizard.
*/
get showExitButton() {
return this.wizardShowExitButton;
}
/**
* Sets the boolean indicating whether a exit button is shown throughout the wizard.
*/
set showExitButton(value) {
this.wizardShowExitButton = value;
}
/**
* Gets the boolean indicating whether a confirmation dialog will be shown when 'Exit' is clicked.
*/
get showExitConfirmationDialog() {
return this.wizardShowExitConfirmationDialog;
}
/**
* Sets the boolean indicating whether a confirmation dialog will be shown when 'Exit' is clicked.
*/
set showExitConfirmationDialog(value) {
this.wizardShowExitConfirmationDialog = value;
}
/**
* Gets preview status.
*/
get isInPreviewState() {
return this.wizardIsInPreviewState;
}
/**
* Sets preview status.
*/
set isInPreviewState(value) {
this.wizardIsInPreviewState = value;
}
/**
* Gets if navigating to a previous step is allowed.
*/
get canNavigateToPreviousStep() {
return this.wizardCanNavigateToPreviousStep;
}
/**
* Sets if navigating to a previous step is allowed.
*/
set canNavigateToPreviousStep(value) {
this.wizardCanNavigateToPreviousStep = value;
}
/**
* Creates a new WizardStep, and adds it to the specified WizardStage.
* If the specified WizardStage does not exist, it will be created.
*
* @param stepName - The name for the new WizardStep.
* @param stepComponentType - The componentType for the new WizardStep.
* @param stageName - The name of the WizardStage in which this new WizardStep should be added.
*/
addStepInStage(stepName, stepComponentType, stageName) {
const step = new WizardStep(stepComponentType, { name: stepName });
const existingStage = this.stages.find(eachStage => eachStage.name === stageName);
if (existingStage) {
existingStage.steps.push(step);
}
else {
this.stages.push(new WizardStage({ name: stageName, steps: [step] }));
}
}
/**
* Creates a new WizardStep, and adds it to the specified WizardStage at the specified index.
* If the specified WizardStage does not exist, it will be created.
*
* @param stepName - The name for the new WizardStep.
* @param stepComponentType - The componentType for the new WizardStep.
* @param stageName - The name of the WizardStage in which this new WizardStep should be added.
* @param index - The step index to insert step (will increase index of existing step at given index by 1 if any)
*/
addStepInStageByIndex(stepName, stepComponentType, stageName, index) {
const step = new WizardStep(stepComponentType, { name: stepName });
const existingStage = this.stages.find(eachStage => eachStage.name === stageName);
if (existingStage) {
if (index > existingStage.steps.length - 1) {
existingStage.steps.push(step);
}
else {
existingStage.steps.splice(index, 0, step);
}
}
else {
this.stages.push(new WizardStage({ name: stageName, steps: [step] }));
}
}
/**
* Removes WizardStep at specified index in specified stage.
* If the specified stage or index does not exist, false will be returned.
*
* @param stageName - The name of the Wizard stage in which to remove the step.
* @param index - The step index to be removed (will decrease indices of proceeding steps)
* @returns - True if step is removed successfully, false otherwise.
*/
removeStepInStageByIndex(stageName, index) {
const stage = this.stages.find(eachStage => eachStage.name === stageName);
if (stage && index < stage.steps.length) {
stage.steps.splice(index, 1);
return true;
}
return false;
}
/**
* Creates a new WizardStage at the specified index.
*
* @param stageName - The Name for the new WizardStage
* @param index - The stage index to insert stage (will increase index of existing stage at given index by 1 if any)
*/
addStageByIndex(stageName, index) {
if (index > this.stages.length - 1) {
this.stages.push(new WizardStage({ name: stageName, steps: [] }));
}
else {
this.stages.splice(index, 0, new WizardStage({ name: stageName, steps: [] }));
}
}
/**
* Adds banner items to the entire wizard.
*
* @param item - The Banner Item
*/
addWizardBannerItems(item) {
this.wizardBannerItems.push(item);
}
/**
* Clears all steps from given stage.
* If the specified stage does not exist, false will be returned.
*
* @param stageName - The name of the Wizard stage to clear steps from.
* @returns - True if stage is cleared successfully, false otherwise.
*/
clearStage(stageName) {
const stage = this.stages.find(eachStage => eachStage.name === stageName);
if (stage) {
stage.steps = [];
return true;
}
return false;
}
/**
* Creates a new WizardStep for the Finish view using the component specified.
*/
addFinishView(stepComponentType) {
this.finishView = new WizardStep(stepComponentType, { name: this.strings.MsftSmeShell.Angular.Common.finish });
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy93aXphcmQvd2l6YXJkLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsTUFBTSxPQUFPLGFBQWE7SUFrRXRCOztPQUVHO0lBQ0g7UUFDSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQTNFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBVyxDQUFDO0lBQ3pDLENBQUM7SUF3RUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVLENBQUMsS0FBaUI7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlLENBQUMsS0FBYTtRQUNwQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsaUJBQWlCLENBQUMsS0FBYTtRQUN0QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcscUJBQXFCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcscUJBQXFCLENBQUMsS0FBYztRQUMzQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGNBQWMsQ0FBQyxLQUFjO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVywwQkFBMEI7UUFDakMsT0FBTyxJQUFJLENBQUMsZ0NBQWdDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVywwQkFBMEIsQ0FBQyxLQUFjO1FBQ2hELElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxnQkFBZ0IsQ0FBQyxLQUFjO1FBQ3RDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyx5QkFBeUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyx5QkFBeUIsQ0FBQyxLQUFjO1FBQy9DLElBQUksQ0FBQywrQkFBK0IsR0FBRyxLQUFLLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxjQUFjLENBQUMsUUFBZ0IsRUFBRSxpQkFBNEIsRUFBRSxTQUFpQjtRQUVuRixNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztRQUVsRixJQUFJLGFBQWEsRUFBRTtZQUNmLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekU7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLGlCQUE0QixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUV6RyxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztRQUVsRixJQUFJLGFBQWEsRUFBRTtZQUNmLElBQUksS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDeEMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0gsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM5QztTQUNKO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekU7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLHdCQUF3QixDQUFDLFNBQWlCLEVBQUUsS0FBYTtRQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7UUFFMUUsSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3JDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksZUFBZSxDQUFDLFNBQWlCLEVBQUUsS0FBYTtRQUNuRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDckU7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakY7SUFDTCxDQUFDO0lBRUQ7Ozs7TUFJRTtJQUNLLG9CQUFvQixDQUFDLElBQWdCO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFVBQVUsQ0FBQyxTQUFpQjtRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7UUFFMUUsSUFBSSxLQUFLLEVBQUU7WUFDUCxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLGlCQUE0QjtRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuSCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IEJhbm5lckl0ZW0gfSBmcm9tICcuLi9iYW5uZXInO1xyXG5pbXBvcnQgeyBTbWVIZWFkZXJEYXRhIH0gZnJvbSAnLi4vaGVhZGVyJztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgV2l6YXJkQnVpbGRlckludGVyZmFjZSB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1idWlsZGVyLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFdpemFyZFN0YWdlIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0YWdlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBXaXphcmRCdWlsZGVyIGltcGxlbWVudHMgV2l6YXJkQnVpbGRlckludGVyZmFjZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvdXJjZSBzdHJpbmdzIGZvciB0aGUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN0cmluZ3MoKTogU3RyaW5ncyB7XHJcbiAgICAgICAgcmV0dXJuIE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YWdlcyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHdpemFyZFN0YWdlczogV2l6YXJkU3RhZ2VbXTtcclxuXHJcbiAgICBwcml2YXRlIHdpemFyZEJhbm5lckl0ZW1zOiBCYW5uZXJJdGVtW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmluaXNoIHZpZXcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB3aXphcmRGaW5pc2hWaWV3OiBXaXphcmRTdGVwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlYWRpbmcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB3aXphcmRIZWFkaW5nOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3VidGl0bGUgZm9yIHRoZSBoZWFkaW5nIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgd2l6YXJkSGVhZGVyRGF0YTogU21lSGVhZGVyRGF0YTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiBleGl0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB3aXphcmRFeGl0QnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiBmaW5pc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHdpemFyZEZpbmlzaEJ1dHRvblRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBzdGVwcyBsaXN0IHNpZGUgcGFuZSB3aWxsIGJlIHZpc2libGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgd2l6YXJkSGlkZVN0ZXBzTGlzdFNpZGVQYW5lOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgd2l6YXJkIGhhcyBhbiBleGl0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB3aXphcmRTaG93RXhpdEJ1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgYSBjb25maXJtYXRpb24gZGlhbG9nIHNob3VsZCBiZSBzaG93biB3aGVuICdFeGl0JyBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHdpemFyZFNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgd2l6YXJkIGlzIGluIHByZXZpZXcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgd2l6YXJkSXNJblByZXZpZXdTdGF0ZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHdpemFyZCBjYW4gbmF2aWdhdGUgdG8gYSBwcmV2aW91cyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHdpemFyZENhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXA6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgV2l6YXJkQnVpbGRlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlU3RlcHNMaXN0U2lkZVBhbmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGl0QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzSW5QcmV2aWV3U3RhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2l6YXJkU3RhZ2VzID0gW107XHJcbiAgICAgICAgdGhpcy53aXphcmRCYW5uZXJJdGVtcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYXJyYXkgb2Ygd2l6YXJkIHN0YWdlcyAoZWFjaCBjb250YWluaW5nIHRoZSBjb3JyZXNwb25kaW5nIHdpemFyZCBzdGVwcykuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RhZ2VzKCk6IFdpemFyZFN0YWdlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpemFyZFN0YWdlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGJhbm5lckl0ZW1zKCk6IEJhbm5lckl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2l6YXJkQmFubmVySXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3aXphcmQgZmluaXNoIHZpZXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZmluaXNoVmlldygpOiBXaXphcmRTdGVwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aXphcmRGaW5pc2hWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2l6YXJkIGZpbmlzaCB2aWV3LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGZpbmlzaFZpZXcodmFsdWU6IFdpemFyZFN0ZXApIHtcclxuICAgICAgICB0aGlzLndpemFyZEZpbmlzaFZpZXcgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHdpemFyZCBoZWFkaW5nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGhlYWRpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aXphcmRIZWFkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2l6YXJkIGhlYWRpbmcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgaGVhZGluZyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy53aXphcmRIZWFkaW5nID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBoZWFkaW5nIHN1YnRpdGxlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGhlYWRlckRhdGEoKTogU21lSGVhZGVyRGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2l6YXJkSGVhZGVyRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGhlYWRpbmcgc3VidGl0bGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgaGVhZGVyRGF0YSh2YWx1ZTogU21lSGVhZGVyRGF0YSkge1xyXG4gICAgICAgIHRoaXMud2l6YXJkSGVhZGVyRGF0YSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgd2l6YXJkIGV4aXQgYnV0dG9uIHRpdGxlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGV4aXRCdXR0b25UaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpemFyZEV4aXRCdXR0b25UaXRsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHdpemFyZCBleGl0IGJ1dHRvbiB0aXRsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBleGl0QnV0dG9uVGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMud2l6YXJkRXhpdEJ1dHRvblRpdGxlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3aXphcmQgZmluaXNoIGJ1dHRvbiB0aXRsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBmaW5pc2hCdXR0b25UaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpemFyZEZpbmlzaEJ1dHRvblRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgd2l6YXJkIGZpbmlzaCBidXR0b24gdGl0bGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgZmluaXNoQnV0dG9uVGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMud2l6YXJkRmluaXNoQnV0dG9uVGl0bGUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdGVwcyBsaXN0IHdpbGwgYmUgaGlkZGVuIChkZWZhdWx0IGlzIGZhbHNlKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoaWRlU3RlcHNMaXN0U2lkZVBhbmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2l6YXJkSGlkZVN0ZXBzTGlzdFNpZGVQYW5lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSBzdGVwcyBsaXN0IHdpbGwgYmUgaGlkZGVuIG9yIG5vdCAodXNlZnVsIGlmIHRoZXJlIGlzIGp1c3Qgb25lIHN0ZXAgcGVyIHN0YWdlIGZvciBhbGwgc3RhZ2VzKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBoaWRlU3RlcHNMaXN0U2lkZVBhbmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLndpemFyZEhpZGVTdGVwc0xpc3RTaWRlUGFuZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBleGl0IGJ1dHRvbiBpcyBzaG93biB0aHJvdWdob3V0IHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2hvd0V4aXRCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2l6YXJkU2hvd0V4aXRCdXR0b247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhIGV4aXQgYnV0dG9uIGlzIHNob3duIHRocm91Z2hvdXQgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzaG93RXhpdEJ1dHRvbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMud2l6YXJkU2hvd0V4aXRCdXR0b24gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aWxsIGJlIHNob3duIHdoZW4gJ0V4aXQnIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2hvd0V4aXRDb25maXJtYXRpb25EaWFsb2coKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2l6YXJkU2hvd0V4aXRDb25maXJtYXRpb25EaWFsb2c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2lsbCBiZSBzaG93biB3aGVuICdFeGl0JyBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy53aXphcmRTaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBwcmV2aWV3IHN0YXR1cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpc0luUHJldmlld1N0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpemFyZElzSW5QcmV2aWV3U3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHByZXZpZXcgc3RhdHVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGlzSW5QcmV2aWV3U3RhdGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLndpemFyZElzSW5QcmV2aWV3U3RhdGUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaWYgbmF2aWdhdGluZyB0byBhIHByZXZpb3VzIHN0ZXAgaXMgYWxsb3dlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpemFyZENhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGlmIG5hdmlnYXRpbmcgdG8gYSBwcmV2aW91cyBzdGVwIGlzIGFsbG93ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMud2l6YXJkQ2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXaXphcmRTdGVwLCBhbmQgYWRkcyBpdCB0byB0aGUgc3BlY2lmaWVkIFdpemFyZFN0YWdlLlxyXG4gICAgICogSWYgdGhlIHNwZWNpZmllZCBXaXphcmRTdGFnZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGVwTmFtZSAtIFRoZSBuYW1lIGZvciB0aGUgbmV3IFdpemFyZFN0ZXAuXHJcbiAgICAgKiBAcGFyYW0gc3RlcENvbXBvbmVudFR5cGUgLSBUaGUgY29tcG9uZW50VHlwZSBmb3IgdGhlIG5ldyBXaXphcmRTdGVwLlxyXG4gICAgICogQHBhcmFtIHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBXaXphcmRTdGFnZSBpbiB3aGljaCB0aGlzIG5ldyBXaXphcmRTdGVwIHNob3VsZCBiZSBhZGRlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFN0ZXBJblN0YWdlKHN0ZXBOYW1lOiBzdHJpbmcsIHN0ZXBDb21wb25lbnRUeXBlOiBUeXBlPGFueT4sIHN0YWdlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgICAgIGNvbnN0IHN0ZXAgPSBuZXcgV2l6YXJkU3RlcChzdGVwQ29tcG9uZW50VHlwZSwgeyBuYW1lOiBzdGVwTmFtZSB9KTtcclxuICAgICAgICBjb25zdCBleGlzdGluZ1N0YWdlID0gdGhpcy5zdGFnZXMuZmluZChlYWNoU3RhZ2UgPT4gZWFjaFN0YWdlLm5hbWUgPT09IHN0YWdlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChleGlzdGluZ1N0YWdlKSB7XHJcbiAgICAgICAgICAgIGV4aXN0aW5nU3RhZ2Uuc3RlcHMucHVzaChzdGVwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YWdlcy5wdXNoKG5ldyBXaXphcmRTdGFnZSh7IG5hbWU6IHN0YWdlTmFtZSwgc3RlcHM6IFtzdGVwXSB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXaXphcmRTdGVwLCBhbmQgYWRkcyBpdCB0byB0aGUgc3BlY2lmaWVkIFdpemFyZFN0YWdlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXHJcbiAgICAgKiBJZiB0aGUgc3BlY2lmaWVkIFdpemFyZFN0YWdlIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0ZXBOYW1lIC0gVGhlIG5hbWUgZm9yIHRoZSBuZXcgV2l6YXJkU3RlcC5cclxuICAgICAqIEBwYXJhbSBzdGVwQ29tcG9uZW50VHlwZSAtIFRoZSBjb21wb25lbnRUeXBlIGZvciB0aGUgbmV3IFdpemFyZFN0ZXAuXHJcbiAgICAgKiBAcGFyYW0gc3RhZ2VOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIFdpemFyZFN0YWdlIGluIHdoaWNoIHRoaXMgbmV3IFdpemFyZFN0ZXAgc2hvdWxkIGJlIGFkZGVkLlxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIHN0ZXAgaW5kZXggdG8gaW5zZXJ0IHN0ZXAgKHdpbGwgaW5jcmVhc2UgaW5kZXggb2YgZXhpc3Rpbmcgc3RlcCBhdCBnaXZlbiBpbmRleCBieSAxIGlmIGFueSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFN0ZXBJblN0YWdlQnlJbmRleChzdGVwTmFtZTogc3RyaW5nLCBzdGVwQ29tcG9uZW50VHlwZTogVHlwZTxhbnk+LCBzdGFnZU5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgICAgICBjb25zdCBzdGVwID0gbmV3IFdpemFyZFN0ZXAoc3RlcENvbXBvbmVudFR5cGUsIHsgbmFtZTogc3RlcE5hbWUgfSk7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTdGFnZSA9IHRoaXMuc3RhZ2VzLmZpbmQoZWFjaFN0YWdlID0+IGVhY2hTdGFnZS5uYW1lID09PSBzdGFnZU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAoZXhpc3RpbmdTdGFnZSkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiBleGlzdGluZ1N0YWdlLnN0ZXBzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGV4aXN0aW5nU3RhZ2Uuc3RlcHMucHVzaChzdGVwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4aXN0aW5nU3RhZ2Uuc3RlcHMuc3BsaWNlKGluZGV4LCAwLCBzdGVwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VzLnB1c2gobmV3IFdpemFyZFN0YWdlKHsgbmFtZTogc3RhZ2VOYW1lLCBzdGVwczogW3N0ZXBdIH0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIFdpemFyZFN0ZXAgYXQgc3BlY2lmaWVkIGluZGV4IGluIHNwZWNpZmllZCBzdGFnZS5cclxuICAgICAqIElmIHRoZSBzcGVjaWZpZWQgc3RhZ2Ugb3IgaW5kZXggZG9lcyBub3QgZXhpc3QsIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBXaXphcmQgc3RhZ2UgaW4gd2hpY2ggdG8gcmVtb3ZlIHRoZSBzdGVwLlxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIHN0ZXAgaW5kZXggdG8gYmUgcmVtb3ZlZCAod2lsbCBkZWNyZWFzZSBpbmRpY2VzIG9mIHByb2NlZWRpbmcgc3RlcHMpXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgaWYgc3RlcCBpcyByZW1vdmVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlU3RlcEluU3RhZ2VCeUluZGV4KHN0YWdlTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgc3RhZ2UgPSB0aGlzLnN0YWdlcy5maW5kKGVhY2hTdGFnZSA9PiBlYWNoU3RhZ2UubmFtZSA9PT0gc3RhZ2VOYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YWdlICYmIGluZGV4IDwgc3RhZ2Uuc3RlcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHN0YWdlLnN0ZXBzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBXaXphcmRTdGFnZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGFnZU5hbWUgLSBUaGUgTmFtZSBmb3IgdGhlIG5ldyBXaXphcmRTdGFnZVxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIHN0YWdlIGluZGV4IHRvIGluc2VydCBzdGFnZSAod2lsbCBpbmNyZWFzZSBpbmRleCBvZiBleGlzdGluZyBzdGFnZSBhdCBnaXZlbiBpbmRleCBieSAxIGlmIGFueSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFN0YWdlQnlJbmRleChzdGFnZU5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChpbmRleCA+IHRoaXMuc3RhZ2VzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZXMucHVzaChuZXcgV2l6YXJkU3RhZ2UoeyBuYW1lOiBzdGFnZU5hbWUsIHN0ZXBzOiBbXSB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZXMuc3BsaWNlKGluZGV4LCAwLCBuZXcgV2l6YXJkU3RhZ2UoeyBuYW1lOiBzdGFnZU5hbWUsIHN0ZXBzOiBbXSB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBiYW5uZXIgaXRlbXMgdG8gdGhlIGVudGlyZSB3aXphcmQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGl0ZW0gLSBUaGUgQmFubmVyIEl0ZW1cclxuICAgICovXHJcbiAgICBwdWJsaWMgYWRkV2l6YXJkQmFubmVySXRlbXMoaXRlbTogQmFubmVySXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMud2l6YXJkQmFubmVySXRlbXMucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBhbGwgc3RlcHMgZnJvbSBnaXZlbiBzdGFnZS5cclxuICAgICAqIElmIHRoZSBzcGVjaWZpZWQgc3RhZ2UgZG9lcyBub3QgZXhpc3QsIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBXaXphcmQgc3RhZ2UgdG8gY2xlYXIgc3RlcHMgZnJvbS5cclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBpZiBzdGFnZSBpcyBjbGVhcmVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXJTdGFnZShzdGFnZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5zdGFnZXMuZmluZChlYWNoU3RhZ2UgPT4gZWFjaFN0YWdlLm5hbWUgPT09IHN0YWdlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChzdGFnZSkge1xyXG4gICAgICAgICAgICBzdGFnZS5zdGVwcyA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgV2l6YXJkU3RlcCBmb3IgdGhlIEZpbmlzaCB2aWV3IHVzaW5nIHRoZSBjb21wb25lbnQgc3BlY2lmaWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkRmluaXNoVmlldyhzdGVwQ29tcG9uZW50VHlwZTogVHlwZTxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5maW5pc2hWaWV3ID0gbmV3IFdpemFyZFN0ZXAoc3RlcENvbXBvbmVudFR5cGUsIHsgbmFtZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5maW5pc2ggfSk7XHJcbiAgICB9XHJcbn1cclxuIl19