@piserve-tech/form-submission 1.3.242 → 1.3.243

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.
@@ -864,6 +864,7 @@ export class SubmitFormComponent {
864
864
  validationResponse = this.validateForm(this.pages).isValid;
865
865
  }
866
866
  if (!validationResponse) {
867
+ this.saveasDraftPopup();
867
868
  this.submissionInProgress = false;
868
869
  return;
869
870
  }
@@ -1329,4 +1330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1329
1330
  }], isActionTriggered: [{
1330
1331
  type: Input
1331
1332
  }] } });
1332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU12RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBEcEYsTUFBTSxPQUFPLG1CQUFtQjtJQWdGOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsY0FBcUMsRUFDckMscUJBQTRDLEVBQzVDLGdCQUEyQyxFQUMzQyxnQkFBeUMsRUFDMUMsTUFBaUI7UUFYaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FB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QUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUU2QixLQUFLO3NCQUF4QyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDekIsaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcHBlciBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQdWJsaWNGb3JtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3B1YmxpY0Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2FwdGNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNhcHRjaGEuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50VHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGVtZW50LXRyYWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tdGFicy9uYXZpZ2F0aW9uLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWdncmVnYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1pdHRlckRUTyB9IGZyb20gJy4uLy4uL21vZGVscy9lbWl0dGVycy5tb2RlbCc7XG5pbXBvcnQgeyBTY29yZUNhbGN1bGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Njb3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFNhdmVEcmFmdE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2F2ZS1hcy1kcmFmdC9zYXZlRHJhZnRNb2RhbENvbXBvbmVudCAnO1xuXG5pbnRlcmZhY2UgQW5zd2VyIHtcbiAgcXVlc3Rpb25JZDogc3RyaW5nO1xuICBhbnN3ZXI6IGFueTtcbiAgYW5zd2VySWQ/OiBzdHJpbmc7XG4gIGRlbGV0ZUZpbGVzPzogc3RyaW5nW107XG4gIGZpZWxkcz86IGFueTtcbn1cblxuaW50ZXJmYWNlIFN1Ym1pc3Npb24ge1xuICBzdWJtaXNzaW9uSWQ/OiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xufVxuXG5pbnRlcmZhY2UgRm9ybSB7XG4gIGZvcm1JZDogc3RyaW5nO1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgZGVsZXRlZFN1Ym1pc3Npb25zOiBhbnlbXTtcbiAgc3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXTtcbiAgY29waWVkRm9ybXM6IHN0cmluZ1tdO1xuICBzY29yZXM/OntcbiAgICBzY29yZVR5cGU6IHN0cmluZztcbiAgICBzY29yZTogbnVtYmVyO1xuICB9W107XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG59XG5cbmludGVyZmFjZSBDb3B5Rm9ybXN7XG4gIGlkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIHBhcmVudFN1YmZvcm06IHN0cmluZyxcbiAgcXVlc3Rpb25SZWxhdGlvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIge1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBhbnN3ZXJzOiBBbnN3ZXJbXTtcbiAgZm9ybXM6IEZvcm1bXTtcbiAgY29weVN1YkZvcm1zOkNvcHlGb3Jtc1tdO1xuICBzY29yZXM/OntcbiAgICBzY29yZVR5cGU6IHN0cmluZztcbiAgICBzY29yZTogbnVtYmVyO1xuICB9W107XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG59XG5cbmludGVyZmFjZSBTdWJtaXNzaW9uU2NvcmUge1xuICBzY29yZVR5cGU6IHN0cmluZztcbiAgc2NvcmU6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXN1Ym1pdC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1Ym1pdC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3VibWl0LWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VibWl0Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcXVlc3Rpb246IFB1YmxpY0Zvcm0gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbW9kdWxlTmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYWNjZXB0ZWRMYW5ndWFnZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNraXBNYXJnaW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2tpcFZhbGlkYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFwaUNhbGxlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY3VycmVudFBhZ2VJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAVmlld0NoaWxkKE5hdmlnYXRpb25UYWJzQ29tcG9uZW50KSBjaGlsZCE6IE5hdmlnYXRpb25UYWJzQ29tcG9uZW50O1xuICBASW5wdXQoKSBpc0FjdGlvblRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG5hbWU6IHN0cmluZyA9ICcnO1xuICBzYXZlQXV0b21hdGljYWxseTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlSW50ZXJ2YWw6IG51bWJlciA9IDA7XG4gIGN1c3RvbWl6ZUZvbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9udEZhbWlseTogc3RyaW5nID0gJyc7XG4gIGZvbnRTaXplOiBudW1iZXIgPSAwO1xuICB2YWxpZGF0aW9uU2tpcDogYm9vbGVhbiA9IGZhbHNlO1xuICBlbmFibGVEYXRhRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XG4gIGZpbGVGb3JtYXRzOiBzdHJpbmdbXSA9IFtdO1xuICBlbmFibGVRdWVzdGlvbk51bWJlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbk51bWJlcmluZzogc3RyaW5nID0gJyc7XG4gIGVuYWJsZUdvb2dsZVJlY2FwdGNoYTogYm9vbGVhbiA9IGZhbHNlO1xuICBnb29nbGVSZWNhcHRjaGFLZXk6IHN0cmluZyA9ICcnO1xuICBnb29nbGVSZWNhcHRjaGFTZWNyZXQ6IHN0cmluZyA9ICcnO1xuICBuYXZpZ2F0aW9uOiBzdHJpbmcgPSAnJztcbiAgbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFnZXM6IGFueSA9IFtdO1xuICBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgPSAwO1xuICBwcmV2aW91c1BhZ2U6IGFueSA9IHt9O1xuICBjdXJyZW50UGFnZTogYW55ID0ge307XG4gIG5leHRQYWdlOiBhbnkgPSB7fTtcbiAgbGFzdFRhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbkFuc3dlcnM6IFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIgPSB7XG4gICAgcGFyZW50SWQ6ICcnLFxuICAgIGFuc3dlcnM6IFtdLFxuICAgIGZvcm1zOiBbXSxcbiAgICBjb3B5U3ViRm9ybXM6W11cbiAgfTtcbiAgIHdlYmhvb2s6IGFueTtcbiAgZmlsZXM6IHsgcXVlc3Rpb25JZDogc3RyaW5nOyBmaWxlOiBhbnkgfVtdID0gW107XG4gIHBhcmVudFF1ZXN0aW9uczogYW55O1xuICBzdWJtaXNzaW9uOiBhbnkgPSB7fTtcbiAgcGFyZW50UXVlc3Rpb25BbnN3ZXJzOiBhbnk7XG4gIHBhcmVudFN1Ym1pc3Npb25JZDogc3RyaW5nID0gJyc7XG4gIHN1Ym1pc3Npb25JblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIHJlY2FwdGNoYVRva2VuOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBpc1JlZnJlc2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcGFnZURldGFpbHM6IGFueSA9IFtdO1xuICBwYWdlTnVtYmVyOiBudW1iZXIgPSAxO1xuICByb3dTZXQ6IG51bWJlciA9IDA7XG4gIHJvd1NldENvdW50OiBbbnVtYmVyXSA9IFswXTtcbiAgcmV0cnlDb3VudDogbnVtYmVyID0gMDtcbiAgIG1heFJldHJpZXM6bnVtYmVyID0gNTtcblxuICBlbGlnaWJsZUZvclN1Ym1pc3Npb246IHsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSA9IHtcbiAgICBzdGF0dXM6IHRydWUsXG4gICAgbWVzc2FnZTogJycsXG4gIH07XG4gIHdlYmhvb2tQYXlsb2FkQXJyYXk6IGFueVtdID0gW107XG4gIGluVmFsaWRRdWVzdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICB2aXNpdGVkUm93czogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGFsbEVsZW1lbnRJZHM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lcjogYW55O1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZyA9ICcnO1xuICBzZWNvbmRhcnlDb2xvcjogc3RyaW5nID0gJyc7XG4gICAgaXNMb2FkaW5nUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29weVN1YmZvcm1zOkNvcHlGb3JtcyBbXSA9IFtdO1xuICBlbWl0dGVyczpFbWl0dGVyRFRPW109W107XG4gIG1heFBvc3NpYmxlU2NvcmUhOm51bWJlcjtcbiAgbWF4UG9zc2libGVHb29kU2NvcmUhOm51bWJlcjtcbiAgbWF4UG9zc2libGVCYWRTY29yZSE6bnVtYmVyXG4gIHN1bU9mRmluZGluZ3MhOm51bWJlcjtcbiAgc3VtT2ZHb29kRmluZGluZ3MhOm51bWJlcjtcbiAgc3VtT2ZCYWRGaW5kaW5ncyE6bnVtYmVyO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjYXB0Y2hhU2VydmljZTogUmVjYXB0Y2hhU2VydmljZSxcbiAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnRUcmFja2VyOiBFbGVtZW50VHJhY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtVmFsaWRhdGlvblNlcnZpY2U6IEZvcm1WYWxpZGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFnZ3JlZ2F0ZVNlcnZpY2U6QWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY29yZUNhbGNTZXJ2aWNlOiBTY29yZUNhbGN1bGF0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2dcbiAgKSB7XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCk7XG4gICAgdGhpcy5zdWJtaXNzaW9uID0gbmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bJ3N1Ym1pc3Npb24nXTtcbiAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHRoaXMuc3VibWlzc2lvbj8uaWQ7XG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvbkFuc3dlcnMgPSB0aGlzLnN1Ym1pc3Npb24/LnF1ZXN0aW9uQW5zd2VycztcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9ucyA9IG5hdmlnYXRpb24/LmV4dHJhcy5zdGF0ZT8uWydwYXJlbnRRdWVzdGlvbnMnXTtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldFBhcmVudFF1ZXN0aW9ucyh0aGlzLnBhcmVudFF1ZXN0aW9ucyk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICB0aGlzLnZpc2l0ZWRSb3dzLmNsZWFyKCk7XG4gICAgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLnJlbW92ZVJlY2FwdGNoYVNjcmlwdCgpO1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IG51bGw7XG4gICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFnZ3JlZ2F0ZVNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVtb3ZlUmVjYXB0Y2hhU2NyaXB0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMuYWNjZXB0ZWRMYW5ndWFnZSA9IGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuZWRpdCkgdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuZ2V0U3VibWl0dGVkRm9ybURhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuXG4gICAgICB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgfVxuXG4gIH1cblxuXG4gIGFzeW5jIHJlY2FwdGNoYUluaXRpYWxpemVkKCkge1xuICAgYXdhaXQgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmluaXRpYWxpemUoKTtcbnRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW5kZXIoJ2NhcHRjaGEtY29udGFpbmVyJywgKHRva2VuKSA9PiB7XG5cbn0pO1xuICB9XG5cbmFzeW5jIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAvLyBDaGVjayBpZiBDQVBUQ0hBIHdhcyByZW5kZXJlZFxuICAgICAgaWYgKCF0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaXNSZW5kZXJlZCgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybigncmVDQVBUQ0hBIG5vdCByZW5kZXJlZCB5ZXQuJyk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc29sdmVkLCByZXR1cm4gdGhlIHRva2VuXG4gICAgICBpZiAodGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMucmVjYXB0Y2hhU2VydmljZS5nZXRSZXNwb25zZSgpO1xuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHRva2VuKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgZXhwaXJlZCBvciB1bnNvbHZlZCwgcmV0dXJuIGVtcHR5IHN0cmluZ1xuICAgICAgY29uc29sZS53YXJuKCdyZUNBUFRDSEEgbm90IHJlc29sdmVkIG9yIGV4cGlyZWQuJyk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdyZUNBUFRDSEEgaW5pdGlhbGl6YXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgnJyk7XG4gICAgfVxuICB9KTtcbn1cblxuICBsb2FkRm9udChmb250TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZm9udFBhdGggPSBgYXNzZXRzL2ZvbnRzLyR7Zm9udE5hbWV9LndvZmYyYDsgLy8gQWRqdXN0IGV4dGVuc2lvbiBhcyBwZXIgeW91ciBmb250IGZpbGVcbiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUuaW5uZXJIVE1MID0gYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnJHtmb250TmFtZX0nO1xuICAgICAgICBzcmM6IHVybCgnJHtmb250UGF0aH0nKSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgIH1cbiAgICAgIGJvZHkge1xuICAgICAgICBmb250LWZhbWlseTogJyR7Zm9udE5hbWV9Jywgc2Fucy1zZXJpZjtcbiAgICAgIH1cbiAgICBgO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgZ2V0Rm9ybURhdGEoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmdQYWdlcyA9IHRydWU7XG4gICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIDEsMCx0cnVlKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZ1BhZ2VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgICAgICByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5lbWl0dGVycyA9IHRoaXMucXVlc3Rpb24uZW1pdHRlcnMgfHwgW107XG4gICAgICAgIHRoaXMuYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHRoaXMucXVlc3Rpb24pO1xuICAgICAgICB0aGlzLnNldFVwRm9udEZhbWlseShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMucHJpbWFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnByaW1hcnlDb2xvcjtcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5zZWNvbmRhcnlDb2xvcjtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5wYWdlRGV0YWlscykge1xuICAgICAgICAgIHRoaXMucGFnZURldGFpbHMgPSByZXNwb25zZS5yZXN1bHQucGFnZURldGFpbHM7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbMV07XG4gICAgICAgIH1cbiAgICAgICAgIHRoaXMud2ViaG9vaz0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M7XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M/Lm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG5cblxuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRTdWJtaXR0ZWRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0U3VibWl0dGVkRm9ybSh0aGlzLm1vZHVsZU5hbWUsIHRoaXMuc3VibWlzc2lvbklkKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uLmVuYWJsZUdvb2dsZVJlY2FwdGNoYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG1hcHBlci5tYXBQdWJsaWNGb3JtVG9Nb2RlbChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHRoaXMucXVlc3Rpb24pO1xuICAgICAgICB0aGlzLnByaW1hcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5wcmltYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQuc2Vjb25kYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuZW1pdHRlcnMgPSB0aGlzLnF1ZXN0aW9uLmVtaXR0ZXJzIHx8IFtdO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZURldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VEZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VEZXRhaWxzO1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgICB9XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M/Lm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucm93U2V0Q291bnRbMF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdGhpcy5wYWdlc1tpXSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFVwRm9udEZhbWlseShyZXNwb25zZSk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgICB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRVcEZvbnRGYW1pbHkocmVzcG9uc2U6IGFueSkge1xuICAgIC8vc2V0IGZvbnQgZmFtaWx5IGFuZCBmb250IHNpemVcbiAgICBpZiAocmVzcG9uc2UucmVzdWx0Py5tb2R1bGVDb25maWd1cmF0aW9uPy5jdXN0b21pemVGb250KSB7XG4gICAgICB0aGlzLmZvbnRGYW1pbHkgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZm9udEZhbWlseTtcbiAgICAgIHRoaXMuZm9udFNpemUgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZm9udFNpemUgfHwgMTg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9udEZhbWlseSA9ICdQb3BwaW5zJztcbiAgICAgIHRoaXMuZm9udFNpemUgPSAxODtcbiAgICB9XG4gICAgdGhpcy5sb2FkRm9udCh0aGlzLmZvbnRGYW1pbHkpO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICctLWxpYnJhcnktZm9udC1mYW1pbHknLFxuICAgICAgdGhpcy5mb250RmFtaWx5XG4gICAgKTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAnLS1saWJyYXJ5LWZvbnQtc2l6ZScsXG4gICAgICB0aGlzLmZvbnRTaXplICsgJ3B4J1xuICAgICk7XG4gIH1cblxuICBhc3NpZ25RdWVzdGlvblByb3BlcnRpZXMocXVlc3Rpb246IFB1YmxpY0Zvcm0pIHtcbiAgICB0aGlzLm5hbWUgPSBxdWVzdGlvbi5uYW1lO1xuICAgIHRoaXMucGFnZXMgPSBxdWVzdGlvbi5wYWdlcztcbiAgICBpZiAodGhpcy5wYXJlbnRRdWVzdGlvbnMpIHtcbiAgICAgIHRoaXMucGFyZW50UXVlc3Rpb25BbnN3ZXJzID0gcXVlc3Rpb24/LnF1ZXN0aW9uQW5zd2VycztcbiAgICAgIHRoaXMucGFyZW50U3VibWlzc2lvbklkID0gcXVlc3Rpb24/LnBhcmVudElkO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1swXTtcbiAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlc1sxXTtcbiAgICB0aGlzLnNhdmVBdXRvbWF0aWNhbGx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUF1dG9tYXRpY2FsbHk7XG4gICAgdGhpcy5zYXZlSW50ZXJ2YWwgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5zYXZlSW50ZXJ2YWw7XG4gICAgdGhpcy5jdXN0b21pemVGb250ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uY3VzdG9taXplRm9udDtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5mb250RmFtaWx5O1xuICAgIHRoaXMuZm9udFNpemUgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5mb250U2l6ZTtcbiAgICB0aGlzLmVuYWJsZURhdGFFeHBvcnQgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVEYXRhRXhwb3J0O1xuICAgIHRoaXMuZmlsZUZvcm1hdHMgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5maWxlRm9ybWF0cztcbiAgICB0aGlzLmVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nO1xuICAgIHRoaXMucXVlc3Rpb25OdW1iZXJpbmcgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5xdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgdGhpcy5nb29nbGVSZWNhcHRjaGFLZXkgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5nb29nbGVSZWNhcHRjaGFLZXk7XG4gICAgdGhpcy5nb29nbGVSZWNhcHRjaGFTZWNyZXQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0O1xuICAgIHRoaXMubmF2aWdhdGlvbiA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLm5hdmlnYXRpb247XG4gICAgdGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDtcbiAgICB0aGlzLmFwaUNhbGxlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgbmF2aWdhdGVUb05leHRQYWdlKCkge1xuICAgaWYoIXRoaXMuaXNMb2FkaW5nKXtcbiAgICB0aGlzLmlzTG9hZGluZz10cnVlO1xuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuY3VycmVudFBhZ2VJbmRleCArIDE7XG4gICAgaWYgKG5leHRJbmRleCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlPXRydWU7XG4gICAgICAgICBpZighdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpLmlzVmFsaWQ7XG4gICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UgKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgaWYodGhpcy5wYWdlc1tuZXh0SW5kZXhdLmxlbmd0aCAhPSAwKXtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9bmV4dEluZGV4O1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1tuZXh0SW5kZXggKyAxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGlmKHRoaXMucGFnZXNbbmV4dEluZGV4XS5sZW5ndGggIT0gMCl7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbbmV4dEluZGV4XTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9bmV4dEluZGV4O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLnNldEN1cnJlbnRQYWdlKG5leHRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICB9XG4gICAgfVxuICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgfVxufVxuXG4gIG5hdmlnYXRlVG9QcmV2aW91c1BhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCA+IDApIHtcbiAgICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRGF0YSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZT10cnVlO1xuICAgICAgICAgaWYoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKS5pc1ZhbGlkO1xuICAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgtLTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LS07XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gIH1cblxuICBjaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsaWdpYmxlRm9yU3VibWlzc2lvbiA9IHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBzZXRDdXJyZW50UGFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIGlmICghdGhpcy5wYWdlc1tpbmRleF0gfHwgdGhpcy5wYWdlc1tpbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSBpbmRleCArIDE7XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyLFxuICAgICAgICAgIHRoaXMucm93U2V0XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5wYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0gPSByZXNwb25zZS5yZXN1bHQucGFnZXNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIHRoaXMucGFnZU51bWJlciwgdGhpcy5yb3dTZXQsIHRydWUpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlPXRydWU7XG4gICAgICAgICBpZighdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpLmlzVmFsaWQ7XG4gICAgICAgICB9XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICB9XG5cbiAgfVxuXG4gIGxvYWRNb3JlRGF0YShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHJvd0NvdW50TGltaXQgPSB0aGlzLnJvd1NldENvdW50W2luZGV4XTtcbiAgICBsZXQgaSA9IDA7XG4gICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIGxldCByb3dDb3VudCA9aS8yMDtcbiAgICByb3dDb3VudCA9IE1hdGguY2VpbChyb3dDb3VudCk7XG5cbiBpZih0aGlzLnZpc2l0ZWRSb3dzLmhhcyhpbmRleCkpIHtcbiAgIGlmKHRoaXMudmlzaXRlZFJvd3MuZ2V0KGluZGV4KT09PSByb3dDb3VudCl7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgIHJldHVybjtcbiAgIH1cbiB9XG5cblxuICAgIGlmIChyb3dDb3VudCArIDEgPiByb3dDb3VudExpbWl0KSB7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmc9ZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlzaXRlZFJvd3Muc2V0KGluZGV4LCByb3dDb3VudCk7XG5cbiAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgIC5nZXRTdWJtaXR0ZWRGb3JtKFxuICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICBpbmRleCArIDEsXG4gICAgICAgICAgcm93Q291bnRcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbXG4gICAgICAgICAgICAuLi4odGhpcy5wYWdlc1tpbmRleF0/LnJvd3MgPz8gW10pLFxuICAgICAgICAgICAgLi4ubmV3Um93cyxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgaW5kZXggKyAxLCByb3dDb3VudCApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdSb3dzID0gcmVzcG9uc2U/LnJlc3VsdD8ucGFnZXNbMF0/LnJvd3MgPz8gW107XG4gICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cyA9IFtcbiAgICAgICAgICAgIC4uLih0aGlzLnBhZ2VzW2luZGV4XT8ucm93cyA/PyBbXSksXG4gICAgICAgICAgICAuLi5uZXdSb3dzLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaW5kZXhdO1xuICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgfVxufVxuXG4gIGdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCkge1xuICAgIHRoaXMubWF4UG9zc2libGVTY29yZSA9IDE7XG4gICAgdGhpcy5zdW1PZkZpbmRpbmdzID0gMDtcbiAgICB0aGlzLnN1bU9mQmFkRmluZGluZ3MgPSAwO1xuICAgIHRoaXMuc3VtT2ZHb29kRmluZGluZ3MgPSAwO1xuICAgIHRoaXMuY29weVN1YmZvcm1zID0gW107XG4gICAgY29uc3QgZXh0cmFjdFF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W10sXG4gICAgICBwYXJlbnRGb3JtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICAgaXNJblN1YkZvcm06IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgIHN1YkZvcm1JbmRleDogbnVtYmVyID0gMFxuICAgICk6IHsgYW5zd2VyczogQW5zd2VyW107IGZvcm1zOiBGb3JtW10gfSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbnM6IEFuc3dlcltdID0gW107XG4gICAgICBjb25zdCBmb3JtczogRm9ybVtdID0gW107XG5cbiAgICAgIGZvcm1FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICBsZXQgYmFzZVF1ZXN0aW9uOiBhbnk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2VsZW1lbnQuZWxlbWVudC5pZH1gXG4gICAgICAgICAgICAgICAgOiBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb25JZCxcbiAgICAgICAgICAgICAgICBmaWxlOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogZWxlbWVudC5lbGVtZW50LmFuc3dlcixcbiAgICAgICAgICAgICAgc2NvcmU6IGVsZW1lbnQuZWxlbWVudC5zY29yZSxcbiAgICAgICAgICAgICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6IGVsZW1lbnQuZWxlbWVudC5tYXhQb3NzaWJsZVNjb3JlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLmJhc2VRdWVzdGlvbixcbiAgICAgICAgICAgICAgYW5zd2VySWQ6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXJJZCB8fCAnJyxcbiAgICAgICAgICAgICAgZGVsZXRlRmlsZXM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdEUk9QX0RPV04nIHx8XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ1JBRElPX0JVVFRPTicgfHxcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnQ0hFQ0tfQk9YJykgJiZcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LnNjb3JpbmcgJiZcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LnNjb3JpbmcuZW5hYmxlU2NvcmluZyAmJlxuICAgICAgICAgICAgICAhaXNJblN1YkZvcm1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVTY29yZSAqPSB0aGlzLnNjb3JlQ2FsY1NlcnZpY2UuZ2V0TWF4UG9zc2libGVTY29yZUZvclF1ZXN0aW9uKGVsZW1lbnQuZWxlbWVudCk7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuc2NvcmUgJiYgZWxlbWVudC5lbGVtZW50LnNjb3JlIT1udWxsICYmIGVsZW1lbnQuZWxlbWVudC5zY29yZSE9dW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgdGhpcy5zdW1PZkZpbmRpbmdzICs9IGVsZW1lbnQuZWxlbWVudC5zY29yZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9ybUlkLFxuICAgICAgICAgICAgICAgICAgICBpc0luU3ViRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgc3ViRm9ybUluZGV4XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goLi4ucmVzdWx0LmFuc3dlcnMpO1xuICAgICAgICAgICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJykge1xuICAgICAgICAgIGNvbnN0IHN1YmZvcm1JZCA9IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbklkO1xuICAgICAgICAgIGlmKGVsZW1lbnQuZWxlbWVudC5jb3B5U3ViZm9ybU1ldGEpe1xuICAgICAgICAgICAgdGhpcy5jb3B5U3ViZm9ybXMucHVzaChlbGVtZW50LmVsZW1lbnQuY29weVN1YmZvcm1NZXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgbGV0IGFsbEFuc3dlcnM6IEFuc3dlcltdID0gW107XG5cbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgc3ViZm9ybUlkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybXMubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGV4dHJhY3RlZC5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcikgPT4ge1xuICAgICAgICAgICAgICAgIGFsbEFuc3dlcnMucHVzaCh7IC4uLmFuc3dlciB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBjb3BpZWRGb3JtcztcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtcyl7XG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zID0gZWxlbWVudC5lbGVtZW50LmNvcGllZEZvcm1zXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZDogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWQsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTdWJtaXNzaW9uczogW10sXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbklkOiBzdWJtaXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICBhbnN3ZXJzOiBhbGxBbnN3ZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zOmNvcGllZEZvcm1zXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm1BbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IHN1YmZvcm1RdWVzdGlvbnM6IGFueSA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHN1YmZvcm1RdWVzdGlvbnMgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgIHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1N1YmZvcm0gPSBmb3Jtcy5maW5kKFxuICAgICAgICAgICAgICAoZm9ybSkgPT4gZm9ybS5mb3JtSWQgPT09IHN1YmZvcm1JZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICgoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1UeXBlID09ICdpbmxpbmUnIHx8IGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtVHlwZSA9PSAnY2FyZCcpXG4gICAgICAgICAgICAgICAmJiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zID0gdGhpcy5jbGVhckVtcHR5U3VibWlzc2lvbnMoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5mb3JFYWNoKFxuICAgICAgICAgICAgICAoc3VibWlzc2lvbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIHN1Ym1pc3Npb24uc2NvcmVzID8/IFtdKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocy5zY29yZVR5cGUgPT09ICdHT09EX1NDT1JFJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bU9mR29vZEZpbmRpbmdzICs9IHMuc2NvcmU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocy5zY29yZVR5cGUgPT09ICdCQURfU0NPUkUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtT2ZCYWRGaW5kaW5ncyArPSBzLnNjb3JlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgc3VibWlzc2lvbi5oYXNBbGxTY29yaW5nQW5zd2VyZWRPbmNlO1xuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5odG1sQ29udGVudDtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlci5maWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGAke3N1YmZvcm1JZH1fJHtpbmRleH1fJHthbnN3ZXIucXVlc3Rpb25JZH1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZTogYW5zd2VyLmZpbGVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5maWxlcztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuYXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgY29waWVkRm9ybXM7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpe1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZDogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWQsXG4gICAgICAgICAgICAgIHNjb3JlczplbGVtZW50LmVsZW1lbnQuc2NvcmVzLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVkU3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zOmNvcGllZEZvcm1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvcm1zLnB1c2goc3ViZm9ybSk7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgPSBlbGVtZW50LmVsZW1lbnQ/Lm1heFBvc3NpYmxlU2NvcmUgKiBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5sZW5ndGhcbiAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgPSBlbGVtZW50LmVsZW1lbnQ/Lm1heFBvc3NpYmxlU2NvcmU/Lmdvb2QgKiBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlQmFkU2NvcmUgPSBlbGVtZW50LmVsZW1lbnQ/Lm1heFBvc3NpYmxlU2NvcmU/LmJhZCAqIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/Lmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIFF1ZXN0aW9uIEdyb3VwIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHJvd3NcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6YW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTphbnkpID0+IHtcblxuICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZWxlbWVudD8uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZ3JpZEl0ZW0uZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkSXRlbS5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2dyaWRJdGVtLmVsZW1lbnQuaWR9YFxuICAgICAgICAgICAgICAgICAgICAgIDogZ3JpZEl0ZW0uZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcklkOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlczogZ3JpZEl0ZW0uZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnKSB7XG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlciB8fCAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1BhZ2VzID0gKFxuICAgICAgcGFnZXM6IGFueVtdXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3Jtc307XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NQYWdlcyh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcbiAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgIGFuc3dlcnM6IHJlc3VsdC5hbnN3ZXJzLFxuICAgICAgZm9ybXM6IHJlc3VsdC5mb3JtcyxcbiAgICAgIGNvcHlTdWJGb3Jtczp0aGlzLmNvcHlTdWJmb3Jtc1xuICAgIH07XG4gIH1cblxuICBjbGVhckVtcHR5U3VibWlzc2lvbnMoc3VibWlzc2lvbnM6IGFueSkge1xuICAgIGNvbnN0IG5vbkVtcHR5U3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXSA9IFtdO1xuICAgIGNvbnN0IGVtcHR5U3VibWlzc2lvbklkczogc3RyaW5nW10gPSBbXTtcblxuICAgIHN1Ym1pc3Npb25zLmZvckVhY2goKHN1Ym1pc3Npb246IGFueSkgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWUgPSBzdWJtaXNzaW9uLmFuc3dlcnMuc29tZShcbiAgICAgICAgKGFuc3dlcjogYW55KSA9PlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09ICcnICYmXG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gbnVsbCAmJlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICBub25FbXB0eVN1Ym1pc3Npb25zLnB1c2goc3VibWlzc2lvbik7XG4gICAgICB9IGVsc2UgaWYgKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKSB7XG4gICAgICAgIGVtcHR5U3VibWlzc2lvbklkcy5wdXNoKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN1Ym1pc3Npb25zID0gbm9uRW1wdHlTdWJtaXNzaW9ucztcbiAgICByZXR1cm4gc3VibWlzc2lvbnM7XG4gIH1cblxuICB2YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKTogeyBzdGF0dXM6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnUGxlYXNlIGVuc3VyZSBhbGwgcGFnZXMgYXJlIGZ1bGx5IHZpc2libGUgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaW5jb21wbGV0ZVBhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYocCAmJiBBcnJheS5pc0FycmF5KHAucm93cykpe1xuICAgICAgbGV0IGo9MDtcbiAgICAgIHAucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGorKztcbiAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXAgfHxcbiAgICAgICAgIUFycmF5LmlzQXJyYXkocC5yb3dzKSB8fFxuICAgICAgICBNYXRoLmNlaWwoaiAvIDIwKSAhPSB0aGlzLnJvd1NldENvdW50W2ldXG4gICAgICApIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGluY29tcGxldGVQYWdlcy5wdXNoKHRoaXMucGFnZURldGFpbHNbaV0ubmFtZSk7XG4gICAgfVxuICAgIH0pO1xuXG5cblxuICAgIGlmIChpbmNvbXBsZXRlUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFNvbWUgc2VjdGlvbnMgYXJlIHN0aWxsIGxvYWRpbmcuIFBsZWFzZSBzY3JvbGwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHBhZ2VzIHRvIGVuc3VyZSBhbGwgcXVlc3Rpb25zIGFyZSBsb2FkZWQ6ICR7aW5jb21wbGV0ZVBhZ2VzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfS5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0dyZWF0ISBBbGwgc2VjdGlvbnMgYXJlIGNvbXBsZXRlLiBZb3UgY2FuIG5vdyBzdWJtaXQgdGhlIGZvcm0uJyxcbiAgICB9O1xuICB9XG4gIHNhdmVhc0RyYWZ0UG9wdXAoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuc2tpcFZhbGlkYXRpb24pXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVEcmFmdE1vZGFsQ29tcG9uZW50ICwge1xuICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICBkYXRhOiB7XG4gICAgcHJpbWFyeUNvbG9yOiB0aGlzLnByaW1hcnlDb2xvcixcbiAgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNraXA9dHJ1ZTtcbiAgICAgICAgdGhpcy5zdWJtaXRGb3JtKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNraXA9ZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcD1mYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzdWJtaXRGb3JtKCkge1xuICAgIGlmKHRoaXMud2ViaG9vayl7XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gdGhpcy53ZWJob29rLm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgIGlmICghdGhpcy52YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKS5zdGF0dXMpIHtcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ1BsZWFzZSB3YWl0IGZvciBhbGwgZWxlbWVudHMgdG8gbG9hZCcpO1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICdzdGF0dXMnOidmYWlsZWQnXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgbGV0IHJlY2FwdGNoYVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLmNsZWFyKCk7XG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckFsbCgpO1xuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVjYXB0Y2hhVG9rZW49YXdhaXQgdGhpcy5nZXRUb2tlbigpO1xuXG5cbiAgICAgICAgaWYgKCFyZWNhcHRjaGFUb2tlbikge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignUGxlYXNlIGNvbXBsZXRlIHRoZSBDQVBUQ0hBIHZlcmlmaWNhdGlvbiBiZWZvcmUgc3VibWl0dGluZyB0aGUgZm9ybS4nKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdFcnJvciB3aGlsZSBnZXR0aW5nIHJlQ0FQVENIQSB0b2tlbjonLFxuICAgICAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdG8gdmVyaWZ5IHJlQ0FQVENIQS4nKTtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlID10cnVlO1xuICAgIGlmICghdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgdmFsaWRhdGlvblJlc3BvbnNlPXRoaXMudmFsaWRhdGVGb3JtKHRoaXMucGFnZXMpLmlzVmFsaWQ7XG4gICAgfVxuXG4gICAgaWYoIXZhbGlkYXRpb25SZXNwb25zZSl7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGdldENpcmN1bGFyUmVwbGFjZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgIHJldHVybiAoX2tleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbkFuc3dlcnMoKTtcbiAgICBjb25zdCBmb3JtRmluYWxTY29yZSA9IHRoaXMuY2FsY3VsYXRlRm9ybUZpbmFsU2NvcmUoKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5zY29yZXMgPSBmb3JtRmluYWxTY29yZTtcbiAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdza2lwVmFsaWRhdGlvbicsdGhpcy52YWxpZGF0aW9uU2tpcCA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMucGFyZW50SWQgPSB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZDtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbicsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc3Rpb25BbnN3ZXJzLCBnZXRDaXJjdWxhclJlcGxhY2VyKCkpKTtcbiAgICAgIGlmKHRoaXMud2ViaG9va1BheWxvYWRBcnJheSl7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcIndlYmhvb2tQYXlsb2FkXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMud2ViaG9va1BheWxvYWRBcnJheSkpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcIndlYmhvb2tQYXlsb2FkXCIsIEpTT04uc3RyaW5naWZ5KFtdKSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNlZW5RdWVzdGlvbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoKGZpbGVJdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKHNlZW5RdWVzdGlvbklkcy5oYXMoZmlsZUl0ZW0ucXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VlblF1ZXN0aW9uSWRzLmFkZChmaWxlSXRlbS5xdWVzdGlvbklkKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdW5pcXVlRmlsZXMuZm9yRWFjaCgoZmlsZUl0ZW0pID0+IHtcbiAgICAgICAgICBmaWxlSXRlbS5maWxlLmZvckVhY2goKGZpbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpbGVJdGVtLnF1ZXN0aW9uSWQsIGZpbGUuX2ZpbGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1TZXJ2aWNlQ2FsbCA9XG4gICAgICAgIHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZFxuICAgICAgICAgID8gdGhpcy5mb3JtU2VydmljZS51cGRhdGVGb3JtKFxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuID8/ICcnXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiB0aGlzLmZvcm1TZXJ2aWNlLnN1Ym1pdEZvcm0oXG4gICAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgIHJlY2FwdGNoYVRva2VuID8/ICcnXG4gICAgICAgICAgICApO1xuXG4gICAgICBmb3JtU2VydmljZUNhbGwuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcbiAgICAgICAgICAgIHRoaXMuZWRpdFxuICAgICAgICAgICAgICA/ICdGb3JtIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgICAgICAgICAgICA6ICdGb3JtIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgZW1pdHRpbmdWYWx1ZXNcbiAgICAgICAgICBpZih0aGlzLmVtaXR0ZXJzKXtcbiAgICAgICAgICAgIGVtaXR0aW5nVmFsdWVzID0gdGhpcy5tYXBFbWl0dGVyc1RvVmFsdWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGZvcm1EYXRhLmdldCgnc2tpcFZhbGlkYXRpb24nKSA9PT0gJ3RydWUnKXtcbiAgICAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICdzdGF0dXMnOidkcmFmdCcsXG4gICAgICAgICAgICAnc3VibWlzc2lvbklkJzpyZXNwb25zZS5yZXN1bHQsXG4gICAgICAgICAgICAnc2NvcmUnOmZvcm1GaW5hbFNjb3JlLFxuICAgICAgICAgICAgLi4uKGVtaXR0aW5nVmFsdWVzIHx8IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICdzdGF0dXMnOidzdWNjZXNzJyxcbiAgICAgICAgICAgICdzdWJtaXNzaW9uSWQnOnJlc3BvbnNlLnJlc3VsdCxcbiAgICAgICAgICAgICdzY29yZSc6Zm9ybUZpbmFsU2NvcmUsXG4gICAgICAgICAgICAuLi4oZW1pdHRpbmdWYWx1ZXMgfHwge30pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICAgICAgICB0aGlzLmZpbmRRdWVzdGlvblBhZ2VJbmRleCh0aGlzLnBhcnNlRXJyb3JzVG9NYXAoZXJyb3IuZXJyb3IubWVzc2FnZSkpO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLnBhZ2VzLmxlbmd0aC0xO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRmlyc3RFcnJvcigpO1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNhdmVhc0RyYWZ0UG9wdXAoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICdzdGF0dXMnOidmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMudG9hc3RyLmVycm9yKHZhbGlkYXRpb25SZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVhc0RyYWZ0UG9wdXAoKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVGb3JtRmluYWxTY29yZSgpOiBTdWJtaXNzaW9uU2NvcmVbXSB7XG4gICAgY29uc3QgZ29vZFNjb3JlID0gdGhpcy5tYXhQb3NzaWJsZUdvb2RTY29yZVxuICAgICAgPyAxMDAgLSAodGhpcy5zdW1PZkdvb2RGaW5kaW5ncyAvIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUpICogMTAwXG4gICAgICA6IDA7XG4gIFxuICAgIGNvbnN0IGJhZFNjb3JlID0gdGhpcy5tYXhQb3NzaWJsZUJhZFNjb3JlXG4gICAgICA/IDEwMCAtICh0aGlzLnN1bU9mQmFkRmluZGluZ3MgLyB0aGlzLm1heFBvc3NpYmxlQmFkU2NvcmUpICogMTAwXG4gICAgICA6IDA7XG4gICAgXG4gICAgcmV0dXJuIFtcbiAgICAgIHsgc2NvcmVUeXBlOiAnR09PRF9TQ09SRScsIHNjb3JlOiBNYXRoLnJvdW5kKGdvb2RTY29yZSkgfSxcbiAgICAgIHsgc2NvcmVUeXBlOiAnQkFEX1NDT1JFJywgc2NvcmU6IE1hdGgucm91bmQoYmFkU2NvcmUpIH1cbiAgICBdO1xuICB9XG5cbiAgbWFwRW1pdHRlcnNUb1ZhbHVlcyhcbiAgKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYW5zd2VyTWFwID0gbmV3IE1hcChcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMubWFwKChxYSkgPT4gW3FhLnF1ZXN0aW9uSWQsIHFhLmFuc3dlcl0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgdGhpcy5lbWl0dGVycy5mb3JFYWNoKChlbWl0dGVyKSA9PiB7XG4gICAgICBpZiAoZW1pdHRlci52YWx1ZVNvdXJjZSA9PT0gJ0NVU1RPTV9JTlBVVCcpIHtcbiAgICAgICAgcmVzdWx0W2VtaXR0ZXIua2V5TmFtZV0gPSBlbWl0dGVyLmlucHV0VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBlbWl0dGVyLnZhbHVlU291cmNlID09PSAnUVVFU1RJT04nICYmXG4gICAgICAgIGVtaXR0ZXIucXVlc3Rpb25JZCAmJlxuICAgICAgICBhbnN3ZXJNYXAuaGFzKGVtaXR0ZXIucXVlc3Rpb25JZClcbiAgICAgICkge1xuICAgICAgICByZXN1bHRbZW1pdHRlci5rZXlOYW1lXSA9IGFuc3dlck1hcC5nZXQoZW1pdHRlci5xdWVzdGlvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuIHBhcnNlRXJyb3JzVG9NYXAoZXJyb3JTdHJpbmc6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGVycm9yTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAvLyBDb252ZXJ0IHRoZSBpbmNvcnJlY3QgZm9ybWF0IHRvIGEgdmFsaWQgb2JqZWN0IHN0cnVjdHVyZVxuICAgIGVycm9yU3RyaW5nXG4gICAgICAgIC5yZXBsYWNlKC9be31dL2csICcnKSAvLyBSZW1vdmUgY3VybHkgYnJhY2VzXG4gICAgICAgIC5zcGxpdCgnLCAnKSAvLyBTcGxpdCBrZXktdmFsdWUgcGFpcnNcbiAgICAgICAgLmZvckVhY2gocGFpciA9PiB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNYXAuc2V0KGtleS50cmltKCksIHZhbHVlLnRyaW0oKSk7IC8vIFN0b3JlIGluIE1hcFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIHJldHVybiBlcnJvck1hcDtcbn1cbiAgYXN5bmMgbmF2aWdhdGVUb0ZpcnN0RXJyb3IoKSB7XG4gICAgY29uc3QgZmlyc3RFcnJvciA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCk7XG4gICAgaWYgKCFmaXJzdEVycm9yKSByZXR1cm47XG5cbiAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHtmaXJzdEVycm9yLmlkfWA7XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXG4gICAgLy8gQ2hhbmdlIHBhZ2UgaWYgbmVlZGVkXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCAhPT0gZmlyc3RFcnJvci5wYWdlSW5kZXgpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGZpcnN0RXJyb3IucGFnZUluZGV4O1xuICAgICAgaWYodGhpcy5jdXJyZW50UGFnZUluZGV4KzEgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCl7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCsxXTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMuY3VycmVudFBhZ2VJbmRleC0xPj0wKXtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleC0xXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZWJvdW5jZSgoKSA9PiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSwgMTAwKTtcbiAgICAgIGlmKHRoaXMubmF2aWdhdGlvbiA9PT0gJ1RBQicpXG4gICAgICB0aGlzLmNoaWxkLnRyaWdnZXJGdW5jdGlvbihmaXJzdEVycm9yLnBhZ2VJbmRleCk7XG4gICAgfVxuXG5cbiAgICBhd2FpdCB0aGlzLnNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zY3JvbGxBbmRGb2N1cyhlbGVtZW50KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCA8IHRoaXMubWF4UmV0cmllcykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsVG9FbGVtZW50V2l0aFJldHJ5KGVsZW1lbnRJZCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihgRWxlbWVudCAke2VsZW1lbnRJZH0gbm90IGZvdW5kIGFmdGVyICR7dGhpcy5tYXhSZXRyaWVzfSBhdHRlbXB0c2ApO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZhbGxiYWNrU2Nyb2xsKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxBbmRGb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvY3VzYWJsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBmb2N1c2FibGU/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGZhbGxiYWNrU2Nyb2xsKCkge1xuICAgIGNvbnN0IHBhZ2VFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLnBhZ2UtJHt0aGlzLmN1cnJlbnRQYWdlSW5kZXh9YCk7XG4gICAgcGFnZUVsZW1lbnQ/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVib3VuY2UoZnVuYzogKCkgPT4gdm9pZCwgZGVsYXk6IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xuICAgIHRoaXMuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoZnVuYywgZGVsYXkpO1xuICB9XG4vLyAgIGV4dHJhY3RJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbi8vICAgICBjb25zdCBtYXRjaCA9IG1lc3NhZ2UubWF0Y2goL1swLTlhLWZBLUYtXXszNn0vKTtcbi8vICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IG51bGw7XG4vLyB9XG5cbi8vICByZW1vdmVJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuLy8gICByZXR1cm4gbWVzc2FnZS5yZXBsYWNlKC9bMC05YS1mQS1GLV17MzZ9JC8sIFwiXCIpLnRyaW0oKTtcbi8vIH1cblxuXG5maW5kUXVlc3Rpb25QYWdlSW5kZXgocXVlc3Rpb25FcnJvcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGg7IHBhZ2VJbmRleCsrKSB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZXNbcGFnZUluZGV4XTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZWxlbWVudCwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnByaXZhdGUgY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZWxlbWVudDogYW55LCBxdWVzdGlvbkVycm9yczogTWFwPHN0cmluZywgc3RyaW5nPiwgcGFnZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKGVsZW1lbnQuZWxlbWVudC5pZCAmJiBxdWVzdGlvbkVycm9ycy5oYXMoZWxlbWVudC5lbGVtZW50LmlkKSkge1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChlbGVtZW50LmVsZW1lbnQuaWQsIHF1ZXN0aW9uRXJyb3JzLmdldChlbGVtZW50LmVsZW1lbnQuaWQpISwgcGFnZUluZGV4KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdWJmb3JtcyByZWN1cnNpdmVseVxuICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGdyaWRJdGVtLCBxdWVzdGlvbkVycm9ycywgcGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcgfHwgZWxlbWVudC5lbnRpdHlUeXBlPT09J01VTFRJRklFTEQnKSAmJiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZ3JpZEl0ZW0sIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBsb2dpYy1iYXNlZCBjb25kaXRpb25zIHJlY3Vyc2l2ZWx5XG4gIGlmICgoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSAmJiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICBmb3IgKGNvbnN0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhncmlkSXRlbSwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZvY3VzUXVlc3Rpb25FbGVtZW50KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgLy8gRmluZCBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHF1ZXN0aW9uXG4gIGNvbnN0IGZvY3VzYWJsZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3RhYmluZGV4XScpO1xuICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgKGZvY3VzYWJsZSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuZm9jdXMoKTtcbiAgfVxufVxuICB2YWxpZGF0ZUZvcm0oanNvbkRhdGE6IGFueSk6IHtcbiAgICBpc1ZhbGlkOiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBwYWdlSW5kZXg6IG51bWJlciB8IDA7XG4gIH0ge1xuXG4gICAgY29uc3QgdmFsaWRhdGVRdWVzdGlvbnMgPSAoXG4gICAgICBmb3JtRWxlbWVudHM6IGFueVtdXG4gICAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IHBhZ2VJbmRleDogbnVtYmVyIHwgMCB9ID0+IHtcbiAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZm9ybUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IGVsZW1lbnQuZWxlbWVudC5yZXF1aXJlZDtcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBlbGVtZW50LmVsZW1lbnQuYW5zd2VyO1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBlbGVtZW50LmVsZW1lbnQudmFsaWRhdGlvbjtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gZWxlbWVudC5lbGVtZW50LmF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIGlmICgoIWFuc3dlciB8fCBhbnN3ZXI/Lmxlbmd0aCA9PT0gMCkgJiYgKCFhdHRhY2htZW50IHx8YXR0YWNobWVudD8ubGVuZ3RoID09IDApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJSZXF1aXJlZCBmaWxlIHF1ZXN0aW9uIGhhcyBubyBmaWxlcyB1cGxvYWRlZC5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFJlcXVpcmVkIGZpbGUgcXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGhhcyBubyBmaWxlcyB1cGxvYWRlZC5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIGlmICghYW5zd2VyIHx8IE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJUaGlzIGlzIGEgcmVxdWlyZWQgcXVlc3Rpb25cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uPT09ZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIHJlcXVpcmVkIGJ1dCB2YWxpZGF0aW9uIGlzIGZhbHNlLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIHJlcXVpcmVkIGJ1dCB2YWxpZGF0aW9uIGlzIGZhbHNlLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghcmVxdWlyZWQgJiYgYW5zd2VyICYmIE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIG5vdCByZXF1aXJlZCBidXQgYW5zd2VyIHByb3ZpZGVkIHdpdGggdmFsaWRhdGlvbiBmYWxzZS5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgcmVxdWlyZWQgYnV0IGFuc3dlciBwcm92aWRlZCB3aXRoIHZhbGlkYXRpb24gZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMobG9naWMucm93cyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkZvcm0oZWxlbWVudCk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlICBpZiAoKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyB8fCBlbGVtZW50LmVudGl0eVR5cGU9PT0nTVVMVElGSUVMRCcpJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcblxuICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCAmJiBlbGVtZW50LmVudGl0eVR5cGUhPSdNVUxUSUZJRUxEJykgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwganNvbkRhdGEubGVuZ3RoOyBwYWdlSW5kZXgrKykge1xuICAgICAgY29uc3QgcGFnZSA9IGpzb25EYXRhW3BhZ2VJbmRleF07XG4gICAgICBmb3IgKGxldCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLmZvckVhY2goKG1lc3NhZ2U6IHN0cmluZywgaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChpZCxtZXNzYWdlLCBwYWdlSW5kZXgpO1xufSk7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucz0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgLy8gaWYgKCFyZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICAvLyAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgLy8gICAgIG1lc3NhZ2U6IGBQYWdlICR7cGFnZUluZGV4ICsgMX06ICR7cmVzdWx0Lm1lc3NhZ2V9YCxcbiAgICAgICAgLy8gICAgIHBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICAvLyAgIH07XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0ganNvbkRhdGEubGVuZ3RoLTE7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCkpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgUGFnZWAsXG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0Zvcm0gaXMgdmFsaWQuJyxcbiAgICAgIHBhZ2VJbmRleDogMCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVTdWJGb3JtKGVsZW1lbnQ6IGFueSkge1xuICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgIT09ICdTVUJGT1JNJyB8fCAhZWxlbWVudC5lbGVtZW50Py5zdWJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMuZm9yRWFjaCgoc3VibWlzc2lvbjogYW55LCBzdWJtaXNzaW9uSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgc3VibWlzc2lvbi5hbnN3ZXJzLmZvckVhY2goKGFuc3dlck9iajogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5maW5kUXVlc3Rpb25CeUlkKGVsZW1lbnQuZWxlbWVudC5yb3dzLCBhbnN3ZXJPYmoucXVlc3Rpb25JZCk7XG4gIFxuICAgICAgICBpZiAocXVlc3Rpb24/LnJlcXVpcmVkKSB7XG4gICAgICAgICAgY29uc3QgYW5zID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgICAgICBpZiAoYW5zID09PSAnJyB8fCBhbnMgPT09IG51bGwgfHwgYW5zID09PSB1bmRlZmluZWQgfHwgYW5zPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7c3VibWlzc2lvbkluZGV4fS0ke3F1ZXN0aW9uLmlkfWA7XG4gICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGtleSwgJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgICAgXG4gICAgICAgIGlmIChxdWVzdGlvbi5mb3JtRWxlbWVudD8uZWxlbWVudFR5cGUgPT09ICdFTUFJTCcpIHtcbiAgICAgICAgICBjb25zdCBhbnMgPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgICAgIC8vIFNpbXBsZSBlbWFpbCByZWdleDogY2hlY2tzIGZvciBgc29tZXRoaW5nQGRvbWFpbi50bGRgXG4gICAgICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KGFucykpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke3N1Ym1pc3Npb25JbmRleH0tJHtxdWVzdGlvbi5pZH1gO1xuICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChrZXksICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBcbiAgLy8g8J+UjSBIZWxwZXI6IGZpbmQgcXVlc3Rpb24gZGVmaW5pdGlvbiBpbnNpZGUgcm93c1xuICBwcml2YXRlIGZpbmRRdWVzdGlvbkJ5SWQocm93czogYW55W10sIHF1ZXN0aW9uSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgZm9yIChjb25zdCBncmlkRWxlbWVudCBvZiByb3cuZ3JpZCkge1xuICAgICAgICBpZiAoZ3JpZEVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJyAmJiBncmlkRWxlbWVudC5lbGVtZW50LmlkID09PSBxdWVzdGlvbklkKSB7XG4gICAgICAgICAgcmV0dXJuIGdyaWRFbGVtZW50LmVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgXG5cbiAgdXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucyhldmVudDogYW55KSB7XG4gICAgdGhpcy51cGRhdGVTdWJGb3JtKHRoaXMucGFnZXMsIGV2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm0gPSAocGFnZXM6IGFueVtdLCB1cGRhdGVkU3ViRm9ybTogYW55KSA9PiB7XG4gICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgcGFnZS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgPT09IHVwZGF0ZWRTdWJGb3JtLmlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHN1YmZvcm0gd2l0aCB0aGUgbmV3IGRhdGFcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudCA9IHVwZGF0ZWRTdWJGb3JtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkICE9PSB1cGRhdGVkU3ViRm9ybS5mb3JtSWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBzdWJmb3JtcyBsb2dpYyBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgdXBkYXRlIGNoaWxkIGxvZ2ljc1xuICAgICAgICAgICAgLy8gZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goKGxvZ2ljOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMudXBkYXRlU3ViRm9ybShsb2dpYy5yb3dzLCB1cGRhdGVkU3ViRm9ybSk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuXG4gZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YSh3ZWJob29rczogYW55W10pOiB7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGF0aFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVxdWVzdEJvZGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn0ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwYXRoVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJlcXVlc3RCb2RpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH0gPSB7XG4gICAgaGVhZGVyczoge30sXG4gICAgcGFyYW1zOiB7fSxcbiAgICBwYXRoVmFyaWFibGVzOiB7fSxcbiAgICByZXF1ZXN0Qm9kaWVzOiB7fVxuICB9O1xuXG4gIGZvciAoY29uc3Qgd2ViaG9vayBvZiB3ZWJob29rcyA/PyBbXSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5oZWFkZXJzID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5oZWFkZXJzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucGFyYW1zID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wYXJhbXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5wYXRoVmFyaWFibGVzID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wYXRoVmFyaWFibGVzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucmVxdWVzdEJvZGllcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVN0b3JhZ2UoaXRlbS52YWx1ZVNvdXJjZSwgaXRlbS5rZXlOYW1lKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQucmVxdWVzdEJvZGllc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG5nZXRWYWx1ZUZyb21TdG9yYWdlKHNvdXJjZTogJ0xPQ0FMX1NUT1JBR0UnIHwgJ1NFU1NJT05fU1RPUkFHRScsIGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cbiAgaWYgKHNvdXJjZSA9PT0gJ0xPQ0FMX1NUT1JBR0UnKSByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgaWYgKHNvdXJjZSA9PT0gJ1NFU1NJT05fU1RPUkFHRScpIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5cblxufVxuIiwiPGRpdiBjbGFzcz1cIm91dGVyLWNvbnRhaW5lclwiPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nUGFnZXNcIj5cbiAgICA8bmd4LXNrZWxldG9uLWxvYWRlciBjb3VudD1cIjVcIj48L25neC1za2VsZXRvbi1sb2FkZXI+XG48L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwiaGVhZCBjb250YWluZXJcIiAqbmdJZj1cIiFza2lwTWFyZ2luXCI+XG4gICAgPGxpYi1oZWFkZXIgW25hbWVdPVwibmFtZVwiIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIj48L2xpYi1oZWFkZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYm9keVwiIFtuZ0NsYXNzXT1cInsgJ3NraXAtbWFyZ2luJzogc2tpcE1hcmdpbixjb250YWluZXI6ICFza2lwTWFyZ2lufVwiPlxuXG4gICAgPGxpYi1zdWJtaXNzaW9uLWNvbnRhaW5lciBbcGFyZW50UXVlc3Rpb25BbnN3ZXJzXT1cInBhcmVudFF1ZXN0aW9uQW5zd2Vyc1wiXG4gICAgKm5nSWY9XCJwYXJlbnRRdWVzdGlvbkFuc3dlcnNcIj48L2xpYi1zdWJtaXNzaW9uLWNvbnRhaW5lcj5cblxuICAgIDxsaWItbmF2aWdhdGlvbi10YWJzXG4gICAgICAqbmdJZj1cIm5hdmlnYXRpb24gPT0gJ1RBQidcIlxuICAgICAgW3NraXBNYXJnaW5dPVwic2tpcE1hcmdpblwiXG4gICAgICBbc2tpcFZhbGlkYXRpb25dPVwic2tpcFZhbGlkYXRpb25cIlxuICAgICAgW3BhZ2VzXT1cInBhZ2VzXCJcbiAgICAgIFtjdXJyZW50UGFnZUluZGV4XT1cImN1cnJlbnRQYWdlSW5kZXhcIlxuICAgICAgKHBhZ2VDaGFuZ2VkKT1cInNldEN1cnJlbnRQYWdlKCRldmVudClcIlxuICAgICAgKHN1Ym1pdEVtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgIFtwYWdlRGV0YWlsc109XCJwYWdlRGV0YWlsc1wiXG4gICAgICBbZWxpZ2libGVGb3JTdWJtaXNzaW9uXT1cImVsaWdpYmxlRm9yU3VibWlzc2lvblwiXG4gICAgICBbZWRpdF09XCJlZGl0XCJcbiAgICAgIFthY2NlcHRlZExhbmd1YWdlXSA9IFwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICBbaXNBY3Rpb25UcmlnZ2VyZWRdPVwiaXNBY3Rpb25UcmlnZ2VyZWRcIlxuICAgICAgW3ByaW1hcnlDb2xvcl09XCJwcmltYXJ5Q29sb3JcIlxuICAgICAgW3NlY29uZGFyeUNvbG9yXT1cInNlY29uZGFyeUNvbG9yXCJcbiAgICAgIFttYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZF09XCJtYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZFwiXG4gICAgICBbc3VibWlzc2lvbkluUHJvZ3Jlc3NdPVwic3VibWlzc2lvbkluUHJvZ3Jlc3NcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgPjwvbGliLW5hdmlnYXRpb24tdGFicz5cbiAgICA8bGliLW5leHQtcHJldi1uYXZpZ2F0aW9uXG4gICAgICAqbmdJZj1cIm5hdmlnYXRpb24gPT0gJ05FWFRfQU5EX1BSRVZJT1VTX0JVVFRPTidcIlxuICAgICAgW3NraXBNYXJnaW5dPVwic2tpcE1hcmdpblwiXG4gICAgICBbY3VycmVudFBhZ2VJbmRleF09XCJjdXJyZW50UGFnZUluZGV4XCJcbiAgICAgIFtwYWdlRGV0YWlsc109XCJwYWdlRGV0YWlsc1wiXG4gICAgICAocm93U2V0SW5kZXgpPVwibG9hZE1vcmVEYXRhKCRldmVudClcIlxuICAgICAgW3BhZ2VzXT1cInBhZ2VzXCJcbiAgICAgIFtwcmV2aW91c1BhZ2VdPVwicHJldmlvdXNQYWdlXCJcbiAgICAgIFtpc0FjdGlvblRyaWdnZXJlZF09XCJpc0FjdGlvblRyaWdnZXJlZFwiXG4gICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxuICAgICAgW3ByaW1hcnlDb2xvcl09XCJwcmltYXJ5Q29sb3JcIlxuICAgICAgW3NlY29uZGFyeUNvbG9yXT1cInNlY29uZGFyeUNvbG9yXCJcbiAgICAgIFtuZXh0UGFnZV09XCJuZXh0UGFnZVwiXG4gICAgICAobmF2aWdhdGVOZXh0KT1cIm5hdmlnYXRlVG9OZXh0UGFnZSgpXCJcbiAgICAgIChuYXZpZ2F0ZVByZXZpb3VzKT1cIm5hdmlnYXRlVG9QcmV2aW91c1BhZ2UoKVwiXG4gICAgICBbYWNjZXB0ZWRMYW5ndWFnZV0gPSBcImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgKHN1Ym1pdEVtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgW2VsaWdpYmxlRm9yU3VibWlzc2lvbl09XCJlbGlnaWJsZUZvclN1Ym1pc3Npb25cIlxuICAgICAgW3N1Ym1pc3Npb25JblByb2dyZXNzXT1cInN1Ym1pc3Npb25JblByb2dyZXNzXCJcbiAgICAgIChzdWJGb3JtQ2hhbmdlKT1cInVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoJGV2ZW50KVwiXG4gICAgPjwvbGliLW5leHQtcHJldi1uYXZpZ2F0aW9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
1333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU12RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBEcEYsTUFBTSxPQUFPLG1CQUFtQjtJQWdGOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsY0FBcUMsRUFDckMscUJBQTRDLEVBQzVDLGdCQUEyQyxFQUMzQyxnQkFBeUMsRUFDMUMsTUFBaUI7UUFYaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FB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O2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUU2QixLQUFLO3NCQUF4QyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDekIsaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcHBlciBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQdWJsaWNGb3JtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3B1YmxpY0Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2FwdGNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNhcHRjaGEuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50VHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGVtZW50LXRyYWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tdGFicy9uYXZpZ2F0aW9uLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWdncmVnYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1pdHRlckRUTyB9IGZyb20gJy4uLy4uL21vZGVscy9lbWl0dGVycy5tb2RlbCc7XG5pbXBvcnQgeyBTY29yZUNhbGN1bGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Njb3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFNhdmVEcmFmdE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2F2ZS1hcy1kcmFmdC9zYXZlRHJhZnRNb2RhbENvbXBvbmVudCAnO1xuXG5pbnRlcmZhY2UgQW5zd2VyIHtcbiAgcXVlc3Rpb25JZDogc3RyaW5nO1xuICBhbnN3ZXI6IGFueTtcbiAgYW5zd2VySWQ/OiBzdHJpbmc7XG4gIGRlbGV0ZUZpbGVzPzogc3RyaW5nW107XG4gIGZpZWxkcz86IGFueTtcbn1cblxuaW50ZXJmYWNlIFN1Ym1pc3Npb24ge1xuICBzdWJtaXNzaW9uSWQ/OiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xufVxuXG5pbnRlcmZhY2UgRm9ybSB7XG4gIGZvcm1JZDogc3RyaW5nO1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgZGVsZXRlZFN1Ym1pc3Npb25zOiBhbnlbXTtcbiAgc3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXTtcbiAgY29waWVkRm9ybXM6IHN0cmluZ1tdO1xuICBzY29yZXM/OntcbiAgICBzY29yZVR5cGU6IHN0cmluZztcbiAgICBzY29yZTogbnVtYmVyO1xuICB9W107XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG59XG5cbmludGVyZmFjZSBDb3B5Rm9ybXN7XG4gIGlkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIHBhcmVudFN1YmZvcm06IHN0cmluZyxcbiAgcXVlc3Rpb25SZWxhdGlvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIge1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBhbnN3ZXJzOiBBbnN3ZXJbXTtcbiAgZm9ybXM6IEZvcm1bXTtcbiAgY29weVN1YkZvcm1zOkNvcHlGb3Jtc1tdO1xuICBzY29yZXM/OntcbiAgICBzY29yZVR5cGU6IHN0cmluZztcbiAgICBzY29yZTogbnVtYmVyO1xuICB9W107XG4gIG1heGltdW1Qb3NzaWJsZVNjb3JlPzpudW1iZXI7XG59XG5cbmludGVyZmFjZSBTdWJtaXNzaW9uU2NvcmUge1xuICBzY29yZVR5cGU6IHN0cmluZztcbiAgc2NvcmU6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXN1Ym1pdC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1Ym1pdC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3VibWl0LWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VibWl0Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcXVlc3Rpb246IFB1YmxpY0Zvcm0gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbW9kdWxlTmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYWNjZXB0ZWRMYW5ndWFnZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNraXBNYXJnaW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2tpcFZhbGlkYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFwaUNhbGxlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY3VycmVudFBhZ2VJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAVmlld0NoaWxkKE5hdmlnYXRpb25UYWJzQ29tcG9uZW50KSBjaGlsZCE6IE5hdmlnYXRpb25UYWJzQ29tcG9uZW50O1xuICBASW5wdXQoKSBpc0FjdGlvblRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG5hbWU6IHN0cmluZyA9ICcnO1xuICBzYXZlQXV0b21hdGljYWxseTogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlSW50ZXJ2YWw6IG51bWJlciA9IDA7XG4gIGN1c3RvbWl6ZUZvbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9udEZhbWlseTogc3RyaW5nID0gJyc7XG4gIGZvbnRTaXplOiBudW1iZXIgPSAwO1xuICB2YWxpZGF0aW9uU2tpcDogYm9vbGVhbiA9IGZhbHNlO1xuICBlbmFibGVEYXRhRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XG4gIGZpbGVGb3JtYXRzOiBzdHJpbmdbXSA9IFtdO1xuICBlbmFibGVRdWVzdGlvbk51bWJlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbk51bWJlcmluZzogc3RyaW5nID0gJyc7XG4gIGVuYWJsZUdvb2dsZVJlY2FwdGNoYTogYm9vbGVhbiA9IGZhbHNlO1xuICBnb29nbGVSZWNhcHRjaGFLZXk6IHN0cmluZyA9ICcnO1xuICBnb29nbGVSZWNhcHRjaGFTZWNyZXQ6IHN0cmluZyA9ICcnO1xuICBuYXZpZ2F0aW9uOiBzdHJpbmcgPSAnJztcbiAgbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFnZXM6IGFueSA9IFtdO1xuICBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgPSAwO1xuICBwcmV2aW91c1BhZ2U6IGFueSA9IHt9O1xuICBjdXJyZW50UGFnZTogYW55ID0ge307XG4gIG5leHRQYWdlOiBhbnkgPSB7fTtcbiAgbGFzdFRhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVzdGlvbkFuc3dlcnM6IFF1ZXN0aW9uQW5zd2Vyc1dyYXBwZXIgPSB7XG4gICAgcGFyZW50SWQ6ICcnLFxuICAgIGFuc3dlcnM6IFtdLFxuICAgIGZvcm1zOiBbXSxcbiAgICBjb3B5U3ViRm9ybXM6W11cbiAgfTtcbiAgIHdlYmhvb2s6IGFueTtcbiAgZmlsZXM6IHsgcXVlc3Rpb25JZDogc3RyaW5nOyBmaWxlOiBhbnkgfVtdID0gW107XG4gIHBhcmVudFF1ZXN0aW9uczogYW55O1xuICBzdWJtaXNzaW9uOiBhbnkgPSB7fTtcbiAgcGFyZW50UXVlc3Rpb25BbnN3ZXJzOiBhbnk7XG4gIHBhcmVudFN1Ym1pc3Npb25JZDogc3RyaW5nID0gJyc7XG4gIHN1Ym1pc3Npb25JblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIHJlY2FwdGNoYVRva2VuOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBpc1JlZnJlc2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcGFnZURldGFpbHM6IGFueSA9IFtdO1xuICBwYWdlTnVtYmVyOiBudW1iZXIgPSAxO1xuICByb3dTZXQ6IG51bWJlciA9IDA7XG4gIHJvd1NldENvdW50OiBbbnVtYmVyXSA9IFswXTtcbiAgcmV0cnlDb3VudDogbnVtYmVyID0gMDtcbiAgIG1heFJldHJpZXM6bnVtYmVyID0gNTtcblxuICBlbGlnaWJsZUZvclN1Ym1pc3Npb246IHsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSA9IHtcbiAgICBzdGF0dXM6IHRydWUsXG4gICAgbWVzc2FnZTogJycsXG4gIH07XG4gIHdlYmhvb2tQYXlsb2FkQXJyYXk6IGFueVtdID0gW107XG4gIGluVmFsaWRRdWVzdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICB2aXNpdGVkUm93czogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGFsbEVsZW1lbnRJZHM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lcjogYW55O1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZyA9ICcnO1xuICBzZWNvbmRhcnlDb2xvcjogc3RyaW5nID0gJyc7XG4gICAgaXNMb2FkaW5nUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29weVN1YmZvcm1zOkNvcHlGb3JtcyBbXSA9IFtdO1xuICBlbWl0dGVyczpFbWl0dGVyRFRPW109W107XG4gIG1heFBvc3NpYmxlU2NvcmUhOm51bWJlcjtcbiAgbWF4UG9zc2libGVHb29kU2NvcmUhOm51bWJlcjtcbiAgbWF4UG9zc2libGVCYWRTY29yZSE6bnVtYmVyXG4gIHN1bU9mRmluZGluZ3MhOm51bWJlcjtcbiAgc3VtT2ZHb29kRmluZGluZ3MhOm51bWJlcjtcbiAgc3VtT2ZCYWRGaW5kaW5ncyE6bnVtYmVyO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjYXB0Y2hhU2VydmljZTogUmVjYXB0Y2hhU2VydmljZSxcbiAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnRUcmFja2VyOiBFbGVtZW50VHJhY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtVmFsaWRhdGlvblNlcnZpY2U6IEZvcm1WYWxpZGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFnZ3JlZ2F0ZVNlcnZpY2U6QWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY29yZUNhbGNTZXJ2aWNlOiBTY29yZUNhbGN1bGF0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2dcbiAgKSB7XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCk7XG4gICAgdGhpcy5zdWJtaXNzaW9uID0gbmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bJ3N1Ym1pc3Npb24nXTtcbiAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHRoaXMuc3VibWlzc2lvbj8uaWQ7XG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvbkFuc3dlcnMgPSB0aGlzLnN1Ym1pc3Npb24/LnF1ZXN0aW9uQW5zd2VycztcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9ucyA9IG5hdmlnYXRpb24/LmV4dHJhcy5zdGF0ZT8uWydwYXJlbnRRdWVzdGlvbnMnXTtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldFBhcmVudFF1ZXN0aW9ucyh0aGlzLnBhcmVudFF1ZXN0aW9ucyk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICB0aGlzLnZpc2l0ZWRSb3dzLmNsZWFyKCk7XG4gICAgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLnJlbW92ZVJlY2FwdGNoYVNjcmlwdCgpO1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IG51bGw7XG4gICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFnZ3JlZ2F0ZVNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICB0aGlzLnJlY2FwdGNoYVNlcnZpY2UucmVtb3ZlUmVjYXB0Y2hhU2NyaXB0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMuYWNjZXB0ZWRMYW5ndWFnZSA9IGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuZWRpdCkgdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuZ2V0U3VibWl0dGVkRm9ybURhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuXG4gICAgICB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgfVxuXG4gIH1cblxuXG4gIGFzeW5jIHJlY2FwdGNoYUluaXRpYWxpemVkKCkge1xuICAgYXdhaXQgdGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmluaXRpYWxpemUoKTtcbnRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW5kZXIoJ2NhcHRjaGEtY29udGFpbmVyJywgKHRva2VuKSA9PiB7XG5cbn0pO1xuICB9XG5cbmFzeW5jIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICAvLyBDaGVjayBpZiBDQVBUQ0hBIHdhcyByZW5kZXJlZFxuICAgICAgaWYgKCF0aGlzLnJlY2FwdGNoYVNlcnZpY2UuaXNSZW5kZXJlZCgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybigncmVDQVBUQ0hBIG5vdCByZW5kZXJlZCB5ZXQuJyk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc29sdmVkLCByZXR1cm4gdGhlIHRva2VuXG4gICAgICBpZiAodGhpcy5yZWNhcHRjaGFTZXJ2aWNlLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMucmVjYXB0Y2hhU2VydmljZS5nZXRSZXNwb25zZSgpO1xuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHRva2VuKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgZXhwaXJlZCBvciB1bnNvbHZlZCwgcmV0dXJuIGVtcHR5IHN0cmluZ1xuICAgICAgY29uc29sZS53YXJuKCdyZUNBUFRDSEEgbm90IHJlc29sdmVkIG9yIGV4cGlyZWQuJyk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdyZUNBUFRDSEEgaW5pdGlhbGl6YXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgnJyk7XG4gICAgfVxuICB9KTtcbn1cblxuICBsb2FkRm9udChmb250TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZm9udFBhdGggPSBgYXNzZXRzL2ZvbnRzLyR7Zm9udE5hbWV9LndvZmYyYDsgLy8gQWRqdXN0IGV4dGVuc2lvbiBhcyBwZXIgeW91ciBmb250IGZpbGVcbiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUuaW5uZXJIVE1MID0gYFxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnJHtmb250TmFtZX0nO1xuICAgICAgICBzcmM6IHVybCgnJHtmb250UGF0aH0nKSBmb3JtYXQoJ3dvZmYyJyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgIH1cbiAgICAgIGJvZHkge1xuICAgICAgICBmb250LWZhbWlseTogJyR7Zm9udE5hbWV9Jywgc2Fucy1zZXJpZjtcbiAgICAgIH1cbiAgICBgO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgZ2V0Rm9ybURhdGEoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmdQYWdlcyA9IHRydWU7XG4gICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIDEsMCx0cnVlKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZ1BhZ2VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgICAgICByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5lbWl0dGVycyA9IHRoaXMucXVlc3Rpb24uZW1pdHRlcnMgfHwgW107XG4gICAgICAgIHRoaXMuYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHRoaXMucXVlc3Rpb24pO1xuICAgICAgICB0aGlzLnNldFVwRm9udEZhbWlseShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMucHJpbWFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnByaW1hcnlDb2xvcjtcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5zZWNvbmRhcnlDb2xvcjtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5wYWdlRGV0YWlscykge1xuICAgICAgICAgIHRoaXMucGFnZURldGFpbHMgPSByZXNwb25zZS5yZXN1bHQucGFnZURldGFpbHM7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbMV07XG4gICAgICAgIH1cbiAgICAgICAgIHRoaXMud2ViaG9vaz0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M7XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M/Lm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG5cblxuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRTdWJtaXR0ZWRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0U3VibWl0dGVkRm9ybSh0aGlzLm1vZHVsZU5hbWUsIHRoaXMuc3VibWlzc2lvbklkKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdC5tb2R1bGVDb25maWd1cmF0aW9uLmVuYWJsZUdvb2dsZVJlY2FwdGNoYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbiA9IG1hcHBlci5tYXBQdWJsaWNGb3JtVG9Nb2RlbChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHRoaXMucXVlc3Rpb24pO1xuICAgICAgICB0aGlzLnByaW1hcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5wcmltYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQuc2Vjb25kYXJ5Q29sb3I7XG4gICAgICAgIHRoaXMuZW1pdHRlcnMgPSB0aGlzLnF1ZXN0aW9uLmVtaXR0ZXJzIHx8IFtdO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZURldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VEZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VEZXRhaWxzO1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgICB9XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M/Lm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucm93U2V0Q291bnRbMF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdGhpcy5wYWdlc1tpXSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFVwRm9udEZhbWlseShyZXNwb25zZSk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgICB0aGlzLnJlY2FwdGNoYUluaXRpYWxpemVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRVcEZvbnRGYW1pbHkocmVzcG9uc2U6IGFueSkge1xuICAgIC8vc2V0IGZvbnQgZmFtaWx5IGFuZCBmb250IHNpemVcbiAgICBpZiAocmVzcG9uc2UucmVzdWx0Py5tb2R1bGVDb25maWd1cmF0aW9uPy5jdXN0b21pemVGb250KSB7XG4gICAgICB0aGlzLmZvbnRGYW1pbHkgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZm9udEZhbWlseTtcbiAgICAgIHRoaXMuZm9udFNpemUgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZm9udFNpemUgfHwgMTg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9udEZhbWlseSA9ICdQb3BwaW5zJztcbiAgICAgIHRoaXMuZm9udFNpemUgPSAxODtcbiAgICB9XG4gICAgdGhpcy5sb2FkRm9udCh0aGlzLmZvbnRGYW1pbHkpO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICctLWxpYnJhcnktZm9udC1mYW1pbHknLFxuICAgICAgdGhpcy5mb250RmFtaWx5XG4gICAgKTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAnLS1saWJyYXJ5LWZvbnQtc2l6ZScsXG4gICAgICB0aGlzLmZvbnRTaXplICsgJ3B4J1xuICAgICk7XG4gIH1cblxuICBhc3NpZ25RdWVzdGlvblByb3BlcnRpZXMocXVlc3Rpb246IFB1YmxpY0Zvcm0pIHtcbiAgICB0aGlzLm5hbWUgPSBxdWVzdGlvbi5uYW1lO1xuICAgIHRoaXMucGFnZXMgPSBxdWVzdGlvbi5wYWdlcztcbiAgICBpZiAodGhpcy5wYXJlbnRRdWVzdGlvbnMpIHtcbiAgICAgIHRoaXMucGFyZW50UXVlc3Rpb25BbnN3ZXJzID0gcXVlc3Rpb24/LnF1ZXN0aW9uQW5zd2VycztcbiAgICAgIHRoaXMucGFyZW50U3VibWlzc2lvbklkID0gcXVlc3Rpb24/LnBhcmVudElkO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1swXTtcbiAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlc1sxXTtcbiAgICB0aGlzLnNhdmVBdXRvbWF0aWNhbGx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUF1dG9tYXRpY2FsbHk7XG4gICAgdGhpcy5zYXZlSW50ZXJ2YWwgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5zYXZlSW50ZXJ2YWw7XG4gICAgdGhpcy5jdXN0b21pemVGb250ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uY3VzdG9taXplRm9udDtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5mb250RmFtaWx5O1xuICAgIHRoaXMuZm9udFNpemUgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5mb250U2l6ZTtcbiAgICB0aGlzLmVuYWJsZURhdGFFeHBvcnQgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVEYXRhRXhwb3J0O1xuICAgIHRoaXMuZmlsZUZvcm1hdHMgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5maWxlRm9ybWF0cztcbiAgICB0aGlzLmVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nO1xuICAgIHRoaXMucXVlc3Rpb25OdW1iZXJpbmcgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5xdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgdGhpcy5nb29nbGVSZWNhcHRjaGFLZXkgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5nb29nbGVSZWNhcHRjaGFLZXk7XG4gICAgdGhpcy5nb29nbGVSZWNhcHRjaGFTZWNyZXQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0O1xuICAgIHRoaXMubmF2aWdhdGlvbiA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLm5hdmlnYXRpb247XG4gICAgdGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDtcbiAgICB0aGlzLmFwaUNhbGxlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgbmF2aWdhdGVUb05leHRQYWdlKCkge1xuICAgaWYoIXRoaXMuaXNMb2FkaW5nKXtcbiAgICB0aGlzLmlzTG9hZGluZz10cnVlO1xuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuY3VycmVudFBhZ2VJbmRleCArIDE7XG4gICAgaWYgKG5leHRJbmRleCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlPXRydWU7XG4gICAgICAgICBpZighdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpLmlzVmFsaWQ7XG4gICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UgKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgaWYodGhpcy5wYWdlc1tuZXh0SW5kZXhdLmxlbmd0aCAhPSAwKXtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9bmV4dEluZGV4O1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1tuZXh0SW5kZXggKyAxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGlmKHRoaXMucGFnZXNbbmV4dEluZGV4XS5sZW5ndGggIT0gMCl7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbbmV4dEluZGV4XTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9bmV4dEluZGV4O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLnNldEN1cnJlbnRQYWdlKG5leHRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICB9XG4gICAgfVxuICAgICB0aGlzLmlzTG9hZGluZz1mYWxzZTtcbiAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgfVxufVxuXG4gIG5hdmlnYXRlVG9QcmV2aW91c1BhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCA+IDApIHtcbiAgICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRGF0YSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZT10cnVlO1xuICAgICAgICAgaWYoIXRoaXMudmFsaWRhdGlvblNraXApIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKS5pc1ZhbGlkO1xuICAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgtLTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LS07XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gIH1cblxuICBjaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsaWdpYmxlRm9yU3VibWlzc2lvbiA9IHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBzZXRDdXJyZW50UGFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIGlmICghdGhpcy5wYWdlc1tpbmRleF0gfHwgdGhpcy5wYWdlc1tpbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSBpbmRleCArIDE7XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyLFxuICAgICAgICAgIHRoaXMucm93U2V0XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5wYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0gPSByZXNwb25zZS5yZXN1bHQucGFnZXNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIHRoaXMucGFnZU51bWJlciwgdGhpcy5yb3dTZXQsIHRydWUpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlPXRydWU7XG4gICAgICAgICBpZighdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpLmlzVmFsaWQ7XG4gICAgICAgICB9XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICB9XG5cbiAgfVxuXG4gIGxvYWRNb3JlRGF0YShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHJvd0NvdW50TGltaXQgPSB0aGlzLnJvd1NldENvdW50W2luZGV4XTtcbiAgICBsZXQgaSA9IDA7XG4gICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIGxldCByb3dDb3VudCA9aS8yMDtcbiAgICByb3dDb3VudCA9IE1hdGguY2VpbChyb3dDb3VudCk7XG5cbiBpZih0aGlzLnZpc2l0ZWRSb3dzLmhhcyhpbmRleCkpIHtcbiAgIGlmKHRoaXMudmlzaXRlZFJvd3MuZ2V0KGluZGV4KT09PSByb3dDb3VudCl7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgIHJldHVybjtcbiAgIH1cbiB9XG5cblxuICAgIGlmIChyb3dDb3VudCArIDEgPiByb3dDb3VudExpbWl0KSB7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmc9ZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlzaXRlZFJvd3Muc2V0KGluZGV4LCByb3dDb3VudCk7XG5cbiAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgIC5nZXRTdWJtaXR0ZWRGb3JtKFxuICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICBpbmRleCArIDEsXG4gICAgICAgICAgcm93Q291bnRcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbXG4gICAgICAgICAgICAuLi4odGhpcy5wYWdlc1tpbmRleF0/LnJvd3MgPz8gW10pLFxuICAgICAgICAgICAgLi4ubmV3Um93cyxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgaW5kZXggKyAxLCByb3dDb3VudCApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdSb3dzID0gcmVzcG9uc2U/LnJlc3VsdD8ucGFnZXNbMF0/LnJvd3MgPz8gW107XG4gICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cyA9IFtcbiAgICAgICAgICAgIC4uLih0aGlzLnBhZ2VzW2luZGV4XT8ucm93cyA/PyBbXSksXG4gICAgICAgICAgICAuLi5uZXdSb3dzLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaW5kZXhdO1xuICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nPWZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgfVxufVxuXG4gIGdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCkge1xuICAgIHRoaXMubWF4UG9zc2libGVTY29yZSA9IDE7XG4gICAgdGhpcy5zdW1PZkZpbmRpbmdzID0gMDtcbiAgICB0aGlzLnN1bU9mQmFkRmluZGluZ3MgPSAwO1xuICAgIHRoaXMuc3VtT2ZHb29kRmluZGluZ3MgPSAwO1xuICAgIHRoaXMuY29weVN1YmZvcm1zID0gW107XG4gICAgY29uc3QgZXh0cmFjdFF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W10sXG4gICAgICBwYXJlbnRGb3JtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICAgaXNJblN1YkZvcm06IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgIHN1YkZvcm1JbmRleDogbnVtYmVyID0gMFxuICAgICk6IHsgYW5zd2VyczogQW5zd2VyW107IGZvcm1zOiBGb3JtW10gfSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbnM6IEFuc3dlcltdID0gW107XG4gICAgICBjb25zdCBmb3JtczogRm9ybVtdID0gW107XG5cbiAgICAgIGZvcm1FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICBsZXQgYmFzZVF1ZXN0aW9uOiBhbnk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2VsZW1lbnQuZWxlbWVudC5pZH1gXG4gICAgICAgICAgICAgICAgOiBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb25JZCxcbiAgICAgICAgICAgICAgICBmaWxlOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBlbGVtZW50LmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogZWxlbWVudC5lbGVtZW50LmFuc3dlcixcbiAgICAgICAgICAgICAgc2NvcmU6IGVsZW1lbnQuZWxlbWVudC5zY29yZSxcbiAgICAgICAgICAgICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6IGVsZW1lbnQuZWxlbWVudC5tYXhQb3NzaWJsZVNjb3JlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLmJhc2VRdWVzdGlvbixcbiAgICAgICAgICAgICAgYW5zd2VySWQ6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXJJZCB8fCAnJyxcbiAgICAgICAgICAgICAgZGVsZXRlRmlsZXM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdEUk9QX0RPV04nIHx8XG4gICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ1JBRElPX0JVVFRPTicgfHxcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnQ0hFQ0tfQk9YJykgJiZcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LnNjb3JpbmcgJiZcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LnNjb3JpbmcuZW5hYmxlU2NvcmluZyAmJlxuICAgICAgICAgICAgICAhaXNJblN1YkZvcm1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVTY29yZSAqPSB0aGlzLnNjb3JlQ2FsY1NlcnZpY2UuZ2V0TWF4UG9zc2libGVTY29yZUZvclF1ZXN0aW9uKGVsZW1lbnQuZWxlbWVudCk7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuc2NvcmUgJiYgZWxlbWVudC5lbGVtZW50LnNjb3JlIT1udWxsICYmIGVsZW1lbnQuZWxlbWVudC5zY29yZSE9dW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgdGhpcy5zdW1PZkZpbmRpbmdzICs9IGVsZW1lbnQuZWxlbWVudC5zY29yZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9ybUlkLFxuICAgICAgICAgICAgICAgICAgICBpc0luU3ViRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgc3ViRm9ybUluZGV4XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goLi4ucmVzdWx0LmFuc3dlcnMpO1xuICAgICAgICAgICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJykge1xuICAgICAgICAgIGNvbnN0IHN1YmZvcm1JZCA9IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbklkO1xuICAgICAgICAgIGlmKGVsZW1lbnQuZWxlbWVudC5jb3B5U3ViZm9ybU1ldGEpe1xuICAgICAgICAgICAgdGhpcy5jb3B5U3ViZm9ybXMucHVzaChlbGVtZW50LmVsZW1lbnQuY29weVN1YmZvcm1NZXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgbGV0IGFsbEFuc3dlcnM6IEFuc3dlcltdID0gW107XG5cbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgc3ViZm9ybUlkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybXMubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGV4dHJhY3RlZC5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcikgPT4ge1xuICAgICAgICAgICAgICAgIGFsbEFuc3dlcnMucHVzaCh7IC4uLmFuc3dlciB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBjb3BpZWRGb3JtcztcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtcyl7XG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zID0gZWxlbWVudC5lbGVtZW50LmNvcGllZEZvcm1zXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZDogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWQsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTdWJtaXNzaW9uczogW10sXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbklkOiBzdWJtaXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICBhbnN3ZXJzOiBhbGxBbnN3ZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zOmNvcGllZEZvcm1zXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm1BbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IHN1YmZvcm1RdWVzdGlvbnM6IGFueSA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHN1YmZvcm1RdWVzdGlvbnMgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgIHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1N1YmZvcm0gPSBmb3Jtcy5maW5kKFxuICAgICAgICAgICAgICAoZm9ybSkgPT4gZm9ybS5mb3JtSWQgPT09IHN1YmZvcm1JZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICgoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1UeXBlID09ICdpbmxpbmUnIHx8IGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtVHlwZSA9PSAnY2FyZCcpXG4gICAgICAgICAgICAgICAmJiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zID0gdGhpcy5jbGVhckVtcHR5U3VibWlzc2lvbnMoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5mb3JFYWNoKFxuICAgICAgICAgICAgICAoc3VibWlzc2lvbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIHN1Ym1pc3Npb24uc2NvcmVzID8/IFtdKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocy5zY29yZVR5cGUgPT09ICdHT09EX1NDT1JFJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bU9mR29vZEZpbmRpbmdzICs9IHMuc2NvcmU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocy5zY29yZVR5cGUgPT09ICdCQURfU0NPUkUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtT2ZCYWRGaW5kaW5ncyArPSBzLnNjb3JlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgc3VibWlzc2lvbi5oYXNBbGxTY29yaW5nQW5zd2VyZWRPbmNlO1xuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5odG1sQ29udGVudDtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlci5maWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGAke3N1YmZvcm1JZH1fJHtpbmRleH1fJHthbnN3ZXIucXVlc3Rpb25JZH1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZTogYW5zd2VyLmZpbGVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5maWxlcztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuYXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgY29waWVkRm9ybXM7XG4gICAgICAgICAgICBpZihlbGVtZW50LmVsZW1lbnQuY29waWVkRm9ybXMpe1xuICAgICAgICAgICAgICBjb3BpZWRGb3JtcyA9IGVsZW1lbnQuZWxlbWVudC5jb3BpZWRGb3Jtc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZDogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWQsXG4gICAgICAgICAgICAgIHNjb3JlczplbGVtZW50LmVsZW1lbnQuc2NvcmVzLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVkU3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIGNvcGllZEZvcm1zOmNvcGllZEZvcm1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvcm1zLnB1c2goc3ViZm9ybSk7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlU2NvcmUgPSBlbGVtZW50LmVsZW1lbnQ/Lm1heFBvc3NpYmxlU2NvcmUgKiBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5sZW5ndGhcbiAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgPSBlbGVtZW50LmVsZW1lbnQ/Lm1heFBvc3NpYmxlU2NvcmU/Lmdvb2QgKiBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlQmFkU2NvcmUgPSBlbGVtZW50LmVsZW1lbnQ/Lm1heFBvc3NpYmxlU2NvcmU/LmJhZCAqIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/Lmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIFF1ZXN0aW9uIEdyb3VwIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHJvd3NcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6YW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTphbnkpID0+IHtcblxuICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZWxlbWVudD8uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZ3JpZEl0ZW0uZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkSXRlbS5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2dyaWRJdGVtLmVsZW1lbnQuaWR9YFxuICAgICAgICAgICAgICAgICAgICAgIDogZ3JpZEl0ZW0uZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcklkOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlczogZ3JpZEl0ZW0uZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnKSB7XG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlciB8fCAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1BhZ2VzID0gKFxuICAgICAgcGFnZXM6IGFueVtdXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3Jtc307XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NQYWdlcyh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcbiAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgIGFuc3dlcnM6IHJlc3VsdC5hbnN3ZXJzLFxuICAgICAgZm9ybXM6IHJlc3VsdC5mb3JtcyxcbiAgICAgIGNvcHlTdWJGb3Jtczp0aGlzLmNvcHlTdWJmb3Jtc1xuICAgIH07XG4gIH1cblxuICBjbGVhckVtcHR5U3VibWlzc2lvbnMoc3VibWlzc2lvbnM6IGFueSkge1xuICAgIGNvbnN0IG5vbkVtcHR5U3VibWlzc2lvbnM6IFN1Ym1pc3Npb25bXSA9IFtdO1xuICAgIGNvbnN0IGVtcHR5U3VibWlzc2lvbklkczogc3RyaW5nW10gPSBbXTtcblxuICAgIHN1Ym1pc3Npb25zLmZvckVhY2goKHN1Ym1pc3Npb246IGFueSkgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWUgPSBzdWJtaXNzaW9uLmFuc3dlcnMuc29tZShcbiAgICAgICAgKGFuc3dlcjogYW55KSA9PlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09ICcnICYmXG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gbnVsbCAmJlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICBub25FbXB0eVN1Ym1pc3Npb25zLnB1c2goc3VibWlzc2lvbik7XG4gICAgICB9IGVsc2UgaWYgKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKSB7XG4gICAgICAgIGVtcHR5U3VibWlzc2lvbklkcy5wdXNoKHN1Ym1pc3Npb24uc3VibWlzc2lvbklkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN1Ym1pc3Npb25zID0gbm9uRW1wdHlTdWJtaXNzaW9ucztcbiAgICByZXR1cm4gc3VibWlzc2lvbnM7XG4gIH1cblxuICB2YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKTogeyBzdGF0dXM6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnUGxlYXNlIGVuc3VyZSBhbGwgcGFnZXMgYXJlIGZ1bGx5IHZpc2libGUgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGZvcm0uJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaW5jb21wbGV0ZVBhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYocCAmJiBBcnJheS5pc0FycmF5KHAucm93cykpe1xuICAgICAgbGV0IGo9MDtcbiAgICAgIHAucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGorKztcbiAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXAgfHxcbiAgICAgICAgIUFycmF5LmlzQXJyYXkocC5yb3dzKSB8fFxuICAgICAgICBNYXRoLmNlaWwoaiAvIDIwKSAhPSB0aGlzLnJvd1NldENvdW50W2ldXG4gICAgICApIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGluY29tcGxldGVQYWdlcy5wdXNoKHRoaXMucGFnZURldGFpbHNbaV0ubmFtZSk7XG4gICAgfVxuICAgIH0pO1xuXG5cblxuICAgIGlmIChpbmNvbXBsZXRlUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFNvbWUgc2VjdGlvbnMgYXJlIHN0aWxsIGxvYWRpbmcuIFBsZWFzZSBzY3JvbGwgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHBhZ2VzIHRvIGVuc3VyZSBhbGwgcXVlc3Rpb25zIGFyZSBsb2FkZWQ6ICR7aW5jb21wbGV0ZVBhZ2VzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfS5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiB0cnVlLFxuICAgICAgbWVzc2FnZTogJ0dyZWF0ISBBbGwgc2VjdGlvbnMgYXJlIGNvbXBsZXRlLiBZb3UgY2FuIG5vdyBzdWJtaXQgdGhlIGZvcm0uJyxcbiAgICB9O1xuICB9XG4gIHNhdmVhc0RyYWZ0UG9wdXAoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuc2tpcFZhbGlkYXRpb24pXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVEcmFmdE1vZGFsQ29tcG9uZW50ICwge1xuICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICBkYXRhOiB7XG4gICAgcHJpbWFyeUNvbG9yOiB0aGlzLnByaW1hcnlDb2xvcixcbiAgfVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNraXA9dHJ1ZTtcbiAgICAgICAgdGhpcy5zdWJtaXRGb3JtKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNraXA9ZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2tpcD1mYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzdWJtaXRGb3JtKCkge1xuICAgIGlmKHRoaXMud2ViaG9vayl7XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gdGhpcy53ZWJob29rLm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgIGlmICghdGhpcy52YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKS5zdGF0dXMpIHtcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ1BsZWFzZSB3YWl0IGZvciBhbGwgZWxlbWVudHMgdG8gbG9hZCcpO1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICdzdGF0dXMnOidmYWlsZWQnXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgbGV0IHJlY2FwdGNoYVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLmNsZWFyKCk7XG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckFsbCgpO1xuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVjYXB0Y2hhVG9rZW49YXdhaXQgdGhpcy5nZXRUb2tlbigpO1xuXG5cbiAgICAgICAgaWYgKCFyZWNhcHRjaGFUb2tlbikge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignUGxlYXNlIGNvbXBsZXRlIHRoZSBDQVBUQ0hBIHZlcmlmaWNhdGlvbiBiZWZvcmUgc3VibWl0dGluZyB0aGUgZm9ybS4nKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdFcnJvciB3aGlsZSBnZXR0aW5nIHJlQ0FQVENIQSB0b2tlbjonLFxuICAgICAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdG8gdmVyaWZ5IHJlQ0FQVENIQS4nKTtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAnc3RhdHVzJzonZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlID10cnVlO1xuICAgIGlmICghdGhpcy52YWxpZGF0aW9uU2tpcCkge1xuICAgICAgdmFsaWRhdGlvblJlc3BvbnNlPXRoaXMudmFsaWRhdGVGb3JtKHRoaXMucGFnZXMpLmlzVmFsaWQ7XG4gICAgfVxuXG4gICAgaWYoIXZhbGlkYXRpb25SZXNwb25zZSl7XG4gICAgICB0aGlzLnNhdmVhc0RyYWZ0UG9wdXAoKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZ2V0Q2lyY3VsYXJSZXBsYWNlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgICAgcmV0dXJuIChfa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpO1xuICAgIGNvbnN0IGZvcm1GaW5hbFNjb3JlID0gdGhpcy5jYWxjdWxhdGVGb3JtRmluYWxTY29yZSgpO1xuICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnNjb3JlcyA9IGZvcm1GaW5hbFNjb3JlO1xuICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UpIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3NraXBWYWxpZGF0aW9uJyx0aGlzLnZhbGlkYXRpb25Ta2lwID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgICB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5wYXJlbnRJZCA9IHRoaXMucGFyZW50U3VibWlzc2lvbklkO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uJywgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkFuc3dlcnMsIGdldENpcmN1bGFyUmVwbGFjZXIoKSkpO1xuICAgICAgaWYodGhpcy53ZWJob29rUGF5bG9hZEFycmF5KXtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwid2ViaG9va1BheWxvYWRcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy53ZWJob29rUGF5bG9hZEFycmF5KSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwid2ViaG9va1BheWxvYWRcIiwgSlNPTi5zdHJpbmdpZnkoW10pKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2VlblF1ZXN0aW9uSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlRmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcigoZmlsZUl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoc2VlblF1ZXN0aW9uSWRzLmhhcyhmaWxlSXRlbS5xdWVzdGlvbklkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWVuUXVlc3Rpb25JZHMuYWRkKGZpbGVJdGVtLnF1ZXN0aW9uSWQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB1bmlxdWVGaWxlcy5mb3JFYWNoKChmaWxlSXRlbSkgPT4ge1xuICAgICAgICAgIGZpbGVJdGVtLmZpbGUuZm9yRWFjaCgoZmlsZTogYW55KSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmlsZUl0ZW0ucXVlc3Rpb25JZCwgZmlsZS5fZmlsZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybVNlcnZpY2VDYWxsID1cbiAgICAgICAgdGhpcy5lZGl0ICYmIHRoaXMuc3VibWlzc2lvbklkXG4gICAgICAgICAgPyB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm0oXG4gICAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW4gPz8gJydcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHRoaXMuZm9ybVNlcnZpY2Uuc3VibWl0Rm9ybShcbiAgICAgICAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW4gPz8gJydcbiAgICAgICAgICAgICk7XG5cbiAgICAgIGZvcm1TZXJ2aWNlQ2FsbC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFxuICAgICAgICAgICAgdGhpcy5lZGl0XG4gICAgICAgICAgICAgID8gJ0Zvcm0gdXBkYXRlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgICAgIDogJ0Zvcm0gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBlbWl0dGluZ1ZhbHVlc1xuICAgICAgICAgIGlmKHRoaXMuZW1pdHRlcnMpe1xuICAgICAgICAgICAgZW1pdHRpbmdWYWx1ZXMgPSB0aGlzLm1hcEVtaXR0ZXJzVG9WYWx1ZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZm9ybURhdGEuZ2V0KCdza2lwVmFsaWRhdGlvbicpID09PSAndHJ1ZScpe1xuICAgICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAgICAgJ3N0YXR1cyc6J2RyYWZ0JyxcbiAgICAgICAgICAgICdzdWJtaXNzaW9uSWQnOnJlc3BvbnNlLnJlc3VsdCxcbiAgICAgICAgICAgICdzY29yZSc6Zm9ybUZpbmFsU2NvcmUsXG4gICAgICAgICAgICAuLi4oZW1pdHRpbmdWYWx1ZXMgfHwge30pXG4gICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAgICAgJ3N0YXR1cyc6J3N1Y2Nlc3MnLFxuICAgICAgICAgICAgJ3N1Ym1pc3Npb25JZCc6cmVzcG9uc2UucmVzdWx0LFxuICAgICAgICAgICAgJ3Njb3JlJzpmb3JtRmluYWxTY29yZSxcbiAgICAgICAgICAgIC4uLihlbWl0dGluZ1ZhbHVlcyB8fCB7fSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckFsbCgpO1xuICAgICAgICAgIHRoaXMuZmluZFF1ZXN0aW9uUGFnZUluZGV4KHRoaXMucGFyc2VFcnJvcnNUb01hcChlcnJvci5lcnJvci5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMubGVuZ3RoLTE7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9GaXJzdEVycm9yKCk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2F2ZWFzRHJhZnRQb3B1cCgpO1xuICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoe1xuICAgICAgICAgICAgJ3N0YXR1cyc6J2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy50b2FzdHIuZXJyb3IodmFsaWRhdGlvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdCh7XG4gICAgICAgICdzdGF0dXMnOidmYWlsZWQnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F2ZWFzRHJhZnRQb3B1cCgpO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUZvcm1GaW5hbFNjb3JlKCk6IFN1Ym1pc3Npb25TY29yZVtdIHtcbiAgICBjb25zdCBnb29kU2NvcmUgPSB0aGlzLm1heFBvc3NpYmxlR29vZFNjb3JlXG4gICAgICA/IDEwMCAtICh0aGlzLnN1bU9mR29vZEZpbmRpbmdzIC8gdGhpcy5tYXhQb3NzaWJsZUdvb2RTY29yZSkgKiAxMDBcbiAgICAgIDogMDtcblxuICAgIGNvbnN0IGJhZFNjb3JlID0gdGhpcy5tYXhQb3NzaWJsZUJhZFNjb3JlXG4gICAgICA/IDEwMCAtICh0aGlzLnN1bU9mQmFkRmluZGluZ3MgLyB0aGlzLm1heFBvc3NpYmxlQmFkU2NvcmUpICogMTAwXG4gICAgICA6IDA7XG5cbiAgICByZXR1cm4gW1xuICAgICAgeyBzY29yZVR5cGU6ICdHT09EX1NDT1JFJywgc2NvcmU6IE1hdGgucm91bmQoZ29vZFNjb3JlKSB9LFxuICAgICAgeyBzY29yZVR5cGU6ICdCQURfU0NPUkUnLCBzY29yZTogTWF0aC5yb3VuZChiYWRTY29yZSkgfVxuICAgIF07XG4gIH1cblxuICBtYXBFbWl0dGVyc1RvVmFsdWVzKFxuICApOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhbnN3ZXJNYXAgPSBuZXcgTWFwKFxuICAgICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMuYW5zd2Vycy5tYXAoKHFhKSA9PiBbcWEucXVlc3Rpb25JZCwgcWEuYW5zd2VyXSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgICB0aGlzLmVtaXR0ZXJzLmZvckVhY2goKGVtaXR0ZXIpID0+IHtcbiAgICAgIGlmIChlbWl0dGVyLnZhbHVlU291cmNlID09PSAnQ1VTVE9NX0lOUFVUJykge1xuICAgICAgICByZXN1bHRbZW1pdHRlci5rZXlOYW1lXSA9IGVtaXR0ZXIuaW5wdXRWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGVtaXR0ZXIudmFsdWVTb3VyY2UgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgZW1pdHRlci5xdWVzdGlvbklkICYmXG4gICAgICAgIGFuc3dlck1hcC5oYXMoZW1pdHRlci5xdWVzdGlvbklkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdFtlbWl0dGVyLmtleU5hbWVdID0gYW5zd2VyTWFwLmdldChlbWl0dGVyLnF1ZXN0aW9uSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gcGFyc2VFcnJvcnNUb01hcChlcnJvclN0cmluZzogc3RyaW5nKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgZXJyb3JNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIC8vIENvbnZlcnQgdGhlIGluY29ycmVjdCBmb3JtYXQgdG8gYSB2YWxpZCBvYmplY3Qgc3RydWN0dXJlXG4gICAgZXJyb3JTdHJpbmdcbiAgICAgICAgLnJlcGxhY2UoL1t7fV0vZywgJycpIC8vIFJlbW92ZSBjdXJseSBicmFjZXNcbiAgICAgICAgLnNwbGl0KCcsICcpIC8vIFNwbGl0IGtleS12YWx1ZSBwYWlyc1xuICAgICAgICAuZm9yRWFjaChwYWlyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIGlmIChrZXkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1hcC5zZXQoa2V5LnRyaW0oKSwgdmFsdWUudHJpbSgpKTsgLy8gU3RvcmUgaW4gTWFwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGVycm9yTWFwO1xufVxuICBhc3luYyBuYXZpZ2F0ZVRvRmlyc3RFcnJvcigpIHtcbiAgICBjb25zdCBmaXJzdEVycm9yID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRGaXJzdEludmFsaWQoKTtcbiAgICBpZiAoIWZpcnN0RXJyb3IpIHJldHVybjtcblxuICAgIGNvbnN0IGVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke2ZpcnN0RXJyb3IuaWR9YDtcblxuICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XG5cbiAgICAvLyBDaGFuZ2UgcGFnZSBpZiBuZWVkZWRcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZUluZGV4ICE9PSBmaXJzdEVycm9yLnBhZ2VJbmRleCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gZmlyc3RFcnJvci5wYWdlSW5kZXg7XG4gICAgICBpZih0aGlzLmN1cnJlbnRQYWdlSW5kZXgrMSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKXtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4KzFdO1xuICAgICAgfVxuICAgICAgaWYodGhpcy5jdXJyZW50UGFnZUluZGV4LTE+PTApe1xuICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4LTFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlYm91bmNlKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLCAxMDApO1xuICAgICAgaWYodGhpcy5uYXZpZ2F0aW9uID09PSAnVEFCJylcbiAgICAgIHRoaXMuY2hpbGQudHJpZ2dlckZ1bmN0aW9uKGZpcnN0RXJyb3IucGFnZUluZGV4KTtcbiAgICB9XG5cblxuICAgIGF3YWl0IHRoaXMuc2Nyb2xsVG9FbGVtZW50V2l0aFJldHJ5KGVsZW1lbnRJZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmV0cnlDb3VudCsrO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnNjcm9sbEFuZEZvY3VzKGVsZW1lbnQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXRyeUNvdW50IDwgdGhpcy5tYXhSZXRyaWVzKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGBFbGVtZW50ICR7ZWxlbWVudElkfSBub3QgZm91bmQgYWZ0ZXIgJHt0aGlzLm1heFJldHJpZXN9IGF0dGVtcHRzYCk7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuZmFsbGJhY2tTY3JvbGwoKSk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbEFuZEZvY3VzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICBibG9jazogJ2NlbnRlcicsXG4gICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgIH0pO1xuXG4gICAgY29uc3QgZm9jdXNhYmxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24sIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGZvY3VzYWJsZT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmFsbGJhY2tTY3JvbGwoKSB7XG4gICAgY29uc3QgcGFnZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAucGFnZS0ke3RoaXMuY3VycmVudFBhZ2VJbmRleH1gKTtcbiAgICBwYWdlRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWJvdW5jZShmdW5jOiAoKSA9PiB2b2lkLCBkZWxheTogbnVtYmVyKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lcik7XG4gICAgdGhpcy5kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChmdW5jLCBkZWxheSk7XG4gIH1cbi8vICAgZXh0cmFjdElkKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuLy8gICAgIGNvbnN0IG1hdGNoID0gbWVzc2FnZS5tYXRjaCgvWzAtOWEtZkEtRi1dezM2fS8pO1xuLy8gICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzBdIDogbnVsbDtcbi8vIH1cblxuLy8gIHJlbW92ZUlkKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4vLyAgIHJldHVybiBtZXNzYWdlLnJlcGxhY2UoL1swLTlhLWZBLUYtXXszNn0kLywgXCJcIikudHJpbSgpO1xuLy8gfVxuXG5cbmZpbmRRdWVzdGlvblBhZ2VJbmRleChxdWVzdGlvbkVycm9yczogTWFwPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICBmb3IgKGxldCBwYWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCB0aGlzLnBhZ2VzLmxlbmd0aDsgcGFnZUluZGV4KyspIHtcbiAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlc1twYWdlSW5kZXhdO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhlbGVtZW50LCBxdWVzdGlvbkVycm9ycywgcGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxucHJpdmF0ZSBjaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhlbGVtZW50OiBhbnksIHF1ZXN0aW9uRXJyb3JzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LCBwYWdlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICBpZiAoZWxlbWVudC5lbGVtZW50LmlkICYmIHF1ZXN0aW9uRXJyb3JzLmhhcyhlbGVtZW50LmVsZW1lbnQuaWQpKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5zZXRJbnZhbGlkKGVsZW1lbnQuZWxlbWVudC5pZCwgcXVlc3Rpb25FcnJvcnMuZ2V0KGVsZW1lbnQuZWxlbWVudC5pZCkhLCBwYWdlSW5kZXgpO1xuICB9XG5cbiAgLy8gSGFuZGxlIHN1YmZvcm1zIHJlY3Vyc2l2ZWx5XG4gIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZ3JpZEl0ZW0sIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OX0dST1VQJyB8fCBlbGVtZW50LmVudGl0eVR5cGU9PT0nTVVMVElGSUVMRCcpICYmIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhncmlkSXRlbSwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIGxvZ2ljLWJhc2VkIGNvbmRpdGlvbnMgcmVjdXJzaXZlbHlcbiAgaWYgKChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpICYmIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgIGZvciAoY29uc3QgbG9naWMgb2YgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGdyaWRJdGVtLCBxdWVzdGlvbkVycm9ycywgcGFnZUluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZm9jdXNRdWVzdGlvbkVsZW1lbnQoY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAvLyBGaW5kIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IHdpdGhpbiB0aGUgcXVlc3Rpb25cbiAgY29uc3QgZm9jdXNhYmxlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdJyk7XG4gIGlmIChmb2N1c2FibGUpIHtcbiAgICAoZm9jdXNhYmxlIGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5mb2N1cygpO1xuICB9XG59XG4gIHZhbGlkYXRlRm9ybShqc29uRGF0YTogYW55KToge1xuICAgIGlzVmFsaWQ6IGJvb2xlYW47XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHBhZ2VJbmRleDogbnVtYmVyIHwgMDtcbiAgfSB7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W11cbiAgICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgcGFnZUluZGV4OiBudW1iZXIgfCAwIH0gPT4ge1xuICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gZWxlbWVudC5lbGVtZW50LnJlcXVpcmVkO1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXI7XG4gICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGVsZW1lbnQuZWxlbWVudC52YWxpZGF0aW9uO1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBlbGVtZW50LmVsZW1lbnQuYXR0YWNobWVudHM7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCghYW5zd2VyIHx8IGFuc3dlcj8ubGVuZ3RoID09PSAwKSAmJiAoIWF0dGFjaG1lbnQgfHxhdHRhY2htZW50Py5sZW5ndGggPT0gMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlJlcXVpcmVkIGZpbGUgcXVlc3Rpb24gaGFzIG5vIGZpbGVzIHVwbG9hZGVkLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUmVxdWlyZWQgZmlsZSBxdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaGFzIG5vIGZpbGVzIHVwbG9hZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgfHwgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlRoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvblwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIHJlcXVpcmVkIGJ1dCBubyBhbnN3ZXIgcHJvdmlkZWQuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb249PT1mYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUXVlc3Rpb24gaXMgcmVxdWlyZWQgYnV0IHZhbGlkYXRpb24gaXMgZmFsc2UuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgcmVxdWlyZWQgYnV0IHZhbGlkYXRpb24gaXMgZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXF1aXJlZCAmJiBhbnN3ZXIgJiYgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUXVlc3Rpb24gaXMgbm90IHJlcXVpcmVkIGJ1dCBhbnN3ZXIgcHJvdmlkZWQgd2l0aCB2YWxpZGF0aW9uIGZhbHNlLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIG5vdCByZXF1aXJlZCBidXQgYW5zd2VyIHByb3ZpZGVkIHdpdGggdmFsaWRhdGlvbiBmYWxzZS5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgZm9yIChsZXQgbG9naWMgb2YgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhsb2dpYy5yb3dzKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyApIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViRm9ybShlbGVtZW50KTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgIGlmICgoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnIHx8IGVsZW1lbnQuZW50aXR5VHlwZT09PSdNVUxUSUZJRUxEJykmJiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuXG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkICYmIGVsZW1lbnQuZW50aXR5VHlwZSE9J01VTFRJRklFTEQnKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgbWVzc2FnZTogJycsIHBhZ2VJbmRleDogMCB9O1xuICAgIH07XG5cbiAgICBmb3IgKGxldCBwYWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCBqc29uRGF0YS5sZW5ndGg7IHBhZ2VJbmRleCsrKSB7XG4gICAgICBjb25zdCBwYWdlID0ganNvbkRhdGFbcGFnZUluZGV4XTtcbiAgICAgIGZvciAobGV0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuZm9yRWFjaCgobWVzc2FnZTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5zZXRJbnZhbGlkKGlkLG1lc3NhZ2UsIHBhZ2VJbmRleCk7XG59KTtcbiAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICAvLyBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIHtcbiAgICAgICAgLy8gICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgbWVzc2FnZTogYFBhZ2UgJHtwYWdlSW5kZXggKyAxfTogJHtyZXN1bHQubWVzc2FnZX1gLFxuICAgICAgICAvLyAgICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgIC8vICAgfTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBqc29uRGF0YS5sZW5ndGgtMTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRGaXJzdEludmFsaWQoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRmlyc3RFcnJvcigpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBQYWdlYCxcbiAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICBtZXNzYWdlOiAnRm9ybSBpcyB2YWxpZC4nLFxuICAgICAgcGFnZUluZGV4OiAwLFxuICAgIH07XG4gIH1cblxuICB2YWxpZGF0ZVN1YkZvcm0oZWxlbWVudDogYW55KSB7XG4gICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSAhPT0gJ1NVQkZPUk0nIHx8ICFlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zLmZvckVhY2goKHN1Ym1pc3Npb246IGFueSwgc3VibWlzc2lvbkluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHN1Ym1pc3Npb24uYW5zd2Vycy5mb3JFYWNoKChhbnN3ZXJPYmo6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuZmluZFF1ZXN0aW9uQnlJZChlbGVtZW50LmVsZW1lbnQucm93cywgYW5zd2VyT2JqLnF1ZXN0aW9uSWQpO1xuXG4gICAgICAgIGlmIChxdWVzdGlvbj8ucmVxdWlyZWQpIHtcbiAgICAgICAgICBjb25zdCBhbnMgPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgICAgIGlmIChhbnMgPT09ICcnIHx8IGFucyA9PT0gbnVsbCB8fCBhbnMgPT09IHVuZGVmaW5lZCB8fCBhbnM/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgJHtzdWJtaXNzaW9uSW5kZXh9LSR7cXVlc3Rpb24uaWR9YDtcbiAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoa2V5LCAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChxdWVzdGlvbi5mb3JtRWxlbWVudD8uZWxlbWVudFR5cGUgPT09ICdFTUFJTCcpIHtcbiAgICAgICAgICBjb25zdCBhbnMgPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgICAgIC8vIFNpbXBsZSBlbWFpbCByZWdleDogY2hlY2tzIGZvciBgc29tZXRoaW5nQGRvbWFpbi50bGRgXG4gICAgICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KGFucykpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke3N1Ym1pc3Npb25JbmRleH0tJHtxdWVzdGlvbi5pZH1gO1xuICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChrZXksICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIPCflI0gSGVscGVyOiBmaW5kIHF1ZXN0aW9uIGRlZmluaXRpb24gaW5zaWRlIHJvd3NcbiAgcHJpdmF0ZSBmaW5kUXVlc3Rpb25CeUlkKHJvd3M6IGFueVtdLCBxdWVzdGlvbklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZ3JpZEVsZW1lbnQgb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgaWYgKGdyaWRFbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZ3JpZEVsZW1lbnQuZWxlbWVudC5pZCA9PT0gcXVlc3Rpb25JZCkge1xuICAgICAgICAgIHJldHVybiBncmlkRWxlbWVudC5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICB1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVN1YkZvcm0odGhpcy5wYWdlcywgZXZlbnQpO1xuICB9XG5cbiAgdXBkYXRlU3ViRm9ybSA9IChwYWdlczogYW55W10sIHVwZGF0ZWRTdWJGb3JtOiBhbnkpID0+IHtcbiAgICBwYWdlcy5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5pZCA9PT0gdXBkYXRlZFN1YkZvcm0uaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZXhpc3Rpbmcgc3ViZm9ybSB3aXRoIHRoZSBuZXcgZGF0YVxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50ID0gdXBkYXRlZFN1YkZvcm07XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgIT09IHVwZGF0ZWRTdWJGb3JtLmZvcm1JZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHN1YmZvcm1zIGxvZ2ljIGhlcmUgaWYgbmVlZGVkXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSB1cGRhdGUgY2hpbGQgbG9naWNzXG4gICAgICAgICAgICAvLyBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaCgobG9naWM6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy51cGRhdGVTdWJGb3JtKGxvZ2ljLnJvd3MsIHVwZGF0ZWRTdWJGb3JtKTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG5cbiBleHRyYWN0R3JvdXBlZFdlYmhvb2tEYXRhKHdlYmhvb2tzOiBhbnlbXSk6IHtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwYXRoVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZXF1ZXN0Qm9kaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGNvbnN0IHJlc3VsdDoge1xuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhdGhWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcmVxdWVzdEJvZGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSA9IHtcbiAgICBoZWFkZXJzOiB7fSxcbiAgICBwYXJhbXM6IHt9LFxuICAgIHBhdGhWYXJpYWJsZXM6IHt9LFxuICAgIHJlcXVlc3RCb2RpZXM6IHt9XG4gIH07XG5cbiAgZm9yIChjb25zdCB3ZWJob29rIG9mIHdlYmhvb2tzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LmhlYWRlcnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LmhlYWRlcnNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5wYXJhbXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnBhcmFtc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LnBhdGhWYXJpYWJsZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnBhdGhWYXJpYWJsZXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5yZXF1ZXN0Qm9kaWVzID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5yZXF1ZXN0Qm9kaWVzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmdldFZhbHVlRnJvbVN0b3JhZ2Uoc291cmNlOiAnTE9DQUxfU1RPUkFHRScgfCAnU0VTU0lPTl9TVE9SQUdFJywga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcblxuICBpZiAoc291cmNlID09PSAnTE9DQUxfU1RPUkFHRScpIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICBpZiAoc291cmNlID09PSAnU0VTU0lPTl9TVE9SQUdFJykgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwib3V0ZXItY29udGFpbmVyXCI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdQYWdlc1wiPlxuICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGNvdW50PVwiNVwiPjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cbjwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgY2xhc3M9XCJoZWFkIGNvbnRhaW5lclwiICpuZ0lmPVwiIXNraXBNYXJnaW5cIj5cbiAgICA8bGliLWhlYWRlciBbbmFtZV09XCJuYW1lXCIgW3NraXBNYXJnaW5dPVwic2tpcE1hcmdpblwiPjwvbGliLWhlYWRlcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJib2R5XCIgW25nQ2xhc3NdPVwieyAnc2tpcC1tYXJnaW4nOiBza2lwTWFyZ2luLGNvbnRhaW5lcjogIXNraXBNYXJnaW59XCI+XG5cbiAgICA8bGliLXN1Ym1pc3Npb24tY29udGFpbmVyIFtwYXJlbnRRdWVzdGlvbkFuc3dlcnNdPVwicGFyZW50UXVlc3Rpb25BbnN3ZXJzXCJcbiAgICAqbmdJZj1cInBhcmVudFF1ZXN0aW9uQW5zd2Vyc1wiPjwvbGliLXN1Ym1pc3Npb24tY29udGFpbmVyPlxuXG4gICAgPGxpYi1uYXZpZ2F0aW9uLXRhYnNcbiAgICAgICpuZ0lmPVwibmF2aWdhdGlvbiA9PSAnVEFCJ1wiXG4gICAgICBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCJcbiAgICAgIFtza2lwVmFsaWRhdGlvbl09XCJza2lwVmFsaWRhdGlvblwiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICAocGFnZUNoYW5nZWQpPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIFtlbGlnaWJsZUZvclN1Ym1pc3Npb25dPVwiZWxpZ2libGVGb3JTdWJtaXNzaW9uXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdID0gXCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgIFtpc0FjdGlvblRyaWdnZXJlZF09XCJpc0FjdGlvblRyaWdnZXJlZFwiXG4gICAgICBbcHJpbWFyeUNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc2Vjb25kYXJ5Q29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW21hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkXT1cIm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkXCJcbiAgICAgIFtzdWJtaXNzaW9uSW5Qcm9ncmVzc109XCJzdWJtaXNzaW9uSW5Qcm9ncmVzc1wiXG4gICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgICAgKHJvd1NldEluZGV4KT1cImxvYWRNb3JlRGF0YSgkZXZlbnQpXCJcbiAgICA+PC9saWItbmF2aWdhdGlvbi10YWJzPlxuICAgIDxsaWItbmV4dC1wcmV2LW5hdmlnYXRpb25cbiAgICAgICpuZ0lmPVwibmF2aWdhdGlvbiA9PSAnTkVYVF9BTkRfUFJFVklPVVNfQlVUVE9OJ1wiXG4gICAgICBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCJcbiAgICAgIFtjdXJyZW50UGFnZUluZGV4XT1cImN1cnJlbnRQYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW3ByZXZpb3VzUGFnZV09XCJwcmV2aW91c1BhZ2VcIlxuICAgICAgW2lzQWN0aW9uVHJpZ2dlcmVkXT1cImlzQWN0aW9uVHJpZ2dlcmVkXCJcbiAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXG4gICAgICBbcHJpbWFyeUNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc2Vjb25kYXJ5Q29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW25leHRQYWdlXT1cIm5leHRQYWdlXCJcbiAgICAgIChuYXZpZ2F0ZU5leHQpPVwibmF2aWdhdGVUb05leHRQYWdlKClcIlxuICAgICAgKG5hdmlnYXRlUHJldmlvdXMpPVwibmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpXCJcbiAgICAgIFthY2NlcHRlZExhbmd1YWdlXSA9IFwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICBbZWxpZ2libGVGb3JTdWJtaXNzaW9uXT1cImVsaWdpYmxlRm9yU3VibWlzc2lvblwiXG4gICAgICBbc3VibWlzc2lvbkluUHJvZ3Jlc3NdPVwic3VibWlzc2lvbkluUHJvZ3Jlc3NcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICA+PC9saWItbmV4dC1wcmV2LW5hdmlnYXRpb24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=