axidio-styleguide-library1-v2 0.0.811 → 0.0.812
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.
|
@@ -400,6 +400,15 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
|
|
|
400
400
|
.selectAll('g.x1.axis1 g.tick text')
|
|
401
401
|
.attr('class', 'lib-xaxis-labels-texts-drilldown')
|
|
402
402
|
.attr('y', short_tick_length_bg)
|
|
403
|
+
.attr('x', function (d) {
|
|
404
|
+
// SAME adjustment as first line for consistent alignment
|
|
405
|
+
if (self.isZoomedOut) {
|
|
406
|
+
return 0; // Default position when zoomed out
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
return -x.bandwidth() * 0.08; // Shift left when zoomed in - SAME VALUE
|
|
410
|
+
}
|
|
411
|
+
})
|
|
403
412
|
.text(function (d) {
|
|
404
413
|
var isValueToBeIgnored = false;
|
|
405
414
|
data.map((indiv) => {
|
|
@@ -428,6 +437,15 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
|
|
|
428
437
|
.append('text')
|
|
429
438
|
.attr('class', 'lib-xaxis-labels-texts-drilldown')
|
|
430
439
|
.attr('y', long_tick_length_bg)
|
|
440
|
+
.attr('x', function (d) {
|
|
441
|
+
// Adjust position based on zoom state
|
|
442
|
+
if (self.isZoomedOut) {
|
|
443
|
+
return 0; // Default position when zoomed out
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
return -x.bandwidth() * 0.08; // Shift left when zoomed in
|
|
447
|
+
}
|
|
448
|
+
})
|
|
431
449
|
.attr('fill', 'var(--chart-text-color)')
|
|
432
450
|
.text(function (d) {
|
|
433
451
|
if (d.trim().indexOf(' ') > -1) {
|
|
@@ -1355,4 +1373,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1355
1373
|
}], headerMenuclickEvent: [{
|
|
1356
1374
|
type: Output
|
|
1357
1375
|
}] } });
|
|
1358
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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Qzt3QkFDekIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQzFELElBQUksSUFBSSxDQUFDO3dCQUNULFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQ0FDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQzt3Q0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3Q0FDN0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUNBQzFDLENBQUMsQ0FBQztvQ0FDSCxrQkFBa0I7Z0NBQ3BCLENBQUM7O29DQUNDLFNBQVMsQ0FBQyxLQUFLLENBQUM7d0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0NBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3FDQUMx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QUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDOzRCQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQ0FDcEMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO29DQUNwRCxTQUFTLENBQUMsS0FBSyxDQUFDO3dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dDQUM3QixDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFDO2dDQUNMLENBQUM7O29DQUNDLFNBQVMsQ0FBQyxLQUFLLENBQUM7d0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0NBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3FDQUMxQyxDQUFDLENBQUM7NEJBQ1AsQ0FBQzs7Z0NBQ0MsU0FBUyxDQUFDLEtBQUssQ0FBQztvQ0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztvQ0FD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QyxpQkFNeEMsaUJBQWlCLENBQUMsSUFBSTt3REFPckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5sZXNzJyxcclxuICAgICcuLi9jb21tb24tc3R5bGVzLmxlc3MnLFxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvcml6b250YWxHcm91cGVkQmFyV2l0aFNjcm9sbFpvb21Db21wb25lbnRcclxuICBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkXHJcbiAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBncm91cGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xyXG5cclxuICBkZWZhdWx0Q29uZmlndXJhdGlvbjogYW55ID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIGxhYmVsRm9ybWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgc3ZnSGVpZ2h0OiA3MCxcclxuICAgIG51bWJlck9mWVRpY2tzOiA1LFxyXG4gICAgbGVnZW5kSnVzdGlmaWVkOiB0cnVlLFxyXG4gICAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIGxpbmVHcmFwaENvbG9yOiAnI0Y2RDI4MycsXHJcbiAgICBzaG93TGluZUNoYXJ0QXhpczogdHJ1ZSxcclxuICAgIHNob3dWYWx1ZXM6IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeUF4aXNHcmlkOiBmYWxzZSxcclxuICAgIGxlZ2VuZFZpc2libGU6IGZhbHNlLFxyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogdW5kZWZpbmVkLFxyXG4gICAgaXNNdWx0aUNoYXJ0R3JpZExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGlzRnVsbFNjcmVlbjogdW5kZWZpbmVkLFxyXG4gICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0c09uQmFyOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogZmFsc2UsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0OiB1bmRlZmluZWQsXHJcbiAgICBpc1hncmlkQmV0d2VlbkxhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICBoaWRlTGVnZW5kT25Ub3A6IHRydWUsXHJcbiAgICBpc1hheGlzQ29sb3I6ICcjOTk5OTk5JyxcclxuICAgIGxhYmVsT3ZlcmxhcE1pbm9yRml4OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckVmZmVjdDogdHJ1ZSxcclxuICAgIG5vSG92ZXJEaXNwbGF5RGF0YTogdHJ1ZSxcclxuICAgIHNob3dYYXhpc1RvcDogdHJ1ZSxcclxuICAgIGRpc3BsYXlZYXhpc0xhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRBbHdheXNIb3Jpem9udGFsOiB1bmRlZmluZWQsXHJcbiAgICBsZWdlbmRBdFRvcFJpZ2h0OiB1bmRlZmluZWQsXHJcbiAgICBpc0RyaWxsZG93bkNoYXJ0OiB0cnVlLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tOiB1bmRlZmluZWQsXHJcbiAgICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogMCxcclxuICAgIGJhclZhdWxlQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIGRlZmF1bHRCYXJIZWlnaHQ6IDQsXHJcbiAgfTtcclxuXHJcbiAgdW5pcXVlSWQ6IGFueSA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1pvb21lZE91dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzREQxT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzREQyT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgc2V0VGltZW91dChcclxuICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgICAgICBzZWxmLmluaXRpYWxpemVncm91cENoYXJ0KCk7XHJcbiAgICAgIH0uYmluZChzZWxmKSxcclxuICAgICAgMTBcclxuICAgICk7XHJcbiAgfVxyXG4gIGlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCwgZXZlbnQpIHtcclxuICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICB0aGlzLm9uUmVzaXplZChldmVudCk7XHJcbiAgfVxyXG4gIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfSkge1xyXG4gICAgdGhpcy5pc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7fVxyXG4gIGlzTGVnZW5kVmlzaWJsZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydERhdGEgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzICYmXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycykubGVuZ3RoID4gMVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZWVwT3JkZXIgPSAoYSwgYikgPT4ge1xyXG4gICAgcmV0dXJuIGE7XHJcbiAgfTtcclxuXHJcbiAgZ2V0IGlzQWxlcnRFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uPy5oZWFkZXJNZW51T3B0aW9ucz8uc29tZShcclxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSAnZWRpdEFsZXJ0J1xyXG4gICAgKTtcclxuICB9XHJcbiAgaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBsZXQgZGF0YSA9IFtdO1xyXG4gICAgbGV0IG1ldGFEYXRhOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IGtleUxpc3QgPSBudWxsO1xyXG4gICAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICAgIGxldCBjb2xvck1hcCA9IHt9O1xyXG4gICAgdmFyIGZvcm1hdEZyb21CYWNrZW5kO1xyXG4gICAgdmFyIGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG5cclxuICAgIHZhciB4OiBhbnk7XHJcblxyXG4gICAgdmFyIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGggPSA0O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGggPSAxNjtcclxuICAgIC8qKlxyXG4gICAgICogbG9uZ2VyIHRpY2sgbGVuZ3RoIG5lZWRlZCBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuICAgIHZhciBsZWZ0QW5kUmlnaHRTcGFjZXMgPSA1MDtcclxuICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICB2YXIgdGVtcFNjYWxlO1xyXG5cclxuICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltpXSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBpLFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG5cclxuICAgIC8vIGlmIChsaW5lRGF0YSB8fCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgLy8gICByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGFbJ2NvbG9yQWJvdmVUYXJnZXQnXSA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuICAgIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgdmFyIGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdmFyIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdChcclxuICAgICAgdGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgdmFyIG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIHZhciB3aWR0aCA9XHJcbiAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gMzAgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTFcclxuICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICAgIDogd2lkdGhcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMVxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcblxyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHdpZHRoXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgd2lkdGggPCB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMCAmJlxyXG4gICAgICB0aGlzLmlzWm9vbWVkT3V0XHJcbiAgICApIHtcclxuICAgICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgICB3aWR0aCA8IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMjUwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAyNTA7XHJcbiAgICAgIH0gZWxzZSB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTYwO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCkge1xyXG4gICAgLy8gICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTQwO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHZhciBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAqXHJcbiAgICAgICAgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbTtcclxuICAgIC8qKlxyXG4gICAgICogZW50aXJlIGhlaWdodCB1c2VkIGluIHdlZWtseSBjaGFydHMgYXMgeCBheGlzIG5lZWRlZCB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhcnRcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlblxyXG4gICAgKSB7XHJcbiAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9IDcwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICAgICAgOiBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMzA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMDA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZvciBoaWRpbmcgaGVhZGVyXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBmb3IgaGlkaW5nIGxlZ2VuZHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5sZWdlbmRWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGZvciByZW1vdmluZyBiYWNrZ3JvdW5kIGNvbG9yIHNvIHRoYXQgaXQgY2FuIHRha2UgcGFyZW50cyBjb2xvclxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kID1cclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZm9ybWF0IGRhdGEgdmFsdWVzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gcmVjZWl2ZWRcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgKTtcclxuICAgICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgfVxyXG4gICAgdmFyIG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG5cclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7bWFyZ2luLmxlZnR9cHhgKVxyXG4gICAgICAvLyAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcblxyXG4gICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxNXB4Jyk7XHJcbiAgICB2YXIgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCcpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoXHJcbiAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgJ3RyYW5zbGF0ZSgnICsgKG1hcmdpbi5sZWZ0ICsgMTUpICsgJywnICsgbWFyZ2luLnRvcCArICcpJ1xyXG4gICAgICApO1xyXG5cclxuICAgIHZhciBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ3JpZ2h0JywgJzEycHgnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuXHJcbiAgICB2YXIgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLy8gLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGggLSByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAgICAgLy8gLmNhbGwoQ2hhcnRIZWxwZXIucmVzcG9uc2l2ZWZ5KVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG5cclxuICAgIHZhciBncm91cHMgPSBkM1xyXG4gICAgICAubWFwKGRhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuIGQubmFtZTtcclxuICAgICAgfSlcclxuICAgICAgLmtleXMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHggYXhpcyByYW5nZSBtYWRlIHNpbWlsYXIgdG8gbGluZSBjaGFydCBvciB2ZXJ0aWNhbCBzdGFjayBzbyB0aGF0IGFsbCB0aGUgY2hhcnRzIHdpbGwgZ2V0IGFsaWduZWQgd2l0aCBlYWNoIG90aGVyLlxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHggPSBkM1xyXG4gICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAgICAgLmFsaWduKDAuNSlcclxuICAgICAgICAucGFkZGluZyhbMC41XSlcclxuICAgICAgICAuZG9tYWluKFxyXG4gICAgICAgICAgZGF0YS5tYXAoZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB4ID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgICAucmFuZ2UoW2xlZnRBbmRSaWdodFNwYWNlcywgd2lkdGggLSByaWdodFN2Z1dpZHRoIC0gbGVmdEFuZFJpZ2h0U3BhY2VzXSlcclxuICAgICAgICAucGFkZGluZyhbMC4zXSk7XHJcbiAgICB9XHJcbiAgICAvLyB4LmJhbmR3aWR0aCg5Nik7XHJcbiAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKTtcclxuICAgIC8vIC5wYWRkaW5nKFswLjJdKTtcclxuICAgIC8qKlxyXG4gICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICovXHJcbiAgICAvLyBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1hheGlzVG9wKSB7XHJcbiAgICAvLyAgIHN2Z1xyXG4gICAgLy8gICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgIC8vICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAvLyAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBkMy5zdmcuYXhpcygpLnNjYWxlKHgpLm9yaWVudCgnYm90dG9tJykudGlja3MoMSkuaW5uZXJUaWNrU2l6ZSgtaGVpZ2h0KTtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIG5vcm1hbCB0aWNrcyBmb3IgYWxsIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG5cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbihkKSB7XHJcbiAgICBpZiAoc2VsZi5pc1pvb21lZE91dCkge1xyXG4gICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLCAwKSc7IC8vIERlZmF1bHQgcG9zaXRpb24gd2hlbiB6b29tZWQgb3V0XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBXaGVuIHpvb21lZCBpbiwgc2hpZnQgbGFiZWxzIGxlZnRcclxuICAgICAgY29uc3QgbGVmdE9mZnNldCA9IC14LmJhbmR3aWR0aCgpICogMC4xOyAvLyBTaGlmdCBsZWZ0IGJ5IDEwJSBvZiBiYW5kd2lkdGhcclxuICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtsZWZ0T2Zmc2V0fSwgMClgO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAgICAgLy8gLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgIC8vICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAvLyAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgIC8vICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKipcclxuICAgICAgICogYmlnZ2VyIHRpY2tzIGZvciB3ZWVrbHkgY2hhcnRzIGFuZCBtb3JlIHNwYWNlIGZyb20geCBheGlzIHRvIGxhYmVsc1xyXG4gICAgICAgKi9cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGRyYXcgeCBheGlzXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKDApKVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHRpY2sgbGluZSBzaXplIGluIGFsdGVybmF0ZSBmYXNoaW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmcgLSA3O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmcgLSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiByZXNldCB0aGUgZmxhZyBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgc2hvd24gaW4gc2FtZSBhbHRlcm5hdGUgZmFzaGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHByaW50IHgtYXhpcyBsYWJlbCB0ZXh0c1xyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5hdHRyKCd5Jywgc2hvcnRfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHZhciBpc1ZhbHVlVG9CZUlnbm9yZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09IC0xXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlzVmFsdWVUb0JlSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJZiBsYWJlbCBsb29rcyBsaWtlIGEgZGF0ZSAoY29udGFpbnMgZGlnaXRzIGFuZCAtIG9yIC8pLCBzaG93IGZ1bGwgbGFiZWwgYXMgb25lIGxpbmVcclxuICAgICAgICAgIGlmICgvXFxkezIsNH1bLVxcL10vLnRlc3QoZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gIS9cXGR7Miw0fVstXFwvXS8udGVzdChkKTsgLy8gT25seSBwcm9jZXNzIG5vbi1kYXRlIGxhYmVsc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuYXR0cigneScsIGxvbmdfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSwgZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKip5IHNjYWxlIGZvciBsZWZ0IHkgYXhpcyAqL1xyXG4gICAgdmFyIHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG4gICAgdmFyIG1heFZhbHVlID0gZDMubWF4KGRhdGEsIChkKSA9PiBkMy5tYXgoa2V5TGlzdCwgKGtleSkgPT4gK2Rba2V5XSkpO1xyXG4gICAgaWYgKG1heFZhbHVlID09IDApIHtcclxuICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXhWYWx1ZSA9IDEwMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgICAvLyBzdmdcclxuICAgICAgLy8gICAuYXBwZW5kKCdnJylcclxuICAgICAgLy8gICAuYXR0cignY2xhc3MnLCAnZ3JpZCcpXHJcbiAgICAgIC8vICAgLmNhbGwoXHJcbiAgICAgIC8vICAgICBkM1xyXG4gICAgICAvLyAgICAgICAuYXhpc0xlZnQoeSlcclxuICAgICAgLy8gICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAvLyAgICAgICAudGlja1NpemUoLXdpZHRoKVxyXG4gICAgICAvLyAgICAgICAudGlja0Zvcm1hdCgnJylcclxuICAgICAgLy8gICApXHJcbiAgICAgIC8vICAgLy8gLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC8vICAgLnN0eWxlKCdjb2xvcicsICcjQjlCOUI5JylcclxuICAgICAgLy8gICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgLy8gICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlKSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBpbmNyZWFzZSB5LXNjYWxlIHNvIHRoYXQgdmFsdWVzIHdvbnQgY3Jvc3Mgb3IgZXhjZWVkIG91dCBvZiByYW5nZVxyXG4gICAgICAgKiB1c2VkIGluIHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIG1heFZhbHVlID0gbWF4VmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0XHJcbiAgICApIHtcclxuICAgICAgbWF4VmFsdWUgPVxyXG4gICAgICAgIG1heFZhbHVlIDwgMTAgJiYgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0IDwgMTBcclxuICAgICAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgM1xyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgIH1cclxuICAgIHkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKTtcclxuICAgIGxldCBsaW5lWXNjYWxlO1xyXG5cclxuICAgIGlmIChsaW5lRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBtYXhMaW5lVmFsdWUgPSBkMy5tYXgobGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1heExpbmVWYWx1ZSA9IG1heExpbmVWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuXHJcbiAgICAgIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKG1heExpbmVWYWx1ZSA+IDApIG1pbkxpbmVWYWx1ZSA9IG1pbkxpbmVWYWx1ZSAtIDM7XHJcbiAgICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSB7XHJcbiAgICAgICAgbWluTGluZVZhbHVlID0gMDtcclxuICAgICAgfVxyXG4gICAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgICAuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAgIC5kb21haW4oW21pbkxpbmVWYWx1ZSwgbWF4TGluZVZhbHVlXSlcclxuICAgICAgICAucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcbiAgICB9XHJcbiAgICBsZXQgeUxpbmVBeGlzO1xyXG4gICAgaWYgKGxpbmVZc2NhbGUgIT0gbnVsbCkge1xyXG4gICAgICB5TGluZUF4aXMgPSBkM1xyXG4gICAgICAgIC5heGlzUmlnaHQobGluZVlzY2FsZSlcclxuICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNob3cgeC1heGlzIGdyaWQgYmV0d2VlbiBsYWJlbHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAndHJhbnNsYXRlKCcgKyB4LmJhbmR3aWR0aCgpIC8gMiArICcsJyArIGhlaWdodCArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKC1oZWlnaHQpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciwgIzk5OTk5OSknKSAvLyBVc2UgQ1NTIHZhcmlhYmxlXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmNhbGwoXHJcbiAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAuYXhpc0xlZnQoeSlcclxuICAgICAgICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgICAudGlja1NpemUoLXdpZHRoKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICNCOUI5QjkpJylcclxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICAgICAgZy5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgICAgICAucmVtb3ZlKClcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpOyAvLyBBZGQgQ1NTIHZhcmlhYmxlIGZvciBkb21haW5cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNMZWZ0KHkpLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKSlcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICNCOUI5QjkpJylcclxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICAgICAgZy5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJykgLy8gQWRkIENTUyB2YXJpYWJsZSBmb3IgZG9tYWluXHJcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpOyAvLyBFbnN1cmUgdmlzaWJpbGl0eVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oc3ViZ3JvdXBzKTtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgeFN1Ymdyb3VwLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBtYWtlIGdyb3VwZWQgYmFycyB3aXRoIGxlc3NlciB3aWR0aCBhcyB3ZSBhcmUgbm90IHVzaW5nIHBhZGRpbmcgZm9yIHdpZHRoXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgeFN1Ymdyb3VwLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICB9XHJcbiAgICAvLyBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG5cclxuICAgIC8vIH1cclxuICAgIHZhciBjb2xvciA9IGQzXHJcbiAgICAgIC5zY2FsZU9yZGluYWwoKVxyXG4gICAgICAuZG9tYWluKHN1Ymdyb3VwcylcclxuICAgICAgLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JzKSk7XHJcbiAgICAvLyB2YXIgY29sb3JBYm92ZVRhcmdldCA9IGQzXHJcbiAgICAvLyAgIC5zY2FsZU9yZGluYWwoKVxyXG4gICAgLy8gICAuZG9tYWluKHN1Ymdyb3VwcylcclxuICAgIC8vICAgLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JBYm92ZVRhcmdldCkpO1xyXG4gICAgdmFyIHN0YXRlID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuc2VsZWN0QWxsKCcuc3RhdGUnKVxyXG4gICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIHgoZC5uYW1lKSArICcsMCknO1xyXG4gICAgICB9KTtcclxuICAgIHN0YXRlXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuZGF0YShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICBzdWJncm91cHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgIC8vIGlmIChrZXkgIT09IFwiZ3JvdXBcIikge1xyXG4gICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICBuZXdMaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgfSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdiYXJzJylcclxuICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKGQua2V5ICE9ICdUYXJnZXQnKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiZcclxuICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIHNlbGYuaGFuZGxlQ2xpY2soZC5kYXRhLm5hbWUpO1xyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiB0ZW1wU2NhbGUoZC5rZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geFN1Ymdyb3VwKGQua2V5KTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkLnZhbHVlID09IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4geSgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBGb3IgdmFsdWVzIGJldHdlZW4gMCBhbmQgMTAsIHBvc2l0aW9uIGJhciBhdCBiYXNlbGluZSB3aXRoIGRlZmF1bHQgaGVpZ2h0XHJcbiAgICAgICAgICBpZiAoZC52YWx1ZSA8PSAxMCAmJiBkLnZhbHVlID49IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEhlaWdodCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRlZmF1bHRCYXJIZWlnaHQgfHwgODtcclxuICAgICAgICAgICAgcmV0dXJuIHkoMCkgLSBkZWZhdWx0SGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gMTAsIHVzZSBub3JtYWwgY2FsY3VsYXRlZCBwb3NpdGlvblxyXG4gICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geSgwKTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgLy8gdmFyIHRlbXBTY2FsZTtcclxuXHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXA7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBzZWxmLmlzWm9vbWVkT3V0XHJcbiAgICAgICAgICAgID8gdGVtcFNjYWxlLmJhbmR3aWR0aCgpIFxyXG4gICAgICAgICAgICA6IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAqIDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgID8geFN1Ymdyb3VwLmJhbmR3aWR0aCgpIFxyXG4gICAgICAgICAgOiB4U3ViZ3JvdXAuYmFuZHdpZHRoKCkgKiAwLjU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkLnZhbHVlID09IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBGb3IgdmFsdWVzIGJldHdlZW4gMCBhbmQgMTAgKGluY2x1c2l2ZSksIHVzZSBkZWZhdWx0IGhlaWdodFxyXG4gICAgICAgICAgaWYgKGQudmFsdWUgPD0gMTAgJiYgZC52YWx1ZSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kZWZhdWx0QmFySGVpZ2h0IHx8IDg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBGb3IgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMCwgdXNlIGNhbGN1bGF0ZWQgaGVpZ2h0XHJcbiAgICAgICAgICByZXR1cm4gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gICAgICB9KVxyXG4gICAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+XHJcbiAgICAgICAgc2VsZi5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgIClcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGQudmFsdWUgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICBkLnZhbHVlID49IHBhcnNlSW50KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRcclxuICAgICAgICApXHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFtkLmtleV07XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBhbmdsZWQgdGV4dHMgb24gdGhlIGJhcnNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgIT0gdW5kZWZpbmVkICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICAgIHN1Ymdyb3Vwcy5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7IGtleToga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfTtcclxuICAgICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBuZXdMaXN0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQua2V5ICYmIGQudmFsdWVcclxuICAgICAgICAgICAgPyBkLmtleS5sZW5ndGggPiAyMFxyXG4gICAgICAgICAgICAgID8gZC5rZXkuc3Vic3RyaW5nKDAsIDE3KSArICcuLi4nXHJcbiAgICAgICAgICAgICAgOiBkLmtleVxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAnIzAwMCc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnOXB4JzsgLy8g8J+RiCBab29tZWQgb3V0IG1vZGVcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxOHB4JztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzEwcHgnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBpZiBzZXQsIHRoZW4gYWxsIHRleHRzIGxsIGJlIGhvcml6b250YWxcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnRleHRBbHdheXNIb3Jpem9udGFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeFN1Ymdyb3VwKGQua2V5KSArICcsJyArICh5KGQudmFsdWUpIC0gMykgKyAnKSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogcm90YXRlIHRleHRzIGhhdmluZyBtb3JlIHRoYW4gb25lIGRpZ2l0c1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICAvLyBpZiAoZC52YWx1ZSA+IDkpXHJcbiAgICAgICAgICBpZiAoIWlzTmFOKHRlbXBTY2FsZShkLmtleSkpKVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgKHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjU1KSArXHJcbiAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAoeSgwKSAtIDEwKSArXHJcbiAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxuICAgICAgICAgIC8vIGVsc2VcclxuICAgICAgICAgIC8vICAgcmV0dXJuIChcclxuICAgICAgICAgIC8vICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgLy8gICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMikgK1xyXG4gICAgICAgICAgLy8gICAgICcsJyArXHJcbiAgICAgICAgICAvLyAgICAgeSgwKSArXHJcbiAgICAgICAgICAvLyAgICAgJyknXHJcbiAgICAgICAgICAvLyAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLm9uKCdtb3VzZW91dCcsIGhhbmRsZU1vdXNlT3V0KVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgaGFuZGxlTW91c2VPdmVyKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dClcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZCwgaSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUgZm9yIHRlbXBTY2FsZSBjYWxjdWxhdGlvbi4uLlxyXG4gICAgICAgICAgdmFyIGVsZW1lbnRzQ291bnRlcjtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICBlbGVtZW50c0NvdW50ZXIgPSBrZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHgoZC5uYW1lKSArIHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gOTBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgeChkLm5hbWUpICtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgICAgICAgICAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIHgoZC5uYW1lKSArIHRlbXBTY2FsZShkLmtleSkgLSAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4geShkLnZhbHVlKSAtIDMgLSA0MCAtIDEwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgICAuaHRtbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyBTaG93IHRoZSB4LWF4aXMgbGFiZWwgKGJhciBuYW1lKSBmb3IgdGhpcyBiYXIsIG5vdCB0aGUgZGF0ZSBvciBhbnkgb3RoZXIgdmFsdWVcclxuICAgICAgICAgIGxldCBiYXJMYWJlbCA9IGQubmFtZTsgLy8gVGhpcyBpcyB0aGUgeC1heGlzIGxhYmVsIGZvciB0aGUgYmFyXHJcbiAgICAgICAgICBsZXQgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSA/IG1ldGFEYXRhLmRhdGFUeXBlIDogJyc7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSBkLnZhbHVlO1xyXG4gICAgICAgICAgbGV0IGtleSA9IGQua2V5O1xyXG4gICAgICAgICAgLy8gVG9vbHRpcDogc2hvdyB4LWF4aXMgbGFiZWwgYW5kIHZhbHVlLCBidXQgZG8gbm90IHNob3cgZGF0ZVxyXG4gICAgICAgICAgbGV0IGRlc2lyZWRUZXh0ID1cclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4nICsgYmFyTGFiZWwgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgICBkZXNpcmVkVGV4dCArPVxyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItdmFsdWVcIj48c3Bhbj4nICtcclxuICAgICAgICAgICAgdmFsdWUgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPicgK1xyXG4gICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICc8L3NwYW4+JztcclxuICAgICAgICAgIHJldHVybiBkZXNpcmVkVGV4dDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGQsIGkpIHtcclxuICAgICAgaWYgKCFzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBkYXRhIHZhbHVlcyBvbiBtb3VzZSBvdmVyXHJcbiAgICAgKiB1c2VkIGJ5IGRhc2hib2FyZCBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyID09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCA9PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgc3RhdGUuc2VsZWN0QWxsKCcuYmFyc3RleHQnKS5yZW1vdmUoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKGQxKSB7XHJcbiAgICAgICAgICBzdGF0ZVxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIGtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLmtleSA9PSBrZXkgJiZcclxuICAgICAgICAgICAgICAgICAgZDEudmFsdWUgPT0gZFtrZXldICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLm5hbWUgPT0gZC5uYW1lXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgICAgICAgIG5ld0xpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMaXN0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYmFyc3RleHQnKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geShkLnZhbHVlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgICAgJ3N0eWxlJyxcclxuICAgICAgICAgICAgICAnZm9udC1zaXplOiAnICsgJy44NWVtJyArICc7JyArICcgZm9udC13ZWlnaHQ6JyArICdib2xkJyArICc7J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICd3aWR0aCcsXHJcbiAgICAgICAgICAgICAgc2VsZi5pc1pvb21lZE91dFxyXG4gICAgICAgICAgICAgICAgPyB4U3ViZ3JvdXAuYmFuZHdpZHRoKCkgKiAwLjVcclxuICAgICAgICAgICAgICAgIDogeFN1Ymdyb3VwLmJhbmR3aWR0aCgpICogMC44XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZC52YWx1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MiBheGlzMicpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwKScpIC8vIFVzZSBDU1MgdmFyaWFibGUgaW5zdGVhZCBvZiBoYXJkY29kZWQgIzAwMFxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngyLmF4aXMyIGcudGljayB0ZXh0Jykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgICAgICAudGlja1NpemUoMClcclxuICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgIC50aWNrRm9ybWF0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlclxyXG4gICAgICAgICAgICAgID8gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyKGQpXHJcbiAgICAgICAgICAgICAgOiBkO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkID49IDEwMDAgPyBmb3JtYXR0ZWQgLyAxMDAwICsgJ2snIDogZm9ybWF0dGVkO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICAgIC8vIFN0eWxlIHRoZSBkb21haW4gbGluZSBmb3IgdGhlbWUgc3VwcG9ydFxyXG4gICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKVxyXG4gICAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBoaWRlIHggYXhpcyBsYWJlbHNcclxuICAgICAqIGNvbmZpZyBpcyB0aGVyZSBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW5cclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJ2cubGliLWxpbmUteC1heGlzLXRleHQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoaWRlIHkgYXhpcyBsYWJlbHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB5IGF4aXMgbGFiZWxzXHJcbiAgICAgKiBjb25maWcgaXMgdGhlcmUgZm9yIGZ1dHVyZSB1c2VcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGRhc2hlZCB5IGF4aXNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWRcclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzk5OTk5OSknKTsgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG4gICAgfVxyXG4gICAgaWYgKGxpbmVEYXRhICE9IG51bGwpIHtcclxuICAgICAgaWYgKGxpbmVEYXRhICYmIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dMaW5lQ2hhcnRBeGlzKSB7XHJcbiAgICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywwKScpXHJcbiAgICAgICAgICAuY2FsbCh5TGluZUF4aXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gZGlzcGxheSB5IGxhYmVsXHJcbiAgICAgKi9cclxuXHJcbiAgICAvLyBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgLy8gICBzdmdcclxuICAgIC8vICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICAvLyBzdmdcclxuICAgICAgLy8gICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAvLyAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC0zMCknKVxyXG4gICAgICAvLyAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4JywgJy01JylcclxuICAgICAgLy8gICAuYXR0cignZHknLCBudWxsKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5lYWNoKChkLCBpLCBub2RlcykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGQzLnNlbGVjdChub2Rlc1tpXSk7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IHRleHQudGV4dCgpO1xyXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgICAgIHRleHQudGV4dChudWxsKTsgLy8gQ2xlYXIgY3VycmVudCB0ZXh0XHJcblxyXG4gICAgICAgICAgLy8gQWRkIGVhY2ggd29yZCB0byBhIG5ldyB0c3BhblxyXG4gICAgICAgICAgd29yZHMuZm9yRWFjaCgod29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgdGV4dC5hcHBlbmQoJ3RzcGFuJykudGV4dCh3b3JkKTtcclxuICAgICAgICAgICAgLy8gLmF0dHIoJ3gnLCAnMTUnKVxyXG4gICAgICAgICAgICAvLyAuYXR0cignZHknLCBpbmRleCA9PT0gMCA/ICcwZW0nIDogJzAuOWVtJykgLy8gUmVkdWNlZCB2ZXJ0aWNhbCBzcGFjaW5nXHJcbiAgICAgICAgICAgIC8vIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgbnVsbCk7IC8vIFJlbW92ZSByb3RhdGUgaWYgdXNpbmcgbGluZSBicmVha3NcclxuXHJcbiAgICAgIC8vIE9wdGlvbmFsOiBBZGp1c3QgYm90dG9tIG1hcmdpbiBvciBjaGFydCBsYXlvdXRcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdCgnLngtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwgJHtoZWlnaHQgLSBtYXJnaW4uYm90dG9tICsgMTB9KWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXNlZCB0byB3cml0ZSB5IGxhYmVscyBiYXNlZCBvbiBjb25maWd1cmF0aW9uXHJcbiAgICAgKi9cclxuICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJylcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgIC5hdHRyKCd5JywgMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDMwKVxyXG4gICAgICAgIC5hdHRyKCd4JywgMCAtIGhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLXdlZWtseUNoYXJ0cycpXHJcbiAgICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICBjb25zdCB5WmVybyA9IHkodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgICAuYXR0cigneDInLCB3aWR0aClcclxuICAgICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgLy8gc3ZnWUF4aXNSaWdodFxyXG4gICAgICAvLyAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC8vICAgLmF0dHIoJ3gyJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLy8gICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLy8gICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLy8gICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMzApICsgJyknKVxyXG4gICAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpXHJcbiAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgbGV0IGRhdGFUeXBlVGVtcCA9ICcnO1xyXG4gICAgICAgICAgbGV0IHRhcmdldExpbmVOYW1lID0gJ3RhcmdldCc7XHJcbiAgICAgICAgICBpZiAobWV0YURhdGEuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgZGF0YVR5cGVUZW1wID0gbWV0YURhdGEuZGF0YVR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0YXJnZXRMaW5lTmFtZSA9IHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBgPGRpdj4ke3RhcmdldExpbmVOYW1lfTwvZGl2PmAgK1xyXG4gICAgICAgICAgICAnPGRpdj4nICtcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICtcclxuICAgICAgICAgICAgJycgK1xyXG4gICAgICAgICAgICBkYXRhVHlwZVRlbXAgK1xyXG4gICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB1c2VkIGJ5IGRyaWxsZG93biBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIC8vIHN2Z1xyXG4gICAgICAvLyAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzJylcclxuICAgICAgLy8gICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICB9XHJcbiAgICBpZiAobWV0YURhdGEubGluZXlMYWJlbCkge1xyXG4gICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGxpYi1saW5lLWF4aXMnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgICAgLmF0dHIoJ3knLCAwIC0gMTAwKVxyXG4gICAgICAgIC5hdHRyKCd4JywgMCArIDEwMClcclxuICAgICAgICAuYXR0cignZHknLCAnNWVtJylcclxuICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgICAgLnRleHQobWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgZnVuY3Rpb24gaXNBY3JvbnltKGxhYmVsKSB7XHJcbiAgICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8IChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKTtcclxuICB9XHJcbiAgY29uc3QgeExhYmVsVGV4dCA9IG1ldGFEYXRhLnhMYWJlbDtcclxuICBjb25zdCBpc0FjciA9IGlzQWNyb255bSh4TGFiZWxUZXh0LnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG4gIHN2Z1xyXG4gICAgLmFwcGVuZCgndGV4dCcpXHJcbi5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uKCkge1xyXG4gIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwnO1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZCkgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCBmb250LXNpemUtMSc7XHJcbn0pXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgLmF0dHIoXHJcbiAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAndHJhbnNsYXRlKCcgKyB3aWR0aCAvIDIgKyAnICwnICsgKGhlaWdodCArIG1hcmdpbi50b3AgKyA0MCkgKyAnKSdcclxuICAgIClcclxuICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC50ZXh0KGlzQWNyID8geExhYmVsVGV4dC50b1VwcGVyQ2FzZSgpIDogeExhYmVsVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKVxyXG59XHJcbiAgICBpZiAobGluZURhdGEpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgLmRhdHVtKGxpbmVEYXRhKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMS41KVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgJ2QnLFxyXG4gICAgICAgICAgZDNcclxuICAgICAgICAgICAgLmxpbmUoKVxyXG4gICAgICAgICAgICAueChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgdmFyIGRvdCA9IHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ215Q2lyY2xlcycpXHJcbiAgICAgICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGRvdFxyXG4gICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgICAuYXR0cignY3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2N5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdjdXJzb3InLCAoKSA9PlxyXG4gICAgICAgICAgc2VsZi5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgICAgICBkb3RcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2RvdCcpXHJcbiAgICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAuYXR0cignY29sb3InLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsICdmb250LXNpemU6ICcgKyAnLjg1ZW0nKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duIHx8IGQ/LnRvZ2dsZUZyb20pXHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gIH1cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQpIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUREMUNsaWNrKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuICBoYW5kbGVERDJDbGljayhldmVudCkge1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSBmYWxzZTtcclxuICB9XHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50KSB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICAjZ3JvdXBjb250YWluZXJcclxuICBjbGFzcz1cImxpYi1jaGFydC13cmFwcGVyXCJcclxuICBbbmdDbGFzc109XCJ7ICdsaWItbm8tYmFja2dyb3VuZCc6IGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kIH1cIlxyXG4gIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FyZC1iZyk7XCJcclxuICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjJcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxyXG4gICAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG4gIDwvZGl2PlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYxXHJcbiAgICBbdGl0bGVdPVwiY2hhcnREYXRhLm1ldGFEYXRhLnRpdGxlXCJcclxuICAgIFtoYXNEcmlsbERvd25dPVwiY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93blwiXHJcbiAgICBbaXNFZGl0RW5hYmxlZF09XCJjaGFydERhdGEubWV0YURhdGEuaXNFZGl0RW5hYmxlZFwiXHJcbiAgICBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICAgIFtpc3JpYV09XCJjdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcIlxyXG4gICAgW3NlbGVjdGVkS3BpVG9vbHRvcF09XCJjaGFydENvbmZpZ3VyYXRpb24uc2VsZWN0ZWRLcGlUb29sdG9wXCJcclxuICAgIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgICBbaXNBbGVydEVuYWJsZWRdPVwiaXNBbGVydEVuYWJsZWRcIlxyXG4gICAgKm5nSWY9XCJpc0hlYWRlclZpc2libGVcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjE+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgY2hhcnREYXRhICYmXHJcbiAgICAgIGNoYXJ0RGF0YS5tZXRhRGF0YSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kSnVzdGlmaWVkICYmXHJcbiAgICAgIGxlZ2VuZFZpc2libGUgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEF0VG9wUmlnaHRcclxuICAgIFwiXHJcbiAgICBjbGFzcz1cImxlZ2VuZC1ob2xkZXItcmlnaHRcIlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uZm9vdGVySGVpZ2h0XCJcclxuICA+XHJcbiAgICA8dWwgY2xhc3M9XCJkaXNwbGF5LWZsZXhcIj5cclxuICAgICAgPGxpXHJcbiAgICAgICAgY2xhc3M9XCJsZWdlbmRzLXBvc2l0aW9uaW5nLWlubGluZVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlIDoga2VlcE9yZGVyXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaWNvbi1kcmlsbGRvd25cIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgPjwvc3BhblxyXG4gICAgICAgID48c3Bhbj57eyBpdGVtLmtleSB9fTwvc3Bhbj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCJcclxuICAgIGlkPVwiZ3JvdXBjaGFydGNvbnRhaW5lclwiXHJcbiAgICAjZ3JvdXBjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcblxyXG5cclxuICA8IS0tIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgICFjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGliLWRvbnV0LWNoYXJ0LWZvb3RlclwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtd3JhcHBlclwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaXRlbVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaWNvblwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj4gLS0+XHJcblxyXG5cclxuICA8IS0tIDxkaXYgKm5nSWY9XCJjaGFydENvbmZpZ3VyYXRpb24/LmlzRGlzcGxheUJhckRldGFpbHNBdEJvdHRvbVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImJhci12YWx1ZXMgbGliLWRpc3BsYXktZmxleCBsaWItanVzdGlmeS1jb250ZW50LWNlbnRlciBsaWItYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgbGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlIDoga2VlcE9yZGVyO1xyXG4gICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJhci1uYW1lIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBpdGVtLmtleSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLXZhbHVlIGxpYi1kaXNwbGF5LWZsZXggbGliLWFsaWduLWl0ZW1zLWNlbnRlciBmb250LXNpemUtMVwiXHJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cIlxyXG4gICAgICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmJhclZhdWxlQ29sb3IgPyBiYXJWYXVsZUNvbG9yIDogaXRlbS52YWx1ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSAmJlxyXG4gICAgICAgICAgaSA8PSBjaGFydENvbmZpZ3VyYXRpb24uaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuIl19
|
|
1376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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NUIsQ0FBQztJQUNELHFCQUFxQixDQUFDLEVBQUU7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFDRCw4QkFBOEIsQ0FBQyxLQUFLO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBMzdDVSwyQ0FBMkM7bUdBQTNDLDJDQUEyQyxnaEJDekJ4RCxrN0hBd0hBOzs0RkQvRmEsMkNBQTJDO2tCQVR2RCxTQUFTOytCQUNFLDZDQUE2QyxpQkFNeEMsaUJBQWlCLENBQUMsSUFBSTt3REFPckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5sZXNzJyxcclxuICAgICcuLi9jb21tb24tc3R5bGVzLmxlc3MnLFxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvcml6b250YWxHcm91cGVkQmFyV2l0aFNjcm9sbFpvb21Db21wb25lbnRcclxuICBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkXHJcbiAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBncm91cGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xyXG5cclxuICBkZWZhdWx0Q29uZmlndXJhdGlvbjogYW55ID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIGxhYmVsRm9ybWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgc3ZnSGVpZ2h0OiA3MCxcclxuICAgIG51bWJlck9mWVRpY2tzOiA1LFxyXG4gICAgbGVnZW5kSnVzdGlmaWVkOiB0cnVlLFxyXG4gICAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIGxpbmVHcmFwaENvbG9yOiAnI0Y2RDI4MycsXHJcbiAgICBzaG93TGluZUNoYXJ0QXhpczogdHJ1ZSxcclxuICAgIHNob3dWYWx1ZXM6IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeUF4aXNHcmlkOiBmYWxzZSxcclxuICAgIGxlZ2VuZFZpc2libGU6IGZhbHNlLFxyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogdW5kZWZpbmVkLFxyXG4gICAgaXNNdWx0aUNoYXJ0R3JpZExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGlzRnVsbFNjcmVlbjogdW5kZWZpbmVkLFxyXG4gICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0c09uQmFyOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogZmFsc2UsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0OiB1bmRlZmluZWQsXHJcbiAgICBpc1hncmlkQmV0d2VlbkxhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICBoaWRlTGVnZW5kT25Ub3A6IHRydWUsXHJcbiAgICBpc1hheGlzQ29sb3I6ICcjOTk5OTk5JyxcclxuICAgIGxhYmVsT3ZlcmxhcE1pbm9yRml4OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckVmZmVjdDogdHJ1ZSxcclxuICAgIG5vSG92ZXJEaXNwbGF5RGF0YTogdHJ1ZSxcclxuICAgIHNob3dYYXhpc1RvcDogdHJ1ZSxcclxuICAgIGRpc3BsYXlZYXhpc0xhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRBbHdheXNIb3Jpem9udGFsOiB1bmRlZmluZWQsXHJcbiAgICBsZWdlbmRBdFRvcFJpZ2h0OiB1bmRlZmluZWQsXHJcbiAgICBpc0RyaWxsZG93bkNoYXJ0OiB0cnVlLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tOiB1bmRlZmluZWQsXHJcbiAgICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogMCxcclxuICAgIGJhclZhdWxlQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIGRlZmF1bHRCYXJIZWlnaHQ6IDQsXHJcbiAgfTtcclxuXHJcbiAgdW5pcXVlSWQ6IGFueSA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1pvb21lZE91dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzREQxT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzREQyT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgc2V0VGltZW91dChcclxuICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgICAgICBzZWxmLmluaXRpYWxpemVncm91cENoYXJ0KCk7XHJcbiAgICAgIH0uYmluZChzZWxmKSxcclxuICAgICAgMTBcclxuICAgICk7XHJcbiAgfVxyXG4gIGlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCwgZXZlbnQpIHtcclxuICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICB0aGlzLm9uUmVzaXplZChldmVudCk7XHJcbiAgfVxyXG4gIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfSkge1xyXG4gICAgdGhpcy5pc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7fVxyXG4gIGlzTGVnZW5kVmlzaWJsZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydERhdGEgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzICYmXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycykubGVuZ3RoID4gMVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBrZWVwT3JkZXIgPSAoYSwgYikgPT4ge1xyXG4gICAgcmV0dXJuIGE7XHJcbiAgfTtcclxuXHJcbiAgZ2V0IGlzQWxlcnRFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uPy5oZWFkZXJNZW51T3B0aW9ucz8uc29tZShcclxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSAnZWRpdEFsZXJ0J1xyXG4gICAgKTtcclxuICB9XHJcbiAgaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBsZXQgZGF0YSA9IFtdO1xyXG4gICAgbGV0IG1ldGFEYXRhOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IGtleUxpc3QgPSBudWxsO1xyXG4gICAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICAgIGxldCBjb2xvck1hcCA9IHt9O1xyXG4gICAgdmFyIGZvcm1hdEZyb21CYWNrZW5kO1xyXG4gICAgdmFyIGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG5cclxuICAgIHZhciB4OiBhbnk7XHJcblxyXG4gICAgdmFyIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGggPSA0O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGggPSAxNjtcclxuICAgIC8qKlxyXG4gICAgICogbG9uZ2VyIHRpY2sgbGVuZ3RoIG5lZWRlZCBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuICAgIHZhciBsZWZ0QW5kUmlnaHRTcGFjZXMgPSA1MDtcclxuICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICB2YXIgdGVtcFNjYWxlO1xyXG5cclxuICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltpXSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBpLFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG5cclxuICAgIC8vIGlmIChsaW5lRGF0YSB8fCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgLy8gICByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGFbJ2NvbG9yQWJvdmVUYXJnZXQnXSA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuICAgIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgdmFyIGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdmFyIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdChcclxuICAgICAgdGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgdmFyIG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIHZhciB3aWR0aCA9XHJcbiAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gMzAgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTFcclxuICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICAgIDogd2lkdGhcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMVxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcblxyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHdpZHRoXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgd2lkdGggPCB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMCAmJlxyXG4gICAgICB0aGlzLmlzWm9vbWVkT3V0XHJcbiAgICApIHtcclxuICAgICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgICB3aWR0aCA8IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMjUwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAyNTA7XHJcbiAgICAgIH0gZWxzZSB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTYwO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCkge1xyXG4gICAgLy8gICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTQwO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHZhciBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAqXHJcbiAgICAgICAgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbTtcclxuICAgIC8qKlxyXG4gICAgICogZW50aXJlIGhlaWdodCB1c2VkIGluIHdlZWtseSBjaGFydHMgYXMgeCBheGlzIG5lZWRlZCB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhcnRcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlblxyXG4gICAgKSB7XHJcbiAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9IDcwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICAgICAgOiBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMzA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMDA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZvciBoaWRpbmcgaGVhZGVyXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBmb3IgaGlkaW5nIGxlZ2VuZHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5sZWdlbmRWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGZvciByZW1vdmluZyBiYWNrZ3JvdW5kIGNvbG9yIHNvIHRoYXQgaXQgY2FuIHRha2UgcGFyZW50cyBjb2xvclxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kID1cclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZm9ybWF0IGRhdGEgdmFsdWVzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gcmVjZWl2ZWRcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgKTtcclxuICAgICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgfVxyXG4gICAgdmFyIG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG5cclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7bWFyZ2luLmxlZnR9cHhgKVxyXG4gICAgICAvLyAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcblxyXG4gICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxNXB4Jyk7XHJcbiAgICB2YXIgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCcpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoXHJcbiAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgJ3RyYW5zbGF0ZSgnICsgKG1hcmdpbi5sZWZ0ICsgMTUpICsgJywnICsgbWFyZ2luLnRvcCArICcpJ1xyXG4gICAgICApO1xyXG5cclxuICAgIHZhciBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ3JpZ2h0JywgJzEycHgnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuXHJcbiAgICB2YXIgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLy8gLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGggLSByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAgICAgLy8gLmNhbGwoQ2hhcnRIZWxwZXIucmVzcG9uc2l2ZWZ5KVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG5cclxuICAgIHZhciBncm91cHMgPSBkM1xyXG4gICAgICAubWFwKGRhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuIGQubmFtZTtcclxuICAgICAgfSlcclxuICAgICAgLmtleXMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHggYXhpcyByYW5nZSBtYWRlIHNpbWlsYXIgdG8gbGluZSBjaGFydCBvciB2ZXJ0aWNhbCBzdGFjayBzbyB0aGF0IGFsbCB0aGUgY2hhcnRzIHdpbGwgZ2V0IGFsaWduZWQgd2l0aCBlYWNoIG90aGVyLlxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHggPSBkM1xyXG4gICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAgICAgLmFsaWduKDAuNSlcclxuICAgICAgICAucGFkZGluZyhbMC41XSlcclxuICAgICAgICAuZG9tYWluKFxyXG4gICAgICAgICAgZGF0YS5tYXAoZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB4ID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgICAucmFuZ2UoW2xlZnRBbmRSaWdodFNwYWNlcywgd2lkdGggLSByaWdodFN2Z1dpZHRoIC0gbGVmdEFuZFJpZ2h0U3BhY2VzXSlcclxuICAgICAgICAucGFkZGluZyhbMC4zXSk7XHJcbiAgICB9XHJcbiAgICAvLyB4LmJhbmR3aWR0aCg5Nik7XHJcbiAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKTtcclxuICAgIC8vIC5wYWRkaW5nKFswLjJdKTtcclxuICAgIC8qKlxyXG4gICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICovXHJcbiAgICAvLyBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1hheGlzVG9wKSB7XHJcbiAgICAvLyAgIHN2Z1xyXG4gICAgLy8gICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgIC8vICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAvLyAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBkMy5zdmcuYXhpcygpLnNjYWxlKHgpLm9yaWVudCgnYm90dG9tJykudGlja3MoMSkuaW5uZXJUaWNrU2l6ZSgtaGVpZ2h0KTtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIG5vcm1hbCB0aWNrcyBmb3IgYWxsIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG5cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbihkKSB7XHJcbiAgICBpZiAoc2VsZi5pc1pvb21lZE91dCkge1xyXG4gICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLCAwKSc7IC8vIERlZmF1bHQgcG9zaXRpb24gd2hlbiB6b29tZWQgb3V0XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBXaGVuIHpvb21lZCBpbiwgc2hpZnQgbGFiZWxzIGxlZnRcclxuICAgICAgY29uc3QgbGVmdE9mZnNldCA9IC14LmJhbmR3aWR0aCgpICogMC4xOyAvLyBTaGlmdCBsZWZ0IGJ5IDEwJSBvZiBiYW5kd2lkdGhcclxuICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtsZWZ0T2Zmc2V0fSwgMClgO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAgICAgLy8gLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgIC8vICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAvLyAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgIC8vICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKipcclxuICAgICAgICogYmlnZ2VyIHRpY2tzIGZvciB3ZWVrbHkgY2hhcnRzIGFuZCBtb3JlIHNwYWNlIGZyb20geCBheGlzIHRvIGxhYmVsc1xyXG4gICAgICAgKi9cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGRyYXcgeCBheGlzXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKDApKVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHRpY2sgbGluZSBzaXplIGluIGFsdGVybmF0ZSBmYXNoaW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmcgLSA3O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmcgLSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiByZXNldCB0aGUgZmxhZyBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgc2hvd24gaW4gc2FtZSBhbHRlcm5hdGUgZmFzaGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHByaW50IHgtYXhpcyBsYWJlbCB0ZXh0c1xyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5hdHRyKCd5Jywgc2hvcnRfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24oZCkge1xyXG4gICAgICAvLyBTQU1FIGFkanVzdG1lbnQgYXMgZmlyc3QgbGluZSBmb3IgY29uc2lzdGVudCBhbGlnbm1lbnRcclxuICAgICAgaWYgKHNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgICAgICByZXR1cm4gMDsgLy8gRGVmYXVsdCBwb3NpdGlvbiB3aGVuIHpvb21lZCBvdXRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gLXguYmFuZHdpZHRoKCkgKiAwLjA4OyAvLyBTaGlmdCBsZWZ0IHdoZW4gem9vbWVkIGluIC0gU0FNRSBWQUxVRVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICB2YXIgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgaW5kaXYubmFtZS50b0xvd2VyQ2FzZSgpID09IGQudHJpbSgpLnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgICAgICBpbmRpdlttZXRhRGF0YS5rZXlMaXN0WzBdXSA9PSAtMVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBpc1ZhbHVlVG9CZUlnbm9yZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChpc1ZhbHVlVG9CZUlnbm9yZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gSWYgbGFiZWwgbG9va3MgbGlrZSBhIGRhdGUgKGNvbnRhaW5zIGRpZ2l0cyBhbmQgLSBvciAvKSwgc2hvdyBmdWxsIGxhYmVsIGFzIG9uZSBsaW5lXHJcbiAgICAgICAgICBpZiAoL1xcZHsyLDR9Wy1cXC9dLy50ZXN0KGQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuICEvXFxkezIsNH1bLVxcL10vLnRlc3QoZCk7IC8vIE9ubHkgcHJvY2VzcyBub24tZGF0ZSBsYWJlbHNcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBsb25nX3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uKGQpIHtcclxuICAgICAgLy8gQWRqdXN0IHBvc2l0aW9uIGJhc2VkIG9uIHpvb20gc3RhdGVcclxuICAgICAgaWYgKHNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgICAgICByZXR1cm4gMDsgLy8gRGVmYXVsdCBwb3NpdGlvbiB3aGVuIHpvb21lZCBvdXRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gLXguYmFuZHdpZHRoKCkgKiAwLjA4OyAvLyBTaGlmdCBsZWZ0IHdoZW4gem9vbWVkIGluXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSwgZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKip5IHNjYWxlIGZvciBsZWZ0IHkgYXhpcyAqL1xyXG4gICAgdmFyIHkgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG4gICAgdmFyIG1heFZhbHVlID0gZDMubWF4KGRhdGEsIChkKSA9PiBkMy5tYXgoa2V5TGlzdCwgKGtleSkgPT4gK2Rba2V5XSkpO1xyXG4gICAgaWYgKG1heFZhbHVlID09IDApIHtcclxuICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXhWYWx1ZSA9IDEwMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgICAvLyBzdmdcclxuICAgICAgLy8gICAuYXBwZW5kKCdnJylcclxuICAgICAgLy8gICAuYXR0cignY2xhc3MnLCAnZ3JpZCcpXHJcbiAgICAgIC8vICAgLmNhbGwoXHJcbiAgICAgIC8vICAgICBkM1xyXG4gICAgICAvLyAgICAgICAuYXhpc0xlZnQoeSlcclxuICAgICAgLy8gICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAvLyAgICAgICAudGlja1NpemUoLXdpZHRoKVxyXG4gICAgICAvLyAgICAgICAudGlja0Zvcm1hdCgnJylcclxuICAgICAgLy8gICApXHJcbiAgICAgIC8vICAgLy8gLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC8vICAgLnN0eWxlKCdjb2xvcicsICcjQjlCOUI5JylcclxuICAgICAgLy8gICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgLy8gICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlKSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBpbmNyZWFzZSB5LXNjYWxlIHNvIHRoYXQgdmFsdWVzIHdvbnQgY3Jvc3Mgb3IgZXhjZWVkIG91dCBvZiByYW5nZVxyXG4gICAgICAgKiB1c2VkIGluIHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIG1heFZhbHVlID0gbWF4VmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0XHJcbiAgICApIHtcclxuICAgICAgbWF4VmFsdWUgPVxyXG4gICAgICAgIG1heFZhbHVlIDwgMTAgJiYgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0IDwgMTBcclxuICAgICAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgM1xyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgIH1cclxuICAgIHkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKTtcclxuICAgIGxldCBsaW5lWXNjYWxlO1xyXG5cclxuICAgIGlmIChsaW5lRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBtYXhMaW5lVmFsdWUgPSBkMy5tYXgobGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1heExpbmVWYWx1ZSA9IG1heExpbmVWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuXHJcbiAgICAgIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKG1heExpbmVWYWx1ZSA+IDApIG1pbkxpbmVWYWx1ZSA9IG1pbkxpbmVWYWx1ZSAtIDM7XHJcbiAgICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSB7XHJcbiAgICAgICAgbWluTGluZVZhbHVlID0gMDtcclxuICAgICAgfVxyXG4gICAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgICAuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAgIC5kb21haW4oW21pbkxpbmVWYWx1ZSwgbWF4TGluZVZhbHVlXSlcclxuICAgICAgICAucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcbiAgICB9XHJcbiAgICBsZXQgeUxpbmVBeGlzO1xyXG4gICAgaWYgKGxpbmVZc2NhbGUgIT0gbnVsbCkge1xyXG4gICAgICB5TGluZUF4aXMgPSBkM1xyXG4gICAgICAgIC5heGlzUmlnaHQobGluZVlzY2FsZSlcclxuICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNob3cgeC1heGlzIGdyaWQgYmV0d2VlbiBsYWJlbHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAndHJhbnNsYXRlKCcgKyB4LmJhbmR3aWR0aCgpIC8gMiArICcsJyArIGhlaWdodCArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKC1oZWlnaHQpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciwgIzk5OTk5OSknKSAvLyBVc2UgQ1NTIHZhcmlhYmxlXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmNhbGwoXHJcbiAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAuYXhpc0xlZnQoeSlcclxuICAgICAgICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgICAudGlja1NpemUoLXdpZHRoKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICNCOUI5QjkpJylcclxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICAgICAgZy5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgICAgICAucmVtb3ZlKClcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpOyAvLyBBZGQgQ1NTIHZhcmlhYmxlIGZvciBkb21haW5cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNMZWZ0KHkpLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKSlcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICNCOUI5QjkpJylcclxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICAgICAgZy5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJykgLy8gQWRkIENTUyB2YXJpYWJsZSBmb3IgZG9tYWluXHJcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpOyAvLyBFbnN1cmUgdmlzaWJpbGl0eVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oc3ViZ3JvdXBzKTtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgeFN1Ymdyb3VwLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCB0byBtYWtlIGdyb3VwZWQgYmFycyB3aXRoIGxlc3NlciB3aWR0aCBhcyB3ZSBhcmUgbm90IHVzaW5nIHBhZGRpbmcgZm9yIHdpZHRoXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgeFN1Ymdyb3VwLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICB9XHJcbiAgICAvLyBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG5cclxuICAgIC8vIH1cclxuICAgIHZhciBjb2xvciA9IGQzXHJcbiAgICAgIC5zY2FsZU9yZGluYWwoKVxyXG4gICAgICAuZG9tYWluKHN1Ymdyb3VwcylcclxuICAgICAgLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JzKSk7XHJcbiAgICAvLyB2YXIgY29sb3JBYm92ZVRhcmdldCA9IGQzXHJcbiAgICAvLyAgIC5zY2FsZU9yZGluYWwoKVxyXG4gICAgLy8gICAuZG9tYWluKHN1Ymdyb3VwcylcclxuICAgIC8vICAgLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JBYm92ZVRhcmdldCkpO1xyXG4gICAgdmFyIHN0YXRlID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuc2VsZWN0QWxsKCcuc3RhdGUnKVxyXG4gICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIHgoZC5uYW1lKSArICcsMCknO1xyXG4gICAgICB9KTtcclxuICAgIHN0YXRlXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuZGF0YShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICBzdWJncm91cHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgIC8vIGlmIChrZXkgIT09IFwiZ3JvdXBcIikge1xyXG4gICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICBuZXdMaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgfSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdiYXJzJylcclxuICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKGQua2V5ICE9ICdUYXJnZXQnKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiZcclxuICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIHNlbGYuaGFuZGxlQ2xpY2soZC5kYXRhLm5hbWUpO1xyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiB0ZW1wU2NhbGUoZC5rZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geFN1Ymdyb3VwKGQua2V5KTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkLnZhbHVlID09IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4geSgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBGb3IgdmFsdWVzIGJldHdlZW4gMCBhbmQgMTAsIHBvc2l0aW9uIGJhciBhdCBiYXNlbGluZSB3aXRoIGRlZmF1bHQgaGVpZ2h0XHJcbiAgICAgICAgICBpZiAoZC52YWx1ZSA8PSAxMCAmJiBkLnZhbHVlID49IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEhlaWdodCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRlZmF1bHRCYXJIZWlnaHQgfHwgODtcclxuICAgICAgICAgICAgcmV0dXJuIHkoMCkgLSBkZWZhdWx0SGVpZ2h0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gMTAsIHVzZSBub3JtYWwgY2FsY3VsYXRlZCBwb3NpdGlvblxyXG4gICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geSgwKTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgLy8gdmFyIHRlbXBTY2FsZTtcclxuXHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXA7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBzZWxmLmlzWm9vbWVkT3V0XHJcbiAgICAgICAgICAgID8gdGVtcFNjYWxlLmJhbmR3aWR0aCgpIFxyXG4gICAgICAgICAgICA6IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAqIDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgID8geFN1Ymdyb3VwLmJhbmR3aWR0aCgpIFxyXG4gICAgICAgICAgOiB4U3ViZ3JvdXAuYmFuZHdpZHRoKCkgKiAwLjU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkLnZhbHVlID09IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBGb3IgdmFsdWVzIGJldHdlZW4gMCBhbmQgMTAgKGluY2x1c2l2ZSksIHVzZSBkZWZhdWx0IGhlaWdodFxyXG4gICAgICAgICAgaWYgKGQudmFsdWUgPD0gMTAgJiYgZC52YWx1ZSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kZWZhdWx0QmFySGVpZ2h0IHx8IDg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBGb3IgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMCwgdXNlIGNhbGN1bGF0ZWQgaGVpZ2h0XHJcbiAgICAgICAgICByZXR1cm4gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gICAgICB9KVxyXG4gICAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+XHJcbiAgICAgICAgc2VsZi5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgIClcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGQudmFsdWUgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICBkLnZhbHVlID49IHBhcnNlSW50KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRcclxuICAgICAgICApXHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFtkLmtleV07XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBhbmdsZWQgdGV4dHMgb24gdGhlIGJhcnNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgIT0gdW5kZWZpbmVkICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICAgIHN1Ymdyb3Vwcy5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7IGtleToga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfTtcclxuICAgICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBuZXdMaXN0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQua2V5ICYmIGQudmFsdWVcclxuICAgICAgICAgICAgPyBkLmtleS5sZW5ndGggPiAyMFxyXG4gICAgICAgICAgICAgID8gZC5rZXkuc3Vic3RyaW5nKDAsIDE3KSArICcuLi4nXHJcbiAgICAgICAgICAgICAgOiBkLmtleVxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAnIzAwMCc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnOXB4JzsgLy8g8J+RiCBab29tZWQgb3V0IG1vZGVcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxOHB4JztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzEwcHgnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBpZiBzZXQsIHRoZW4gYWxsIHRleHRzIGxsIGJlIGhvcml6b250YWxcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnRleHRBbHdheXNIb3Jpem9udGFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeFN1Ymdyb3VwKGQua2V5KSArICcsJyArICh5KGQudmFsdWUpIC0gMykgKyAnKSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogcm90YXRlIHRleHRzIGhhdmluZyBtb3JlIHRoYW4gb25lIGRpZ2l0c1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICAvLyBpZiAoZC52YWx1ZSA+IDkpXHJcbiAgICAgICAgICBpZiAoIWlzTmFOKHRlbXBTY2FsZShkLmtleSkpKVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgKHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjU1KSArXHJcbiAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAoeSgwKSAtIDEwKSArXHJcbiAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxuICAgICAgICAgIC8vIGVsc2VcclxuICAgICAgICAgIC8vICAgcmV0dXJuIChcclxuICAgICAgICAgIC8vICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgLy8gICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMikgK1xyXG4gICAgICAgICAgLy8gICAgICcsJyArXHJcbiAgICAgICAgICAvLyAgICAgeSgwKSArXHJcbiAgICAgICAgICAvLyAgICAgJyknXHJcbiAgICAgICAgICAvLyAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLm9uKCdtb3VzZW91dCcsIGhhbmRsZU1vdXNlT3V0KVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgaGFuZGxlTW91c2VPdmVyKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dClcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZCwgaSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUgZm9yIHRlbXBTY2FsZSBjYWxjdWxhdGlvbi4uLlxyXG4gICAgICAgICAgdmFyIGVsZW1lbnRzQ291bnRlcjtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICBlbGVtZW50c0NvdW50ZXIgPSBrZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHgoZC5uYW1lKSArIHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gOTBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgeChkLm5hbWUpICtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgICAgICAgICAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIHgoZC5uYW1lKSArIHRlbXBTY2FsZShkLmtleSkgLSAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4geShkLnZhbHVlKSAtIDMgLSA0MCAtIDEwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgICAuaHRtbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyBTaG93IHRoZSB4LWF4aXMgbGFiZWwgKGJhciBuYW1lKSBmb3IgdGhpcyBiYXIsIG5vdCB0aGUgZGF0ZSBvciBhbnkgb3RoZXIgdmFsdWVcclxuICAgICAgICAgIGxldCBiYXJMYWJlbCA9IGQubmFtZTsgLy8gVGhpcyBpcyB0aGUgeC1heGlzIGxhYmVsIGZvciB0aGUgYmFyXHJcbiAgICAgICAgICBsZXQgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSA/IG1ldGFEYXRhLmRhdGFUeXBlIDogJyc7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSBkLnZhbHVlO1xyXG4gICAgICAgICAgbGV0IGtleSA9IGQua2V5O1xyXG4gICAgICAgICAgLy8gVG9vbHRpcDogc2hvdyB4LWF4aXMgbGFiZWwgYW5kIHZhbHVlLCBidXQgZG8gbm90IHNob3cgZGF0ZVxyXG4gICAgICAgICAgbGV0IGRlc2lyZWRUZXh0ID1cclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4nICsgYmFyTGFiZWwgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgICBkZXNpcmVkVGV4dCArPVxyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItdmFsdWVcIj48c3Bhbj4nICtcclxuICAgICAgICAgICAgdmFsdWUgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPicgK1xyXG4gICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICc8L3NwYW4+JztcclxuICAgICAgICAgIHJldHVybiBkZXNpcmVkVGV4dDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGQsIGkpIHtcclxuICAgICAgaWYgKCFzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBkYXRhIHZhbHVlcyBvbiBtb3VzZSBvdmVyXHJcbiAgICAgKiB1c2VkIGJ5IGRhc2hib2FyZCBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyID09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCA9PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgc3RhdGUuc2VsZWN0QWxsKCcuYmFyc3RleHQnKS5yZW1vdmUoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKGQxKSB7XHJcbiAgICAgICAgICBzdGF0ZVxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIGtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLmtleSA9PSBrZXkgJiZcclxuICAgICAgICAgICAgICAgICAgZDEudmFsdWUgPT0gZFtrZXldICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLm5hbWUgPT0gZC5uYW1lXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgICAgICAgIG5ld0xpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMaXN0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYmFyc3RleHQnKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geShkLnZhbHVlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgICAgJ3N0eWxlJyxcclxuICAgICAgICAgICAgICAnZm9udC1zaXplOiAnICsgJy44NWVtJyArICc7JyArICcgZm9udC13ZWlnaHQ6JyArICdib2xkJyArICc7J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICd3aWR0aCcsXHJcbiAgICAgICAgICAgICAgc2VsZi5pc1pvb21lZE91dFxyXG4gICAgICAgICAgICAgICAgPyB4U3ViZ3JvdXAuYmFuZHdpZHRoKCkgKiAwLjVcclxuICAgICAgICAgICAgICAgIDogeFN1Ymdyb3VwLmJhbmR3aWR0aCgpICogMC44XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZC52YWx1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MiBheGlzMicpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwKScpIC8vIFVzZSBDU1MgdmFyaWFibGUgaW5zdGVhZCBvZiBoYXJkY29kZWQgIzAwMFxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngyLmF4aXMyIGcudGljayB0ZXh0Jykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgICAgICAudGlja1NpemUoMClcclxuICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgIC50aWNrRm9ybWF0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlclxyXG4gICAgICAgICAgICAgID8gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyKGQpXHJcbiAgICAgICAgICAgICAgOiBkO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkID49IDEwMDAgPyBmb3JtYXR0ZWQgLyAxMDAwICsgJ2snIDogZm9ybWF0dGVkO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuY2FsbCgoZykgPT4ge1xyXG4gICAgICAgIC8vIFN0eWxlIHRoZSBkb21haW4gbGluZSBmb3IgdGhlbWUgc3VwcG9ydFxyXG4gICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKVxyXG4gICAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBoaWRlIHggYXhpcyBsYWJlbHNcclxuICAgICAqIGNvbmZpZyBpcyB0aGVyZSBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW5cclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJ2cubGliLWxpbmUteC1heGlzLXRleHQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoaWRlIHkgYXhpcyBsYWJlbHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB5IGF4aXMgbGFiZWxzXHJcbiAgICAgKiBjb25maWcgaXMgdGhlcmUgZm9yIGZ1dHVyZSB1c2VcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGRhc2hlZCB5IGF4aXNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWRcclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzk5OTk5OSknKTsgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG4gICAgfVxyXG4gICAgaWYgKGxpbmVEYXRhICE9IG51bGwpIHtcclxuICAgICAgaWYgKGxpbmVEYXRhICYmIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dMaW5lQ2hhcnRBeGlzKSB7XHJcbiAgICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywwKScpXHJcbiAgICAgICAgICAuY2FsbCh5TGluZUF4aXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gZGlzcGxheSB5IGxhYmVsXHJcbiAgICAgKi9cclxuXHJcbiAgICAvLyBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgLy8gICBzdmdcclxuICAgIC8vICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICAvLyBzdmdcclxuICAgICAgLy8gICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAvLyAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC0zMCknKVxyXG4gICAgICAvLyAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4JywgJy01JylcclxuICAgICAgLy8gICAuYXR0cignZHknLCBudWxsKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5lYWNoKChkLCBpLCBub2RlcykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGQzLnNlbGVjdChub2Rlc1tpXSk7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IHRleHQudGV4dCgpO1xyXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgICAgIHRleHQudGV4dChudWxsKTsgLy8gQ2xlYXIgY3VycmVudCB0ZXh0XHJcblxyXG4gICAgICAgICAgLy8gQWRkIGVhY2ggd29yZCB0byBhIG5ldyB0c3BhblxyXG4gICAgICAgICAgd29yZHMuZm9yRWFjaCgod29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgdGV4dC5hcHBlbmQoJ3RzcGFuJykudGV4dCh3b3JkKTtcclxuICAgICAgICAgICAgLy8gLmF0dHIoJ3gnLCAnMTUnKVxyXG4gICAgICAgICAgICAvLyAuYXR0cignZHknLCBpbmRleCA9PT0gMCA/ICcwZW0nIDogJzAuOWVtJykgLy8gUmVkdWNlZCB2ZXJ0aWNhbCBzcGFjaW5nXHJcbiAgICAgICAgICAgIC8vIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgbnVsbCk7IC8vIFJlbW92ZSByb3RhdGUgaWYgdXNpbmcgbGluZSBicmVha3NcclxuXHJcbiAgICAgIC8vIE9wdGlvbmFsOiBBZGp1c3QgYm90dG9tIG1hcmdpbiBvciBjaGFydCBsYXlvdXRcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdCgnLngtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwgJHtoZWlnaHQgLSBtYXJnaW4uYm90dG9tICsgMTB9KWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXNlZCB0byB3cml0ZSB5IGxhYmVscyBiYXNlZCBvbiBjb25maWd1cmF0aW9uXHJcbiAgICAgKi9cclxuICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJylcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgIC5hdHRyKCd5JywgMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDMwKVxyXG4gICAgICAgIC5hdHRyKCd4JywgMCAtIGhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLXdlZWtseUNoYXJ0cycpXHJcbiAgICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICBjb25zdCB5WmVybyA9IHkodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgICAuYXR0cigneDInLCB3aWR0aClcclxuICAgICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgLy8gc3ZnWUF4aXNSaWdodFxyXG4gICAgICAvLyAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC8vICAgLmF0dHIoJ3gyJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLy8gICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLy8gICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLy8gICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMzApICsgJyknKVxyXG4gICAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpXHJcbiAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgbGV0IGRhdGFUeXBlVGVtcCA9ICcnO1xyXG4gICAgICAgICAgbGV0IHRhcmdldExpbmVOYW1lID0gJ3RhcmdldCc7XHJcbiAgICAgICAgICBpZiAobWV0YURhdGEuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgZGF0YVR5cGVUZW1wID0gbWV0YURhdGEuZGF0YVR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0YXJnZXRMaW5lTmFtZSA9IHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBgPGRpdj4ke3RhcmdldExpbmVOYW1lfTwvZGl2PmAgK1xyXG4gICAgICAgICAgICAnPGRpdj4nICtcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICtcclxuICAgICAgICAgICAgJycgK1xyXG4gICAgICAgICAgICBkYXRhVHlwZVRlbXAgK1xyXG4gICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB1c2VkIGJ5IGRyaWxsZG93biBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIC8vIHN2Z1xyXG4gICAgICAvLyAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzJylcclxuICAgICAgLy8gICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICB9XHJcbiAgICBpZiAobWV0YURhdGEubGluZXlMYWJlbCkge1xyXG4gICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGxpYi1saW5lLWF4aXMnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgICAgLmF0dHIoJ3knLCAwIC0gMTAwKVxyXG4gICAgICAgIC5hdHRyKCd4JywgMCArIDEwMClcclxuICAgICAgICAuYXR0cignZHknLCAnNWVtJylcclxuICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgICAgLnRleHQobWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgZnVuY3Rpb24gaXNBY3JvbnltKGxhYmVsKSB7XHJcbiAgICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8IChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKTtcclxuICB9XHJcbiAgY29uc3QgeExhYmVsVGV4dCA9IG1ldGFEYXRhLnhMYWJlbDtcclxuICBjb25zdCBpc0FjciA9IGlzQWNyb255bSh4TGFiZWxUZXh0LnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG4gIHN2Z1xyXG4gICAgLmFwcGVuZCgndGV4dCcpXHJcbi5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uKCkge1xyXG4gIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwnO1xyXG4gIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZCkgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCBmb250LXNpemUtMSc7XHJcbn0pXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgLmF0dHIoXHJcbiAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAndHJhbnNsYXRlKCcgKyB3aWR0aCAvIDIgKyAnICwnICsgKGhlaWdodCArIG1hcmdpbi50b3AgKyA0MCkgKyAnKSdcclxuICAgIClcclxuICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC50ZXh0KGlzQWNyID8geExhYmVsVGV4dC50b1VwcGVyQ2FzZSgpIDogeExhYmVsVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKVxyXG59XHJcbiAgICBpZiAobGluZURhdGEpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgLmRhdHVtKGxpbmVEYXRhKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMS41KVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgJ2QnLFxyXG4gICAgICAgICAgZDNcclxuICAgICAgICAgICAgLmxpbmUoKVxyXG4gICAgICAgICAgICAueChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgdmFyIGRvdCA9IHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ215Q2lyY2xlcycpXHJcbiAgICAgICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGRvdFxyXG4gICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgICAuYXR0cignY3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2N5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdjdXJzb3InLCAoKSA9PlxyXG4gICAgICAgICAgc2VsZi5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgICAgICBkb3RcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2RvdCcpXHJcbiAgICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAuYXR0cignY29sb3InLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsICdmb250LXNpemU6ICcgKyAnLjg1ZW0nKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duIHx8IGQ/LnRvZ2dsZUZyb20pXHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gIH1cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQpIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUREMUNsaWNrKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuICBoYW5kbGVERDJDbGljayhldmVudCkge1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSBmYWxzZTtcclxuICB9XHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50KSB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICAjZ3JvdXBjb250YWluZXJcclxuICBjbGFzcz1cImxpYi1jaGFydC13cmFwcGVyXCJcclxuICBbbmdDbGFzc109XCJ7ICdsaWItbm8tYmFja2dyb3VuZCc6IGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kIH1cIlxyXG4gIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FyZC1iZyk7XCJcclxuICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjJcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxyXG4gICAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG4gIDwvZGl2PlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYxXHJcbiAgICBbdGl0bGVdPVwiY2hhcnREYXRhLm1ldGFEYXRhLnRpdGxlXCJcclxuICAgIFtoYXNEcmlsbERvd25dPVwiY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93blwiXHJcbiAgICBbaXNFZGl0RW5hYmxlZF09XCJjaGFydERhdGEubWV0YURhdGEuaXNFZGl0RW5hYmxlZFwiXHJcbiAgICBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICAgIFtpc3JpYV09XCJjdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcIlxyXG4gICAgW3NlbGVjdGVkS3BpVG9vbHRvcF09XCJjaGFydENvbmZpZ3VyYXRpb24uc2VsZWN0ZWRLcGlUb29sdG9wXCJcclxuICAgIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgICBbaXNBbGVydEVuYWJsZWRdPVwiaXNBbGVydEVuYWJsZWRcIlxyXG4gICAgKm5nSWY9XCJpc0hlYWRlclZpc2libGVcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjE+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgY2hhcnREYXRhICYmXHJcbiAgICAgIGNoYXJ0RGF0YS5tZXRhRGF0YSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kSnVzdGlmaWVkICYmXHJcbiAgICAgIGxlZ2VuZFZpc2libGUgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEF0VG9wUmlnaHRcclxuICAgIFwiXHJcbiAgICBjbGFzcz1cImxlZ2VuZC1ob2xkZXItcmlnaHRcIlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uZm9vdGVySGVpZ2h0XCJcclxuICA+XHJcbiAgICA8dWwgY2xhc3M9XCJkaXNwbGF5LWZsZXhcIj5cclxuICAgICAgPGxpXHJcbiAgICAgICAgY2xhc3M9XCJsZWdlbmRzLXBvc2l0aW9uaW5nLWlubGluZVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlIDoga2VlcE9yZGVyXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaWNvbi1kcmlsbGRvd25cIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgPjwvc3BhblxyXG4gICAgICAgID48c3Bhbj57eyBpdGVtLmtleSB9fTwvc3Bhbj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCJcclxuICAgIGlkPVwiZ3JvdXBjaGFydGNvbnRhaW5lclwiXHJcbiAgICAjZ3JvdXBjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcblxyXG5cclxuICA8IS0tIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgICFjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGliLWRvbnV0LWNoYXJ0LWZvb3RlclwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtd3JhcHBlclwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaXRlbVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cImxpYi1kb251dC1qdXN0aWZpZWQtbGFiZWwtaWNvblwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj4gLS0+XHJcblxyXG5cclxuICA8IS0tIDxkaXYgKm5nSWY9XCJjaGFydENvbmZpZ3VyYXRpb24/LmlzRGlzcGxheUJhckRldGFpbHNBdEJvdHRvbVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImJhci12YWx1ZXMgbGliLWRpc3BsYXktZmxleCBsaWItanVzdGlmeS1jb250ZW50LWNlbnRlciBsaWItYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgbGV0IGl0ZW0gb2YgY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyB8IGtleXZhbHVlIDoga2VlcE9yZGVyO1xyXG4gICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJhci1uYW1lIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBpdGVtLmtleSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLXZhbHVlIGxpYi1kaXNwbGF5LWZsZXggbGliLWFsaWduLWl0ZW1zLWNlbnRlciBmb250LXNpemUtMVwiXHJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cIlxyXG4gICAgICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmJhclZhdWxlQ29sb3IgPyBiYXJWYXVsZUNvbG9yIDogaXRlbS52YWx1ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSAmJlxyXG4gICAgICAgICAgaSA8PSBjaGFydENvbmZpZ3VyYXRpb24uaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuIl19
|