igniteui-angular 17.0.5 → 17.0.6
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.
|
@@ -532,11 +532,13 @@ export class IgxExcelStyleSearchComponent {
|
|
|
532
532
|
}
|
|
533
533
|
onFocus() {
|
|
534
534
|
const firstIndexInView = this.virtDir.state.startIndex;
|
|
535
|
-
this.
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
535
|
+
if (this.virtDir.igxForOf.length > 0) {
|
|
536
|
+
this.focusedItem = {
|
|
537
|
+
id: this.getItemId(firstIndexInView),
|
|
538
|
+
index: firstIndexInView,
|
|
539
|
+
checked: this.virtDir.igxForOf[firstIndexInView].isSelected
|
|
540
|
+
};
|
|
541
|
+
}
|
|
540
542
|
this.setActiveDescendant();
|
|
541
543
|
}
|
|
542
544
|
onFocusOut() {
|
|
@@ -736,4 +738,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
736
738
|
}, {
|
|
737
739
|
type: Input
|
|
738
740
|
}] } });
|
|
739
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFDUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFDSCwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFDOUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsdUJBQXVCLEVBQ2xGLE1BQU0sOENBQThDLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQTRCLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEcsT0FB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RGpCLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSW5ELFlBQVk7c0JBRHJCLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzdELElBQUk7c0JBRFYsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPckQsaUJBQWlCO3NCQUR2QixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT3RFLDBCQUEwQjtzQkFEaEMsU0FBUzt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU8vRSxJQUFJO3NCQURWLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT2xELE9BQU87c0JBRGhCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQU9sQixzQ0FBc0M7c0JBRC9DLFNBQVM7dUJBQUMsd0NBQXdDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQXlRNUQsRUFBRTtzQkFGZixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYyB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQge1xuICAgIElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kLCBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZCxcbiAgICBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQsIElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kXG59IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElDaGFuZ2VDaGVja2JveEV2ZW50QXJncywgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVIaWVyYXJjaGljYWxBcnJheSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZlRWxlbWVudCwgRXhwcmVzc2lvblVJLCBGaWx0ZXJMaXN0SXRlbSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IElneEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RyZWUvdHJlZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RGF0YUxvYWRpbmdUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RW1wdHlMaXN0VGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9saXN0L2xpc3QuY29tbW9uJztcbmltcG9ydCB7IElneExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbGlzdC9saXN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9saXN0L2xpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJZ3hQcmVmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3ByZWZpeC9wcmVmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQgfSBmcm9tICcuLi8uLi8uLi90cmVlL2NvbW1vbic7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tbW9uJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RXhjZWxTdHlsZUxvYWRpbmddJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIHB1YmxpYyBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChfZGlyOiBJZ3hFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBjdHg6IHVua25vd24pOiBjdHggaXMgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmRlZmluZWQ+KSB7IH1cbn1cblxubGV0IE5FWFRfSUQgPSAwO1xuLyoqXG4gKiBBIGNvbXBvbmVudCB1c2VkIGZvciBwcmVzZW50aW5nIEV4Y2VsIHN0eWxlIHNlYXJjaCBVSS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtc2VhcmNoJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCBJZ3hJY29uQ29tcG9uZW50LCBJZ3hQcmVmaXhEaXJlY3RpdmUsIEZvcm1zTW9kdWxlLCBJZ3hJbnB1dERpcmVjdGl2ZSwgTmdJZiwgSWd4U3VmZml4RGlyZWN0aXZlLCBJZ3hMaXN0Q29tcG9uZW50LCBJZ3hGb3JPZkRpcmVjdGl2ZSwgSWd4TGlzdEl0ZW1Db21wb25lbnQsIElneENoZWNrYm94Q29tcG9uZW50LCBJZ3hEYXRhTG9hZGluZ1RlbXBsYXRlRGlyZWN0aXZlLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hFbXB0eUxpc3RUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4VHJlZUNvbXBvbmVudCwgTmdGb3IsIElneFRyZWVOb2RlQ29tcG9uZW50LCBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50LCBJZ3hCdXR0b25EaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGZpbHRlck9wdGltaXphdGlvblRocmVzaG9sZCA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS1tYWluJylcbiAgICBwdWJsaWMgZGVmYXVsdENsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZCgnY2FuY2VsQnV0dG9uJywge3JlYWQ6IElneEJ1dHRvbkRpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGNhbmNlbEJ1dHRvbjogSWd4QnV0dG9uRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0JywgeyByZWFkOiBJZ3hMaXN0Q29tcG9uZW50LCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGxpc3Q6IElneExpc3RDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbENoZWNrYm94JywgeyByZWFkOiBJZ3hDaGVja2JveENvbXBvbmVudCwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2FkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94JywgeyByZWFkOiBJZ3hDaGVja2JveENvbXBvbmVudCwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBhZGRUb0N1cnJlbnRGaWx0ZXJDaGVja2JveDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWUnLCB7IHJlYWQ6IElneFRyZWVDb21wb25lbnQsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgdHJlZTogSWd4VHJlZUNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hGb3JPZkRpcmVjdGl2ZSlcbiAgICBwcm90ZWN0ZWQgdmlydERpcjogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdEFsbEl0ZW0oKTogRmlsdGVyTGlzdEl0ZW0ge1xuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdEFsbEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEFsbEl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNTcGVjaWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQmxhbmtzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbCxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0QWxsSXRlbSA9IHNlbGVjdEFsbEl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0QWxsSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWRkVG9DdXJyZW50RmlsdGVySXRlbSgpOiBGaWx0ZXJMaXN0SXRlbSB7XG4gICAgICAgIGlmICghdGhpcy5fYWRkVG9DdXJyZW50RmlsdGVySXRlbSkge1xuICAgICAgICAgICAgY29uc3QgYWRkVG9DdXJyZW50RmlsdGVySXRlbSA9IHtcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0ZpbHRlcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc1NwZWNpYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNCbGFua3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9hZGRfdG9fZmlsdGVyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9hZGRfdG9fZmlsdGVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLl9hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtID0gYWRkVG9DdXJyZW50RmlsdGVySXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGlzTG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgYW55KS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaFZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNwbGF5ZWRMaXN0RGF0YTogRmlsdGVyTGlzdEl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbWF0Y2hlc0NvdW50OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWVzTG9hZGluZ1RlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5lc2YuZ3JpZD8uZXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXNmLmdyaWQuZXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFjdGl2ZURlc2NlbmRhbnQgPSAnJztcblxuICAgIHByaXZhdGUgX2lkID0gYGlneC1leGNlbC1zdHlsZS1zZWFyY2gtJHtORVhUX0lEKyt9YDtcbiAgICBwcml2YXRlIF9pc0xvYWRpbmc7XG4gICAgcHJpdmF0ZSBfYWRkVG9DdXJyZW50RmlsdGVySXRlbTogRmlsdGVyTGlzdEl0ZW07XG4gICAgcHJpdmF0ZSBfc2VsZWN0QWxsSXRlbTogRmlsdGVyTGlzdEl0ZW07XG4gICAgcHJpdmF0ZSBfaGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtczogRmlsdGVyTGlzdEl0ZW1bXTtcbiAgICBwcml2YXRlIF9mb2N1c2VkSXRlbTogQWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGVzZjogQmFzZUZpbHRlcmluZ0NvbXBvbmVudCwgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHtcbiAgICAgICAgZXNmLmxvYWRpbmdTdGFydC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVzZi5sb2FkaW5nRW5kLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVzZi5pbml0aWFsaXplZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBlc2YuY29sdW1uQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyPy5yZXNldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVzZi5saXN0RGF0YUxvYWRlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdEFsbEl0ZW0gPSB0aGlzLmVzZi5saXN0RGF0YVswXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkgJiYgdGhpcy5lc2YubGlzdERhdGFbMF0uaXNTcGVjaWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuc3BsaWNlKDAsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckxpc3REYXRhKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlZnJlc2hTaXplKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlZnJlc2hTaXplID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52aXJ0RGlyKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXIuaWd4Rm9yQ29udGFpbmVyU2l6ZSA9IHRoaXMuY29udGFpbmVyU2l6ZTtcbiAgICAgICAgICAgIHRoaXMudmlydERpci5pZ3hGb3JJdGVtU2l6ZSA9IHRoaXMuaXRlbVNpemU7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXIucmVjYWxjVXBkYXRlU2l6ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNsZWFySW5wdXQoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlckxpc3REYXRhKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGVja2JveENoYW5nZShldmVudEFyZ3M6IElDaGFuZ2VDaGVja2JveEV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5pbmRleE9mKGV2ZW50QXJncy5vd25lci52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdEFsbEJ0biA9IHRoaXMuZGlzcGxheWVkTGlzdERhdGFbMF07XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gdGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pc1NlbGVjdGVkID0gZXZlbnRBcmdzLmNoZWNrZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50QXJncy5vd25lci52YWx1ZS5pc1NlbGVjdGVkID0gZXZlbnRBcmdzLmNoZWNrZWQ7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvU3RhcnRTbGljaW5nID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5pbmRleE9mKHRoaXMuYWRkVG9DdXJyZW50RmlsdGVySXRlbSkgPiAtMSA/IDIgOiAxO1xuXG4gICAgICAgICAgICBjb25zdCBzbGljZWRBcnJheSA9XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5zbGljZShpbmRleFRvU3RhcnRTbGljaW5nLCB0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCk7XG5cbiAgICAgICAgICAgIGlmICghc2xpY2VkQXJyYXkuZmluZChlbCA9PiBlbC5pc1NlbGVjdGVkID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsaWNlZEFycmF5LmZpbmQoZWwgPT4gZWwuaXNTZWxlY3RlZCA9PT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0QWxsQ2hlY2tib3hDaGFuZ2UoZXZlbnRBcmdzOiBJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0QWxsSXRlbS5pc1NlbGVjdGVkID0gZXZlbnRBcmdzLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX3NlbGVjdEFsbEl0ZW0uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSB0aGlzLnRyZWUubm9kZXM7XG4gICAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKG5vZGUgPT4gKG5vZGUuZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkuaXNTZWxlY3RlZCA9IGV2ZW50QXJncy5jaGVja2VkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbk5vZGVTZWxlY3Rpb25DaGFuZ2UoZXZlbnRBcmdzOiBJVHJlZU5vZGVTZWxlY3Rpb25FdmVudCkge1xuICAgICAgICBldmVudEFyZ3MuYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIChub2RlLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnRBcmdzLnJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIChub2RlLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcyA9IGV2ZW50QXJncy5uZXdTZWxlY3Rpb24ubWFwKGl0ZW0gPT4gaXRlbS5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsQnRuID0gdGhpcy5zZWxlY3RBbGxJdGVtO1xuICAgICAgICBpZiAodGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSB0aGlzLnRyZWUubm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtU2l6ZSgpIHtcbiAgICAgICAgbGV0IGl0ZW1TaXplID0gJzQwcHgnO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZXNmLmRpc3BsYXlEZW5zaXR5KSB7XG4gICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IGl0ZW1TaXplID0gJzMycHgnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGlzcGxheURlbnNpdHkuY29tcGFjdDogaXRlbVNpemUgPSAnMjRweCc7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1TaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250YWluZXJTaXplKCkge1xuICAgICAgICBpZiAodGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0Py5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR0UgTm92IDFzdCwgMjAyMSAjMTAzNTUgUmV0dXJuIGEgbnVtZXJpYyB2YWx1ZSwgc28gdGhlIGNodW5rIHNpemUgaXMgY2FsY3VsYXRlZCBwcm9wZXJseS5cbiAgICAgICAgLy8gSWYgd2Ugc2tpcCB0aGlzIGJyYW5jaCwgb24gYXBwbHlpbmcgdGhlIGZpbHRlciB0aGUgX2NhbGN1bGF0ZUNodW5rU2l6ZSgpIG1ldGhvZCBvZmYgdGhlIEZvck9mRGlyZWN0aXZlIHJlY2VpdmVzXG4gICAgICAgIC8vIGFuIGlneEZvckNvbnRhaW5lclNpemUgPSB1bmRlZmluZWQsIHRodXMgYXNzaWducyB0aGUgY2h1bmtTaXplIHRvIHRoZSBpZ3hGb3JPZi5sZW5ndGggd2hpY2ggbGVhZHMgdG8gcGVyZm9ybWFuY2UgaXNzdWVzLlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XG4gICAgfVxuICAgIHByb3RlY3RlZCBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtSWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmlkfS1pdGVtLSR7aW5kZXh9YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0QWN0aXZlRGVzY2VuZGFudCgpIDogdm9pZCAge1xuICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSB0aGlzLmZvY3VzZWRJdGVtPy5pZCB8fCAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGZvY3VzZWRJdGVtKCk6IEFjdGl2ZUVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9jdXNlZEl0ZW07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldCBmb2N1c2VkSXRlbSh2YWw6IEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fZm9jdXNlZEl0ZW0gPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFwcGx5QnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fc2VsZWN0QWxsSXRlbSAmJiAhdGhpcy5fc2VsZWN0QWxsSXRlbS5pc1NlbGVjdGVkICYmICF0aGlzLl9zZWxlY3RBbGxJdGVtLmluZGV0ZXJtaW5hdGUpIHx8XG4gICAgICAgICAgICAodGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSAmJiB0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRU5URVI6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkVTQ0FQRTpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyTGlzdERhdGEoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVzZi5jb2x1bW4/LmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyIHx8XG4gICAgICAgICAgICB0aGlzLmVzZi5jb2x1bW4/LmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuQ3VycmVuY3kgfHxcbiAgICAgICAgICAgIHRoaXMuZXNmLmNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5QZXJjZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlamVjdE5vbk51bWVyaWNhbEVudHJpZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lc2YubGlzdERhdGEgfHwgIXRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSA9IFtdO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VsZWN0QWxsQnRuO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0QWxsSXRlbSkge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuID0gdGhpcy5fc2VsZWN0QWxsSXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0biA9IHRoaXMuZXNmLmxpc3REYXRhWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgYW55RmlsdGVyZWQgPSB0aGlzLmVzZi5saXN0RGF0YS5zb21lKGkgPT4gaS5pc0ZpbHRlcmVkKTtcbiAgICAgICAgICAgIGxldCBhbnlVbmZpbHRlcmVkID0gdGhpcy5lc2YubGlzdERhdGEuc29tZShpID0+ICFpLmlzRmlsdGVyZWQpO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBhbnlGaWx0ZXJlZCAmJiBhbnlVbmZpbHRlcmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNIaWVyYXJjaGljYWwoKSAmJiB0aGlzLnRyZWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zID0gdGhpcy50cmVlLm5vZGVzLm1hcChuID0+IG4uZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc0ZpbHRlcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGkuaXNGaWx0ZXJlZCk7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSAhPT0gdGhpcy5lc2YubGlzdERhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXllZExpc3REYXRhID0gdGhpcy5lc2YubGlzdERhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNIaWVyYXJjaGljYWwoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG4uZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWQgPSBpdGVtLmlzU2VsZWN0ZWQgfHwgaXRlbS5pc0ZpbHRlcmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW55RmlsdGVyZWQgPSBhbnlGaWx0ZXJlZCB8fCBuLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW55VW5maWx0ZXJlZCA9IGFueVVuZmlsdGVyZWQgfHwgIW4uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGFueUZpbHRlcmVkICYmIGFueVVuZmlsdGVyZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmxhYmVsID0gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlc0NvdW50ID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWFyY2hWYWwgPSB0aGlzLnNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLmZvckVhY2goaSA9PiBpLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkRGF0YSA9IGNsb25lSGllcmFyY2hpY2FsQXJyYXkodGhpcy5lc2YubGlzdERhdGEsICdjaGlsZHJlbicpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSA9IHRoaXMuaGllcmFyY2hpY2FsU2VsZWN0TWF0Y2hlcyhtYXRjaGVkRGF0YSwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgobi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKS5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWwpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxQYXJlbnROb2RlcyhuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSB0aGlzLmVzZi5saXN0RGF0YS5maWx0ZXIoKGl0LCBpKSA9PiAoaSA9PT0gMCAmJiBpdC5pc1NwZWNpYWwpIHx8XG4gICAgICAgICAgICAgICAgKGl0LmxhYmVsICE9PSBudWxsICYmIGl0LmxhYmVsICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAgICAgIWl0LmlzQmxhbmtzICYmXG4gICAgICAgICAgICAgICAgaXQubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsKSA+IC0xKTtcblxuICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IHRydWUpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5zcGxpY2UoMSwgMCwgdGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlc0NvdW50ID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5sZW5ndGggLSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzQ291bnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICBzZWxlY3RBbGxCdG4ubGFiZWwgPSB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsX3NlYXJjaF9yZXN1bHRzO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYXBwbHlGaWx0ZXIoKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKEZpbHRlcmluZ0xvZ2ljLk9yLCB0aGlzLmVzZi5jb2x1bW4uZmllbGQpO1xuXG4gICAgICAgIGxldCBzZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94ICYmIHRoaXMuYWRkVG9DdXJyZW50RmlsdGVyQ2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmlsdGVyZWRUb1NlbGVjdGVkSXRlbXModGhpcy5lc2YubGlzdERhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRpc3BsYXllZExpc3REYXRhWzFdO1xuICAgICAgICAgICAgY29uc3QgYWRkVG9DdXJyZW50RmlsdGVyT3B0aW9uVmlzaWJsZSA9IGl0ZW0gPT09IHRoaXMuYWRkVG9DdXJyZW50RmlsdGVySXRlbTtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMgPSBhZGRUb0N1cnJlbnRGaWx0ZXJPcHRpb25WaXNpYmxlICYmIGl0ZW0uaXNTZWxlY3RlZCA/XG4gICAgICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuc2xpY2UoMSwgdGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKS5maWx0ZXIoZWwgPT4gZWwuaXNTZWxlY3RlZCB8fCBlbC5pc0ZpbHRlcmVkKSA6XG4gICAgICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuc2xpY2UoMSwgdGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKS5maWx0ZXIoZWwgPT4gZWwuaXNTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdW5zZWxlY3RlZEl0ZW07XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIHVuc2VsZWN0ZWRJdGVtID0gdGhpcy5lc2YubGlzdERhdGEuZmluZChlbCA9PiBlbC5pc1NlbGVjdGVkID09PSBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bnNlbGVjdGVkSXRlbSA9IHRoaXMuZXNmLmxpc3REYXRhLnNsaWNlKDEsIHRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkuZmluZChlbCA9PiBlbC5pc1NlbGVjdGVkID09PSBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodW5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA8PSBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50LmZpbHRlck9wdGltaXphdGlvblRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlICE9PSBudWxsICYmIGVsZW1lbnQudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSB0aGlzLmNyZWF0ZUNvbmRpdGlvbihlbGVtZW50LnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJDb25kaXRpb24gPSB0aGlzLmVzZi5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lID8gJ2F0JyA6ICdlcXVhbHMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRoaXMuY3JlYXRlQ29uZGl0aW9uKGZpbHRlckNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSB0aGlzLmNyZWF0ZUNvbmRpdGlvbignZW1wdHknKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiB0aGlzLmVzZi5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0aGlzLmVzZi5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbDogZWxlbWVudC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxhbmtzSXRlbUluZGV4ID0gc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgoZSA9PiBlLnZhbHVlID09PSBudWxsIHx8IGUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgbGV0IGJsYW5rc0l0ZW06IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoYmxhbmtzSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhbmtzSXRlbSA9IHNlbGVjdGVkSXRlbXNbYmxhbmtzSXRlbUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zcGxpY2UoYmxhbmtzSXRlbUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLmNyZWF0ZUNvbmRpdGlvbignaW4nKSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiB0aGlzLmVzZi5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRoaXMuZXNmLmNvbHVtbi5maWx0ZXJpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hWYWw6IG5ldyBTZXQodGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoZCA9PiBkLnZhbHVlLnRvSVNPU3RyaW5nKCkpIDogdGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoZSA9PiBlLnZhbHVlLnRvTG9jYWxlVGltZVN0cmluZygpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoZSA9PiBlLnZhbHVlKSlcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChibGFua3NJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclRyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IHRoaXMuY3JlYXRlQ29uZGl0aW9uKCdlbXB0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiB0aGlzLmVzZi5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0aGlzLmVzZi5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbDogYmxhbmtzSXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncmlkID0gdGhpcy5lc2YuZ3JpZDtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZXNmLmNvbHVtbjtcbiAgICAgICAgICAgIGdyaWQuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJJbnRlcm5hbChjb2wuZmllbGQsIGZpbHRlclRyZWUpO1xuICAgICAgICAgICAgdGhpcy5lc2YuZXhwcmVzc2lvbnNMaXN0ID0gbmV3IEFycmF5PEV4cHJlc3Npb25VST4oKTtcbiAgICAgICAgICAgIGdyaWQuZmlsdGVyaW5nU2VydmljZS5nZW5lcmF0ZUV4cHJlc3Npb25zTGlzdChjb2wuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgIGdyaWQuZmlsdGVyaW5nTG9naWMsIHRoaXMuZXNmLmV4cHJlc3Npb25zTGlzdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVzZi5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuY2xlYXJGaWx0ZXIodGhpcy5lc2YuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXNmLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgbmF2S2V5cyA9IFsnc3BhY2UnLCAnc3BhY2ViYXInLCAnICcsXG4gICAgICAgICAgICAnYXJyb3d1cCcsICd1cCcsICdhcnJvd2Rvd24nLCAnZG93bicsICdob21lJywgJ2VuZCddO1xuICAgICAgICAgICAgICAgIGlmIChuYXZLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHsgLy8gSWYga2V5IGhhcyBhcHByb3ByaWF0ZSBmdW5jdGlvbiBpbiBERFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFycm93VXBLZXlEb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXlEb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uSG9tZUtleURvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVuZEtleURvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFjdGlvbktleURvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRm9jdXMoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXhJblZpZXcgPSB0aGlzLnZpcnREaXIuc3RhdGUuc3RhcnRJbmRleDtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmdldEl0ZW1JZChmaXJzdEluZGV4SW5WaWV3KSxcbiAgICAgICAgICAgIGluZGV4OiBmaXJzdEluZGV4SW5WaWV3LFxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy52aXJ0RGlyLmlneEZvck9mW2ZpcnN0SW5kZXhJblZpZXddLmlzU2VsZWN0ZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRm9jdXNPdXQoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0hpZXJhcmNoaWNhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNmLmlzSGllcmFyY2hpY2FsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGlzVHJlZUVtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lc2YuaXNIaWVyYXJjaGljYWwgJiYgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWVyYXJjaGljYWxTZWxlY3RNYXRjaGVzKGRhdGE6IEZpbHRlckxpc3RJdGVtW10sIHNlYXJjaFZhbDogc3RyaW5nKSB7XG4gICAgICAgIGRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZWxlbWVudC5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlLm5vZGVzLmZpbHRlcihuID0+IChuLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmxhYmVsID09PSBlbGVtZW50LmxhYmVsKVswXTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWwpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY2FsU2VsZWN0QWxsQ2hpbGRyZW4oZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuID0gdGhpcy5oaWVyYXJjaGljYWxTZWxlY3RNYXRjaGVzKGVsZW1lbnQuY2hpbGRyZW4sIHNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBkYXRhLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQuaXNTZWxlY3RlZCA9PT0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWVyYXJjaGljYWxTZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50OiBGaWx0ZXJMaXN0SXRlbSkge1xuICAgICAgICBlbGVtZW50LmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgY2hpbGQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgY2hpbGQuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWxTZWxlY3RBbGxDaGlsZHJlbihjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRBbGxQYXJlbnROb2Rlcyhub2RlOiBhbnkpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsUGFyZW50Tm9kZXMobm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRmlsdGVyZWRUb1NlbGVjdGVkSXRlbXMocmVjb3JkczogRmlsdGVyTGlzdEl0ZW1bXSkge1xuICAgICAgICByZWNvcmRzLmZvckVhY2gocmVjb3JkID0+IHtcbiAgICAgICAgICAgIGlmIChyZWNvcmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZpbHRlcmVkVG9TZWxlY3RlZEl0ZW1zKHJlY29yZC5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWNvcmQuaXNGaWx0ZXJlZCAmJiB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zLmluZGV4T2YocmVjb3JkKSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zLnB1c2gocmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmRpdGlvbihjb25kaXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmVzZi5jb2x1bW4uZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKGNvbmRpdGlvbk5hbWUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQ3VycmVuY3k6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5QZXJjZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKGNvbmRpdGlvbk5hbWUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hUaW1lRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKGNvbmRpdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlamVjdE5vbk51bWVyaWNhbEVudHJpZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9bXjAtOVxcLixlRVxcLV0vZztcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUgJiYgcmVnRXhwLnRlc3QodGhpcy5zZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQudmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlLnJlcGxhY2UocmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hJbnB1dC52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd1VwS2V5RG93bigpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEl0ZW0gJiYgdGhpcy5mb2N1c2VkSXRlbS5pbmRleCA9PT0gMCAmJiB0aGlzLnZpcnREaXIuc3RhdGUuc3RhcnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gb24gQXJyb3dVcCB0aGUgZm9jdXMgc3RheXMgb24gdGhlIHNhbWUgZWxlbWVudCBpZiBpdCBpcyB0aGUgZmlyc3QgZm9jdXNlZFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUl0ZW0odGhpcy5mb2N1c2VkSXRlbSA/IHRoaXMuZm9jdXNlZEl0ZW0uaW5kZXggLSAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93RG93bktleURvd24oKSB7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMudmlydERpci5pZ3hGb3JPZi5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkSXRlbSAmJiB0aGlzLmZvY3VzZWRJdGVtLmluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIG9uIEFycm93RG93biB0aGUgZm9jdXMgc3RheXMgb24gdGhlIHNhbWUgZWxlbWVudCBpZiBpdCBpcyB0aGUgbGFzdCBmb2N1c2VkXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlSXRlbSh0aGlzLmZvY3VzZWRJdGVtID8gdGhpcy5mb2N1c2VkSXRlbS5pbmRleCArIDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSG9tZUtleURvd24oKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVJdGVtKDApO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW5kS2V5RG93bigpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUl0ZW0odGhpcy52aXJ0RGlyLmlneEZvck9mLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQWN0aW9uS2V5RG93bigpIHtcbiAgICAgICAgY29uc3QgZGF0YUl0ZW0gPSB0aGlzLmRpc3BsYXllZExpc3REYXRhW3RoaXMuZm9jdXNlZEl0ZW0uaW5kZXhdO1xuICAgICAgICBjb25zdCBhcmdzOiBJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBjaGVja2VkOiAhZGF0YUl0ZW0uaXNTZWxlY3RlZCxcbiAgICAgICAgICAgIG93bmVyOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGRhdGFJdGVtXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoZWNrYm94Q2hhbmdlKGFyZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbmF2aWdhdGVJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSB8fCBpbmRleCA+PSB0aGlzLnZpcnREaXIuaWd4Rm9yT2YubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaW5kZXggPiAodGhpcy5mb2N1c2VkSXRlbSA/IHRoaXMuZm9jdXNlZEl0ZW0uaW5kZXggOiAtMSkgPyBOYXZpZ2F0ZS5Eb3duIDogTmF2aWdhdGUuVXA7XG4gICAgICAgIGNvbnN0IHNjcm9sbFJlcXVpcmVkID0gdGhpcy5pc0luZGV4T3V0T2ZCb3VuZHMoaW5kZXgsIGRpcmVjdGlvbik7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSB7XG4gICAgICAgICAgIGlkOiB0aGlzLmdldEl0ZW1JZChpbmRleCksXG4gICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgY2hlY2tlZDogdGhpcy52aXJ0RGlyLmlneEZvck9mW2luZGV4XS5pc1NlbGVjdGVkXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzY3JvbGxSZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyLnNjcm9sbFRvKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNJbmRleE91dE9mQm91bmRzKGluZGV4OiBudW1iZXIsIGRpcmVjdGlvbjogTmF2aWdhdGUpIHtcbiAgICAgICAgY29uc3QgdmlydFN0YXRlID0gdGhpcy52aXJ0RGlyLnN0YXRlO1xuICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLnZpcnREaXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBpdGVtUG9zaXRpb24gPSB0aGlzLnZpcnREaXIuZ2V0U2Nyb2xsRm9ySW5kZXgoaW5kZXgsIGRpcmVjdGlvbiA9PT0gTmF2aWdhdGUuRG93bik7XG4gICAgICAgIGNvbnN0IGluZGV4T3V0T2ZDaHVuayA9IGluZGV4IDwgdmlydFN0YXRlLnN0YXJ0SW5kZXggfHwgaW5kZXggPiB2aXJ0U3RhdGUuY2h1bmtTaXplICsgdmlydFN0YXRlLnN0YXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IHNjcm9sbE5lZWRlZCA9IGRpcmVjdGlvbiA9PT0gTmF2aWdhdGUuRG93biA/IGN1cnJlbnRQb3NpdGlvbiA8IGl0ZW1Qb3NpdGlvbiA6IGN1cnJlbnRQb3NpdGlvbiA+IGl0ZW1Qb3NpdGlvbjtcbiAgICAgICAgY29uc3Qgc3ViUmVxdWlyZWQgPSBpbmRleE91dE9mQ2h1bmsgfHwgc2Nyb2xsTmVlZGVkO1xuICAgICAgICByZXR1cm4gc3ViUmVxdWlyZWQ7XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgdHlwZT1cImJveFwiXG4gICAgICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCI+XG4gICAgPGlneC1pY29uIGlneFByZWZpeD5zZWFyY2g8L2lneC1pY29uPlxuICAgIDxpbnB1dFxuICAgICAgICAjaW5wdXRcbiAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckxpc3REYXRhKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVzZi5jb2x1bW4/LmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlYXJjaF9wbGFjZWhvbGRlclwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiLz5cbiAgICA8aWd4LWljb25cbiAgICAgICAgaWd4U3VmZml4XG4gICAgICAgICpuZ0lmPVwic2VhcmNoVmFsdWUgfHwgc2VhcmNoVmFsdWUgPT09IDBcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dCgpXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIGNsZWFyXG4gICAgPC9pZ3gtaWNvbj5cbjwvaWd4LWlucHV0LWdyb3VwPlxuXG48aWd4LWxpc3QgI2xpc3Qgcm9sZT1cImxpc3Rib3hcIiBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIiAqbmdJZj1cIiFpc0hpZXJhcmNoaWNhbCgpXCIgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgdGFiaW5kZXg9XCIwXCJcblthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJ0aGlzLmFjdGl2ZURlc2NlbmRhbnRcIiAoZm9jdXMpPVwib25Gb2N1cygpXCIgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoKVwiPlxuICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7XCI+XG4gICAgICAgIDxpZ3gtbGlzdC1pdGVtIFtjbGFzcy5pZ3gtbGlzdF9faXRlbS1iYXNlLS1hY3RpdmVdPVwiZm9jdXNlZEl0ZW0/LmlkID09PSB0aGlzLmdldEl0ZW1JZChpKVwiIFthdHRyLmlkXT1cImdldEl0ZW1JZChpKVwiIHJvbGU9XCJvcHRpb25cIiBcbiAgICAgICAgKmlneEZvcj1cImxldCBpdGVtIG9mIGRpc3BsYXllZExpc3REYXRhO2luZGV4IGFzIGk7IHNjcm9sbE9yaWVudGF0aW9uIDogJ3ZlcnRpY2FsJzsgY29udGFpbmVyU2l6ZTogY29udGFpbmVyU2l6ZTsgaXRlbVNpemU6IGl0ZW1TaXplXCI+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXRlbT8uaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVUcmFuc2l0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2lneC1saXN0LWl0ZW0+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgaWd4RGF0YUxvYWRpbmc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19sb2FkaW5nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsdWVzTG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBpZ3hFbXB0eUxpc3Q+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVNlYXJjaFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fZmlsdGVyLXJlc3VsdHNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAge3sgZXNmLmdyaWQ/LnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9tYXRjaGVzX2NvdW50LnJlcGxhY2UoJ3swfScsIG1hdGNoZXNDb3VudCkgfX1cbiAgICA8L2Rpdj5cbjwvaWd4LWxpc3Q+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX190cmVlXCIgKm5nSWY9XCJpc0hpZXJhcmNoaWNhbCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX3RyZWUtYWxpa2VcIiAqbmdJZj1cIiFpc1RyZWVFbXB0eSgpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX190cmVlLWFsaWtlLWl0ZW1cIj5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3ggI3NlbGVjdEFsbENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RBbGxJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0QWxsSXRlbT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RBbGxJdGVtPy5pbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUcmFuc2l0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdEFsbENoZWNrYm94Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RBbGxJdGVtLmxhYmVsIH19XG4gICAgICAgICAgICA8L2lneC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX190cmVlLWFsaWtlLWl0ZW1cIiAqbmdJZj1cInNlYXJjaFZhbHVlXCI+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94ICNhZGRUb0N1cnJlbnRGaWx0ZXJDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYWRkVG9DdXJyZW50RmlsdGVySXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFkZFRvQ3VycmVudEZpbHRlckl0ZW0uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRyYW5zaXRpb25zXT1cInRydWVcIj5cblxuICAgICAgICAgICAgICAgIHt7IGFkZFRvQ3VycmVudEZpbHRlckl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxpZ3gtdHJlZSAjdHJlZSBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCIgc2VsZWN0aW9uPVwiQ2FzY2FkaW5nXCIgIChub2RlU2VsZWN0aW9uKT1cIm9uTm9kZVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5ZWRMaXN0RGF0YTtcIiBbc2VsZWN0ZWRdPVwiaXRlbS5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICA8ZGl2Pnt7aXRlbS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsMVwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsMSBvZiBpdGVtLmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWwxLmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDEubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWwyXCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWwyIG9mIGNoaWxkTGV2ZWwxLmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWwyLmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWwyLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDNcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDMgb2YgY2hpbGRMZXZlbDIuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDMuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWwzLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWw0XCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWw0IG9mIGNoaWxkTGV2ZWwzLmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWw0LmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDQubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWw1XCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWw1IG9mIGNoaWxkTGV2ZWw0LmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWw1LmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWw1LmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDZcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDYgb2YgY2hpbGRMZXZlbDUuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDYuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWw2LmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWw3XCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWw3IG9mIGNoaWxkTGV2ZWw2LmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWw3LmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDcubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWw4XCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWw4IG9mIGNoaWxkTGV2ZWw3LmNoaWxkcmVuXCIgW3NlbGVjdGVkXT1cImNoaWxkTGV2ZWw4LmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWw4LmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDlcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDkgb2YgY2hpbGRMZXZlbDguY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDkuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2NoaWxkTGV2ZWw5LmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgIDwvaWd4LXRyZWU+XG5cbiAgICA8bmctdGVtcGxhdGUgaWd4RGF0YUxvYWRpbmc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19sb2FkaW5nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsdWVzTG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc1RyZWVFbXB0eSgpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVNlYXJjaFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVNlYXJjaD5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fZW1wdHlcIj5cbiAgICAgICAge3tlc2YuZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX25vX21hdGNoZXN9fVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZT5cbiAgICA8aWd4LWNpcmN1bGFyLWJhciBbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCI+XG4gICAgPC9pZ3gtY2lyY3VsYXItYmFyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGZvb3RlciBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX21lbnUtZm9vdGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2NhbmNlbFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY2FuY2VsQnV0dG9uXG4gICAgICAgICAgICBpZ3hCdXR0b249XCJmbGF0XCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVzZi5jYW5jZWwoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGVzZi5ncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfY2FuY2VsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19hcHBseVwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgaWd4QnV0dG9uPVwicmFpc2VkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFwcGx5QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyKClcIj5cbiAgICAgICAgICAgICAgICB7eyBlc2YuZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX2FwcGx5IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9mb290ZXI+XG4iXX0=
|
|
741
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFDUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFDSCwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFDOUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsdUJBQXVCLEVBQ2xGLE1BQU0sOENBQThDLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQTRCLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEcsT0FB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RUFBRSxrQkFBa0IsQ0FBQztzSkFTalksWUFBWTtzQkFEbEIsV0FBVzt1QkFBQyxtQ0FBbUM7Z0JBT3pDLFdBQVc7c0JBRGpCLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSW5ELFlBQVk7c0JBRHJCLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzdELElBQUk7c0JBRFYsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPckQsaUJBQWlCO3NCQUR2QixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT3RFLDBCQUEwQjtzQkFEaEMsU0FBUzt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU8vRSxJQUFJO3NCQURWLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT2xELE9BQU87c0JBRGhCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQU9sQixzQ0FBc0M7c0JBRC9DLFNBQVM7dUJBQUMsd0NBQXdDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQXlRNUQsRUFBRTtzQkFGZixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYyB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQge1xuICAgIElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kLCBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZCxcbiAgICBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLCBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQsIElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kXG59IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElDaGFuZ2VDaGVja2JveEV2ZW50QXJncywgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVIaWVyYXJjaGljYWxBcnJheSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZlRWxlbWVudCwgRXhwcmVzc2lvblVJLCBGaWx0ZXJMaXN0SXRlbSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IElneEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RyZWUvdHJlZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RGF0YUxvYWRpbmdUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RW1wdHlMaXN0VGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9saXN0L2xpc3QuY29tbW9uJztcbmltcG9ydCB7IElneExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbGlzdC9saXN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9saXN0L2xpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJZ3hQcmVmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3ByZWZpeC9wcmVmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQgfSBmcm9tICcuLi8uLi8uLi90cmVlL2NvbW1vbic7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tbW9uJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RXhjZWxTdHlsZUxvYWRpbmddJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIHB1YmxpYyBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChfZGlyOiBJZ3hFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBjdHg6IHVua25vd24pOiBjdHggaXMgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmRlZmluZWQ+KSB7IH1cbn1cblxubGV0IE5FWFRfSUQgPSAwO1xuLyoqXG4gKiBBIGNvbXBvbmVudCB1c2VkIGZvciBwcmVzZW50aW5nIEV4Y2VsIHN0eWxlIHNlYXJjaCBVSS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtc2VhcmNoJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCBJZ3hJY29uQ29tcG9uZW50LCBJZ3hQcmVmaXhEaXJlY3RpdmUsIEZvcm1zTW9kdWxlLCBJZ3hJbnB1dERpcmVjdGl2ZSwgTmdJZiwgSWd4U3VmZml4RGlyZWN0aXZlLCBJZ3hMaXN0Q29tcG9uZW50LCBJZ3hGb3JPZkRpcmVjdGl2ZSwgSWd4TGlzdEl0ZW1Db21wb25lbnQsIElneENoZWNrYm94Q29tcG9uZW50LCBJZ3hEYXRhTG9hZGluZ1RlbXBsYXRlRGlyZWN0aXZlLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hFbXB0eUxpc3RUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4VHJlZUNvbXBvbmVudCwgTmdGb3IsIElneFRyZWVOb2RlQ29tcG9uZW50LCBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50LCBJZ3hCdXR0b25EaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneEV4Y2VsU3R5bGVTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGZpbHRlck9wdGltaXphdGlvblRocmVzaG9sZCA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS1tYWluJylcbiAgICBwdWJsaWMgZGVmYXVsdENsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZCgnY2FuY2VsQnV0dG9uJywge3JlYWQ6IElneEJ1dHRvbkRpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGNhbmNlbEJ1dHRvbjogSWd4QnV0dG9uRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0JywgeyByZWFkOiBJZ3hMaXN0Q29tcG9uZW50LCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGxpc3Q6IElneExpc3RDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbENoZWNrYm94JywgeyByZWFkOiBJZ3hDaGVja2JveENvbXBvbmVudCwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2FkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94JywgeyByZWFkOiBJZ3hDaGVja2JveENvbXBvbmVudCwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBhZGRUb0N1cnJlbnRGaWx0ZXJDaGVja2JveDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWUnLCB7IHJlYWQ6IElneFRyZWVDb21wb25lbnQsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgdHJlZTogSWd4VHJlZUNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hGb3JPZkRpcmVjdGl2ZSlcbiAgICBwcm90ZWN0ZWQgdmlydERpcjogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4Y2VsU3R5bGVMb2FkaW5nVmFsdWVzVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdEFsbEl0ZW0oKTogRmlsdGVyTGlzdEl0ZW0ge1xuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdEFsbEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEFsbEl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNTcGVjaWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQmxhbmtzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbCxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0QWxsSXRlbSA9IHNlbGVjdEFsbEl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0QWxsSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYWRkVG9DdXJyZW50RmlsdGVySXRlbSgpOiBGaWx0ZXJMaXN0SXRlbSB7XG4gICAgICAgIGlmICghdGhpcy5fYWRkVG9DdXJyZW50RmlsdGVySXRlbSkge1xuICAgICAgICAgICAgY29uc3QgYWRkVG9DdXJyZW50RmlsdGVySXRlbSA9IHtcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0ZpbHRlcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc1NwZWNpYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNCbGFua3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9hZGRfdG9fZmlsdGVyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9hZGRfdG9fZmlsdGVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLl9hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtID0gYWRkVG9DdXJyZW50RmlsdGVySXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGlzTG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgYW55KS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaFZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNwbGF5ZWRMaXN0RGF0YTogRmlsdGVyTGlzdEl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbWF0Y2hlc0NvdW50OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWVzTG9hZGluZ1RlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5lc2YuZ3JpZD8uZXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXNmLmdyaWQuZXhjZWxTdHlsZUxvYWRpbmdWYWx1ZXNUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFjdGl2ZURlc2NlbmRhbnQgPSAnJztcblxuICAgIHByaXZhdGUgX2lkID0gYGlneC1leGNlbC1zdHlsZS1zZWFyY2gtJHtORVhUX0lEKyt9YDtcbiAgICBwcml2YXRlIF9pc0xvYWRpbmc7XG4gICAgcHJpdmF0ZSBfYWRkVG9DdXJyZW50RmlsdGVySXRlbTogRmlsdGVyTGlzdEl0ZW07XG4gICAgcHJpdmF0ZSBfc2VsZWN0QWxsSXRlbTogRmlsdGVyTGlzdEl0ZW07XG4gICAgcHJpdmF0ZSBfaGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtczogRmlsdGVyTGlzdEl0ZW1bXTtcbiAgICBwcml2YXRlIF9mb2N1c2VkSXRlbTogQWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGVzZjogQmFzZUZpbHRlcmluZ0NvbXBvbmVudCwgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHtcbiAgICAgICAgZXNmLmxvYWRpbmdTdGFydC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVzZi5sb2FkaW5nRW5kLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVzZi5pbml0aWFsaXplZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBlc2YuY29sdW1uQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyPy5yZXNldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVzZi5saXN0RGF0YUxvYWRlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdEFsbEl0ZW0gPSB0aGlzLmVzZi5saXN0RGF0YVswXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkgJiYgdGhpcy5lc2YubGlzdERhdGFbMF0uaXNTcGVjaWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuc3BsaWNlKDAsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckxpc3REYXRhKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlZnJlc2hTaXplKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlZnJlc2hTaXplID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52aXJ0RGlyKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXIuaWd4Rm9yQ29udGFpbmVyU2l6ZSA9IHRoaXMuY29udGFpbmVyU2l6ZTtcbiAgICAgICAgICAgIHRoaXMudmlydERpci5pZ3hGb3JJdGVtU2l6ZSA9IHRoaXMuaXRlbVNpemU7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXIucmVjYWxjVXBkYXRlU2l6ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNsZWFySW5wdXQoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlckxpc3REYXRhKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGVja2JveENoYW5nZShldmVudEFyZ3M6IElDaGFuZ2VDaGVja2JveEV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5pbmRleE9mKGV2ZW50QXJncy5vd25lci52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdEFsbEJ0biA9IHRoaXMuZGlzcGxheWVkTGlzdERhdGFbMF07XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gdGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pc1NlbGVjdGVkID0gZXZlbnRBcmdzLmNoZWNrZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50QXJncy5vd25lci52YWx1ZS5pc1NlbGVjdGVkID0gZXZlbnRBcmdzLmNoZWNrZWQ7XG4gICAgICAgICAgICBjb25zdCBpbmRleFRvU3RhcnRTbGljaW5nID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5pbmRleE9mKHRoaXMuYWRkVG9DdXJyZW50RmlsdGVySXRlbSkgPiAtMSA/IDIgOiAxO1xuXG4gICAgICAgICAgICBjb25zdCBzbGljZWRBcnJheSA9XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5zbGljZShpbmRleFRvU3RhcnRTbGljaW5nLCB0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCk7XG5cbiAgICAgICAgICAgIGlmICghc2xpY2VkQXJyYXkuZmluZChlbCA9PiBlbC5pc1NlbGVjdGVkID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsaWNlZEFycmF5LmZpbmQoZWwgPT4gZWwuaXNTZWxlY3RlZCA9PT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0QWxsQ2hlY2tib3hDaGFuZ2UoZXZlbnRBcmdzOiBJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0QWxsSXRlbS5pc1NlbGVjdGVkID0gZXZlbnRBcmdzLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX3NlbGVjdEFsbEl0ZW0uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSB0aGlzLnRyZWUubm9kZXM7XG4gICAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKG5vZGUgPT4gKG5vZGUuZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkuaXNTZWxlY3RlZCA9IGV2ZW50QXJncy5jaGVja2VkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbk5vZGVTZWxlY3Rpb25DaGFuZ2UoZXZlbnRBcmdzOiBJVHJlZU5vZGVTZWxlY3Rpb25FdmVudCkge1xuICAgICAgICBldmVudEFyZ3MuYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIChub2RlLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnRBcmdzLnJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIChub2RlLmRhdGEgYXMgRmlsdGVyTGlzdEl0ZW0pLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcyA9IGV2ZW50QXJncy5uZXdTZWxlY3Rpb24ubWFwKGl0ZW0gPT4gaXRlbS5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsQnRuID0gdGhpcy5zZWxlY3RBbGxJdGVtO1xuICAgICAgICBpZiAodGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0bi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSB0aGlzLnRyZWUubm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtU2l6ZSgpIHtcbiAgICAgICAgbGV0IGl0ZW1TaXplID0gJzQwcHgnO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZXNmLmRpc3BsYXlEZW5zaXR5KSB7XG4gICAgICAgICAgICBjYXNlIERpc3BsYXlEZW5zaXR5LmNvc3k6IGl0ZW1TaXplID0gJzMycHgnOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGlzcGxheURlbnNpdHkuY29tcGFjdDogaXRlbVNpemUgPSAnMjRweCc7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1TaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250YWluZXJTaXplKCkge1xuICAgICAgICBpZiAodGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saXN0Py5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR0UgTm92IDFzdCwgMjAyMSAjMTAzNTUgUmV0dXJuIGEgbnVtZXJpYyB2YWx1ZSwgc28gdGhlIGNodW5rIHNpemUgaXMgY2FsY3VsYXRlZCBwcm9wZXJseS5cbiAgICAgICAgLy8gSWYgd2Ugc2tpcCB0aGlzIGJyYW5jaCwgb24gYXBwbHlpbmcgdGhlIGZpbHRlciB0aGUgX2NhbGN1bGF0ZUNodW5rU2l6ZSgpIG1ldGhvZCBvZmYgdGhlIEZvck9mRGlyZWN0aXZlIHJlY2VpdmVzXG4gICAgICAgIC8vIGFuIGlneEZvckNvbnRhaW5lclNpemUgPSB1bmRlZmluZWQsIHRodXMgYXNzaWducyB0aGUgY2h1bmtTaXplIHRvIHRoZSBpZ3hGb3JPZi5sZW5ndGggd2hpY2ggbGVhZHMgdG8gcGVyZm9ybWFuY2UgaXNzdWVzLlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XG4gICAgfVxuICAgIHByb3RlY3RlZCBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtSWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmlkfS1pdGVtLSR7aW5kZXh9YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0QWN0aXZlRGVzY2VuZGFudCgpIDogdm9pZCAge1xuICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSB0aGlzLmZvY3VzZWRJdGVtPy5pZCB8fCAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGZvY3VzZWRJdGVtKCk6IEFjdGl2ZUVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9jdXNlZEl0ZW07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldCBmb2N1c2VkSXRlbSh2YWw6IEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fZm9jdXNlZEl0ZW0gPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFwcGx5QnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fc2VsZWN0QWxsSXRlbSAmJiAhdGhpcy5fc2VsZWN0QWxsSXRlbS5pc1NlbGVjdGVkICYmICF0aGlzLl9zZWxlY3RBbGxJdGVtLmluZGV0ZXJtaW5hdGUpIHx8XG4gICAgICAgICAgICAodGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSAmJiB0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRU5URVI6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkVTQ0FQRTpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyTGlzdERhdGEoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVzZi5jb2x1bW4/LmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyIHx8XG4gICAgICAgICAgICB0aGlzLmVzZi5jb2x1bW4/LmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuQ3VycmVuY3kgfHxcbiAgICAgICAgICAgIHRoaXMuZXNmLmNvbHVtbj8uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5QZXJjZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlamVjdE5vbk51bWVyaWNhbEVudHJpZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lc2YubGlzdERhdGEgfHwgIXRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSA9IFtdO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VsZWN0QWxsQnRuO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0QWxsSXRlbSkge1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuID0gdGhpcy5fc2VsZWN0QWxsSXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbEJ0biA9IHRoaXMuZXNmLmxpc3REYXRhWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgYW55RmlsdGVyZWQgPSB0aGlzLmVzZi5saXN0RGF0YS5zb21lKGkgPT4gaS5pc0ZpbHRlcmVkKTtcbiAgICAgICAgICAgIGxldCBhbnlVbmZpbHRlcmVkID0gdGhpcy5lc2YubGlzdERhdGEuc29tZShpID0+ICFpLmlzRmlsdGVyZWQpO1xuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBhbnlGaWx0ZXJlZCAmJiBhbnlVbmZpbHRlcmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNIaWVyYXJjaGljYWwoKSAmJiB0aGlzLnRyZWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zID0gdGhpcy50cmVlLm5vZGVzLm1hcChuID0+IG4uZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc0ZpbHRlcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGkuaXNGaWx0ZXJlZCk7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSAhPT0gdGhpcy5lc2YubGlzdERhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXllZExpc3REYXRhID0gdGhpcy5lc2YubGlzdERhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNIaWVyYXJjaGljYWwoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG4uZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWQgPSBpdGVtLmlzU2VsZWN0ZWQgfHwgaXRlbS5pc0ZpbHRlcmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW55RmlsdGVyZWQgPSBhbnlGaWx0ZXJlZCB8fCBuLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW55VW5maWx0ZXJlZCA9IGFueVVuZmlsdGVyZWQgfHwgIW4uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGxCdG4uaW5kZXRlcm1pbmF0ZSA9IGFueUZpbHRlcmVkICYmIGFueVVuZmlsdGVyZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0QWxsQnRuLmxhYmVsID0gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlc0NvdW50ID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWFyY2hWYWwgPSB0aGlzLnNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZXNmLmxpc3REYXRhLmZvckVhY2goaSA9PiBpLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkRGF0YSA9IGNsb25lSGllcmFyY2hpY2FsQXJyYXkodGhpcy5lc2YubGlzdERhdGEsICdjaGlsZHJlbicpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YSA9IHRoaXMuaGllcmFyY2hpY2FsU2VsZWN0TWF0Y2hlcyhtYXRjaGVkRGF0YSwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgobi5kYXRhIGFzIEZpbHRlckxpc3RJdGVtKS5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWwpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxQYXJlbnROb2RlcyhuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSB0aGlzLmVzZi5saXN0RGF0YS5maWx0ZXIoKGl0LCBpKSA9PiAoaSA9PT0gMCAmJiBpdC5pc1NwZWNpYWwpIHx8XG4gICAgICAgICAgICAgICAgKGl0LmxhYmVsICE9PSBudWxsICYmIGl0LmxhYmVsICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAgICAgIWl0LmlzQmxhbmtzICYmXG4gICAgICAgICAgICAgICAgaXQubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsKSA+IC0xKTtcblxuICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IHRydWUpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5zcGxpY2UoMSwgMCwgdGhpcy5hZGRUb0N1cnJlbnRGaWx0ZXJJdGVtKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkTGlzdERhdGEgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlc0NvdW50ID0gdGhpcy5kaXNwbGF5ZWRMaXN0RGF0YS5sZW5ndGggLSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzQ291bnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0QWxsQnRuLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgc2VsZWN0QWxsQnRuLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICBzZWxlY3RBbGxCdG4ubGFiZWwgPSB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsX3NlYXJjaF9yZXN1bHRzO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYXBwbHlGaWx0ZXIoKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKEZpbHRlcmluZ0xvZ2ljLk9yLCB0aGlzLmVzZi5jb2x1bW4uZmllbGQpO1xuXG4gICAgICAgIGxldCBzZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94ICYmIHRoaXMuYWRkVG9DdXJyZW50RmlsdGVyQ2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmlsdGVyZWRUb1NlbGVjdGVkSXRlbXModGhpcy5lc2YubGlzdERhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gdGhpcy5faGllcmFyY2hpY2FsU2VsZWN0ZWRJdGVtcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRpc3BsYXllZExpc3REYXRhWzFdO1xuICAgICAgICAgICAgY29uc3QgYWRkVG9DdXJyZW50RmlsdGVyT3B0aW9uVmlzaWJsZSA9IGl0ZW0gPT09IHRoaXMuYWRkVG9DdXJyZW50RmlsdGVySXRlbTtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMgPSBhZGRUb0N1cnJlbnRGaWx0ZXJPcHRpb25WaXNpYmxlICYmIGl0ZW0uaXNTZWxlY3RlZCA/XG4gICAgICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuc2xpY2UoMSwgdGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKS5maWx0ZXIoZWwgPT4gZWwuaXNTZWxlY3RlZCB8fCBlbC5pc0ZpbHRlcmVkKSA6XG4gICAgICAgICAgICAgICAgdGhpcy5lc2YubGlzdERhdGEuc2xpY2UoMSwgdGhpcy5lc2YubGlzdERhdGEubGVuZ3RoKS5maWx0ZXIoZWwgPT4gZWwuaXNTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdW5zZWxlY3RlZEl0ZW07XG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsKCkpIHtcbiAgICAgICAgICAgIHVuc2VsZWN0ZWRJdGVtID0gdGhpcy5lc2YubGlzdERhdGEuZmluZChlbCA9PiBlbC5pc1NlbGVjdGVkID09PSBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bnNlbGVjdGVkSXRlbSA9IHRoaXMuZXNmLmxpc3REYXRhLnNsaWNlKDEsIHRoaXMuZXNmLmxpc3REYXRhLmxlbmd0aCkuZmluZChlbCA9PiBlbC5pc1NlbGVjdGVkID09PSBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodW5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA8PSBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50LmZpbHRlck9wdGltaXphdGlvblRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlICE9PSBudWxsICYmIGVsZW1lbnQudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSB0aGlzLmNyZWF0ZUNvbmRpdGlvbihlbGVtZW50LnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJDb25kaXRpb24gPSB0aGlzLmVzZi5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lID8gJ2F0JyA6ICdlcXVhbHMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRoaXMuY3JlYXRlQ29uZGl0aW9uKGZpbHRlckNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSB0aGlzLmNyZWF0ZUNvbmRpdGlvbignZW1wdHknKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiB0aGlzLmVzZi5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0aGlzLmVzZi5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbDogZWxlbWVudC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxhbmtzSXRlbUluZGV4ID0gc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgoZSA9PiBlLnZhbHVlID09PSBudWxsIHx8IGUudmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgbGV0IGJsYW5rc0l0ZW06IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoYmxhbmtzSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhbmtzSXRlbSA9IHNlbGVjdGVkSXRlbXNbYmxhbmtzSXRlbUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zcGxpY2UoYmxhbmtzSXRlbUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLmNyZWF0ZUNvbmRpdGlvbignaW4nKSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiB0aGlzLmVzZi5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRoaXMuZXNmLmNvbHVtbi5maWx0ZXJpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hWYWw6IG5ldyBTZXQodGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoZCA9PiBkLnZhbHVlLnRvSVNPU3RyaW5nKCkpIDogdGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoZSA9PiBlLnZhbHVlLnRvTG9jYWxlVGltZVN0cmluZygpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoZSA9PiBlLnZhbHVlKSlcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChibGFua3NJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclRyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IHRoaXMuY3JlYXRlQ29uZGl0aW9uKCdlbXB0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiB0aGlzLmVzZi5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0aGlzLmVzZi5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbDogYmxhbmtzSXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncmlkID0gdGhpcy5lc2YuZ3JpZDtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZXNmLmNvbHVtbjtcbiAgICAgICAgICAgIGdyaWQuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJJbnRlcm5hbChjb2wuZmllbGQsIGZpbHRlclRyZWUpO1xuICAgICAgICAgICAgdGhpcy5lc2YuZXhwcmVzc2lvbnNMaXN0ID0gbmV3IEFycmF5PEV4cHJlc3Npb25VST4oKTtcbiAgICAgICAgICAgIGdyaWQuZmlsdGVyaW5nU2VydmljZS5nZW5lcmF0ZUV4cHJlc3Npb25zTGlzdChjb2wuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgIGdyaWQuZmlsdGVyaW5nTG9naWMsIHRoaXMuZXNmLmV4cHJlc3Npb25zTGlzdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVzZi5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuY2xlYXJGaWx0ZXIodGhpcy5lc2YuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXNmLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgbmF2S2V5cyA9IFsnc3BhY2UnLCAnc3BhY2ViYXInLCAnICcsXG4gICAgICAgICAgICAnYXJyb3d1cCcsICd1cCcsICdhcnJvd2Rvd24nLCAnZG93bicsICdob21lJywgJ2VuZCddO1xuICAgICAgICAgICAgICAgIGlmIChuYXZLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHsgLy8gSWYga2V5IGhhcyBhcHByb3ByaWF0ZSBmdW5jdGlvbiBpbiBERFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFycm93VXBLZXlEb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXlEb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uSG9tZUtleURvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVuZEtleURvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFjdGlvbktleURvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRm9jdXMoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXhJblZpZXcgPSB0aGlzLnZpcnREaXIuc3RhdGUuc3RhcnRJbmRleDtcbiAgICAgICAgaWYgKHRoaXMudmlydERpci5pZ3hGb3JPZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtID0ge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmdldEl0ZW1JZChmaXJzdEluZGV4SW5WaWV3KSxcbiAgICAgICAgICAgICAgICBpbmRleDogZmlyc3RJbmRleEluVmlldyxcbiAgICAgICAgICAgICAgICBjaGVja2VkOiB0aGlzLnZpcnREaXIuaWd4Rm9yT2ZbZmlyc3RJbmRleEluVmlld10uaXNTZWxlY3RlZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Gb2N1c091dCgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGlzSGllcmFyY2hpY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lc2YuaXNIaWVyYXJjaGljYWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNUcmVlRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVzZi5pc0hpZXJhcmNoaWNhbCAmJiB0aGlzLmRpc3BsYXllZExpc3REYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaWNhbFNlbGVjdE1hdGNoZXMoZGF0YTogRmlsdGVyTGlzdEl0ZW1bXSwgc2VhcmNoVmFsOiBzdHJpbmcpIHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBlbGVtZW50LmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWUubm9kZXMuZmlsdGVyKG4gPT4gKG4uZGF0YSBhcyBGaWx0ZXJMaXN0SXRlbSkubGFiZWwgPT09IGVsZW1lbnQubGFiZWwpWzBdO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbCkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWxTZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWVyYXJjaGljYWxTZWxlY3RlZEl0ZW1zLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4gPSB0aGlzLmhpZXJhcmNoaWNhbFNlbGVjdE1hdGNoZXMoZWxlbWVudC5jaGlsZHJlbiwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5pc1NlbGVjdGVkID09PSB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZXJhcmNoaWNhbFNlbGVjdEFsbENoaWxkcmVuKGVsZW1lbnQ6IEZpbHRlckxpc3RJdGVtKSB7XG4gICAgICAgIGVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjaGlsZC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjaGlsZC5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbFNlbGVjdEFsbENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZEFsbFBhcmVudE5vZGVzKG5vZGU6IGFueSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRBbGxQYXJlbnROb2Rlcyhub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGaWx0ZXJlZFRvU2VsZWN0ZWRJdGVtcyhyZWNvcmRzOiBGaWx0ZXJMaXN0SXRlbVtdKSB7XG4gICAgICAgIHJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlY29yZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmlsdGVyZWRUb1NlbGVjdGVkSXRlbXMocmVjb3JkLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlY29yZC5pc0ZpbHRlcmVkICYmIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMuaW5kZXhPZihyZWNvcmQpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZXJhcmNoaWNhbFNlbGVjdGVkSXRlbXMucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZGl0aW9uKGNvbmRpdGlvbk5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneFRpbWVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKGNvbmRpdGlvbk5hbWUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbihjb25kaXRpb25OYW1lKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oY29uZGl0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVqZWN0Tm9uTnVtZXJpY2FsRW50cmllcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gL1teMC05XFwuLGVFXFwtXS9nO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSAmJiByZWdFeHAudGVzdCh0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC52YWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUucmVwbGFjZShyZWdFeHAsICcnKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaElucHV0LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93VXBLZXlEb3duKCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkSXRlbSAmJiB0aGlzLmZvY3VzZWRJdGVtLmluZGV4ID09PSAwICYmIHRoaXMudmlydERpci5zdGF0ZS5zdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBvbiBBcnJvd1VwIHRoZSBmb2N1cyBzdGF5cyBvbiB0aGUgc2FtZSBlbGVtZW50IGlmIGl0IGlzIHRoZSBmaXJzdCBmb2N1c2VkXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlSXRlbSh0aGlzLmZvY3VzZWRJdGVtID8gdGhpcy5mb2N1c2VkSXRlbS5pbmRleCAtIDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dEb3duS2V5RG93bigpIHtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy52aXJ0RGlyLmlneEZvck9mLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtICYmIHRoaXMuZm9jdXNlZEl0ZW0uaW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgLy8gb24gQXJyb3dEb3duIHRoZSBmb2N1cyBzdGF5cyBvbiB0aGUgc2FtZSBlbGVtZW50IGlmIGl0IGlzIHRoZSBsYXN0IGZvY3VzZWRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVJdGVtKHRoaXMuZm9jdXNlZEl0ZW0gPyB0aGlzLmZvY3VzZWRJdGVtLmluZGV4ICsgMSA6IDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ib21lS2V5RG93bigpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUl0ZW0oMCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FbmRLZXlEb3duKCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlSXRlbSh0aGlzLnZpcnREaXIuaWd4Rm9yT2YubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25BY3Rpb25LZXlEb3duKCkge1xuICAgICAgICBjb25zdCBkYXRhSXRlbSA9IHRoaXMuZGlzcGxheWVkTGlzdERhdGFbdGhpcy5mb2N1c2VkSXRlbS5pbmRleF07XG4gICAgICAgIGNvbnN0IGFyZ3M6IElDaGFuZ2VDaGVja2JveEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIGNoZWNrZWQ6ICFkYXRhSXRlbS5pc1NlbGVjdGVkLFxuICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YUl0ZW1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hlY2tib3hDaGFuZ2UoYXJncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBuYXZpZ2F0ZUl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID49IHRoaXMudmlydERpci5pZ3hGb3JPZi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpbmRleCA+ICh0aGlzLmZvY3VzZWRJdGVtID8gdGhpcy5mb2N1c2VkSXRlbS5pbmRleCA6IC0xKSA/IE5hdmlnYXRlLkRvd24gOiBOYXZpZ2F0ZS5VcDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsUmVxdWlyZWQgPSB0aGlzLmlzSW5kZXhPdXRPZkJvdW5kcyhpbmRleCwgZGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IHtcbiAgICAgICAgICAgaWQ6IHRoaXMuZ2V0SXRlbUlkKGluZGV4KSxcbiAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICBjaGVja2VkOiB0aGlzLnZpcnREaXIuaWd4Rm9yT2ZbaW5kZXhdLmlzU2VsZWN0ZWRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjcm9sbFJlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXIuc2Nyb2xsVG8oaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0luZGV4T3V0T2ZCb3VuZHMoaW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiBOYXZpZ2F0ZSkge1xuICAgICAgICBjb25zdCB2aXJ0U3RhdGUgPSB0aGlzLnZpcnREaXIuc3RhdGU7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IGl0ZW1Qb3NpdGlvbiA9IHRoaXMudmlydERpci5nZXRTY3JvbGxGb3JJbmRleChpbmRleCwgZGlyZWN0aW9uID09PSBOYXZpZ2F0ZS5Eb3duKTtcbiAgICAgICAgY29uc3QgaW5kZXhPdXRPZkNodW5rID0gaW5kZXggPCB2aXJ0U3RhdGUuc3RhcnRJbmRleCB8fCBpbmRleCA+IHZpcnRTdGF0ZS5jaHVua1NpemUgKyB2aXJ0U3RhdGUuc3RhcnRJbmRleDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsTmVlZGVkID0gZGlyZWN0aW9uID09PSBOYXZpZ2F0ZS5Eb3duID8gY3VycmVudFBvc2l0aW9uIDwgaXRlbVBvc2l0aW9uIDogY3VycmVudFBvc2l0aW9uID4gaXRlbVBvc2l0aW9uO1xuICAgICAgICBjb25zdCBzdWJSZXF1aXJlZCA9IGluZGV4T3V0T2ZDaHVuayB8fCBzY3JvbGxOZWVkZWQ7XG4gICAgICAgIHJldHVybiBzdWJSZXF1aXJlZDtcbiAgICB9XG59XG4iLCI8aWd4LWlucHV0LWdyb3VwXG4gICAgICAgICAgICB0eXBlPVwiYm94XCJcbiAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIj5cbiAgICA8aWd4LWljb24gaWd4UHJlZml4PnNlYXJjaDwvaWd4LWljb24+XG4gICAgPGlucHV0XG4gICAgICAgICNpbnB1dFxuICAgICAgICBpZ3hJbnB1dFxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyTGlzdERhdGEoKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZXNmLmNvbHVtbj8uZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VhcmNoX3BsYWNlaG9sZGVyXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIvPlxuICAgIDxpZ3gtaWNvblxuICAgICAgICBpZ3hTdWZmaXhcbiAgICAgICAgKm5nSWY9XCJzZWFyY2hWYWx1ZSB8fCBzZWFyY2hWYWx1ZSA9PT0gMFwiXG4gICAgICAgIChjbGljayk9XCJjbGVhcklucHV0KClcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgY2xlYXJcbiAgICA8L2lneC1pY29uPlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG5cbjxpZ3gtbGlzdCAjbGlzdCByb2xlPVwibGlzdGJveFwiIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIiBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiICpuZ0lmPVwiIWlzSGllcmFyY2hpY2FsKClcIiAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiB0YWJpbmRleD1cIjBcIlxuW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cInRoaXMuYWN0aXZlRGVzY2VuZGFudFwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCI+XG4gICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cbiAgICAgICAgPGlneC1saXN0LWl0ZW0gW2NsYXNzLmlneC1saXN0X19pdGVtLWJhc2UtLWFjdGl2ZV09XCJmb2N1c2VkSXRlbT8uaWQgPT09IHRoaXMuZ2V0SXRlbUlkKGkpXCIgW2F0dHIuaWRdPVwiZ2V0SXRlbUlkKGkpXCIgcm9sZT1cIm9wdGlvblwiIFxuICAgICAgICAqaWd4Rm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheWVkTGlzdERhdGE7aW5kZXggYXMgaTsgc2Nyb2xsT3JpZW50YXRpb24gOiAndmVydGljYWwnOyBjb250YWluZXJTaXplOiBjb250YWluZXJTaXplOyBpdGVtU2l6ZTogaXRlbVNpemVcIj5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtPy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpdGVtPy5pbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVRyYW5zaXRpb25zXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9pZ3gtY2hlY2tib3g+XG4gICAgICAgIDwvaWd4LWxpc3QtaXRlbT5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSBpZ3hEYXRhTG9hZGluZz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2xvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZXNMb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIGlneEVtcHR5TGlzdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5U2VhcmNoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19maWx0ZXItcmVzdWx0c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPlxuICAgICAgICB7eyBlc2YuZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX21hdGNoZXNfY291bnQucmVwbGFjZSgnezB9JywgbWF0Y2hlc0NvdW50KSB9fVxuICAgIDwvZGl2PlxuPC9pZ3gtbGlzdD5cblxuPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX3RyZWVcIiAqbmdJZj1cImlzSGllcmFyY2hpY2FsKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fdHJlZS1hbGlrZVwiICpuZ0lmPVwiIWlzVHJlZUVtcHR5KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX3RyZWUtYWxpa2UtaXRlbVwiPlxuICAgICAgICAgICAgPGlneC1jaGVja2JveCAjc2VsZWN0QWxsQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdEFsbEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RBbGxJdGVtPy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdEFsbEl0ZW0/LmluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRyYW5zaXRpb25zXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdEFsbEl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX3RyZWUtYWxpa2UtaXRlbVwiICpuZ0lmPVwic2VhcmNoVmFsdWVcIj5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3ggI2FkZFRvQ3VycmVudEZpbHRlckNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhZGRUb0N1cnJlbnRGaWx0ZXJJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWRkVG9DdXJyZW50RmlsdGVySXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVHJhbnNpdGlvbnNdPVwidHJ1ZVwiPlxuXG4gICAgICAgICAgICAgICAge3sgYWRkVG9DdXJyZW50RmlsdGVySXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9pZ3gtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGlneC10cmVlICN0cmVlIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIiBzZWxlY3Rpb249XCJDYXNjYWRpbmdcIiAgKG5vZGVTZWxlY3Rpb24pPVwib25Ob2RlU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRpc3BsYXllZExpc3REYXRhO1wiIFtzZWxlY3RlZF09XCJpdGVtLmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgIDxkaXY+e3tpdGVtLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImNoaWxkTGV2ZWwxXCIgKm5nRm9yPVwibGV0IGNoaWxkTGV2ZWwxIG9mIGl0ZW0uY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDEuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsMS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDJcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDIgb2YgY2hpbGRMZXZlbDEuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDIuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDIubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsM1wiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsMyBvZiBjaGlsZExldmVsMi5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsMy5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDMubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDRcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDQgb2YgY2hpbGRMZXZlbDMuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDQuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsNC5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDVcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDUgb2YgY2hpbGRMZXZlbDQuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDUuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsNlwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsNiBvZiBjaGlsZExldmVsNS5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsNi5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDYubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDdcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDcgb2YgY2hpbGRMZXZlbDYuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDcuaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjaGlsZExldmVsNy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiY2hpbGRMZXZlbDhcIiAqbmdGb3I9XCJsZXQgY2hpbGRMZXZlbDggb2YgY2hpbGRMZXZlbDcuY2hpbGRyZW5cIiBbc2VsZWN0ZWRdPVwiY2hpbGRMZXZlbDguaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDgubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJjaGlsZExldmVsOVwiICpuZ0Zvcj1cImxldCBjaGlsZExldmVsOSBvZiBjaGlsZExldmVsOC5jaGlsZHJlblwiIFtzZWxlY3RlZF09XCJjaGlsZExldmVsOS5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y2hpbGRMZXZlbDkubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgPC9pZ3gtdHJlZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBpZ3hEYXRhTG9hZGluZz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2xvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZXNMb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVHJlZUVtcHR5KClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5U2VhcmNoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U2VhcmNoPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19lbXB0eVwiPlxuICAgICAgICB7e2VzZi5ncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfbm9fbWF0Y2hlc319XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRFeGNlbFN0eWxlTG9hZGluZ1ZhbHVlc1RlbXBsYXRlPlxuICAgIDxpZ3gtY2lyY3VsYXItYmFyIFtpbmRldGVybWluYXRlXT1cInRydWVcIj5cbiAgICA8L2lneC1jaXJjdWxhci1iYXI+XG48L25nLXRlbXBsYXRlPlxuXG48Zm9vdGVyIGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS1mb290ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fY2FuY2VsXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNjYW5jZWxCdXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cImZsYXRcIlxuICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImVzZi5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXNmLmNhbmNlbCgpXCI+XG4gICAgICAgICAgICAgICAge3sgZXNmLmdyaWQ/LnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9jYW5jZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2FwcGx5XCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBpZ3hCdXR0b249XCJyYWlzZWRcIlxuICAgICAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImVzZi5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYXBwbHlCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGVzZi5ncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfYXBwbHkgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Zvb3Rlcj5cbiJdfQ==
|