gamma-app-controller 2.0.14 → 2.0.16

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.
@@ -46,6 +46,7 @@ export class GammaAdvanceChartComponent {
46
46
  return;
47
47
  }
48
48
  else {
49
+ this.isLoader = true;
49
50
  this.page_config = value;
50
51
  this.page_parms = value.titleParams;
51
52
  this.chartOrderBy = (value.kpiConfig.descendingOrder) ? value.kpiConfig.descendingOrder : false;
@@ -530,4 +531,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
530
531
  type: Input,
531
532
  args: ['chartDataSource']
532
533
  }] } });
533
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLWNoYXJ0L2dhbW1hLWFkdmFuY2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR2hKLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNOUUsTUFBTSxPQUFPLDBCQUEwQjtJQXFCckMsWUFDVSxhQUE0QixFQUM1QixNQUFxQixFQUNyQixVQUE0QixFQUM1QixRQUFtQixFQUFVLEVBQWMsRUFDM0MsR0FBc0IsRUFDRyxXQUFnQjtRQUx6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQzNDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0csZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUExQm5ELGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVEsRUFB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Q2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBrcGljb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4va3BpLWNvbW9uLXNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbmltcG9ydCB7IEFQUF9FTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvZW52aXJvbm1lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtYWR2YW5jZS1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGFydENvbmZpZzogYW55ID0ge307XG4gIHBhZ2VfY29uZmlnOiBhbnkgPSB7fTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbXBvbmVudElkOiBhbnk7XG4gIC8vIEBJbnB1dCgpIGNhcHRpb246IGFueTtcbiAgQElucHV0KCkga3BpX25hbWU6IGFueTtcbiAgLy8gQElucHV0KCkgY2hhcnREYXRhU291cmNlOmFueTtcbiAgY2FwdGlvbjogYW55O1xuICBpc0NoYXJ0dmlzaWJsZTogYm9vbGVhbjtcbiAgY3JlYXRDaGFydERhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XG4gIGZpbmFsQ2hhcnREYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgY2hhcnRXaXRoVGhyZWVEaW1lbnRpb25EYXRhU2VyaWVzOiBhbnkgPSBbXTtcbiAgY2hhcnRIZWlnaHQ6IGFueTtcblxuICBpc0Z1bGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoZWF0Q2hhcnREYXRhU291cmNlOiBhbnk7XG4gIGJ1YmJsZUNoYXJ0RGF0YTogYW55O1xuXG4gIGNoYXJ0VHlwZVdoZW5NdWx0aVNlcmllczogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrcGlTZXJ2aWNlOiBrcGljb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChBUFBfRU5WSVJPTk1FTlQpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcblxuICB9XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgLy8gY2hhcnRfYXR0ci5sZWdlbmRbMF1cbiAgY2hhcnRPcmRlckJ5OiBib29sZWFuO1xuICBjaGFydERpc3BsYXlEYXRlRm9ybWF0OiBhbnk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25DaGFydFBvaW50Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIHRoaXMuY3JlYXRDaGFydERhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuY3JlYXRDaGFydERhdGFTb3VyY2UgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLmNoYXJ0T3JkZXJCeSA9ICh2YWx1ZS5rcGlDb25maWcuZGVzY2VuZGluZ09yZGVyKSA/IHZhbHVlLmtwaUNvbmZpZy5kZXNjZW5kaW5nT3JkZXIgOiBmYWxzZTtcbiAgICAgIHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdCA9ICh2YWx1ZS5rcGlDb25maWcuZGlzcGxheURhdGVGb3JtYXQpID8gdmFsdWUua3BpQ29uZmlnLmRpc3BsYXlEYXRlRm9ybWF0IDogXCJNTS1ERFwiO1xuXG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuY2hhcnRDb25maWcgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZztcblxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZy5pc0RhdGFBZ2dyZWdhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGFnZ3JlYXRpb25EYXRhID0gdGhpcy5nZXRHcm91cERhdGFGb3JDaGFydCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSwgdGhpcy5jaGFydENvbmZpZ1snZGF0YUFnZ3JlZ2F0aW9uQ29uZmlnJ11bJ2RhdGFBZ2dyZWdhdGVDb2x1bWVzJ10sIHRoaXMuY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydhZ2dyZWdhdGVGaWVsZHMnXSk7XG4gICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgPSBhZ2dyZWF0aW9uRGF0YTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKGFnZ3JlYXRpb25EYXRhKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuXG4gICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQucmVjb3JkRGF0ZSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYi5yZWNvcmREYXRlKS5kaWZmKG1vbWVudChhLnJlY29yZERhdGUpKSk7XG5cbiAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGEucmVjb3JkRGF0ZSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdmdW5uZWwnKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gT2JqZWN0LmtleXMobW9zdFJlY2VudFJlY29yZCkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdyZWNvcmREYXRlJykubWFwKGtleSA9PiAoe1xuICAgICAgICAgICAgICBhcmd1bWVudDoga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogTWF0aC5hYnMocGFyc2VJbnQobW9zdFJlY2VudFJlY29yZFtrZXldKSlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnc3RhY2tlZEJhcicgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpTGluZScgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpQmFyJykge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhU291cmNlRm9yQ2hhcnQsIGxpc3RPZkdyb3VwQnlEYXRhIH0gPSB0aGlzLmdlQ2hhcnRXaXRoR3JvdXBCeUZvck11bHRpU2VyaXMoZmlsdGVyZWRPYmplY3RzLCB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRHcm91cEJ5KVxuICAgICAgICAgICAgdGhpcy5jaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXMgPSBsaXN0T2ZHcm91cEJ5RGF0YTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlV2hlbk11bHRpU2VyaWVzID0gdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdtdWx0aUxpbmUnID8gJ2xpbmUnIDogdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdtdWx0aUJhcicgPyAnYmFyJyA6IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5nZXREYWlseUNoYXJ0KGRhdGFTb3VyY2VGb3JDaGFydCwgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldERhaWx5Q2hhcnQoZmlsdGVyZWRPYmplY3RzLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwibW9udGhseVwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuXG4gICAgICAgICAgICAvLyBmb3IgY2hhcnQgc2hvcnQgYnkgYW55IGNvbHVtZVxuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRPcmRlckJ5KSB7XG4gICAgICAgICAgICAgIGxldCBzaG9ydE5hbWUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGlmIChzaG9ydE5hbWUuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZFt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSlcbiAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYlt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSkuZGlmZihtb21lbnQoYVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSkpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGFydFNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnWydjaGFydFNvcnRCeSddO1xuICAgICAgICAgICAgY29uc3QgaXNEZXNjID0gdGhpcy5jaGFydE9yZGVyQnkgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYXJ0U29ydEJ5KSAmJiBjaGFydFNvcnRCeS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2Uuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNoYXJ0U29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoYVtrZXldID09IG51bGwgJiYgYltrZXldID09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgaWYgKGFba2V5XSA9PSBudWxsKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgIGlmIChiW2tleV0gPT0gbnVsbCkgcmV0dXJuIC0xO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYVtrZXldID09PSBiW2tleV0pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNEZXNjXG4gICAgICAgICAgICAgICAgICAgID8gYltrZXldIC0gYVtrZXldICAgLy8gREVTQ1xuICAgICAgICAgICAgICAgICAgICA6IGFba2V5XSAtIGJba2V5XTsgIC8vIEFTQ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnYnViYmxlJykge1xuICAgICAgICAgICAgICB0aGlzLmJ1YmJsZUNoYXJ0RGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICB0aGlzLmdldEJ1YmJsZUNoYXJ0RGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnc3RhY2tlZEJhcicgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpTGluZScgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpQmFyJykge1xuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZUZvckNoYXJ0LCBsaXN0T2ZHcm91cEJ5RGF0YSB9ID0gdGhpcy5nZUNoYXJ0V2l0aEdyb3VwQnlGb3JNdWx0aVNlcmlzKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLCB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRHcm91cEJ5KVxuICAgICAgICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YVNvdXJjZUZvckNoYXJ0O1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0V2l0aFRocmVlRGltZW50aW9uRGF0YVNlcmllcyA9IGxpc3RPZkdyb3VwQnlEYXRhO1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0VHlwZVdoZW5NdWx0aVNlcmllcyA9IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlMaW5lJyA/ICdsaW5lJyA6IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInID8gJ2JhcicgOiB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRNb250aGx5Q2hhcnQoZGF0YVNvdXJjZUZvckNoYXJ0LCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRNb250aGx5Q2hhcnQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UsIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnKVxuICAgICAgICAgICAgICB0aGlzLmlzQ2hhcnR2aXNpYmxlID09IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcImhvdXJseVwiKSB7XG5cbiAgICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmhvdXIpXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYS5ob3VyLCAnaGgnKS5kaWZmKG1vbWVudChiLmhvdXIsICdoaCcpKSk7XG4gICAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5yZWNvcmREYXRlID09PSBtb3N0UmVjZW50UmVjb3JkLnJlY29yZERhdGUpO1xuXG4gICAgICAgICAgICB0aGlzLmdldEhvdXJDaGFydChmaWx0ZXJlZE9iamVjdHMsIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnKVxuICAgICAgICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9PSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIC8vIGVsc2Uge1xuICAgICAgLy8gICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAvLyB9XG5cbiAgICB9XG5cblxuXG4gIH1cblxuXG4gIGdldEdyb3VwRGF0YUZvckNoYXJ0KGRhdGEsIGFnZ3JlZ2F0aW9uQ29uZmlnLCBncm91cEJ5Q29sdW1ucykge1xuICAgIGNvbnN0IGdyb3VwTWFwID0ge307XG5cbiAgICBkYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gZ3JvdXBCeUNvbHVtbnMubWFwKGNvbCA9PiByb3dbY29sXSkuam9pbihcInx8XCIpO1xuXG4gICAgICBpZiAoIWdyb3VwTWFwW2dyb3VwS2V5XSkge1xuICAgICAgICBncm91cE1hcFtncm91cEtleV0gPSB7fTtcblxuICAgICAgICBncm91cEJ5Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2NvbF0gPSByb3dbY29sXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gLUluZmluaXR5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBhZ2dyZWdhdGlvbnNcbiAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1thZ2dyZWdhdGVEYXRhRmllbGRdO1xuXG4gICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1pbihncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEZpbmFsaXplIGF2ZXJhZ2VzXG4gICAgT2JqZWN0LnZhbHVlcyhncm91cE1hcCkuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgaWYgKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSA9PT0gXCJhdmdcIikge1xuICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgZ3JvdXBbYWdncmVnYXRlRGF0YUZpZWxkXSAvIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgICAgZGVsZXRlIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApO1xuICB9XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgZ2V0SG91ckNoYXJ0KGRhdGEsIGRhdGFDb25maWcpIHtcbiAgICAvLyBjb25zdCB2YWx1ZUZpZWxkcyA9IGRhdGFDb25maWcuY2hhcnRfY29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZhbHVlRmllbGQpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBkYXRhLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgaWYgKHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdLnRvU3RyaW5nKCkubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXSA9ICcwJyArIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYWJlbCA9IHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdID0gbGFiZWxcbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgNTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuXG4gICAgfVxuICB9XG4gIGdldE1vbnRobHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICBkYXRhLmZvckVhY2goKGVudHJ5OiBhbnkpID0+IHtcbiAgICAgIHZhbHVlRmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5Lmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZW50cnlbZmllbGRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBlbnRyeVtmaWVsZF0gPSBOdW1iZXIoZW50cnlbZmllbGRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YS5tYXAob2JqID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgIGlmIChuZXdPYmouaGFzT3duUHJvcGVydHkodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKSkge1xuICAgICAgICAgICAgbmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0gPSBtb21lbnQobmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0pLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuICAgIH1cbiAgfVxuICBnZXREYWlseUNoYXJ0KGRhdGEsIGRhdGFDb25maWcpIHtcbiAgICBjb25zdCB2YWx1ZUZpZWxkcyA9IGRhdGFDb25maWcuY2hhcnRfY29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZhbHVlRmllbGQpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YS5tYXAob2JqID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgIGlmIChuZXdPYmouaGFzT3duUHJvcGVydHkodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKSkge1xuICAgICAgICAgICAgbmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0gPSBtb21lbnQobmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0pLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICcgQ2hhcnQgRXJyb3InKTtcbiAgICB9XG4gIH1cblxuXG4gIGdldFJlY29uRGFpbHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG5cbiAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gW107XG4gICAgY29uc3QgcmVjb25fa2V5ID0gZGF0YUNvbmZpZy5yZWNvbktleTtcbiAgICBjb25zdCByZWNvbl9jb2x1bW4gPSBkYXRhQ29uZmlnLnJlY29uQ29sdW1ucztcbiAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gdGhpcy5nZXRGaW5hbERhdGEoZGF0YSwgcmVjb25fY29sdW1uKTtcblxuICB9XG5cbiAgZ2V0RmluYWxEYXRhKG1haW5EYXRhOiBhbnlbXSwgcmVjb25Db2x1bW46IGFueVtdKTogYW55W10ge1xuICAgIG1haW5EYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICByZWNvbkNvbHVtbi5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5VmFsdWUgPSBkYXRhW2NvbHVtbi5maXJzdEtleV07XG4gICAgICAgIGNvbnN0IHNlY29uZEtleVZhbHVlID0gZGF0YVtjb2x1bW4uc2Vjb25kS2V5XTtcbiAgICAgICAgY29uc3QgbW91RGlmZiA9IE1hdGguYWJzKGZpcnN0S2V5VmFsdWUgLSBzZWNvbmRLZXlWYWx1ZSk7XG4gICAgICAgIGRhdGFbY29sdW1uLmZpbmFsS2V5XSA9IG1vdURpZmY7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYWluRGF0YTtcbiAgfVxuXG4gIGN1c3RvbWl6ZVRvb2x0aXAgPSAoaW5mbzogYW55KSA9PiAoXG4gICAge1xuXG4gICAgICBodG1sOiBgPHRhYmxlIHN0eWxlID0gd2lkdGg9MTAwJSBoZWlnaHQ9MzAgYm9yZGVyPTAgIHN0eWxlPVxcJ2ZvbnQtc2l6ZTogMTNweFxcJz5cbiAgICA8dHI+PHRkIGNsYXNzPVwidGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgXCIgc3R5bGU9XFwndGV4dC1hbGlnbjogbGVmdFxcJz4gJHt0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFRvVGl0bGVDYXNlKHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCl9IDogICR7aW5mby5hcmd1bWVudFRleHR9IDwvdGQ+PC90cj5cbiAgICAgPHRyPjx0ZCBjbGFzcz1cInRleHQtZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMjAwIFwiIHN0eWxlPVxcJ3RleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctdG9wOiA1cHhcXCc+ICR7aW5mby5zZXJpZXNOYW1lfSA6XG4gICAgICR7dGhpcy5nZXRWYWx1ZShpbmZvLnNlcmllc05hbWUsIGluZm8udmFsdWUpfSAgPC90ZD48L3RyPlxuICAgICA8L3RhYmxlPmAsXG4gICAgfSk7XG5cbiAgLy8gY3VzdG9taXplVG9vbHRpcCA9IChpbmZvOiBhbnkpID0+ICh7XG4gIC8vICAgaHRtbDogYFxuICAvLyAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWluLXctWzIwMHB4XSBwLTMgcm91bmRlZC1sZyBzaGFkb3ctbGcgXG4gIC8vICAgICAgICAgICAgICAgYmctd2hpdGUgZGFyazpiZy1ncmF5LTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXG4gIC8vICAgICAgICAgICAgICAgdGV4dC1zbSBmb250LXNhbnNcIj5cbiAgLy8gICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktODAwIGRhcms6dGV4dC1ncmF5LTIwMCBmb250LW1lZGl1bSBtYi0yXCI+XG4gIC8vICAgICAgICR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRUb1RpdGxlQ2FzZSh0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQpfTogJHtpbmZvLmFyZ3VtZW50VGV4dH1cbiAgLy8gICAgIDwvZGl2PlxuICAvLyAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwXCI+XG4gIC8vICAgICAgICR7aW5mby5zZXJpZXNOYW1lfTogJHt0aGlzLmdldFZhbHVlKGluZm8uc2VyaWVzTmFtZSwgaW5mby52YWx1ZSl9XG4gIC8vICAgICA8L2Rpdj5cbiAgLy8gICA8L2Rpdj5cbiAgLy8gYCxcbiAgLy8gfSk7XG5cbiAgLy8gY3VzdG9taXplVG9vbHRpcChhcmcpIHtcbiAgLy8gICByZXR1cm4geyB0ZXh0OiBgJHthcmcuYXJndW1lbnRUZXh0fTxicj4ke2FyZy5zZXJpZXNOYW1lfTogJHthcmcudmFsdWVUZXh0fUJgIH07XG4gIC8vIH1cblxuICBjYWxjdWxhdGVUb3RhbChwaWVDaGFydCkge1xuICAgIGNvbnN0IHRvdGFsVmFsdWUgPSBwaWVDaGFydC5nZXRBbGxTZXJpZXMoKVswXS5nZXRWaXNpYmxlUG9pbnRzKCkucmVkdWNlKChzLCBwKSA9PiBzICsgcC5vcmlnaW5hbFZhbHVlLCAwKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXROdW1iZXIodG90YWxWYWx1ZSk7XG4gIH1cblxuICBmb3JtYXROdW1iZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPj0gMWU5KSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWU5KS50b0ZpeGVkKDIpICsgJ0InO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMWU2KSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWU2KS50b0ZpeGVkKDIpICsgJ00nO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMWUzKSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWUzKS50b0ZpeGVkKDIpICsgJ0snO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgyKTtcbiAgICB9XG4gIH1cblxuICBwb2ludENsaWNrSGFuZGxlcihhcmcpIHtcbiAgICBhcmcudGFyZ2V0LnNlbGVjdCgpO1xuICB9XG4gIGdldEFsbENoYXJ0UG9pbnRDbGljayhldmVudCkge1xuXG4gICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29tbW9uQ29uZmlnWyd0aXRsZSddO1xuICAgIGxldCB0aXRsZV9kYXRhZmllbGQgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5jb21tb25Db25maWdbJ2RhdGFGaWVsZCddO1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gKHRpdGxlX2RhdGFmaWVsZCkgPyBldmVudC50YXJnZXQuZGF0YVt0aXRsZV9kYXRhZmllbGRdIDogXCJcIjtcbiAgICBsZXQgd2lkZ2V0X3RpdGxlID0gKHRpdGxlKSA/IHRpdGxlICsgdGl0bGVfcGFyYW1zIDogdGl0bGVfcGFyYW1zO1xuXG4gICAgaWYgKCdyZWNvcmREYXRlJyBpbiBldmVudC50YXJnZXQuZGF0YSkge1xuICAgICAgY29uc3QgcmVjb3JkRGF0ZSA9IGV2ZW50LnRhcmdldC5kYXRhLnJlY29yZERhdGU7XG4gICAgICBpZiAodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0ID09IFwiTU0tRERcIikge1xuICAgICAgICBjb25zdCBmdWxsRGF0ZSA9IG1vbWVudChyZWNvcmREYXRlLCBcIk1NLUREXCIpXG4gICAgICAgICAgLnllYXIobW9tZW50KCkueWVhcigpKVxuICAgICAgICAgIC5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgZXZlbnQudGFyZ2V0LmRhdGEucmVjb3JkRGF0ZSA9IGZ1bGxEYXRlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgIGRhdGE6IGV2ZW50LnRhcmdldC5kYXRhLFxuICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4gICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHdpZGdldF90aXRsZSA6IHdpZGdldF90aXRsZSxcbiAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICBkcmlsbERvd25UeXBlOiBcIm5hdHVyYWxcIixcbiAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxkb3duVG86IFwiXCIsXG4gICAgfVxuICAgIHRoaXMub25DaGFydFBvaW50Q2xpY2suZW1pdChvYmopO1xuXG4gICAgY29uc29sZS5sb2coXCJvbmNoYXJ0IGNsaWNrXCIsIG9iaik7XG5cbiAgfVxuXG4gIGdldFZhbHVlKGNvbnRleHRLZXksIHZhbHVlKSB7XG5cbiAgICBsZXQgY29udGV4dF9kYXRhOiBhbnk7XG4gICAgY29uc3Qgc21sX2tleSA9IGNvbnRleHRLZXkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChzbWxfa2V5ID09PSBcImNvdW50XCIgfHwgc21sX2tleSA9PT0gXCJob3VyXCIgfHwgc21sX2tleSA9PT0gXCJkZW5vbWluYXRpb25cIiB8fCBzbWxfa2V5LmluY2x1ZGVzKFwiY291bnRcIikpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgfSBlbHNlIGlmIChzbWxfa2V5LmluY2x1ZGVzKCd2b2x1bWUnKSB8fCBzbWxfa2V5LmluY2x1ZGVzKCd1cGxvYWQnKSB8fCBzbWxfa2V5LmluY2x1ZGVzKCdkb3dubG9hZCcpKSB7XG4gICAgICAgIGlmIChzbWxfa2V5ID09ICdiaWxsYWJsZXZvbHVtZScpIHtcbiAgICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUgKiAxMDI0LCAyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5mb3JtYXRCeXRzVG9HYih2YWx1ZSAqIDEwMjQsIDIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNtbF9rZXkgPT0gXCJ1cGxpbmtcIiB8fCBzbWxfa2V5ID09IFwiZG93bmxpbmtcIikge1xuICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUsIDIpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0RlY2ltYWwodmFsdWUpKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzRGVjaW1hbCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0X2RhdGEgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dF9kYXRhO1xuICB9XG5cblxuICBoYXNEZWNpbWFsKG51bWJlcikge1xuICAgIHJldHVybiBudW1iZXIgJSAxICE9PSAwO1xuICB9XG5cbiAgdG9nZ2xlRnVsbFNjcmVlbigpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm5vdC1mdWxsLXNjcmVlbicpO1xuICAgIGlmICh0aGlzLmlzRnVsbFNjcmVlbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkaXYsICdmdWxsLXNjcmVlbicpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkaXYsICdmdWxsLXNjcmVlbicpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuXG5cblxuXG4gIGN1c3RvbWl6ZVRleHQgPSAoeyBwZXJjZW50VGV4dCwgaXRlbTogeyBhcmd1bWVudCB9IH0pID0+IGA8c3BhbiBzdHlsZT0nZm9udC1zaXplOiAyOHB4Jz4ke3BlcmNlbnRUZXh0fTwvc3Bhbj48YnIvPiR7YXJndW1lbnR9YDtcblxuXG4gIC8vIGJ1YmJsZSBjaGFydFxuXG4gIGdldEJ1YmJsZUNoYXJ0RGF0YSgpIHtcbiAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2UgPSB7fTtcbiAgICBjb25zdCB7IHJlc3VsdCwgdW5pcXVlRGF0ZXMgfSA9IHRoaXMuZ2VuZXJhdGVEYXRhKHRoaXMuYnViYmxlQ2hhcnREYXRhLCB0aGlzLmNoYXJ0Q29uZmlnKVxuICAgIC8vIHJlc3VsdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIC8vICAgZWxlbWVudC5kYXRhc2V0LnNvcnQoKGEsIGIpID0+IG1vbWVudChhLnJlY29yZERhdGUsICdZWVlZTU1ERCcpLmRpZmYobW9tZW50KGIucmVjb3JkRGF0ZSwgJ1lZWVlNTUREJykpKTtcbiAgICAvLyB9KTtcbiAgICAvLyB1bmlxdWVEYXRlcy5zb3J0KCk7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiZGF0YVNldFwiXSA9IHJlc3VsdDtcbiAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2VbXCJhcmd1bWVudFZhbHVlXCJdID0gdW5pcXVlRGF0ZXM7XG4gIH1cblxuICBnZW5lcmF0ZURhdGEoZGF0YSwgY2hhcnRDb25maWcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCB1bmlxdWVEYXRlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBkYXRhU291cmNlTWFwID0ge307XG5cbiAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGNoYXJ0Q29uZmlnLnNvdXJjZUZpZWxkO1xuICAgIGNvbnN0IGFyZ3VtZW50RmllbGQgPSBjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkO1xuICAgIGNvbnN0IHZhbHVlRmllbGQgPSBjaGFydENvbmZpZy5jaGFydF9jb25maWdbMF0udmFsdWVGaWVsZDtcbiAgICBjb25zdCBtaW5CdWJibGVTaXplID0gKHRoaXMuY2hhcnRDb25maWcubWluQnViYmxlU2l6ZSkgPyBwYXJzZUludCh0aGlzLmNoYXJ0Q29uZmlnLm1pbkJ1YmJsZVNpemUpIDogODtcbiAgICBjb25zdCBtYXhCdWJibGVTaXplID0gKHRoaXMuY2hhcnRDb25maWcubWF4QnViYmxlU2l6ZSkgPyBwYXJzZUludCh0aGlzLmNoYXJ0Q29uZmlnLm1heEJ1YmJsZVNpemUpIDogMjA7XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VGaWVsZFZhbHVlID0gaXRlbVtzb3VyY2VGaWVsZF07XG4gICAgICBjb25zdCBhcmd1bWVudEZpZWxkVmFsdWUgPSBpdGVtW2FyZ3VtZW50RmllbGRdO1xuICAgICAgY29uc3QgeyBbc291cmNlRmllbGRdOiBfLCBbYXJndW1lbnRGaWVsZF06IF9fLCAuLi5yZXN0IH0gPSBpdGVtO1xuXG4gICAgICBpZiAoIWRhdGFTb3VyY2VNYXBbc291cmNlRmllbGRWYWx1ZV0pIHtcbiAgICAgICAgZGF0YVNvdXJjZU1hcFtzb3VyY2VGaWVsZFZhbHVlXSA9IHtcbiAgICAgICAgICBkYXRhc291cmNlOiBzb3VyY2VGaWVsZFZhbHVlLFxuICAgICAgICAgIGRhdGFzZXQ6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkYXRhU291cmNlTWFwW3NvdXJjZUZpZWxkVmFsdWVdLmRhdGFzZXQucHVzaCh7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIFthcmd1bWVudEZpZWxkXTogbW9tZW50KGFyZ3VtZW50RmllbGRWYWx1ZSkuZm9ybWF0KHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdClcbiAgICAgIH0pO1xuICAgICAgdW5pcXVlRGF0ZXMuYWRkKG1vbWVudChhcmd1bWVudEZpZWxkVmFsdWUpLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVuaXF1ZURhdGVzQXJyYXkgPSBBcnJheS5mcm9tKHVuaXF1ZURhdGVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGFTb3VyY2VNYXApIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhU291cmNlTWFwW2tleV0uZGF0YXNldDtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGUoZGF0YXNldCwgdmFsdWVGaWVsZCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGVUb0l0ZW1NYXAgPSB7fTtcbiAgICAgIGZvcm1hdHRlZERhdGFzZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZGF0ZVRvSXRlbU1hcFtpdGVtW2FyZ3VtZW50RmllbGRdXSA9IGl0ZW07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29tcGxldGVEYXRhc2V0ID0gdW5pcXVlRGF0ZXNBcnJheS5tYXAoKGRhdGU6IGFueSkgPT4ge1xuXG4gICAgICAgIGlmIChkYXRlVG9JdGVtTWFwW2RhdGVdKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVUb0l0ZW1NYXBbZGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbGVDb3VudDogMCxcbiAgICAgICAgICAgIFthcmd1bWVudEZpZWxkXTogZGF0ZSxcbiAgICAgICAgICAgIFt2YWx1ZUZpZWxkXTogMCxcbiAgICAgICAgICAgIGNvbG9yOiBcInJnYigyNDIsIDExOCwgMTA5KVwiXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0YXNvdXJjZToga2V5LFxuICAgICAgICBkYXRhc2V0OiBjb21wbGV0ZURhdGFzZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgIHVuaXF1ZURhdGVzOiB1bmlxdWVEYXRlc0FycmF5XG4gICAgfTtcbiAgfVxuXG5cblxuICBnZXRGb3JtYXRlRGF0YUJ5Q29sb3JDb2RlKGZpbGVkYXRhLCB2YWx1ZUZpZWxkLCBtaW5CdWJibGVTaXplLCBtYXhCdWJibGVTaXplKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bdmFsdWVGaWVsZF0gPSBwYXJzZUZsb2F0KGl0ZW1bdmFsdWVGaWVsZF0pO1xuICAgIH0pO1xuXG4gICAgbGV0IG1heFJlY2hhcmdlQ291bnQgPSBNYXRoLm1heCguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW3ZhbHVlRmllbGRdKSk7XG4gICAgbGV0IG1pblJlY2hhcmdlQ291bnQgPSBNYXRoLm1pbiguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW3ZhbHVlRmllbGRdKSk7XG5cbiAgICBsZXQgbWluQ29sb3IgPSBbNDMsIDIyNCwgOTFdO1xuICAgIGxldCBtYXhDb2xvciA9IFs2NSwgMTM1LCAyNF07XG4gICAgbGV0IGhvdmVyID0gWzEzNSwgMTg0LCAxMDZdO1xuXG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCBzaXplID0gdGhpcy5tYXBSYW5nZShpdGVtW3ZhbHVlRmllbGRdLCBtaW5SZWNoYXJnZUNvdW50LCBtYXhSZWNoYXJnZUNvdW50LCBtaW5CdWJibGVTaXplLCBtYXhCdWJibGVTaXplKTtcbiAgICAgIGl0ZW0uc2l6ZSA9IHNpemU7XG4gICAgICBpdGVtLnRvb2xUaXAgPSAoaXRlbVt2YWx1ZUZpZWxkXSkgPyBpdGVtW3ZhbHVlRmllbGRdIDogJzAnO1xuICAgICAgaXRlbS5ob3ZlciA9IGByZ2IoJHtob3Zlci5qb2luKCcsJyl9KWA7XG4gICAgICBpZiAoaXRlbVt2YWx1ZUZpZWxkXSA9PSAwIHx8IGl0ZW1bdmFsdWVGaWVsZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW0uY29sb3IgPSBgcmdiKCR7bWluQ29sb3Iuam9pbignLCcpfSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5jb2xvciA9IGByZ2IoJHttYXhDb2xvci5qb2luKCcsJyl9KWA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsZWRhdGE7XG4gIH1cblxuICBtYXBSYW5nZSh2YWx1ZSwgaW5NaW4sIGluTWF4LCBvdXRNaW4sIG91dE1heCkge1xuICAgIHJldHVybiAoKHZhbHVlIC0gaW5NaW4pICogKG91dE1heCAtIG91dE1pbikpIC8gKGluTWF4IC0gaW5NaW4pICsgb3V0TWluO1xuICB9XG5cblxuXG4gIC8vIHN0YWNrYmFyIGNoYXJ0O1xuXG5cblxuICBnZUNoYXJ0V2l0aEdyb3VwQnlGb3JNdWx0aVNlcmlzKHByZXZpZXdkYXRhOiBhbnlbXSwgYXJndW1lbnRWYWx1ZTogc3RyaW5nLCB2YWx1ZUZpZWxkOiBzdHJpbmcsIGdyb3VwQnk6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBjb25zdCBncm91cGVkID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBjb25zdCB1bmlxdWVHcm91cHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBwcmV2aWV3ZGF0YSkge1xuICAgICAgY29uc3QgYXJnID0gaXRlbVthcmd1bWVudFZhbHVlXTtcbiAgICAgIGNvbnN0IGdyb3VwID0gaXRlbVtncm91cEJ5XTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt2YWx1ZUZpZWxkXTtcblxuICAgICAgdW5pcXVlR3JvdXBzLmFkZChncm91cCk7XG5cbiAgICAgIGlmICghZ3JvdXBlZC5oYXMoYXJnKSkge1xuICAgICAgICBncm91cGVkLnNldChhcmcsIHsgW2FyZ3VtZW50VmFsdWVdOiBhcmcgfSk7XG4gICAgICB9XG4gICAgICBncm91cGVkLmdldChhcmcpW2dyb3VwXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdyb3VwZWQuZm9yRWFjaCh2YWx1ZSA9PiByZXN1bHQucHVzaCh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFTb3VyY2VGb3JDaGFydDogcmVzdWx0LFxuICAgICAgbGlzdE9mR3JvdXBCeURhdGE6IEFycmF5LmZyb20odW5pcXVlR3JvdXBzKVxuICAgIH07XG4gIH1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJub3QtZnVsbC1zY3JlZW5cIiAoZGJsY2xpY2spPVwidG9nZ2xlRnVsbFNjcmVlbigpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VfY29uZmlnPy53aWRHZXRDb25maWc/LmRpc3BsYXlcIj5cbiAgICAgICAgPGFwcC10aXRsZSBbdGl0bGVdPVwicGFnZV9jb25maWcud2lkR2V0Q29uZmlnLndpZGdldFRpdGxlXCIgW29wZXJhdG9yc109XCJwYWdlX2NvbmZpZy5vcGVyYXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNwbGF5VHlwZV09XCInY2hhcnQnXCI+PC9hcHAtdGl0bGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcC0yIGJnLWdyYXktMjAwIGRhcms6YmctZ3JheS04MDAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBcIj5cbiAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdkb3VnaG51dCcgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAncGllJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdmdW5uZWwnICYmIGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gJ2J1YmJsZSdcIj5cblxuICAgICAgICAgICAgPGR4LWNoYXJ0IGlkPVwiY2hhcnRcIiBbZGF0YVNvdXJjZV09XCJmaW5hbENoYXJ0RGF0YVNvdXJjZVwiIChvblBvaW50Q2xpY2spPVwiZ2V0QWxsQ2hhcnRQb2ludENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwYWxldHRlXT1cImNoYXJ0Q29uZmlnLnBhbGV0dGVcIiBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNMb2FkZXJcIiBbdmFsdWVBeGlzXT1cImNoYXJ0Q29uZmlnLnZhbHVlQXhpc0NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tc2l6ZSBbaGVpZ2h0XT1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tc2l6ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uYXhpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS12YWx1ZS1heGlzIG5hbWU9XCJ7e2l0ZW0uYXhpc319XCIgcG9zaXRpb249XCJ7e2l0ZW0ucG9zaXRpb259fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdGl0bGUgdGV4dD1cInt7aXRlbS5uYW1lfX1cIj48L2R4by10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXZhbHVlLWF4aXM+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICAgIDxkeG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBvdmVybGFwcGluZ0JlaGF2aW9yPVwicm90YXRlXCIgW3JvdGF0aW9uQW5nbGVdPVwiMjcwXCI+PC9keG8tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9keG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICA8ZHhvLXRvb2x0aXAgW2VuYWJsZWRdPVwidHJ1ZVwiIFtzaGFyZWRdPVwidHJ1ZVwiIFtjdXN0b21pemVUb29sdGlwXT1cImN1c3RvbWl6ZVRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICA8L2R4by10b29sdGlwPlxuICAgICAgICAgICAgICAgIDxkeG8tY29tbW9uLXNlcmllcy1zZXR0aW5ncyBhcmd1bWVudEZpZWxkPVwie3tjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkfX1cIj5cbiAgICAgICAgICAgICAgICA8L2R4by1jb21tb24tc2VyaWVzLXNldHRpbmdzPlxuXG5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBvdGhlcnMgc2luZ2xlIGFjY2VzcyBjaGFydCBzdGFydCAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnc3RhY2tlZEJhcicgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnbXVsdGlMaW5lJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdtdWx0aUJhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydENvbmZpZy5jaGFydF9jb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyB0eXBlPVwie3tpdGVtLnR5cGV9fVwiIHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCIgYXhpcz1cInt7aXRlbS5heGlzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiIGNvbG9yPVwie3tpdGVtLmNvbG9yfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmICFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgdHlwZT1cInt7aXRlbS50eXBlfX1cIiB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiIGF4aXM9XCJ7e2l0ZW0uYXhpc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igb3RoZXJzIHNpbmdsZSBhY2Nlc3MgY2hhcnQgZW5kIC0tPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igc3RhY2tiZXIgc3RhcnQgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ3N0YWNrZWRCYXInIHx8IGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ211bHRpTGluZScgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInIFwiID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIHZhbHVlRmllbGQ9XCJ7e2l0ZW19fVwiIG5hbWU9XCJ7e2l0ZW19fVwiIHR5cGU9XCJ7e2NoYXJ0VHlwZVdoZW5NdWx0aVNlcmllc319XCI+PC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBzdGFja2JlciBlbmQgLS0+XG5cbiAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydEhlaWdodFwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPGR4by1sZWdlbmQgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGVnZW5kRGlzcGxheVwiIHZlcnRpY2FsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy52ZXJ0aWNhbEFsaWdubWVudH19XCJcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcuaG9yaXpvbnRhbEFsaWdubWVudH19XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tbGVnZW5kPlxuICAgICAgICAgICAgPC9keC1jaGFydD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdkb3VnaG51dCcgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAncGllJ1wiPlxuXG4gICAgICAgICAgICA8ZHgtcGllLWNoYXJ0IGlkPVwicGllXCIgW3R5cGVdPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICBjZW50ZXJUZW1wbGF0ZT1cImNlbnRlclRlbXBsYXRlXCIgKG9uUG9pbnRDbGljayk9XCJwb2ludENsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcGFsZXR0ZV09XCJjaGFydENvbmZpZy5wYWxldHRlXCI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgYXJndW1lbnRGaWVsZD17e2NoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGR9fSB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIiBjb2xvcj1cInt7aXRlbS5jb2xvcn19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJjaGFydENvbmZpZy5sYWJlbERpc3BsYXlcIiBmb3JtYXQ9XCJjdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWNvbm5lY3RvciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tY29ubmVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyBhcmd1bWVudEZpZWxkPXt7Y2hhcnRDb25maWcuYXJndW1lbnRGaWVsZH19IHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbGFiZWwgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGFiZWxEaXNwbGF5XCIgZm9ybWF0PVwiY3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1jb25uZWN0b3IgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWNvbm5lY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXNlcmllcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1zaXplIFtoZWlnaHRdPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1zaXplPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkeG8tbGVnZW5kIFt2aXNpYmxlXT1cImNoYXJ0Q29uZmlnLmxlZ2VuZERpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50fX1cIlxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcudmVydGljYWxBbGlnbm1lbnR9fVwiPjwvZHhvLWxlZ2VuZD5cbiAgICAgICAgICAgICAgICA8IS0tIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIj48L2R4by1leHBvcnQ+IC0tPlxuICAgICAgICAgICAgICAgIDxkeG8tdG9vbHRpcCBbZW5hYmxlZF09XCJ0cnVlXCIgW2N1c3RvbWl6ZVRvb2x0aXBdPVwiY3VzdG9taXplVG9vbHRpcFwiIGZvcm1hdD1cImN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZG91Z2hudXQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKmR4VGVtcGxhdGU9XCJsZXQgcGllQ2hhcnQgb2YgJ2NlbnRlclRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwMFwiIGN5PVwiMTAwXCIgW2F0dHIucl09XCJwaWVDaGFydC5nZXRJbm5lclJhZGl1cygpIC0gNlwiIGZpbGw9XCJncmF5XCIgb3BhY2l0eT1cIjAuMDAwMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jaXJjbGU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHRleHQtYW5jaG9yPVwibWlkZGxlXCIgc3R5bGU9XCJmb250LXNpemU6IDBweFwiIHg9XCIxMDBcIiB5PVwiMTAwXCIgZmlsbD1cIiNlZWVcIiAqbmdJZj1cImNoYXJ0Q29uZmlnLmRpc3BsYXlDZW50ZXJMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PVwiMTAwXCI+e3sgY2FsY3VsYXRlVG90YWwocGllQ2hhcnQpIH19PC90c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtcGllLWNoYXJ0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZnVubmVsJ1wiPlxuICAgICAgICAgICAgPGR4LWZ1bm5lbCBpZD1cImZ1bm5lbFwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCIgYXJndW1lbnRGaWVsZD1cImFyZ3VtZW50XCIgdmFsdWVGaWVsZD1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBwYWxldHRlPVwiU29mdCBQYXN0ZWxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICAgICAgPGR4by10b29sdGlwIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8ZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tYm9yZGVyIFt2aXNpYmxlXT1cInRydWVcIj4gPC9keG8tYm9yZGVyPlxuICAgICAgICAgICAgICAgIDwvZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJ0cnVlXCIgcG9zaXRpb249XCJpbnNpZGVcIiBiYWNrZ3JvdW5kQ29sb3I9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbWl6ZVRleHRdPVwiY3VzdG9taXplVGV4dFwiPjwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgPC9keC1mdW5uZWw+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ2J1YmJsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC01IG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5kYXRhU2V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBtaW4tdy0xMiBtYXgtdy1bMzAlXSBqdXN0aWZ5LWNlbnRlciBmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmRhdGFzb3VyY2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktY2VudGVyIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBib3ggb2YgaXRlbS5kYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBtaW4tdy0xMCBtYXgtdy1bMjAlXSBoLTEwIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1JlY29yZCBEYXRlOiAnICsgYm94LnJlY29yZERhdGUgKyAnXFxuUmVjaGFyZ2UgQ291bnQ6ICcgKyBib3gudG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1mdWxsXCIgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBib3guaXNIb3ZlcmVkID8gJ3JnYigxMzUsIDE4NCwgMTA2KScgOiBib3guY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiBib3guc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdob3Zlcic6IGJveC5ob3ZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQucHgnOiBib3guc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAobW91c2VlbnRlcik9XCJib3guaXNIb3ZlcmVkID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImJveC5pc0hvdmVyZWQgPSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTIgbWF4LXctWzIwJV0gaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYXRDaGFydERhdGFTb3VyY2UuYXJndW1lbnRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTAgbWF4LXctWzIwJV0gbWluLWgtMTQgZmxleCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2hlaWdodCc6ICdhdXRvJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcm90YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Z1bGxTY3JlZW5cIiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsU2NyZWVuKClcIj5DbG9zZTwvYnV0dG9uPlxuPC9kaXY+Il19
534
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLWNoYXJ0L2dhbW1hLWFkdmFuY2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR2hKLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNOUUsTUFBTSxPQUFPLDBCQUEwQjtJQXFCckMsWUFDVSxhQUE0QixFQUM1QixNQUFxQixFQUNyQixVQUE0QixFQUM1QixRQUFtQixFQUFVLEVBQWMsRUFDM0MsR0FBc0IsRUFDRyxXQUFnQjtRQUx6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQzNDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0csZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUExQm5ELGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVEsRUFB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b250ZW50IjpbIlxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBrcGljb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4va3BpLWNvbW9uLXNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbmltcG9ydCB7IEFQUF9FTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvZW52aXJvbm1lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtYWR2YW5jZS1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGFydENvbmZpZzogYW55ID0ge307XG4gIHBhZ2VfY29uZmlnOiBhbnkgPSB7fTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbXBvbmVudElkOiBhbnk7XG4gIC8vIEBJbnB1dCgpIGNhcHRpb246IGFueTtcbiAgQElucHV0KCkga3BpX25hbWU6IGFueTtcbiAgLy8gQElucHV0KCkgY2hhcnREYXRhU291cmNlOmFueTtcbiAgY2FwdGlvbjogYW55O1xuICBpc0NoYXJ0dmlzaWJsZTogYm9vbGVhbjtcbiAgY3JlYXRDaGFydERhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XG4gIGZpbmFsQ2hhcnREYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgY2hhcnRXaXRoVGhyZWVEaW1lbnRpb25EYXRhU2VyaWVzOiBhbnkgPSBbXTtcbiAgY2hhcnRIZWlnaHQ6IGFueTtcblxuICBpc0Z1bGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoZWF0Q2hhcnREYXRhU291cmNlOiBhbnk7XG4gIGJ1YmJsZUNoYXJ0RGF0YTogYW55O1xuXG4gIGNoYXJ0VHlwZVdoZW5NdWx0aVNlcmllczogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrcGlTZXJ2aWNlOiBrcGljb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChBUFBfRU5WSVJPTk1FTlQpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcblxuICB9XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgLy8gY2hhcnRfYXR0ci5sZWdlbmRbMF1cbiAgY2hhcnRPcmRlckJ5OiBib29sZWFuO1xuICBjaGFydERpc3BsYXlEYXRlRm9ybWF0OiBhbnk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25DaGFydFBvaW50Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIHRoaXMuY3JlYXRDaGFydERhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuY3JlYXRDaGFydERhdGFTb3VyY2UgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLmNoYXJ0T3JkZXJCeSA9ICh2YWx1ZS5rcGlDb25maWcuZGVzY2VuZGluZ09yZGVyKSA/IHZhbHVlLmtwaUNvbmZpZy5kZXNjZW5kaW5nT3JkZXIgOiBmYWxzZTtcbiAgICAgIHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdCA9ICh2YWx1ZS5rcGlDb25maWcuZGlzcGxheURhdGVGb3JtYXQpID8gdmFsdWUua3BpQ29uZmlnLmRpc3BsYXlEYXRlRm9ybWF0IDogXCJNTS1ERFwiO1xuXG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuY2hhcnRDb25maWcgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZztcblxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZy5pc0RhdGFBZ2dyZWdhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGFnZ3JlYXRpb25EYXRhID0gdGhpcy5nZXRHcm91cERhdGFGb3JDaGFydCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSwgdGhpcy5jaGFydENvbmZpZ1snZGF0YUFnZ3JlZ2F0aW9uQ29uZmlnJ11bJ2RhdGFBZ2dyZWdhdGVDb2x1bWVzJ10sIHRoaXMuY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydhZ2dyZWdhdGVGaWVsZHMnXSk7XG4gICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgPSBhZ2dyZWF0aW9uRGF0YTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKGFnZ3JlYXRpb25EYXRhKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuXG4gICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQucmVjb3JkRGF0ZSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYi5yZWNvcmREYXRlKS5kaWZmKG1vbWVudChhLnJlY29yZERhdGUpKSk7XG5cbiAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGEucmVjb3JkRGF0ZSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdmdW5uZWwnKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gT2JqZWN0LmtleXMobW9zdFJlY2VudFJlY29yZCkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdyZWNvcmREYXRlJykubWFwKGtleSA9PiAoe1xuICAgICAgICAgICAgICBhcmd1bWVudDoga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogTWF0aC5hYnMocGFyc2VJbnQobW9zdFJlY2VudFJlY29yZFtrZXldKSlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnc3RhY2tlZEJhcicgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpTGluZScgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpQmFyJykge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhU291cmNlRm9yQ2hhcnQsIGxpc3RPZkdyb3VwQnlEYXRhIH0gPSB0aGlzLmdlQ2hhcnRXaXRoR3JvdXBCeUZvck11bHRpU2VyaXMoZmlsdGVyZWRPYmplY3RzLCB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRHcm91cEJ5KVxuICAgICAgICAgICAgdGhpcy5jaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXMgPSBsaXN0T2ZHcm91cEJ5RGF0YTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlV2hlbk11bHRpU2VyaWVzID0gdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdtdWx0aUxpbmUnID8gJ2xpbmUnIDogdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdtdWx0aUJhcicgPyAnYmFyJyA6IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5nZXREYWlseUNoYXJ0KGRhdGFTb3VyY2VGb3JDaGFydCwgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldERhaWx5Q2hhcnQoZmlsdGVyZWRPYmplY3RzLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwibW9udGhseVwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuXG4gICAgICAgICAgICAvLyBmb3IgY2hhcnQgc2hvcnQgYnkgYW55IGNvbHVtZVxuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRPcmRlckJ5KSB7XG4gICAgICAgICAgICAgIGxldCBzaG9ydE5hbWUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGlmIChzaG9ydE5hbWUuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZFt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSlcbiAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYlt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSkuZGlmZihtb21lbnQoYVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1snYXJndW1lbnRGaWVsZCddXSkpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGFydFNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnWydjaGFydFNvcnRCeSddO1xuICAgICAgICAgICAgY29uc3QgaXNEZXNjID0gdGhpcy5jaGFydE9yZGVyQnkgPT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYXJ0U29ydEJ5KSAmJiBjaGFydFNvcnRCeS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2Uuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNoYXJ0U29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoYVtrZXldID09IG51bGwgJiYgYltrZXldID09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgaWYgKGFba2V5XSA9PSBudWxsKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgIGlmIChiW2tleV0gPT0gbnVsbCkgcmV0dXJuIC0xO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYVtrZXldID09PSBiW2tleV0pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNEZXNjXG4gICAgICAgICAgICAgICAgICAgID8gYltrZXldIC0gYVtrZXldICAgLy8gREVTQ1xuICAgICAgICAgICAgICAgICAgICA6IGFba2V5XSAtIGJba2V5XTsgIC8vIEFTQ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnYnViYmxlJykge1xuICAgICAgICAgICAgICB0aGlzLmJ1YmJsZUNoYXJ0RGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICB0aGlzLmdldEJ1YmJsZUNoYXJ0RGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnc3RhY2tlZEJhcicgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpTGluZScgfHwgdGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ211bHRpQmFyJykge1xuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZUZvckNoYXJ0LCBsaXN0T2ZHcm91cEJ5RGF0YSB9ID0gdGhpcy5nZUNoYXJ0V2l0aEdyb3VwQnlGb3JNdWx0aVNlcmlzKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLCB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQsIHRoaXMuY2hhcnRDb25maWcuY2hhcnRHcm91cEJ5KVxuICAgICAgICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YVNvdXJjZUZvckNoYXJ0O1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0V2l0aFRocmVlRGltZW50aW9uRGF0YVNlcmllcyA9IGxpc3RPZkdyb3VwQnlEYXRhO1xuICAgICAgICAgICAgICB0aGlzLmNoYXJ0VHlwZVdoZW5NdWx0aVNlcmllcyA9IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlMaW5lJyA/ICdsaW5lJyA6IHRoaXMuY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInID8gJ2JhcicgOiB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRNb250aGx5Q2hhcnQoZGF0YVNvdXJjZUZvckNoYXJ0LCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRNb250aGx5Q2hhcnQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UsIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnKVxuICAgICAgICAgICAgICB0aGlzLmlzQ2hhcnR2aXNpYmxlID09IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcImhvdXJseVwiKSB7XG5cbiAgICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmhvdXIpXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYS5ob3VyLCAnaGgnKS5kaWZmKG1vbWVudChiLmhvdXIsICdoaCcpKSk7XG4gICAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5yZWNvcmREYXRlID09PSBtb3N0UmVjZW50UmVjb3JkLnJlY29yZERhdGUpO1xuXG4gICAgICAgICAgICB0aGlzLmdldEhvdXJDaGFydChmaWx0ZXJlZE9iamVjdHMsIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnKVxuICAgICAgICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9PSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIC8vIGVsc2Uge1xuICAgICAgLy8gICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAvLyB9XG5cbiAgICB9XG5cblxuXG4gIH1cblxuXG4gIGdldEdyb3VwRGF0YUZvckNoYXJ0KGRhdGEsIGFnZ3JlZ2F0aW9uQ29uZmlnLCBncm91cEJ5Q29sdW1ucykge1xuICAgIGNvbnN0IGdyb3VwTWFwID0ge307XG5cbiAgICBkYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gZ3JvdXBCeUNvbHVtbnMubWFwKGNvbCA9PiByb3dbY29sXSkuam9pbihcInx8XCIpO1xuXG4gICAgICBpZiAoIWdyb3VwTWFwW2dyb3VwS2V5XSkge1xuICAgICAgICBncm91cE1hcFtncm91cEtleV0gPSB7fTtcblxuICAgICAgICBncm91cEJ5Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2NvbF0gPSByb3dbY29sXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gLUluZmluaXR5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBhZ2dyZWdhdGlvbnNcbiAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1thZ2dyZWdhdGVEYXRhRmllbGRdO1xuXG4gICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1pbihncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEZpbmFsaXplIGF2ZXJhZ2VzXG4gICAgT2JqZWN0LnZhbHVlcyhncm91cE1hcCkuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgaWYgKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSA9PT0gXCJhdmdcIikge1xuICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgZ3JvdXBbYWdncmVnYXRlRGF0YUZpZWxkXSAvIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgICAgZGVsZXRlIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApO1xuICB9XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgZ2V0SG91ckNoYXJ0KGRhdGEsIGRhdGFDb25maWcpIHtcbiAgICAvLyBjb25zdCB2YWx1ZUZpZWxkcyA9IGRhdGFDb25maWcuY2hhcnRfY29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZhbHVlRmllbGQpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBkYXRhLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgaWYgKHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdLnRvU3RyaW5nKCkubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXSA9ICcwJyArIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYWJlbCA9IHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdID0gbGFiZWxcbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgNTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuXG4gICAgfVxuICB9XG4gIGdldE1vbnRobHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICBkYXRhLmZvckVhY2goKGVudHJ5OiBhbnkpID0+IHtcbiAgICAgIHZhbHVlRmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5Lmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgZW50cnlbZmllbGRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBlbnRyeVtmaWVsZF0gPSBOdW1iZXIoZW50cnlbZmllbGRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YS5tYXAob2JqID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgIGlmIChuZXdPYmouaGFzT3duUHJvcGVydHkodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKSkge1xuICAgICAgICAgICAgbmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0gPSBtb21lbnQobmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0pLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuICAgIH1cbiAgfVxuICBnZXREYWlseUNoYXJ0KGRhdGEsIGRhdGFDb25maWcpIHtcbiAgICBjb25zdCB2YWx1ZUZpZWxkcyA9IGRhdGFDb25maWcuY2hhcnRfY29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZhbHVlRmllbGQpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBsZXQgY29udGVudCA9IHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ2RhdGUnKSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YS5tYXAob2JqID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgIGlmIChuZXdPYmouaGFzT3duUHJvcGVydHkodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKSkge1xuICAgICAgICAgICAgbmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0gPSBtb21lbnQobmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0pLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICcgQ2hhcnQgRXJyb3InKTtcbiAgICB9XG4gIH1cblxuXG4gIGdldFJlY29uRGFpbHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG5cbiAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gW107XG4gICAgY29uc3QgcmVjb25fa2V5ID0gZGF0YUNvbmZpZy5yZWNvbktleTtcbiAgICBjb25zdCByZWNvbl9jb2x1bW4gPSBkYXRhQ29uZmlnLnJlY29uQ29sdW1ucztcbiAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gdGhpcy5nZXRGaW5hbERhdGEoZGF0YSwgcmVjb25fY29sdW1uKTtcblxuICB9XG5cbiAgZ2V0RmluYWxEYXRhKG1haW5EYXRhOiBhbnlbXSwgcmVjb25Db2x1bW46IGFueVtdKTogYW55W10ge1xuICAgIG1haW5EYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICByZWNvbkNvbHVtbi5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0S2V5VmFsdWUgPSBkYXRhW2NvbHVtbi5maXJzdEtleV07XG4gICAgICAgIGNvbnN0IHNlY29uZEtleVZhbHVlID0gZGF0YVtjb2x1bW4uc2Vjb25kS2V5XTtcbiAgICAgICAgY29uc3QgbW91RGlmZiA9IE1hdGguYWJzKGZpcnN0S2V5VmFsdWUgLSBzZWNvbmRLZXlWYWx1ZSk7XG4gICAgICAgIGRhdGFbY29sdW1uLmZpbmFsS2V5XSA9IG1vdURpZmY7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYWluRGF0YTtcbiAgfVxuXG4gIGN1c3RvbWl6ZVRvb2x0aXAgPSAoaW5mbzogYW55KSA9PiAoXG4gICAge1xuXG4gICAgICBodG1sOiBgPHRhYmxlIHN0eWxlID0gd2lkdGg9MTAwJSBoZWlnaHQ9MzAgYm9yZGVyPTAgIHN0eWxlPVxcJ2ZvbnQtc2l6ZTogMTNweFxcJz5cbiAgICA8dHI+PHRkIGNsYXNzPVwidGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgXCIgc3R5bGU9XFwndGV4dC1hbGlnbjogbGVmdFxcJz4gJHt0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFRvVGl0bGVDYXNlKHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCl9IDogICR7aW5mby5hcmd1bWVudFRleHR9IDwvdGQ+PC90cj5cbiAgICAgPHRyPjx0ZCBjbGFzcz1cInRleHQtZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMjAwIFwiIHN0eWxlPVxcJ3RleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctdG9wOiA1cHhcXCc+ICR7aW5mby5zZXJpZXNOYW1lfSA6XG4gICAgICR7dGhpcy5nZXRWYWx1ZShpbmZvLnNlcmllc05hbWUsIGluZm8udmFsdWUpfSAgPC90ZD48L3RyPlxuICAgICA8L3RhYmxlPmAsXG4gICAgfSk7XG5cbiAgLy8gY3VzdG9taXplVG9vbHRpcCA9IChpbmZvOiBhbnkpID0+ICh7XG4gIC8vICAgaHRtbDogYFxuICAvLyAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWluLXctWzIwMHB4XSBwLTMgcm91bmRlZC1sZyBzaGFkb3ctbGcgXG4gIC8vICAgICAgICAgICAgICAgYmctd2hpdGUgZGFyazpiZy1ncmF5LTgwMCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXG4gIC8vICAgICAgICAgICAgICAgdGV4dC1zbSBmb250LXNhbnNcIj5cbiAgLy8gICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktODAwIGRhcms6dGV4dC1ncmF5LTIwMCBmb250LW1lZGl1bSBtYi0yXCI+XG4gIC8vICAgICAgICR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRUb1RpdGxlQ2FzZSh0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQpfTogJHtpbmZvLmFyZ3VtZW50VGV4dH1cbiAgLy8gICAgIDwvZGl2PlxuICAvLyAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwXCI+XG4gIC8vICAgICAgICR7aW5mby5zZXJpZXNOYW1lfTogJHt0aGlzLmdldFZhbHVlKGluZm8uc2VyaWVzTmFtZSwgaW5mby52YWx1ZSl9XG4gIC8vICAgICA8L2Rpdj5cbiAgLy8gICA8L2Rpdj5cbiAgLy8gYCxcbiAgLy8gfSk7XG5cbiAgLy8gY3VzdG9taXplVG9vbHRpcChhcmcpIHtcbiAgLy8gICByZXR1cm4geyB0ZXh0OiBgJHthcmcuYXJndW1lbnRUZXh0fTxicj4ke2FyZy5zZXJpZXNOYW1lfTogJHthcmcudmFsdWVUZXh0fUJgIH07XG4gIC8vIH1cblxuICBjYWxjdWxhdGVUb3RhbChwaWVDaGFydCkge1xuICAgIGNvbnN0IHRvdGFsVmFsdWUgPSBwaWVDaGFydC5nZXRBbGxTZXJpZXMoKVswXS5nZXRWaXNpYmxlUG9pbnRzKCkucmVkdWNlKChzLCBwKSA9PiBzICsgcC5vcmlnaW5hbFZhbHVlLCAwKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXROdW1iZXIodG90YWxWYWx1ZSk7XG4gIH1cblxuICBmb3JtYXROdW1iZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPj0gMWU5KSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWU5KS50b0ZpeGVkKDIpICsgJ0InO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMWU2KSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWU2KS50b0ZpeGVkKDIpICsgJ00nO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMWUzKSB7XG4gICAgICByZXR1cm4gKHZhbHVlIC8gMWUzKS50b0ZpeGVkKDIpICsgJ0snO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgyKTtcbiAgICB9XG4gIH1cblxuICBwb2ludENsaWNrSGFuZGxlcihhcmcpIHtcbiAgICBhcmcudGFyZ2V0LnNlbGVjdCgpO1xuICB9XG4gIGdldEFsbENoYXJ0UG9pbnRDbGljayhldmVudCkge1xuXG4gICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29tbW9uQ29uZmlnWyd0aXRsZSddO1xuICAgIGxldCB0aXRsZV9kYXRhZmllbGQgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5jb21tb25Db25maWdbJ2RhdGFGaWVsZCddO1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gKHRpdGxlX2RhdGFmaWVsZCkgPyBldmVudC50YXJnZXQuZGF0YVt0aXRsZV9kYXRhZmllbGRdIDogXCJcIjtcbiAgICBsZXQgd2lkZ2V0X3RpdGxlID0gKHRpdGxlKSA/IHRpdGxlICsgdGl0bGVfcGFyYW1zIDogdGl0bGVfcGFyYW1zO1xuXG4gICAgaWYgKCdyZWNvcmREYXRlJyBpbiBldmVudC50YXJnZXQuZGF0YSkge1xuICAgICAgY29uc3QgcmVjb3JkRGF0ZSA9IGV2ZW50LnRhcmdldC5kYXRhLnJlY29yZERhdGU7XG4gICAgICBpZiAodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0ID09IFwiTU0tRERcIikge1xuICAgICAgICBjb25zdCBmdWxsRGF0ZSA9IG1vbWVudChyZWNvcmREYXRlLCBcIk1NLUREXCIpXG4gICAgICAgICAgLnllYXIobW9tZW50KCkueWVhcigpKVxuICAgICAgICAgIC5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgZXZlbnQudGFyZ2V0LmRhdGEucmVjb3JkRGF0ZSA9IGZ1bGxEYXRlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgIGRhdGE6IGV2ZW50LnRhcmdldC5kYXRhLFxuICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4gICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHdpZGdldF90aXRsZSA6IHdpZGdldF90aXRsZSxcbiAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICBkcmlsbERvd25UeXBlOiBcIm5hdHVyYWxcIixcbiAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxkb3duVG86IFwiXCIsXG4gICAgfVxuICAgIHRoaXMub25DaGFydFBvaW50Q2xpY2suZW1pdChvYmopO1xuXG4gICAgY29uc29sZS5sb2coXCJvbmNoYXJ0IGNsaWNrXCIsIG9iaik7XG5cbiAgfVxuXG4gIGdldFZhbHVlKGNvbnRleHRLZXksIHZhbHVlKSB7XG5cbiAgICBsZXQgY29udGV4dF9kYXRhOiBhbnk7XG4gICAgY29uc3Qgc21sX2tleSA9IGNvbnRleHRLZXkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChzbWxfa2V5ID09PSBcImNvdW50XCIgfHwgc21sX2tleSA9PT0gXCJob3VyXCIgfHwgc21sX2tleSA9PT0gXCJkZW5vbWluYXRpb25cIiB8fCBzbWxfa2V5LmluY2x1ZGVzKFwiY291bnRcIikpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgfSBlbHNlIGlmIChzbWxfa2V5LmluY2x1ZGVzKCd2b2x1bWUnKSB8fCBzbWxfa2V5LmluY2x1ZGVzKCd1cGxvYWQnKSB8fCBzbWxfa2V5LmluY2x1ZGVzKCdkb3dubG9hZCcpKSB7XG4gICAgICAgIGlmIChzbWxfa2V5ID09ICdiaWxsYWJsZXZvbHVtZScpIHtcbiAgICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUgKiAxMDI0LCAyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5mb3JtYXRCeXRzVG9HYih2YWx1ZSAqIDEwMjQsIDIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNtbF9rZXkgPT0gXCJ1cGxpbmtcIiB8fCBzbWxfa2V5ID09IFwiZG93bmxpbmtcIikge1xuICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUsIDIpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0RlY2ltYWwodmFsdWUpKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzRGVjaW1hbCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0X2RhdGEgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dF9kYXRhO1xuICB9XG5cblxuICBoYXNEZWNpbWFsKG51bWJlcikge1xuICAgIHJldHVybiBudW1iZXIgJSAxICE9PSAwO1xuICB9XG5cbiAgdG9nZ2xlRnVsbFNjcmVlbigpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm5vdC1mdWxsLXNjcmVlbicpO1xuICAgIGlmICh0aGlzLmlzRnVsbFNjcmVlbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkaXYsICdmdWxsLXNjcmVlbicpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkaXYsICdmdWxsLXNjcmVlbicpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuXG5cblxuXG4gIGN1c3RvbWl6ZVRleHQgPSAoeyBwZXJjZW50VGV4dCwgaXRlbTogeyBhcmd1bWVudCB9IH0pID0+IGA8c3BhbiBzdHlsZT0nZm9udC1zaXplOiAyOHB4Jz4ke3BlcmNlbnRUZXh0fTwvc3Bhbj48YnIvPiR7YXJndW1lbnR9YDtcblxuXG4gIC8vIGJ1YmJsZSBjaGFydFxuXG4gIGdldEJ1YmJsZUNoYXJ0RGF0YSgpIHtcbiAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2UgPSB7fTtcbiAgICBjb25zdCB7IHJlc3VsdCwgdW5pcXVlRGF0ZXMgfSA9IHRoaXMuZ2VuZXJhdGVEYXRhKHRoaXMuYnViYmxlQ2hhcnREYXRhLCB0aGlzLmNoYXJ0Q29uZmlnKVxuICAgIC8vIHJlc3VsdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIC8vICAgZWxlbWVudC5kYXRhc2V0LnNvcnQoKGEsIGIpID0+IG1vbWVudChhLnJlY29yZERhdGUsICdZWVlZTU1ERCcpLmRpZmYobW9tZW50KGIucmVjb3JkRGF0ZSwgJ1lZWVlNTUREJykpKTtcbiAgICAvLyB9KTtcbiAgICAvLyB1bmlxdWVEYXRlcy5zb3J0KCk7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiZGF0YVNldFwiXSA9IHJlc3VsdDtcbiAgICB0aGlzLmhlYXRDaGFydERhdGFTb3VyY2VbXCJhcmd1bWVudFZhbHVlXCJdID0gdW5pcXVlRGF0ZXM7XG4gIH1cblxuICBnZW5lcmF0ZURhdGEoZGF0YSwgY2hhcnRDb25maWcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCB1bmlxdWVEYXRlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBkYXRhU291cmNlTWFwID0ge307XG5cbiAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGNoYXJ0Q29uZmlnLnNvdXJjZUZpZWxkO1xuICAgIGNvbnN0IGFyZ3VtZW50RmllbGQgPSBjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkO1xuICAgIGNvbnN0IHZhbHVlRmllbGQgPSBjaGFydENvbmZpZy5jaGFydF9jb25maWdbMF0udmFsdWVGaWVsZDtcbiAgICBjb25zdCBtaW5CdWJibGVTaXplID0gKHRoaXMuY2hhcnRDb25maWcubWluQnViYmxlU2l6ZSkgPyBwYXJzZUludCh0aGlzLmNoYXJ0Q29uZmlnLm1pbkJ1YmJsZVNpemUpIDogODtcbiAgICBjb25zdCBtYXhCdWJibGVTaXplID0gKHRoaXMuY2hhcnRDb25maWcubWF4QnViYmxlU2l6ZSkgPyBwYXJzZUludCh0aGlzLmNoYXJ0Q29uZmlnLm1heEJ1YmJsZVNpemUpIDogMjA7XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VGaWVsZFZhbHVlID0gaXRlbVtzb3VyY2VGaWVsZF07XG4gICAgICBjb25zdCBhcmd1bWVudEZpZWxkVmFsdWUgPSBpdGVtW2FyZ3VtZW50RmllbGRdO1xuICAgICAgY29uc3QgeyBbc291cmNlRmllbGRdOiBfLCBbYXJndW1lbnRGaWVsZF06IF9fLCAuLi5yZXN0IH0gPSBpdGVtO1xuXG4gICAgICBpZiAoIWRhdGFTb3VyY2VNYXBbc291cmNlRmllbGRWYWx1ZV0pIHtcbiAgICAgICAgZGF0YVNvdXJjZU1hcFtzb3VyY2VGaWVsZFZhbHVlXSA9IHtcbiAgICAgICAgICBkYXRhc291cmNlOiBzb3VyY2VGaWVsZFZhbHVlLFxuICAgICAgICAgIGRhdGFzZXQ6IFtdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkYXRhU291cmNlTWFwW3NvdXJjZUZpZWxkVmFsdWVdLmRhdGFzZXQucHVzaCh7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIFthcmd1bWVudEZpZWxkXTogbW9tZW50KGFyZ3VtZW50RmllbGRWYWx1ZSkuZm9ybWF0KHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdClcbiAgICAgIH0pO1xuICAgICAgdW5pcXVlRGF0ZXMuYWRkKG1vbWVudChhcmd1bWVudEZpZWxkVmFsdWUpLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVuaXF1ZURhdGVzQXJyYXkgPSBBcnJheS5mcm9tKHVuaXF1ZURhdGVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGFTb3VyY2VNYXApIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhU291cmNlTWFwW2tleV0uZGF0YXNldDtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGFzZXQgPSB0aGlzLmdldEZvcm1hdGVEYXRhQnlDb2xvckNvZGUoZGF0YXNldCwgdmFsdWVGaWVsZCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGVUb0l0ZW1NYXAgPSB7fTtcbiAgICAgIGZvcm1hdHRlZERhdGFzZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZGF0ZVRvSXRlbU1hcFtpdGVtW2FyZ3VtZW50RmllbGRdXSA9IGl0ZW07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29tcGxldGVEYXRhc2V0ID0gdW5pcXVlRGF0ZXNBcnJheS5tYXAoKGRhdGU6IGFueSkgPT4ge1xuXG4gICAgICAgIGlmIChkYXRlVG9JdGVtTWFwW2RhdGVdKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVUb0l0ZW1NYXBbZGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbGVDb3VudDogMCxcbiAgICAgICAgICAgIFthcmd1bWVudEZpZWxkXTogZGF0ZSxcbiAgICAgICAgICAgIFt2YWx1ZUZpZWxkXTogMCxcbiAgICAgICAgICAgIGNvbG9yOiBcInJnYigyNDIsIDExOCwgMTA5KVwiXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0YXNvdXJjZToga2V5LFxuICAgICAgICBkYXRhc2V0OiBjb21wbGV0ZURhdGFzZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgIHVuaXF1ZURhdGVzOiB1bmlxdWVEYXRlc0FycmF5XG4gICAgfTtcbiAgfVxuXG5cblxuICBnZXRGb3JtYXRlRGF0YUJ5Q29sb3JDb2RlKGZpbGVkYXRhLCB2YWx1ZUZpZWxkLCBtaW5CdWJibGVTaXplLCBtYXhCdWJibGVTaXplKSB7XG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bdmFsdWVGaWVsZF0gPSBwYXJzZUZsb2F0KGl0ZW1bdmFsdWVGaWVsZF0pO1xuICAgIH0pO1xuXG4gICAgbGV0IG1heFJlY2hhcmdlQ291bnQgPSBNYXRoLm1heCguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW3ZhbHVlRmllbGRdKSk7XG4gICAgbGV0IG1pblJlY2hhcmdlQ291bnQgPSBNYXRoLm1pbiguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW3ZhbHVlRmllbGRdKSk7XG5cbiAgICBsZXQgbWluQ29sb3IgPSBbNDMsIDIyNCwgOTFdO1xuICAgIGxldCBtYXhDb2xvciA9IFs2NSwgMTM1LCAyNF07XG4gICAgbGV0IGhvdmVyID0gWzEzNSwgMTg0LCAxMDZdO1xuXG4gICAgZmlsZWRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCBzaXplID0gdGhpcy5tYXBSYW5nZShpdGVtW3ZhbHVlRmllbGRdLCBtaW5SZWNoYXJnZUNvdW50LCBtYXhSZWNoYXJnZUNvdW50LCBtaW5CdWJibGVTaXplLCBtYXhCdWJibGVTaXplKTtcbiAgICAgIGl0ZW0uc2l6ZSA9IHNpemU7XG4gICAgICBpdGVtLnRvb2xUaXAgPSAoaXRlbVt2YWx1ZUZpZWxkXSkgPyBpdGVtW3ZhbHVlRmllbGRdIDogJzAnO1xuICAgICAgaXRlbS5ob3ZlciA9IGByZ2IoJHtob3Zlci5qb2luKCcsJyl9KWA7XG4gICAgICBpZiAoaXRlbVt2YWx1ZUZpZWxkXSA9PSAwIHx8IGl0ZW1bdmFsdWVGaWVsZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW0uY29sb3IgPSBgcmdiKCR7bWluQ29sb3Iuam9pbignLCcpfSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5jb2xvciA9IGByZ2IoJHttYXhDb2xvci5qb2luKCcsJyl9KWA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsZWRhdGE7XG4gIH1cblxuICBtYXBSYW5nZSh2YWx1ZSwgaW5NaW4sIGluTWF4LCBvdXRNaW4sIG91dE1heCkge1xuICAgIHJldHVybiAoKHZhbHVlIC0gaW5NaW4pICogKG91dE1heCAtIG91dE1pbikpIC8gKGluTWF4IC0gaW5NaW4pICsgb3V0TWluO1xuICB9XG5cblxuXG4gIC8vIHN0YWNrYmFyIGNoYXJ0O1xuXG5cblxuICBnZUNoYXJ0V2l0aEdyb3VwQnlGb3JNdWx0aVNlcmlzKHByZXZpZXdkYXRhOiBhbnlbXSwgYXJndW1lbnRWYWx1ZTogc3RyaW5nLCB2YWx1ZUZpZWxkOiBzdHJpbmcsIGdyb3VwQnk6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBjb25zdCBncm91cGVkID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBjb25zdCB1bmlxdWVHcm91cHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBwcmV2aWV3ZGF0YSkge1xuICAgICAgY29uc3QgYXJnID0gaXRlbVthcmd1bWVudFZhbHVlXTtcbiAgICAgIGNvbnN0IGdyb3VwID0gaXRlbVtncm91cEJ5XTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVt2YWx1ZUZpZWxkXTtcblxuICAgICAgdW5pcXVlR3JvdXBzLmFkZChncm91cCk7XG5cbiAgICAgIGlmICghZ3JvdXBlZC5oYXMoYXJnKSkge1xuICAgICAgICBncm91cGVkLnNldChhcmcsIHsgW2FyZ3VtZW50VmFsdWVdOiBhcmcgfSk7XG4gICAgICB9XG4gICAgICBncm91cGVkLmdldChhcmcpW2dyb3VwXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdyb3VwZWQuZm9yRWFjaCh2YWx1ZSA9PiByZXN1bHQucHVzaCh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFTb3VyY2VGb3JDaGFydDogcmVzdWx0LFxuICAgICAgbGlzdE9mR3JvdXBCeURhdGE6IEFycmF5LmZyb20odW5pcXVlR3JvdXBzKVxuICAgIH07XG4gIH1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJub3QtZnVsbC1zY3JlZW5cIiAoZGJsY2xpY2spPVwidG9nZ2xlRnVsbFNjcmVlbigpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VfY29uZmlnPy53aWRHZXRDb25maWc/LmRpc3BsYXlcIj5cbiAgICAgICAgPGFwcC10aXRsZSBbdGl0bGVdPVwicGFnZV9jb25maWcud2lkR2V0Q29uZmlnLndpZGdldFRpdGxlXCIgW29wZXJhdG9yc109XCJwYWdlX2NvbmZpZy5vcGVyYXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNwbGF5VHlwZV09XCInY2hhcnQnXCI+PC9hcHAtdGl0bGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcC0yIGJnLWdyYXktMjAwIGRhcms6YmctZ3JheS04MDAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBcIj5cbiAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdkb3VnaG51dCcgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAncGllJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdmdW5uZWwnICYmIGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gJ2J1YmJsZSdcIj5cblxuICAgICAgICAgICAgPGR4LWNoYXJ0IGlkPVwiY2hhcnRcIiBbZGF0YVNvdXJjZV09XCJmaW5hbENoYXJ0RGF0YVNvdXJjZVwiIChvblBvaW50Q2xpY2spPVwiZ2V0QWxsQ2hhcnRQb2ludENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwYWxldHRlXT1cImNoYXJ0Q29uZmlnLnBhbGV0dGVcIiBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNMb2FkZXJcIiBbdmFsdWVBeGlzXT1cImNoYXJ0Q29uZmlnLnZhbHVlQXhpc0NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tc2l6ZSBbaGVpZ2h0XT1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tc2l6ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uYXhpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS12YWx1ZS1heGlzIG5hbWU9XCJ7e2l0ZW0uYXhpc319XCIgcG9zaXRpb249XCJ7e2l0ZW0ucG9zaXRpb259fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdGl0bGUgdGV4dD1cInt7aXRlbS5uYW1lfX1cIj48L2R4by10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXZhbHVlLWF4aXM+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICAgIDxkeG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBvdmVybGFwcGluZ0JlaGF2aW9yPVwicm90YXRlXCIgW3JvdGF0aW9uQW5nbGVdPVwiMjcwXCI+PC9keG8tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9keG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICA8ZHhvLXRvb2x0aXAgW2VuYWJsZWRdPVwidHJ1ZVwiIFtzaGFyZWRdPVwidHJ1ZVwiIFtjdXN0b21pemVUb29sdGlwXT1cImN1c3RvbWl6ZVRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICA8L2R4by10b29sdGlwPlxuICAgICAgICAgICAgICAgIDxkeG8tY29tbW9uLXNlcmllcy1zZXR0aW5ncyBhcmd1bWVudEZpZWxkPVwie3tjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkfX1cIj5cbiAgICAgICAgICAgICAgICA8L2R4by1jb21tb24tc2VyaWVzLXNldHRpbmdzPlxuXG5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBvdGhlcnMgc2luZ2xlIGFjY2VzcyBjaGFydCBzdGFydCAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnc3RhY2tlZEJhcicgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnbXVsdGlMaW5lJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdtdWx0aUJhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydENvbmZpZy5jaGFydF9jb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyB0eXBlPVwie3tpdGVtLnR5cGV9fVwiIHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCIgYXhpcz1cInt7aXRlbS5heGlzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiIGNvbG9yPVwie3tpdGVtLmNvbG9yfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmICFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgdHlwZT1cInt7aXRlbS50eXBlfX1cIiB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiIGF4aXM9XCJ7e2l0ZW0uYXhpc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igb3RoZXJzIHNpbmdsZSBhY2Nlc3MgY2hhcnQgZW5kIC0tPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBmb3Igc3RhY2tiZXIgc3RhcnQgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ3N0YWNrZWRCYXInIHx8IGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ211bHRpTGluZScgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnbXVsdGlCYXInIFwiID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydFdpdGhUaHJlZURpbWVudGlvbkRhdGFTZXJpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIHZhbHVlRmllbGQ9XCJ7e2l0ZW19fVwiIG5hbWU9XCJ7e2l0ZW19fVwiIHR5cGU9XCJ7e2NoYXJ0VHlwZVdoZW5NdWx0aVNlcmllc319XCI+PC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBzdGFja2JlciBlbmQgLS0+XG5cbiAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydEhlaWdodFwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPGR4by1sZWdlbmQgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGVnZW5kRGlzcGxheVwiIHZlcnRpY2FsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy52ZXJ0aWNhbEFsaWdubWVudH19XCJcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcuaG9yaXpvbnRhbEFsaWdubWVudH19XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tbGVnZW5kPlxuICAgICAgICAgICAgPC9keC1jaGFydD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT09ICdkb3VnaG51dCcgfHwgY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAncGllJ1wiPlxuXG4gICAgICAgICAgICA8ZHgtcGllLWNoYXJ0IGlkPVwicGllXCIgW3R5cGVdPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwieyB0ZXh0OiBjaGFydENvbmZpZy5jYXB0aW9uLCBmb250OiB7IHNpemU6IDE0IH0gfVwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICBjZW50ZXJUZW1wbGF0ZT1cImNlbnRlclRlbXBsYXRlXCIgKG9uUG9pbnRDbGljayk9XCJwb2ludENsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcGFsZXR0ZV09XCJjaGFydENvbmZpZy5wYWxldHRlXCI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgYXJndW1lbnRGaWVsZD17e2NoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGR9fSB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIiBjb2xvcj1cInt7aXRlbS5jb2xvcn19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJjaGFydENvbmZpZy5sYWJlbERpc3BsYXlcIiBmb3JtYXQ9XCJjdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWNvbm5lY3RvciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tY29ubmVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyBhcmd1bWVudEZpZWxkPXt7Y2hhcnRDb25maWcuYXJndW1lbnRGaWVsZH19IHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbGFiZWwgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGFiZWxEaXNwbGF5XCIgZm9ybWF0PVwiY3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1jb25uZWN0b3IgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWNvbm5lY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXNlcmllcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1zaXplIFtoZWlnaHRdPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1zaXplPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkeG8tbGVnZW5kIFt2aXNpYmxlXT1cImNoYXJ0Q29uZmlnLmxlZ2VuZERpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50fX1cIlxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcudmVydGljYWxBbGlnbm1lbnR9fVwiPjwvZHhvLWxlZ2VuZD5cbiAgICAgICAgICAgICAgICA8IS0tIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIj48L2R4by1leHBvcnQ+IC0tPlxuICAgICAgICAgICAgICAgIDxkeG8tdG9vbHRpcCBbZW5hYmxlZF09XCJ0cnVlXCIgW2N1c3RvbWl6ZVRvb2x0aXBdPVwiY3VzdG9taXplVG9vbHRpcFwiIGZvcm1hdD1cImN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZG91Z2hudXQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKmR4VGVtcGxhdGU9XCJsZXQgcGllQ2hhcnQgb2YgJ2NlbnRlclRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwMFwiIGN5PVwiMTAwXCIgW2F0dHIucl09XCJwaWVDaGFydC5nZXRJbm5lclJhZGl1cygpIC0gNlwiIGZpbGw9XCJncmF5XCIgb3BhY2l0eT1cIjAuMDAwMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jaXJjbGU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHRleHQtYW5jaG9yPVwibWlkZGxlXCIgc3R5bGU9XCJmb250LXNpemU6IDBweFwiIHg9XCIxMDBcIiB5PVwiMTAwXCIgZmlsbD1cIiNlZWVcIiAqbmdJZj1cImNoYXJ0Q29uZmlnLmRpc3BsYXlDZW50ZXJMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PVwiMTAwXCI+e3sgY2FsY3VsYXRlVG90YWwocGllQ2hhcnQpIH19PC90c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtcGllLWNoYXJ0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSAnZnVubmVsJ1wiPlxuICAgICAgICAgICAgPGR4LWZ1bm5lbCBpZD1cImZ1bm5lbFwiIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCIgYXJndW1lbnRGaWVsZD1cImFyZ3VtZW50XCIgdmFsdWVGaWVsZD1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBwYWxldHRlPVwiU29mdCBQYXN0ZWxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICAgICAgPGR4by10b29sdGlwIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8ZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tYm9yZGVyIFt2aXNpYmxlXT1cInRydWVcIj4gPC9keG8tYm9yZGVyPlxuICAgICAgICAgICAgICAgIDwvZHhvLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJ0cnVlXCIgcG9zaXRpb249XCJpbnNpZGVcIiBiYWNrZ3JvdW5kQ29sb3I9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbWl6ZVRleHRdPVwiY3VzdG9taXplVGV4dFwiPjwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgPC9keC1mdW5uZWw+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gJ2J1YmJsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC01IG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5kYXRhU2V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBtaW4tdy0xMiBtYXgtdy1bMzAlXSBqdXN0aWZ5LWNlbnRlciBmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmRhdGFzb3VyY2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktY2VudGVyIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBib3ggb2YgaXRlbS5kYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBtaW4tdy0xMCBtYXgtdy1bMjAlXSBoLTEwIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1JlY29yZCBEYXRlOiAnICsgYm94LnJlY29yZERhdGUgKyAnXFxuUmVjaGFyZ2UgQ291bnQ6ICcgKyBib3gudG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1mdWxsXCIgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBib3guaXNIb3ZlcmVkID8gJ3JnYigxMzUsIDE4NCwgMTA2KScgOiBib3guY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiBib3guc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdob3Zlcic6IGJveC5ob3ZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQucHgnOiBib3guc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAobW91c2VlbnRlcik9XCJib3guaXNIb3ZlcmVkID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImJveC5pc0hvdmVyZWQgPSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTIgbWF4LXctWzIwJV0gaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYXRDaGFydERhdGFTb3VyY2UuYXJndW1lbnRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTAgbWF4LXctWzIwJV0gbWluLWgtMTQgZmxleCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2hlaWdodCc6ICdhdXRvJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcm90YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Z1bGxTY3JlZW5cIiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsU2NyZWVuKClcIj5DbG9zZTwvYnV0dG9uPlxuPC9kaXY+Il19