verben-workflow-ui 0.5.45 → 0.5.46

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.
Files changed (43) hide show
  1. package/esm2022/public-api.mjs +3 -1
  2. package/esm2022/src/lib/components/flowable-status/flowable-status.columns.mjs +21 -0
  3. package/esm2022/src/lib/components/flowable-status/flowable-status.component.mjs +122 -0
  4. package/esm2022/src/lib/components/flowable-status/flowable-status.facade.mjs +207 -0
  5. package/esm2022/src/lib/components/flowable-status/flowable-status.form.component.mjs +52 -0
  6. package/esm2022/src/lib/components/flowable-status/flowable-status.module.mjs +21 -0
  7. package/esm2022/src/lib/components/flowable-status/flowable-status.service.mjs +55 -0
  8. package/esm2022/src/lib/components/flowable-status/flowable-status.state.mjs +85 -0
  9. package/esm2022/src/lib/components/flowable-status/index.mjs +2 -0
  10. package/esm2022/src/lib/components/flowable-status/public-api.mjs +3 -0
  11. package/esm2022/src/lib/components/flowable-status/verben-workflow-ui-src-lib-components-flowable-status.mjs +5 -0
  12. package/esm2022/src/lib/components/workflow-designer/action-dialog/action-dialog.component.mjs +14 -4
  13. package/esm2022/src/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +3 -1
  14. package/esm2022/src/lib/components/workflow-designer/workflow-data.service.mjs +6 -1
  15. package/esm2022/src/lib/components/workflow-designer/workflow-designer.component.mjs +2 -1
  16. package/esm2022/src/lib/components/workflow-designer/workflow-designer.state.mjs +5 -1
  17. package/esm2022/src/lib/components/workflow-designer/workflow-designer.types.mjs +1 -1
  18. package/esm2022/src/lib/models/FlowableStatus.mjs +2 -0
  19. package/esm2022/src/lib/models/WorkflowAction.mjs +1 -1
  20. package/esm2022/src/lib/models/public-api.mjs +2 -1
  21. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs +545 -0
  22. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs.map +1 -0
  23. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs +25 -3
  24. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs.map +1 -1
  25. package/fesm2022/verben-workflow-ui.mjs +1 -3
  26. package/fesm2022/verben-workflow-ui.mjs.map +1 -1
  27. package/package.json +31 -25
  28. package/public-api.d.ts +1 -0
  29. package/src/lib/components/flowable-status/flowable-status.columns.d.ts +3 -0
  30. package/src/lib/components/flowable-status/flowable-status.component.d.ts +34 -0
  31. package/src/lib/components/flowable-status/flowable-status.facade.d.ts +32 -0
  32. package/src/lib/components/flowable-status/flowable-status.form.component.d.ts +18 -0
  33. package/src/lib/components/flowable-status/flowable-status.module.d.ts +11 -0
  34. package/src/lib/components/flowable-status/flowable-status.service.d.ts +36 -0
  35. package/src/lib/components/flowable-status/flowable-status.state.d.ts +30 -0
  36. package/src/lib/components/flowable-status/index.d.ts +1 -0
  37. package/src/lib/components/flowable-status/public-api.d.ts +2 -0
  38. package/src/lib/components/workflow-designer/action-dialog/action-dialog.component.d.ts +3 -1
  39. package/src/lib/components/workflow-designer/workflow-data.service.d.ts +3 -1
  40. package/src/lib/components/workflow-designer/workflow-designer.types.d.ts +2 -2
  41. package/src/lib/models/FlowableStatus.d.ts +5 -0
  42. package/src/lib/models/WorkflowAction.d.ts +1 -0
  43. package/src/lib/models/public-api.d.ts +1 -0
@@ -188,6 +188,8 @@ export class DesignerCanvasComponent {
188
188
  if (connection.id === this.activeActionId) {
189
189
  connection.label = actionData.label;
190
190
  connection.action = actionData.action;
191
+ connection.targetStatus = actionData.targetStatus;
192
+ console.log('Updated action data:', connection);
191
193
  }
192
194
  return connection;
193
195
  });
@@ -1058,4 +1060,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1058
1060
  type: HostListener,
1059
1061
  args: ['window:mouseup', ['$event']]
1060
1062
  }] } });
1061
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItY2FudmFzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvZGVzaWduZXItY2FudmFzL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL2Rlc2lnbmVyLWNhbnZhcy9kZXNpZ25lci1jYW52YXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBa0J2QixNQUFNLE9BQU8sdUJBQXVCO0lBMkd6QjtJQUNDO0lBM0dELFlBQVksR0FBYSxJQUFJLENBQUM7SUFDN0IsZUFBZSxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQy9ELGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9DLG9CQUFvQixHQUNsQixJQUFJLENBQUM7SUFDRyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBS3hDLENBQUM7SUFDSyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFHL0MsQ0FBQztJQUNLLHVCQUF1QixHQUFHLElBQUksWUFBWSxFQUdoRCxDQUFDO0lBRUwsK0JBQStCO0lBQ1EsU0FBUyxDQUEwQjtJQUcxRSxlQUFlLENBQUMsS0FBaUI7UUFDL0Isc0VBQXNFO1FBQ3RFLElBQ0UsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RCLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtZQUM1QixDQUFDLElB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QXNCO3NCQUEvQixNQUFNO2dCQUlHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFNZ0MsU0FBUztzQkFBL0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdyQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFc2NhbGF0aW9uVHlwZSwgRm9ybSwgV29ya2Zsb3csIFdvcmtmbG93QWN0aW9uLCBXb3JrZmxvd1N0YWdlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFdvcmtmbG93RGF0YVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dEZXNpZ25lclN0YXRlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVzaWduZXIuc3RhdGUnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbixcbiAgQ29ubmVjdGlvblBvaW50LFxuICBOb2RlLFxuICBTd2ltbGFuZUl0ZW0sXG4gIFRvb2xUeXBlLFxuICBOb2RlIGFzIFdGTm9kZSxcbn0gZnJvbSAnLi4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGVzaWduZXItY2FudmFzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kZXNpZ25lci1jYW52YXMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIERlc2lnbmVyQ2FudmFzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc2VsZWN0ZWRUb29sOiBUb29sVHlwZSA9IG51bGw7XG4gIEBPdXRwdXQoKSBjbGlja2VkUG9zaXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIHN1YmZsb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcGVuZGluZ1N0YWdlUG9zaXRpb246IHsgc3dpbWxhbmVJbmRleDogbnVtYmVyOyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9XG4gICAgbnVsbDtcbiAgQE91dHB1dCgpIHNob3dTdGFnZURpYWxvZyA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHBvc2l0aW9uOiBhbnk7XG4gICAgaXNGcm9tQ29ubmVjdGlvbjogYm9vbGVhbjtcbiAgICBpc0Zyb21EZWNpc2lvbj86IGJvb2xlYW47XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSBzdGFnZVByb3BlcnRpZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgYWN0aW9uUHJvcGVydGllc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBjb25uZWN0aW9uSWQ6IHN0cmluZztcbiAgICBhY3Rpb25EYXRhOiBQYXJ0aWFsPFdvcmtmbG93QWN0aW9uPjtcbiAgfT4oKTtcblxuICAvLyBSZWZlcmVuY2UgdG8gdGhlIFNWRyBlbGVtZW50XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8U1ZHRWxlbWVudD47XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1vdXNldXAnLCBbJyRldmVudCddKVxuICBvbldpbmRvd01vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgcG9wdXAgb3BlbiBidXQgdGhlIG1vdXNlIGlzIHJlbGVhc2VkIG91dHNpZGUsIGNsZWFuIHVwXG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvd1N1YmZsb3dQb3B1cCAmJlxuICAgICAgIXRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cCAmJlxuICAgICAgIXRoaXMucG9wdXBWaXNpYmxlICYmIC8vIE9ubHkgZW5kIGRyYWcgaWYgbm8gcG9wdXAgaXMgdmlzaWJsZVxuICAgICAgdGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZygnRXh0ZXJuYWwgbW91c2V1cCBkZXRlY3RlZCAtIGNsZWFuaW5nIHVwIGNvbm5lY3Rpb24gZHJhZycpO1xuICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbnZhcyBkaW1lbnNpb25zXG4gIGNhbnZhc1dpZHRoID0gMzAwMDtcbiAgY2FudmFzSGVpZ2h0ID0gMjAwMDtcblxuICAvLyBHcmlkIHNpemVcbiAgZ3JpZFNpemUgPSAyMDtcblxuICBzd2ltbGFuZUhlaWdodCA9IDI2MztcbiAgdmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwb3B1cFZpc2libGUgPSBmYWxzZTtcbiAgcG9wdXBYID0gMDtcbiAgcG9wdXBZID0gMDtcbiAgYWxsb3dlZE5vZGVUeXBlczogc3RyaW5nW10gPSBbXTtcblxuICBzaG93U3RhcnROb2RlRm9ybVBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHN0YXJ0Tm9kZUZvcm1zTGlzdDogRm9ybVtdID0gW107XG4gIGlzTG9hZGluZ1N0YXJ0Tm9kZUZvcm1zOiBib29sZWFuID0gZmFsc2U7XG4gIHN0YXJ0Tm9kZUZvcm1Qb3B1cFg6IG51bWJlciA9IDA7XG4gIHN0YXJ0Tm9kZUZvcm1Qb3B1cFk6IG51bWJlciA9IDA7XG4gIGFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uOiBOb2RlIHwgbnVsbCA9IG51bGw7XG4gIG5vZGVGb3JtczogV3JpdGFibGVTaWduYWw8XG4gICAgUmVjb3JkPHN0cmluZywgeyBmb3JtSWQ6IHN0cmluZzsgZm9ybU5hbWU6IHN0cmluZyB9PlxuICA+ID0gc2lnbmFsKHt9KTtcblxuICBzaG93U3ViZmxvd1BvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHdvcmtmbG93c0xpc3Q6IFdvcmtmbG93W10gPSBbXTtcbiAgaXNMb2FkaW5nV29ya2Zsb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIHN1YmZsb3dQb3B1cFg6IG51bWJlciA9IDA7XG4gIHN1YmZsb3dQb3B1cFk6IG51bWJlciA9IDA7XG4gIHBlbmRpbmdTdWJmbG93UG9zaXRpb246IHtcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIHBlbmRpbmdEZWNpc2lvbkNvbm5lY3Rpb246IHtcbiAgICBkZWNpc2lvbk5vZGVJZDogc3RyaW5nO1xuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgcGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludDogQ29ubmVjdGlvblBvaW50IHwgbnVsbCA9IG51bGw7XG4gIHBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dDb25kaXRpb25zRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIGFjdGl2ZURlY2lzaW9uTm9kZUlkOiBzdHJpbmcgPSAnJztcbiAgYWN0aXZlQ29ubmVjdGlvbklkOiBzdHJpbmcgPSAnJztcbiAgZGVjaXNpb25Db25kaXRpb25Qb3B1cFg6IG51bWJlciA9IDA7XG4gIGRlY2lzaW9uQ29uZGl0aW9uUG9wdXBZOiBudW1iZXIgPSAwO1xuXG4gIGlzQ3JlYXRpbmdTdGFnZUZyb21EZWNpc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwZW5kaW5nRGVjaXNpb25Db25kaXRpb246IHN0cmluZyA9ICcnO1xuICBhY3RpdmVTdGFnZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQWN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHNob3dTdGFnZURpYWxvZ0xvY2FsOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dFc2NhbGF0aW9uRGlhbG9nTG9jYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWN0aXZlRXNjYWxhdGlvblR5cGU6IFdyaXRhYmxlU2lnbmFsPEVzY2FsYXRpb25UeXBlIHwgbnVsbD4gPSBzaWduYWwobnVsbCk7XG4gIGFjdGl2ZVN0YWdlQ29kZTogV3JpdGFibGVTaWduYWw8c3RyaW5nIHwgbnVsbD4gPSBzaWduYWwobnVsbCk7XG4gIGFjdGl2ZVN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHt9O1xuICBhY3RpdmVBY3Rpb25EYXRhOiBDb25uZWN0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgc2hvd0FjdGlvbkRpYWxvZ0xvY2FsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcG90ZW50aWFsVGFyZ2V0UG9pbnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlOiBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogV29ya2Zsb3dEYXRhU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ2FudmFzU2l6ZSgpO1xuICB9XG5cbiAgLy8gSGFuZGxlIG1vdXNlIGNsaWNrIG9uIGNhbnZhc1xuICBvbkNhbnZhc0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBwcm9jZXNzIGNhbnZhcyBjbGlja3MgaWYgYSB0b29sIGlzIHNlbGVjdGVkXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVG9vbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIGNsaWNrIG9jY3VycmVkXG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE1vdXNlUG9zaXRpb24oZXZlbnQpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ0NhbnZhcyBjbGlja2VkIGF0OicsXG4gICAgICBwb3NpdGlvbixcbiAgICAgICd3aXRoIHRvb2w6JyxcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb29sXG4gICAgKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgc3dpbWxhbmUgaW5kZXggYmFzZWQgb24gcG9zaXRpb25cbiAgICAvLyBjb25zdCBzd2ltbGFuZUluZGV4ID0gTWF0aC5mbG9vcihwb3NpdGlvbi55IC8gdGhpcy5zd2ltbGFuZUhlaWdodCk7XG5cbiAgICAvLyBPbmx5IGVtaXQgdGhlIHBvc2l0aW9uIGlmIHdlIGhhdmUgYSB0b29sIHNlbGVjdGVkIGFuZCBpdCdzIGEgdmFsaWQgY2xpY2sgYXJlYVxuICAgIGlmICh0aGlzLnNlbGVjdGVkVG9vbCkge1xuICAgICAgdGhpcy5jbGlja2VkUG9zaXRpb24uZW1pdCh7XG4gICAgICAgIHg6IHBvc2l0aW9uLngsXG4gICAgICAgIHk6IHBvc2l0aW9uLnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblNob3dTaGllbGREaWFsb2coc3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gRmluZCB0aGUgbm9kZVxuICAgIGNvbnN0IG5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoc3RhZ2VJZCk7XG4gICAgaWYgKG5vZGVJbmZvKSB7XG4gICAgICB0aGlzLmFjdGl2ZVN0YWdlSWQgPSBzdGFnZUlkO1xuICAgICAgdGhpcy5hY3RpdmVTdGFnZURhdGEgPSB7IC4uLm5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhLCBpZDogc3RhZ2VJZCB9O1xuICAgICAgY29uc29sZS5sb2codGhpcy5hY3RpdmVTdGFnZURhdGEpO1xuICAgICAgdGhpcy5zaG93U3RhZ2VEaWFsb2dMb2NhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25TaG93QWN0aW9uRGlhbG9nKGNvbm5lY3Rpb25JbmZvOiBDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJDT05FQ1RJT05cIiwgY29ubmVjdGlvbkluZm8pO1xuICAgIC8vIEZpbmQgdGhlIG5vZGVcbiAgICAvLyBjb25zdCBjb25uZWN0aW9uSW5mbyA9IHRoaXMuc3RhdGUuZmluZEFjdGlvbkJ5SWQoYWN0aW9uSWQpO1xuICAgIGlmIChjb25uZWN0aW9uSW5mbykge1xuICAgICAgdGhpcy5hY3RpdmVBY3Rpb25JZCA9IGNvbm5lY3Rpb25JbmZvLmlkO1xuICAgICAgdGhpcy5hY3RpdmVBY3Rpb25EYXRhID0gY29ubmVjdGlvbkluZm87XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZUFjdGlvbkRhdGEpO1xuICAgICAgdGhpcy5zaG93QWN0aW9uRGlhbG9nTG9jYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU2hvd0VzY2FsYXRpb25EaWFsb2coZXZlbnQ6IHtcbiAgICBzdGFnZUlkOiBzdHJpbmc7XG4gICAgdHlwZTogRXNjYWxhdGlvblR5cGU7XG4gIH0pOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBub2RlXG4gICAgY29uc3Qgbm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChldmVudC5zdGFnZUlkKTtcbiAgICBpZiAobm9kZUluZm8pIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IGV2ZW50LnN0YWdlSWQ7XG4gICAgICB0aGlzLmFjdGl2ZVN0YWdlRGF0YSA9IG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhIHx8IHtcbiAgICAgICAgaWQ6IHRoaXMuYWN0aXZlU3RhZ2VJZCxcbiAgICAgIH07XG4gICAgICB0aGlzLmFjdGl2ZUVzY2FsYXRpb25UeXBlLnNldChldmVudC50eXBlKTtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VDb2RlLnNldCh0aGlzLmFjdGl2ZVN0YWdlRGF0YT8uQ29kZSB8fCAnJyk7XG4gICAgICBjb25zb2xlLmxvZygnQWN0aXZlIFN0YWdlIERhdGE6JywgdGhpcy5hY3RpdmVTdGFnZURhdGEpO1xuICAgICAgY29uc29sZS5sb2coJ0VzY2FsYXRpb24gVHlwZTonLCB0aGlzLmFjdGl2ZUVzY2FsYXRpb25UeXBlKCkpO1xuICAgICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZ0xvY2FsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhpcyBtZXRob2QgdG8gaGFuZGxlIGRpYWxvZyBjbG9zdXJlXG4gIG9uU3RhZ2VEaWFsb2dDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3RhZ2VEaWFsb2dMb2NhbCA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVTdGFnZURhdGEgPSB7fTtcbiAgfVxuXG4gIG9uQWN0aW9uRGlhbG9nQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FjdGlvbkRpYWxvZ0xvY2FsID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25JZCA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25EYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBoYW5kbGUgZGlhbG9nIGNsb3N1cmVcbiAgb25Fc2NhbGF0aW9uRGlhbG9nQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0VzY2FsYXRpb25EaWFsb2dMb2NhbCA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVFc2NhbGF0aW9uVHlwZS5zZXQobnVsbCk7XG4gICAgdGhpcy5hY3RpdmVTdGFnZUNvZGUuc2V0KG51bGwpO1xuICAgIHRoaXMuYWN0aXZlU3RhZ2VEYXRhID0ge307XG4gIH1cblxuICAvLyBBZGQgdGhpcyBtZXRob2QgdG8gaGFuZGxlIHNhdmluZyBzdGFnZSBkYXRhXG4gIG9uU3RhZ2VEaWFsb2dTYXZlZChzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVTdGFnZUlkKSB7XG4gICAgICAvLyBFZGl0aW5nIGFuIGV4aXN0aW5nIHN0YWdlXG4gICAgICBjb25zdCBub2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKHRoaXMuYWN0aXZlU3RhZ2VJZCk7XG4gICAgICBpZiAobm9kZUluZm8pIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGFnZSBkYXRhXG4gICAgICAgIG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhID0ge1xuICAgICAgICAgIC4uLm5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhLFxuICAgICAgICAgIC4uLnN0YWdlRGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZWQgc3RhZ2UgZGF0YTonLCBub2RlSW5mby5ub2RlLnN0YWdlRGF0YSk7XG5cbiAgICAgICAgLy8gRW1pdCBldmVudCBmb3IgcGFyZW50IGNvbXBvbmVudCB0byBrbm93IGFib3V0IHRoZSB1cGRhdGVcbiAgICAgICAgdGhpcy5zdGFnZVByb3BlcnRpZXNVcGRhdGVkLmVtaXQoe1xuICAgICAgICAgIG5vZGVJZDogdGhpcy5hY3RpdmVTdGFnZUlkLFxuICAgICAgICAgIHN0YWdlRGF0YTogbm9kZUluZm8ubm9kZS5zdGFnZURhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBkaWFsb2dcbiAgICB0aGlzLm9uU3RhZ2VEaWFsb2dDbG9zZWQoKTtcbiAgfVxuXG4gIG9uQWN0aW9uRGlhbG9nU2F2ZWQoYWN0aW9uRGF0YTogQ29ubmVjdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUFjdGlvbklkKSB7XG4gICAgICAvLyBFZGl0aW5nIGFuIGV4aXN0aW5nIHN0YWdlXG4gICAgICAvLyBsZXQgY29ubmVjdGlvbkluZm8gPSB0aGlzLnN0YXRlLmZpbmRBY3Rpb25CeUlkKHRoaXMuYWN0aXZlQWN0aW9uSWQpO1xuICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMubWFwKChjb25uZWN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoY29ubmVjdGlvbi5pZCA9PT0gdGhpcy5hY3RpdmVBY3Rpb25JZCkge1xuICAgICAgICAgIGNvbm5lY3Rpb24ubGFiZWwgPSBhY3Rpb25EYXRhLmxhYmVsO1xuICAgICAgICAgIGNvbm5lY3Rpb24uYWN0aW9uID0gYWN0aW9uRGF0YS5hY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBkaWFsb2dcbiAgICB0aGlzLm9uQWN0aW9uRGlhbG9nQ2xvc2VkKCk7XG4gIH1cblxuICB1cGRhdGVDYW52YXNTaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcXVpcmVkSGVpZ2h0ID1cbiAgICAgICh0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGggKyAxKSAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG4gICAgdGhpcy5jYW52YXNIZWlnaHQgPSBNYXRoLm1heCgyMDAwLCByZXF1aXJlZEhlaWdodCk7IC8vIEVuc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG91ciBkZWZhdWx0IGhlaWdodFxuXG4gICAgLy8gVXBkYXRlIGFsbCB0aGUgc3dpbWxhbmUgY2xpcCBwYXRocyB3aGVuIHNpemUgY2hhbmdlc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXMuZm9yRWFjaCgoc3dpbWxhbmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaXBQYXRoSWQgPSBgc3dpbWxhbmUtY2xpcC0ke2luZGV4fWA7XG4gICAgICAgIGNvbnN0IGNsaXBQYXRoRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNsaXBQYXRoSWQpO1xuICAgICAgICBpZiAoY2xpcFBhdGhFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgcmVjdEVsZW1lbnQgPSBjbGlwUGF0aEVsZW1lbnQucXVlcnlTZWxlY3RvcigncmVjdCcpO1xuICAgICAgICAgIGlmIChyZWN0RWxlbWVudCkge1xuICAgICAgICAgICAgcmVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHRoaXMuY2FudmFzV2lkdGgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHRoZSBtb3VzZSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgU1ZHIGNhbnZhc1xuICBwcml2YXRlIGdldE1vdXNlUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIC8vIFVzZSBjbGllbnRYL1kgYW5kIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGZvciBjcm9zcy1icm93c2VyIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICB9O1xuICB9XG5cbiAgc2hvd0Nvbm5lY3Rpb25Qb2ludHMobm9kZUlkOiBzdHJpbmcsIHN3aW1sYW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPSBub2RlSWQ7XG4gIH1cblxuICBpc01vdXNlT3Zlck5vZGUoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgbm9kZTogV0ZOb2RlLFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlclxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc3Qgbm9kZUJvdW5kcyA9IHRoaXMuZ2V0Tm9kZUJvdW5kc1dpdGhQYWRkaW5nKG5vZGUsIHN3aW1sYW5lSW5kZXgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHBvc2l0aW9uLnggPj0gbm9kZUJvdW5kcy54ICYmXG4gICAgICBwb3NpdGlvbi54IDw9IG5vZGVCb3VuZHMueCArIG5vZGVCb3VuZHMud2lkdGggJiZcbiAgICAgIHBvc2l0aW9uLnkgPj0gbm9kZUJvdW5kcy55ICYmXG4gICAgICBwb3NpdGlvbi55IDw9IG5vZGVCb3VuZHMueSArIG5vZGVCb3VuZHMuaGVpZ2h0XG4gICAgKTtcbiAgfVxuXG4gIC8vIGhlbHBlciBtZXRob2QgdG8gY2FsY3VsYXRlIG5vZGUgYm91bmRzIHdpdGggcGFkZGluZ1xuICBnZXROb2RlQm91bmRzV2l0aFBhZGRpbmcoXG4gICAgbm9kZTogV0ZOb2RlLFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlclxuICApOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICBjb25zdCBwYWRkaW5nID0gMTA7IC8vIEFkZCAxMHB4IHBhZGRpbmcgYXJvdW5kIG5vZGVzIGZvciBlYXNpZXIgaG92ZXIgZGV0ZWN0aW9uXG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlIFkgcG9zaXRpb24gaW5jbHVkaW5nIHN3aW1sYW5lIG9mZnNldFxuICAgIGNvbnN0IGFic29sdXRlWSA9IG5vZGUueSArIHN3aW1sYW5lSW5kZXggKiAyNjM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogbm9kZS54IC0gcGFkZGluZyxcbiAgICAgIHk6IGFic29sdXRlWSAtIHBhZGRpbmcsXG4gICAgICB3aWR0aDogbm9kZS53aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgaGVpZ2h0OiBub2RlLmhlaWdodCArIHBhZGRpbmcgKiAyLFxuICAgIH07XG4gIH1cblxuICBoaWRlQ29ubmVjdGlvblBvaW50cyhub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPT09IG5vZGVJZCAmJlxuICAgICAgIXRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKVxuICAgICkge1xuICAgICAgdGhpcy52aXNpYmxlQ29ubmVjdGlvblBvaW50c05vZGVJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgaXNDb25uZWN0aW9uUG9pbnRWaXNpYmxlKG5vZGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPT09IG5vZGVJZDtcbiAgfVxuXG4gIHN0YXJ0Q29ubmVjdGlvbkRyYWcoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgcG9pbnQ6IENvbm5lY3Rpb25Qb2ludCxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpdCBwb2ludCBub2RlXG4gICAgY29uc3Qgbm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChwb2ludC5ub2RlSWQpO1xuICAgIGlmIChcbiAgICAgIG5vZGVJbmZvICYmXG4gICAgICBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScgJiZcbiAgICAgIG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhPy5Jc0V4aXRQb2ludFxuICAgICkge1xuICAgICAgLy8gRG9uJ3QgYWxsb3cgY29ubmVjdGlvbnMgZnJvbSBleGl0IHBvaW50c1xuICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBjcmVhdGUgY29ubmVjdGlvbnMgZnJvbSBleGl0IHBvaW50cycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICB0aGlzLnN0YXRlLnN0YXJ0Q29ubmVjdGlvbkRyYWcoXG4gICAgICBwb2ludCxcbiAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICBwb3NpdGlvbi54LFxuICAgICAgcG9zaXRpb24ueVxuICAgICk7XG5cbiAgICAvLyBBZGQgbW91c2UgbW92ZSBhbmQgbW91c2UgdXAgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBkb2N1bWVudFxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XG4gIH1cblxuICBoaWdobGlnaHRQb3RlbnRpYWxUYXJnZXRzKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpIHJldHVybjtcblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICBjb25zdCB0YXJnZXRQb2ludEluZm8gPSB0aGlzLmZpbmRDb25uZWN0aW9uUG9pbnRBdFBvc2l0aW9uKFxuICAgICAgcG9zaXRpb24ueCxcbiAgICAgIHBvc2l0aW9uLnlcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgdGFyZ2V0UG9pbnRJbmZvICYmXG4gICAgICB0YXJnZXRQb2ludEluZm8ucG9pbnQuaWQgIT09IHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZFxuICAgICkge1xuICAgICAgLy8gV2UgaGF2ZSBhIG5ldyB0YXJnZXQgcG9pbnRcbiAgICAgIHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZCA9IHRhcmdldFBvaW50SW5mby5wb2ludC5pZDtcbiAgICB9IGVsc2UgaWYgKCF0YXJnZXRQb2ludEluZm8gJiYgdGhpcy5wb3RlbnRpYWxUYXJnZXRQb2ludElkKSB7XG4gICAgICAvLyBXZSdyZSBubyBsb25nZXIgb3ZlciBhIHRhcmdldCBwb2ludFxuICAgICAgdGhpcy5wb3RlbnRpYWxUYXJnZXRQb2ludElkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBVc2UgYXJyb3cgZnVuY3Rpb25zIHRvIHByZXNlcnZlICd0aGlzJyBjb250ZXh0XG4gIG9uTW91c2VNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE1vdXNlUG9zaXRpb24oZXZlbnQpO1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvbkRyYWcocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgdGhpcy5oaWdobGlnaHRQb3RlbnRpYWxUYXJnZXRzKGV2ZW50KTtcbiAgfTtcblxuICB1cGRhdGVDb25uZWN0aW9uRHJhZyhjdXJyZW50WDogbnVtYmVyLCBjdXJyZW50WTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCkge1xuICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRYID0gY3VycmVudFg7XG4gICAgICB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuY3VycmVudFkgPSBjdXJyZW50WTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHdoaWNoIHN3aW1sYW5lIHRoZSBjdXJzb3IgaXMgb3ZlclxuICAgICAgY29uc3Qgc3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IoY3VycmVudFkgLyB0aGlzLnN3aW1sYW5lSGVpZ2h0KTtcbiAgICAgIGlmIChzd2ltbGFuZUluZGV4ID49IDAgJiYgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlIHRhcmdldCBzd2ltbGFuZSBpcyBmdWxseSB2aXNpYmxlXG4gICAgICAgIHRoaXMuZW5zdXJlU3dpbWxhbmVJblZpZXcoc3dpbWxhbmVJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZVVwID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwKTtcblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICBjb25zb2xlLmxvZygnTW91c2UgdXAgYXQgcG9zaXRpb246JywgcG9zaXRpb24pO1xuICAgIGNvbnNvbGUubG9nKCdJcyBjb25uZWN0aW9uIGRyYWdnaW5nOicsIHRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSk7XG5cbiAgICAvLyBPbmx5IHByb2NlZWQgaWYgd2UgYXJlIGRyYWdnaW5nIGEgY29ubmVjdGlvblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgZHJvcHBpbmcgb250byBhIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBjb25zdCB0YXJnZXRQb2ludEluZm8gPSB0aGlzLmZpbmRDb25uZWN0aW9uUG9pbnRBdFBvc2l0aW9uKFxuICAgICAgcG9zaXRpb24ueCxcbiAgICAgIHBvc2l0aW9uLnlcbiAgICApO1xuXG4gICAgaWYgKHRhcmdldFBvaW50SW5mbykge1xuICAgICAgLy8gV2UgZm91bmQgYSB0YXJnZXQgY29ubmVjdGlvbiBwb2ludFxuICAgICAgY29uc29sZS5sb2coJ0ZvdW5kIHRhcmdldCBjb25uZWN0aW9uIHBvaW50OicsIHRhcmdldFBvaW50SW5mbyk7XG5cbiAgICAgIC8vIEdldCB0aGUgc291cmNlIHBvaW50IGFuZCBzd2ltbGFuZSBpbmRleFxuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG4gICAgICBjb25zdCBzb3VyY2VTd2ltbGFuZUluZGV4ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVN3aW1sYW5lSW5kZXg7XG5cbiAgICAgIGlmIChzb3VyY2VQb2ludCAmJiBzb3VyY2VTd2ltbGFuZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUHJldmVudCBjb25uZWN0aW5nIGEgbm9kZSB0byBpdHNlbGZcbiAgICAgICAgaWYgKHNvdXJjZVBvaW50Lm5vZGVJZCAhPT0gdGFyZ2V0UG9pbnRJbmZvLm5vZGVJZCkge1xuICAgICAgICAgIC8vIEdldCBzb3VyY2UgYW5kIHRhcmdldCBub2RlIHR5cGVzIHRvIGNoZWNrIGlmIGNvbm5lY3Rpb24gaXMgYWxsb3dlZFxuICAgICAgICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoc291cmNlUG9pbnQubm9kZUlkKTtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKFxuICAgICAgICAgICAgdGFyZ2V0UG9pbnRJbmZvLm5vZGVJZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzb3VyY2VOb2RlSW5mbyAmJlxuICAgICAgICAgICAgdGFyZ2V0Tm9kZUluZm8gJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY2FuQ29ubmVjdChcbiAgICAgICAgICAgICAgc291cmNlTm9kZUluZm8ubm9kZS50eXBlLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSW5mby5ub2RlLnR5cGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgaWQ6IGBjb25uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlSWQ6IHNvdXJjZVBvaW50Lm5vZGVJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUlkOiB0YXJnZXRQb2ludEluZm8ubm9kZUlkLFxuICAgICAgICAgICAgICBzb3VyY2VQb2ludElkOiBzb3VyY2VQb2ludC5pZCxcbiAgICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnRJbmZvLnBvaW50LmlkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiB0YXJnZXRQb2ludEluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBhY3Rpb246IG51bGwsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBBZGQgdG8gY29ubmVjdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIGRpcmVjdCBjb25uZWN0aW9uIGJldHdlZW4gbm9kZXM6JywgY29ubmVjdGlvbik7XG5cbiAgICAgICAgICAgIC8vIE5vdGlmeSBhYm91dCBjb25uZWN0aW9uIGNyZWF0aW9uXG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAnQ2Fubm90IGNvbm5lY3QgdGhlc2Ugbm9kZSB0eXBlczonLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlSW5mbz8ubm9kZS50eXBlLFxuICAgICAgICAgICAgICAnLT4nLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSW5mbz8ubm9kZS50eXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IGNvbm5lY3QgYSBub2RlIHRvIGl0c2VsZicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZCB0aGUgY29ubmVjdGlvbiBkcmFnXG4gICAgICB0aGlzLnN0YXRlLmVuZENvbm5lY3Rpb25EcmFnKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHBvc2l0aW9uIGlzIHdpdGhpbiBhbnkgc3dpbWxhbmVcbiAgICBjb25zdCBpc0luc2lkZVN3aW1sYW5lID0gdGhpcy5pc1Bvc2l0aW9uSW5zaWRlU3dpbWxhbmUocG9zaXRpb24ueSk7XG4gICAgY29uc29sZS5sb2coJ0lzIGluc2lkZSBzd2ltbGFuZTonLCBpc0luc2lkZVN3aW1sYW5lKTtcblxuICAgIC8vIE9ubHkgc2hvdyBwb3B1cCBpZiB3aXRoaW4gYSBzd2ltbGFuZVxuICAgIGlmIChpc0luc2lkZVN3aW1sYW5lICYmIHRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgICAgY29uc29sZS5sb2coJ1Nob3dpbmcgY29ubmVjdGlvbiBwb3B1cCcpO1xuICAgICAgdGhpcy5zaG93Q29ubmVjdGlvblBvcHVwKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbmQgdGhlIGNvbm5lY3Rpb24gZHJhZyBpZiBvdXRzaWRlIGEgc3dpbWxhbmVcbiAgICAgIGNvbnNvbGUubG9nKCdFbmRpbmcgY29ubmVjdGlvbiBkcmFnIHdpdGhvdXQgc2hvd2luZyBwb3B1cCcpO1xuICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgIH1cbiAgfTtcblxuICBmaW5kQ29ubmVjdGlvblBvaW50QXRQb3NpdGlvbihcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHRvbGVyYW5jZTogbnVtYmVyID0gMTBcbiAgKToge1xuICAgIHBvaW50OiBDb25uZWN0aW9uUG9pbnQ7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICB9IHwgbnVsbCB7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBzd2ltbGFuZXMgYW5kIG5vZGVzIHRvIGZpbmQgY29ubmVjdGlvbiBwb2ludHNcbiAgICBmb3IgKFxuICAgICAgbGV0IHN3aW1sYW5lSW5kZXggPSAwO1xuICAgICAgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aDtcbiAgICAgIHN3aW1sYW5lSW5kZXgrK1xuICAgICkge1xuICAgICAgY29uc3Qgc3dpbWxhbmUgPSB0aGlzLnN0YXRlLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XTtcblxuICAgICAgaWYgKCFzd2ltbGFuZS5ub2RlcykgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzd2ltbGFuZS5ub2Rlcykge1xuICAgICAgICBpZiAoIW5vZGUuY29ubmVjdGlvblBvaW50cykgY29udGludWU7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgbm9kZSAoaW5jbHVkaW5nIHN3aW1sYW5lIG9mZnNldClcbiAgICAgICAgY29uc3QgYWJzb2x1dGVOb2RlWCA9IG5vZGUueDtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVOb2RlWSA9IG5vZGUueSArIHN3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygbm9kZS5jb25uZWN0aW9uUG9pbnRzKSB7XG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBjb25uZWN0aW9uIHBvaW50XG4gICAgICAgICAgY29uc3QgcG9pbnRYID0gYWJzb2x1dGVOb2RlWCArIHBvaW50Lng7XG4gICAgICAgICAgY29uc3QgcG9pbnRZID0gYWJzb2x1dGVOb2RlWSArIHBvaW50Lnk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZ2l2ZW4gcG9zaXRpb24gaXMgd2l0aGluIHRvbGVyYW5jZSBvZiB0aGlzIHBvaW50XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMoeCAtIHBvaW50WCkgPD0gdG9sZXJhbmNlICYmXG4gICAgICAgICAgICBNYXRoLmFicyh5IC0gcG9pbnRZKSA8PSB0b2xlcmFuY2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgICBzd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzUG9zaXRpb25JbnNpZGVTd2ltbGFuZSh5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB5IHBvc2l0aW9uIGlzIHdpdGhpbiBhbnkgc3dpbWxhbmVcbiAgICBjb25zdCBzd2ltbGFuZUNvdW50ID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoO1xuICAgIGlmIChzd2ltbGFuZUNvdW50ID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBFYWNoIHN3aW1sYW5lIGhhcyBhIGhlaWdodCBvZiAyNjNweFxuICAgIGNvbnN0IHRvdGFsU3dpbWxhbmVIZWlnaHQgPSBzd2ltbGFuZUNvdW50ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcblxuICAgIC8vIENoZWNrIGlmIHkgaXMgd2l0aGluIHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIHN3aW1sYW5lc1xuICAgIHJldHVybiB5ID49IDAgJiYgeSA8IHRvdGFsU3dpbWxhbmVIZWlnaHQ7XG4gIH1cblxuICBzaG93Q29ubmVjdGlvblBvcHVwKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1Nob3dpbmcgY29ubmVjdGlvbiBwb3B1cCBhdDonLCB4LCB5KTtcbiAgICB0aGlzLnBvcHVwWCA9IHg7XG4gICAgdGhpcy5wb3B1cFkgPSB5O1xuXG4gICAgLy8gR2V0IGFsbG93ZWQgbm9kZSB0eXBlcyBiYXNlZCBvbiB0aGUgc291cmNlIG5vZGUgdHlwZVxuICAgIHRoaXMuYWxsb3dlZE5vZGVUeXBlcyA9IHRoaXMuc3RhdGUuZ2V0QWxsb3dlZFRhcmdldE5vZGVUeXBlcygpO1xuICAgIGNvbnNvbGUubG9nKCdBbGxvd2VkIG5vZGUgdHlwZXM6JywgdGhpcy5hbGxvd2VkTm9kZVR5cGVzKTtcblxuICAgIC8vIE9ubHkgc2hvdyB0aGUgcG9wdXAgaWYgd2UgaGF2ZSBhbGxvd2VkIG5vZGUgdHlwZXNcbiAgICBpZiAodGhpcy5hbGxvd2VkTm9kZVR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucG9wdXBWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdQb3B1cCB2aXNpYmlsaXR5IHNldCB0byB0cnVlJyk7XG5cbiAgICAgIC8vIEZvcmNlIHRoZSBwb3B1cCB0byBiZSB2aXNpYmxlIGluIHRoZSBuZXh0IHRpY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnSXMgcG9wdXAgdmlzaWJsZSBpbiBuZXh0IHRpY2s6JywgdGhpcy5wb3B1cFZpc2libGUpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGFsbG93ZWQgbm9kZSB0eXBlcywganVzdCBlbmQgdGhlIGRyYWdcbiAgICAgIGNvbnNvbGUubG9nKCdObyBhbGxvd2VkIG5vZGUgdHlwZXMsIGVuZGluZyBkcmFnJyk7XG4gICAgICB0aGlzLnN0YXRlLmVuZENvbm5lY3Rpb25EcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZUNvbm5lY3Rpb25Qb3B1cCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnQ2FsbCB0byBoaWRlJyk7XG4gICAgdGhpcy5wb3B1cFZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlLmVuZENvbm5lY3Rpb25EcmFnKCk7XG4gIH1cblxuICAvLyBBZGQgdGhpcyBoYW5kbGVyIHRvIGNsb3NlIHRoZSBwb3B1cCB3aGVuIGNsaWNraW5nIG91dHNpZGVcbiAgLy8gQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICAvLyBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgLy8gICBpZiAodGhpcy5wb3B1cFZpc2libGUpIHtcbiAgLy8gICAgIGNvbnN0IHBvcHVwRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZlcmJlbi1wb3AtVXAnKTtcbiAgLy8gICAgIGlmIChwb3B1cEVsZW1lbnQgJiYgIXBvcHVwRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgLy8gICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgY3JlYXRlTm9kZUNvbm5lY3Rpb24obm9kZVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGhEYXRhID0gdGhpcy5zdGF0ZS5nZXRDb25uZWN0aW9uUGF0aERhdGEoKTtcbiAgICBpZiAoIXBhdGhEYXRhKSB7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIG5vZGUgdHlwZSBpcyBhbGxvd2VkIHRvIGJlIGNyZWF0ZWRcbiAgICBjb25zdCBhbGxvd2VkVHlwZXMgPSB0aGlzLnN0YXRlLmdldEFsbG93ZWRUYXJnZXROb2RlVHlwZXMoKTtcbiAgICBpZiAoIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhub2RlVHlwZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIGNvbm5lY3Rpb24gdG8gJHtub2RlVHlwZX0gZnJvbSBjdXJyZW50IG5vZGUgdHlwZWBcbiAgICAgICk7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVuZFgsIGVuZFksIHNvdXJjZVN3aW1sYW5lSW5kZXggfSA9IHBhdGhEYXRhO1xuXG4gICAgLy8gR2V0IHNvdXJjZSBub2RlIGluZm9cbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludDtcbiAgICBpZiAoIXNvdXJjZVBvaW50KSB7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKHNvdXJjZVBvaW50Lm5vZGVJZCk7XG4gICAgaWYgKCFzb3VyY2VOb2RlSW5mbykge1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgY29ubmVjdGluZyBmcm9tIGEgZGVjaXNpb24gdG8gYSBzdGFnZSwgc2hvdyBjb25kaXRpb24gcG9wdXAgZmlyc3RcbiAgICBpZiAoc291cmNlTm9kZUluZm8ubm9kZS50eXBlID09PSAnZGVjaXNpb24nICYmIG5vZGVUeXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAvLyBTdG9yZSBpbmZvcm1hdGlvbiBmb3IgbGF0ZXIgc3RhZ2UgY3JlYXRpb25cbiAgICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbiA9IHtcbiAgICAgICAgZGVjaXNpb25Ob2RlSWQ6IHNvdXJjZU5vZGVJbmZvLm5vZGUuaWQsXG4gICAgICAgIHN3aW1sYW5lSW5kZXg6IHNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICAgIHg6IGVuZFgsXG4gICAgICAgIHk6IGVuZFksXG4gICAgICB9O1xuXG4gICAgICAvLyBDYWxjdWxhdGUgcG9wdXAgcG9zaXRpb24gLSBwb3NpdGlvbiBpdCBuZWFyIHRoZSBkZWNpc2lvbiBub2RlXG4gICAgICBjb25zdCBzd2ltbGFuZU9mZnNldFkgPSBzb3VyY2VTd2ltbGFuZUluZGV4ICogMjYzO1xuXG4gICAgICAvLyBDZW50ZXIgdGhlIHBvcHVwIG92ZXIgdGhlIGNvbm5lY3Rpb24gZW5kcG9pbnRcbiAgICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFggPSBlbmRYO1xuICAgICAgdGhpcy5kZWNpc2lvbkNvbmRpdGlvblBvcHVwWSA9IGVuZFkgLSAxNTA7IC8vIFBvc2l0aW9uIGFib3ZlIHRoZSBlbmRwb2ludFxuXG4gICAgICAvLyBTZXQgZGVjaXNpb24gbm9kZSBJRFxuICAgICAgdGhpcy5hY3RpdmVEZWNpc2lvbk5vZGVJZCA9IHNvdXJjZU5vZGVJbmZvLm5vZGUuaWQ7XG4gICAgICB0aGlzLnNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZyA9IHRydWU7XG5cbiAgICAgIC8vIEVuZCB0aGUgY29ubmVjdGlvbiBkcmFnXG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzd2ltbGFuZUluZGV4ID0gTWF0aC5mbG9vcihlbmRZIC8gdGhpcy5zd2ltbGFuZUhlaWdodCk7XG4gICAgY29uc3Qgc3dpbWxhbmVUb3AgPSBzd2ltbGFuZUluZGV4ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcbiAgICAvLyBDYWxjdWxhdGUgc3dpbWxhbmUtcmVsYXRpdmUgcG9zaXRpb25cbiAgICBjb25zdCBzd2ltbGFuZU9mZnNldFkgPSBzb3VyY2VTd2ltbGFuZUluZGV4ICogMjYzO1xuICAgIGxldCByZWxhdGl2ZVkgPSBlbmRZIC0gc3dpbWxhbmVPZmZzZXRZIC0gNTA7IC8vIEFkZCBoYWxmIG5vZGUgaGVpZ2h0IGZvciBiZXR0ZXIgYWxpZ25tZW50XG4gICAgY29uc3Qgc3dpbWxhbmVCb3R0b20gPSBzd2ltbGFuZVRvcCArIDI2MztcblxuICAgIC8vIENsYW1wIG5vZGVZIHNvIG5vZGUgc3RheXMgd2l0aGluIHN3aW1sYW5lXG5cbiAgICBjb25zb2xlLmxvZyhlbmRZLCBzd2ltbGFuZUluZGV4LCBzd2ltbGFuZU9mZnNldFksIHN3aW1sYW5lQm90dG9tKTtcblxuICAgIGlmIChlbmRZIC0gNTAgPCBzd2ltbGFuZVRvcCkge1xuICAgICAgY29uc29sZS5sb2coJ0xlc3MnKTtcbiAgICAgIHJlbGF0aXZlWSA9IHN3aW1sYW5lVG9wOyAvLyBOb2RlIHdvdWxkIG92ZXJmbG93IGFib3ZlLCBzbyBhbGlnbiB0byB0b3BcbiAgICB9IGVsc2UgaWYgKGVuZFkgKyA1MCA+IHN3aW1sYW5lQm90dG9tKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9yZScpO1xuICAgICAgcmVsYXRpdmVZID0gc3dpbWxhbmVCb3R0b20gLSAxMDA7IC8vIE5vZGUgd291bGQgb3ZlcmZsb3cgYmVsb3csIHNvIGFsaWduIHRvIGJvdHRvbVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcmVjb25kaXRpb25zIGJhc2VkIG9uIG5vZGUgdHlwZVxuICAgIGlmIChub2RlVHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzdGFnZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgcHJvcGVydGllc1xuICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgICAgJ3N0YWdlJyxcbiAgICAgICAgZW5kWCxcbiAgICAgICAgcmVsYXRpdmVZLFxuICAgICAgICB7IE5hbWU6ICdOZXcgU3RhZ2UnIH0gLy8gQWRkIGRlZmF1bHQgcHJvcGVydGllc1xuICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICBuZXdOb2RlICYmXG4gICAgICAgIG5ld05vZGUuY29ubmVjdGlvblBvaW50cyAmJlxuICAgICAgICBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMCAmJlxuICAgICAgICBzb3VyY2VQb2ludFxuICAgICAgKSB7XG4gICAgICAgIC8vIEhhbmRsZSBjb25uZWN0aW9uIGNyZWF0aW9uXG4gICAgICAgIGNvbnN0IG9wcG9zaW5nVHlwZSA9IHtcbiAgICAgICAgICByaWdodDogJ2xlZnQnLFxuICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgdG9wOiAnYm90dG9tJyxcbiAgICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzLmZpbmQoXG4gICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gb3Bwb3NpbmdUeXBlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRhcmdldFBvaW50KSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuc3RhdGUuY3JlYXRlQ29ubmVjdGlvbihcbiAgICAgICAgICAgIG5ld05vZGUuaWQsXG4gICAgICAgICAgICB0YXJnZXRQb2ludC5pZCxcbiAgICAgICAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMub25Db25uZWN0aW9uQ3JlYXRlZChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gJ3N1YmZsb3cnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ0NyZWF0aW5nIHN1YmZsb3cgZnJvbSBjb25uZWN0aW9uIGF0OicsXG4gICAgICAgIGVuZFgsXG4gICAgICAgIGVuZFksXG4gICAgICAgICdzd2ltbGFuZTonLFxuICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4XG4gICAgICApO1xuICAgICAgLy8gU2hvdyB3b3JrZmxvdyBzZWxlY3Rpb24gcG9wdXAgYW5kIHN0b3JlIGNvbm5lY3Rpb24gZGF0YSBmb3IgbGF0ZXIgdXNlXG4gICAgICB0aGlzLnNob3dTdWJmbG93U2VsZWN0aW9uUG9wdXAoZW5kWCwgZW5kWSwgc291cmNlU3dpbWxhbmVJbmRleCk7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3Igb3RoZXIgbm9kZXMgQ3JlYXRlIHRoZSBuZXcgbm9kZSBhdCB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBjb25uZWN0aW9uXG4gICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICBub2RlVHlwZSBhcyBUb29sVHlwZSxcbiAgICAgIGVuZFgsXG4gICAgICByZWxhdGl2ZVlcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgbmV3Tm9kZSAmJlxuICAgICAgbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzICYmXG4gICAgICBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gRmluZCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBjb25uZWN0aW9uIHBvaW50IChjbG9zZXN0IHRvIHRoZSBzb3VyY2UpXG4gICAgICBpZiAoc291cmNlUG9pbnQpIHtcbiAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHVzZSB0aGUgZmlyc3QgY29ubmVjdGlvbiBwb2ludCBvZiBvcHBvc2luZyB0eXBlXG4gICAgICAgIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgeW91J2QgZmluZCB0aGUgY2xvc2VzdCBvciBtb3N0IGFwcHJvcHJpYXRlIHBvaW50XG4gICAgICAgIGxldCB0YXJnZXRQb2ludDtcblxuICAgICAgICAvLyBJZiBzb3VyY2UgaXMgb24gcmlnaHQsIHRhcmdldCBzaG91bGQgYmUgb24gbGVmdCwgZXRjLlxuICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgcmlnaHQ6ICdsZWZ0JyxcbiAgICAgICAgICBsZWZ0OiAncmlnaHQnLFxuICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgYm90dG9tOiAndG9wJyxcbiAgICAgICAgfVtzb3VyY2VQb2ludC50eXBlXSBhcyAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JztcblxuICAgICAgICB0YXJnZXRQb2ludCA9IG5ld05vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09IG9wcG9zaW5nVHlwZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLnN0YXRlLmNyZWF0ZUNvbm5lY3Rpb24oXG4gICAgICAgICAgICBuZXdOb2RlLmlkLFxuICAgICAgICAgICAgdGFyZ2V0UG9pbnQuaWQsXG4gICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZU5vZGVJbmZvKSB7XG4gICAgICB0aGlzLnVwZGF0ZU5vZGVDb25uZWN0aW9ucyhzb3VyY2VOb2RlSW5mby5ub2RlKTtcbiAgICB9XG5cbiAgICAvLyBFbmQgdGhlIGNvbm5lY3Rpb24gZHJhZ1xuICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGhhbmRsZSBzYXZpbmcgdGhlIGNvbmRpdGlvblxuICBvbkRlY2lzaW9uQ29uZGl0aW9uU2F2ZWQoZXZlbnQ6IHtcbiAgICBjb25uZWN0aW9uSWQ6IHN0cmluZztcbiAgICBjb25kaXRpb246IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wZW5kaW5nRGVjaXNpb25Db25uZWN0aW9uKSB7XG4gICAgICB0aGlzLnNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGVjaXNpb25Ob2RlSWQsIHN3aW1sYW5lSW5kZXgsIHgsIHkgfSA9XG4gICAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbkNvbm5lY3Rpb247XG5cbiAgICAvLyBDcmVhdGUgdGhlIHN0YWdlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICAnc3RhZ2UnLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB7IE5hbWU6ICdOZXcgU3RhZ2UnIH0gLy8gQWRkIGRlZmF1bHQgcHJvcGVydGllc1xuICAgICk7XG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgY29uc3QgZGVjaXNpb25Ob2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGRlY2lzaW9uTm9kZUlkKTtcblxuICAgICAgaWYgKFxuICAgICAgICBkZWNpc2lvbk5vZGVJbmZvICYmXG4gICAgICAgIG5vZGUuY29ubmVjdGlvblBvaW50cyAmJlxuICAgICAgICBub2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIC8vIEZpbmQgYSBzdWl0YWJsZSBjb25uZWN0aW9uIHBvaW50IGZyb20gdGhlIGRlY2lzaW9uIG5vZGVcbiAgICAgICAgY29uc3QgZGVjaXNpb25Ob2RlID0gZGVjaXNpb25Ob2RlSW5mby5ub2RlO1xuICAgICAgICBjb25zdCBkZWNpc2lvbk5vZGVQb2ludHMgPSBkZWNpc2lvbk5vZGUuY29ubmVjdGlvblBvaW50cyB8fCBbXTtcbiAgICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBkZWNpc2lvbk5vZGVQb2ludHMuZmluZChcbiAgICAgICAgICAocCkgPT4gcC50eXBlID09PSAncmlnaHQnIHx8IHAudHlwZSA9PT0gJ2JvdHRvbSdcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoc291cmNlUG9pbnQpIHtcbiAgICAgICAgICAvLyBGaW5kIG9wcG9zaW5nIHR5cGUgY29ubmVjdGlvbiBwb2ludCBvbiB0aGUgbmV3IHN0YWdlXG4gICAgICAgICAgY29uc3Qgb3Bwb3NpbmdUeXBlID0ge1xuICAgICAgICAgICAgcmlnaHQ6ICdsZWZ0JyxcbiAgICAgICAgICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgICAgICAgICBsZWZ0OiAncmlnaHQnLFxuICAgICAgICAgICAgdG9wOiAnYm90dG9tJyxcbiAgICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSBub2RlLmNvbm5lY3Rpb25Qb2ludHMuZmluZChcbiAgICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09IG9wcG9zaW5nVHlwZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBjb25uZWN0aW9uIHdpdGggY29uZGl0aW9uXG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICBpZDogYGNvbm4tJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApfWAsXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJZDogZGVjaXNpb25Ob2RlLmlkLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICAgIHNvdXJjZVBvaW50SWQ6IHNvdXJjZVBvaW50LmlkLFxuICAgICAgICAgICAgICB0YXJnZXRQb2ludElkOiB0YXJnZXRQb2ludC5pZCxcbiAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogZGVjaXNpb25Ob2RlSW5mby5zd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICBjb25kaXRpb246IGV2ZW50LmNvbmRpdGlvbixcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBhY3Rpb246IG51bGwsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBBZGQgY29ubmVjdGlvbiB0byB0aGUgc3RhdGVcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAnQ3JlYXRlZCBkZWNpc2lvbiBjb25uZWN0aW9uIHdpdGggY29uZGl0aW9uOicsXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgcGVuZGluZyBkYXRhXG4gICAgdGhpcy5wZW5kaW5nRGVjaXNpb25Db25uZWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbkNvbmRpdGlvbiA9ICcnO1xuXG4gICAgLy8gSGlkZSB0aGUgY29uZGl0aW9uIHBvcHVwXG4gICAgdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRGVjaXNpb25Db25kaXRpb25DYW5jZWxsZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2cgPSBmYWxzZTtcbiAgICAvLyBEb24ndCBjcmVhdGUgdGhlIHN0YWdlIG9yIGNvbm5lY3Rpb25cbiAgfVxuXG4gIGdldENvbm5lY3Rpb25QYXRoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aERhdGEgPSB0aGlzLnN0YXRlLmdldENvbm5lY3Rpb25QYXRoRGF0YSgpO1xuICAgIGlmICghcGF0aERhdGEpIHJldHVybiAnJztcblxuICAgIGNvbnN0IHsgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkgfSA9IHBhdGhEYXRhO1xuICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50O1xuXG4gICAgaWYgKCFzb3VyY2VQb2ludCkgcmV0dXJuICcnO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0T3J0aG9nb25hbFBhdGgoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIHNvdXJjZVBvaW50LnR5cGUpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvblBhdGhGb3JTYXZlZENvbm5lY3Rpb24oY29ubmVjdGlvbjogQ29ubmVjdGlvbik6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdGhEYXRhID0gdGhpcy5zdGF0ZS5nZXRDb25uZWN0aW9uRGF0YShjb25uZWN0aW9uKTtcbiAgICAgIGlmICghcGF0aERhdGEpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gcGF0aCBkYXRhIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkgfSA9IHBhdGhEYXRhO1xuXG4gICAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkKTtcbiAgICAgIGlmICghc291cmNlTm9kZUluZm8pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU291cmNlIG5vZGUgbm90IGZvdW5kIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlO1xuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VOb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAgIChwKSA9PiBwLmlkID09PSBjb25uZWN0aW9uLnNvdXJjZVBvaW50SWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghc291cmNlUG9pbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU291cmNlIHBvaW50IG5vdCBmb3VuZCBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5nZXRPcnRob2dvbmFsUGF0aChcbiAgICAgICAgc3RhcnRYLFxuICAgICAgICBzdGFydFksXG4gICAgICAgIGVuZFgsXG4gICAgICAgIGVuZFksXG4gICAgICAgIHNvdXJjZVBvaW50LnR5cGVcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdlbmVyYXRpbmcgcGF0aCBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uLCBlcnJvcik7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3J0aG9nb25hbFBhdGgoXG4gICAgc3RhcnRYOiBudW1iZXIsXG4gICAgc3RhcnRZOiBudW1iZXIsXG4gICAgZW5kWDogbnVtYmVyLFxuICAgIGVuZFk6IG51bWJlcixcbiAgICBwb2ludFR5cGU6ICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnXG4gICk6IHN0cmluZyB7XG4gICAgLy8gRGV0ZXJtaW5lIGluaXRpYWwgZGlyZWN0aW9uIGJhc2VkIG9uIGNvbm5lY3Rpb24gcG9pbnQgdHlwZVxuICAgIGxldCBwYXRoID0gJyc7XG5cbiAgICAvLyBGb3Igc2lkZSBwb2ludHMgKGxlZnQvcmlnaHQpLCBzdGFydCB3aXRoIGhvcml6b250YWwgbGluZVxuICAgIGlmIChwb2ludFR5cGUgPT09ICdsZWZ0JyB8fCBwb2ludFR5cGUgPT09ICdyaWdodCcpIHtcbiAgICAgIC8vIENhbGN1bGF0ZSBob3Jpem9udGFsIGRpc3RhbmNlXG4gICAgICBjb25zdCBob3Jpem9udGFsRGlzdCA9IGVuZFggLSBzdGFydFg7XG5cbiAgICAgIC8vIElmIHRoZSBlbmQgcG9pbnQgaXMgdmVyeSBjbG9zZSBob3Jpem9udGFsbHksIHVzZSBhIHNpbXBsZSAzLXNlZ21lbnQgcGF0aFxuICAgICAgaWYgKE1hdGguYWJzKGhvcml6b250YWxEaXN0KSA8IDMwKSB7XG4gICAgICAgIGNvbnN0IG1pZFkgPSAoc3RhcnRZICsgZW5kWSkgLyAyO1xuICAgICAgICBwYXRoID0gYE0gJHtzdGFydFh9ICR7c3RhcnRZfSBIICR7ZW5kWH0gViAke21pZFl9IFYgJHtlbmRZfWA7XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGNyZWF0ZSBhIHBhdGggd2l0aCBob3Jpem9udGFsIHNlZ21lbnQgZmlyc3QsIHRoZW4gdmVydGljYWwsIHRoZW4gaG9yaXpvbnRhbFxuICAgICAgZWxzZSB7XG4gICAgICAgIHBhdGggPSBgTSAke3N0YXJ0WH0gJHtzdGFydFl9IEggJHtzdGFydFggKyBob3Jpem9udGFsRGlzdCAvIDJcbiAgICAgICAgICB9IFYgJHtlbmRZfSBIICR7ZW5kWH1gO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgdG9wL2JvdHRvbSBwb2ludHMsIHN0YXJ0IHdpdGggdmVydGljYWwgbGluZVxuICAgIGVsc2UgaWYgKHBvaW50VHlwZSA9PT0gJ3RvcCcgfHwgcG9pbnRUeXBlID09PSAnYm90dG9tJykge1xuICAgICAgLy8gQ2FsY3VsYXRlIHZlcnRpY2FsIGRpc3RhbmNlXG4gICAgICBjb25zdCB2ZXJ0aWNhbERpc3QgPSBlbmRZIC0gc3RhcnRZO1xuXG4gICAgICAvLyBJZiB0aGUgZW5kIHBvaW50IGlzIHZlcnkgY2xvc2UgdmVydGljYWxseSwgdXNlIGEgc2ltcGxlIDMtc2VnbWVudCBwYXRoXG4gICAgICBpZiAoTWF0aC5hYnModmVydGljYWxEaXN0KSA8IDMwKSB7XG4gICAgICAgIGNvbnN0IG1pZFggPSAoc3RhcnRYICsgZW5kWCkgLyAyO1xuICAgICAgICBwYXRoID0gYE0gJHtzdGFydFh9ICR7c3RhcnRZfSBWICR7ZW5kWX0gSCAke21pZFh9IEggJHtlbmRYfWA7XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGNyZWF0ZSBhIHBhdGggd2l0aCB2ZXJ0aWNhbCBzZWdtZW50IGZpcnN0LCB0aGVuIGhvcml6b250YWwsIHRoZW4gdmVydGljYWxcbiAgICAgIGVsc2Uge1xuICAgICAgICBwYXRoID0gYE0gJHtzdGFydFh9ICR7c3RhcnRZfSBWICR7c3RhcnRZICsgdmVydGljYWxEaXN0IC8gMlxuICAgICAgICAgIH0gSCAke2VuZFh9IFYgJHtlbmRZfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBzZWxlY3RGb3JtRm9yU3RhZ2UoZm9ybTogRm9ybSB8IG51bGwsIG5vZGU6IE5vZGUpIHtcbiAgICAvLyBJZiBmb3JtIGlzIG51bGwsIHdlJ3JlIGNsZWFyaW5nIHRoZSBzZWxlY3Rpb25cbiAgICBpZiAobm9kZSkge1xuICAgICAgaWYgKCFub2RlLnN0YWdlRGF0YSkge1xuICAgICAgICBub2RlLnN0YWdlRGF0YSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybSkge1xuICAgICAgICBub2RlLnN0YWdlRGF0YS5mb3JtSWQgPSBmb3JtLkNvZGU7XG4gICAgICAgIG5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lID0gZm9ybS5OYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgZm9ybSBzZWxlY3Rpb25cbiAgICAgICAgZGVsZXRlIG5vZGUuc3RhZ2VEYXRhLmZvcm1JZDtcbiAgICAgICAgZGVsZXRlIG5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lO1xuICAgICAgfVxuXG4gICAgICAvLyBFbWl0IGFuIGV2ZW50IHRvIHVwZGF0ZSB0aGUgc3RhZ2UgZGF0YVxuICAgICAgdGhpcy5vblN0YWdlUHJvcGVydGllc1VwZGF0ZWQoe1xuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHN0YWdlRGF0YTogbm9kZS5zdGFnZURhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblN0YWdlUHJvcGVydGllc1VwZGF0ZWQoZXZlbnQ6IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT47XG4gIH0pOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBub2RlIGluIHRoZSBzd2ltbGFuZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzd2ltbGFuZSA9IHRoaXMuc3RhdGUuc3dpbWxhbmVzW2ldO1xuICAgICAgY29uc3Qgbm9kZUluZGV4ID0gc3dpbWxhbmUubm9kZXM/LmZpbmRJbmRleCgobikgPT4gbi5pZCA9PT0gZXZlbnQubm9kZUlkKTtcblxuICAgICAgaWYgKG5vZGVJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5vZGVJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhZ2UgZGF0YVxuICAgICAgICBpZiAoc3dpbWxhbmUubm9kZXMpIHtcbiAgICAgICAgICBzd2ltbGFuZS5ub2Rlc1tub2RlSW5kZXhdLnN0YWdlRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnN3aW1sYW5lLm5vZGVzW25vZGVJbmRleF0uc3RhZ2VEYXRhLFxuICAgICAgICAgICAgLi4uZXZlbnQuc3RhZ2VEYXRhLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAnVXBkYXRlZCBzdGFnZSBkYXRhIGluIHN3aW1sYW5lOicsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgJ25vZGU6JyxcbiAgICAgICAgICAgIG5vZGVJbmRleCxcbiAgICAgICAgICAgICdkYXRhOicsXG4gICAgICAgICAgICBzd2ltbGFuZS5ub2Rlc1tub2RlSW5kZXhdLnN0YWdlRGF0YVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0aW9uQ3JlYXRlZChjb25uZWN0aW9uOiBDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgLy8gQWZ0ZXIgYSBjb25uZWN0aW9uIGlzIGNyZWF0ZWQsIHJlZnJlc2ggdGhlIHNvdXJjZSBub2RlIHRvIHVwZGF0ZSBpdHMgc3RhdGVcbiAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkKTtcbiAgICBpZiAoc291cmNlTm9kZUluZm8gJiYgc291cmNlTm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAvLyBSZWZyZXNoIG5vZGUgc3RhdGVcbiAgICAgIHRoaXMudXBkYXRlTm9kZUNvbm5lY3Rpb25zKHNvdXJjZU5vZGVJbmZvLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gdXBkYXRlIG5vZGUncyBjb25uZWN0aW9uIHN0YXR1c1xuICB1cGRhdGVOb2RlQ29ubmVjdGlvbnMobm9kZTogV0ZOb2RlKTogdm9pZCB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBjb25uZWN0aW9ucyB0aGF0IGNvbm5lY3QgdG8gc3RhZ2VzXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGNvbm4pID0+IGNvbm4uc291cmNlTm9kZUlkID09PSBub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIG5vZGUuaGFzTXVsdGlwbGVDb25uZWN0ZWRTdGFnZXMgPSBjb25uZWN0ZWRTdGFnZU5vZGVzLmxlbmd0aCA+IDE7XG4gICAgbm9kZS5oYXNQYXJhbGxlbFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMuZXZlcnkoXG4gICAgICAobmQpID0+IG5kPy5ub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbFxuICAgICk7XG4gIH1cblxuICBvbkVkaXRTd2ltbGFuZShcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBzd2ltbGFuZTogU3dpbWxhbmVJdGVtLFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gUHJldmVudCB0aGUgY2FudmFzIGNsaWNrIGV2ZW50IGZyb20gZmlyaW5nXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zb2xlLmxvZygnRWRpdCBzd2ltbGFuZSBidXR0b24gY2xpY2tlZCBmb3Igc3dpbWxhbmU6Jywgc3dpbWxhbmVJbmRleCk7XG5cbiAgICAvLyBFbWl0IGEgc3BlY2lhbCBldmVudCBmb3IgZWRpdGluZyBhIHN3aW1sYW5lXG4gICAgdGhpcy5jbGlja2VkUG9zaXRpb24uZW1pdCh7XG4gICAgICB4OiAtMSwgLy8gU3BlY2lhbCB2YWx1ZSB0byBpbmRpY2F0ZSBlZGl0IG1vZGVcbiAgICAgIHk6IHN3aW1sYW5lSW5kZXgsXG4gICAgfSk7XG4gIH1cblxuICAvLyBzaG93U3RhcnROb2RlRm9ybVBvcHVwKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gIC8vICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgLy8gICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAvLyAgIC8vIEltcGxlbWVudGF0aW9uIHdpbGwgYmUgc2ltaWxhciB0byB0aGUgc3RhZ2UgZm9ybSBwb3B1cFxuICAvLyAgIC8vIFdlJ2xsIG5lZWQgdG8gYWRkIFVJIGVsZW1lbnRzIGZvciB0aGlzXG4gIC8vICAgY29uc29sZS5sb2coJ1N0YXJ0IG5vZGUgZm9ybSBwb3B1cCByZXF1ZXN0ZWQnKTtcblxuICAvLyAgIC8vIEZvciBub3csIHRoaXMgaXMgYSBwbGFjZWhvbGRlclxuICAvLyAgIC8vIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gd291bGQgbG9hZCBmb3JtcyBhbmQgYWRkIHRoZW0gdG8gdGhlIHdvcmtmbG93XG4gIC8vIH1cblxuICB0b2dnbGVTdGFydE5vZGVGb3JtUG9wdXAoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgbm9kZVg6IG51bWJlcixcbiAgICBub2RlWTogbnVtYmVyLFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICBub2RlPzogTm9kZVxuICApOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gU2V0IHBvcHVwIHBvc2l0aW9uXG4gICAgY29uc3Qgc3dpbWxhbmVPZmZzZXQgPSBzd2ltbGFuZUluZGV4ICogMjYzO1xuICAgIHRoaXMuc3RhcnROb2RlRm9ybVBvcHVwWCA9IG5vZGVYIC0gKCFub2RlID8gMzAgOiAwKTsgLy8gUG9zaXRpb24gbmVhciB0aGUgc3RhcnQgbm9kZVxuICAgIHRoaXMuc3RhcnROb2RlRm9ybVBvcHVwWSA9IG5vZGVZICsgc3dpbWxhbmVPZmZzZXQ7XG5cbiAgICAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRoZSBwb3B1cCwgbG9hZCBmb3Jtc1xuICAgIGlmICghdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ1N0YXJ0Tm9kZUZvcm1zID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgICAgLmdldEZvcm1zKClcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGFydE5vZGVGb3Jtc0xpc3QgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGFydE5vZGVGb3JtcyA9IGZhbHNlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtczonLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGFydE5vZGVGb3JtcyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgdGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbiA9IG5vZGU7XG4gICAgICBjb25zb2xlLmxvZygnQWN0aXZlIG5vZGUgZm9yIGZvcm0gc2VsZWN0aW9uOicsIG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dTdGFydE5vZGVGb3JtUG9wdXAgPSAhdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwO1xuICB9XG5cbiAgc2VsZWN0U3RhcnROb2RlRm9ybShmb3JtOiBGb3JtIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdEZvcm1Gb3JTdGFnZShmb3JtLCB0aGlzLmFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0Zvcm0oZm9ybS5Db2RlLCBmb3JtLk5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0Zvcm0obnVsbCwgbnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIHBvcHVwXG4gICAgdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwID0gZmFsc2U7XG4gIH1cblxuICBzaG93U3ViZmxvd1NlbGVjdGlvblBvcHVwKHg6IG51bWJlciwgeTogbnVtYmVyLCBzd2ltbGFuZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN1YmZsb3dQb3B1cFggPSB4O1xuICAgIHRoaXMuc3ViZmxvd1BvcHVwWSA9IHk7XG4gICAgdGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uID0geyBzd2ltbGFuZUluZGV4LCB4LCB5IH07XG5cbiAgICAvLyBTdG9yZSBjb25uZWN0aW9uIGRhdGEgaWYgd2UncmUgY3JlYXRpbmcgZnJvbSBhIGNvbm5lY3Rpb25cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpKSB7XG4gICAgICAvLyBTdG9yZSB0aGUgc291cmNlIGNvbm5lY3Rpb24gZGF0YVxuICAgICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50ID8/IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VTd2ltbGFuZUluZGV4ID8/IG51bGw7XG4gICAgICBjb25zb2xlLmxvZygnU3RvcmVkIGNvbm5lY3Rpb24gZGF0YSBmb3Igc3ViZmxvdzonLCB7XG4gICAgICAgIHNvdXJjZVBvaW50OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQsXG4gICAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCB3b3JrZmxvd3NcbiAgICB0aGlzLmlzTG9hZGluZ1dvcmtmbG93cyA9IHRydWU7XG4gICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgLmdldFdvcmtmbG93cygpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NMaXN0ID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgICB0aGlzLmlzTG9hZGluZ1dvcmtmbG93cyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyB3b3JrZmxvd3M6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ1dvcmtmbG93cyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNob3dTdWJmbG93UG9wdXAgPSB0cnVlO1xuICB9XG5cbiAgc2VsZWN0U3ViZmxvd1dvcmtmbG93KHdvcmtmbG93OiBXb3JrZmxvdyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3Rpbmcgd29ya2Zsb3cgZm9yIHN1YmZsb3c6Jywgd29ya2Zsb3cuTmFtZSk7XG4gICAgY29uc29sZS5sb2coJ1BlbmRpbmcgY29ubmVjdGlvbiBkYXRhOicsIHtcbiAgICAgIHNvdXJjZVBvaW50OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQsXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIHBvc2l0aW9uOiB0aGlzLnBlbmRpbmdTdWJmbG93UG9zaXRpb24sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uKSB7XG4gICAgICBjb25zdCB7IHN3aW1sYW5lSW5kZXgsIHgsIHkgfSA9IHRoaXMucGVuZGluZ1N1YmZsb3dQb3NpdGlvbjtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBzdWJmbG93IG5vZGUgd2l0aCB0aGUgc2VsZWN0ZWQgd29ya2Zsb3cgZGF0YVxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgICAgc3dpbWxhbmVJbmRleCxcbiAgICAgICAgJ3N1YmZsb3cnLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICB1bmRlZmluZWQsIC8vIE5vIHN0YWdlIGRhdGFcbiAgICAgICAgeyBpZDogd29ya2Zsb3cuQ29kZSwgbmFtZTogd29ya2Zsb3cuTmFtZSB9XG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBzdWJmbG93IG5vZGU6Jywgbm9kZSk7XG5cbiAgICAgIC8vIElmIHRoaXMgd2FzIGNyZWF0ZWQgZnJvbSBhIGNvbm5lY3Rpb24sIGNyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgaWYgKG5vZGUgJiYgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBjb25uZWN0aW9uIHRvIG5ldyBzdWJmbG93IG5vZGUnKTtcblxuICAgICAgICAvLyBGaW5kIGEgc3VpdGFibGUgY29ubmVjdGlvbiBwb2ludCBvbiB0aGUgbmV3IG5vZGVcbiAgICAgICAgaWYgKG5vZGUuY29ubmVjdGlvblBvaW50cyAmJiBub2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50O1xuXG4gICAgICAgICAgLy8gRmluZCBvcHBvc2luZyB0eXBlIGNvbm5lY3Rpb24gcG9pbnRcbiAgICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgICByaWdodDogJ2xlZnQnLFxuICAgICAgICAgICAgbGVmdDogJ3JpZ2h0JyxcbiAgICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICAgIH1bc291cmNlUG9pbnQudHlwZV0gYXMgJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IG5vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gb3Bwb3NpbmdUeXBlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgICAgICAgICAgc291cmNlTm9kZUlkOiBzb3VyY2VQb2ludC5ub2RlSWQsXG4gICAgICAgICAgICAgIHRhcmdldE5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50LmlkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCEsXG4gICAgICAgICAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgYWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQWRkIGNvbm5lY3Rpb24gZGlyZWN0bHkgdG8gdGhlIHN0YXRlJ3MgY29ubmVjdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBZGRlZCBjb25uZWN0aW9uIHRvIHN0YXRlOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Nvbm5lY3Rpb25zIGFmdGVyIGFkZGluZzonLCB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zKTtcbiAgICAgICAgICAgIHRoaXMub25Db25uZWN0aW9uQ3JlYXRlZChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNldCBzZWxlY3Rpb24gdG9vbCBpbiBwYXJlbnQgY29tcG9uZW50XG4gICAgICB0aGlzLnN1YmZsb3dTZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLnNob3dTdWJmbG93UG9wdXAgPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdTdWJmbG93UG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXggPSBudWxsO1xuICB9XG5cbiAgc2hvd0RlY2lzaW9uQ29uZGl0aW9uc1BvcHVwKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG5vZGU6IFdGTm9kZSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIEdldCB0aGUgcG9zaXRpb24gZm9yIHRoZSBwb3B1cFxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICBjb25zdCBnbG9iYWxYID0gcG9zaXRpb24ueDtcbiAgICBjb25zdCBnbG9iYWxZID0gcG9zaXRpb24ueTtcblxuICAgIC8vIEZpbmQgYWxsIGNvbm5lY3Rpb25zIGZyb20gdGhpcyBkZWNpc2lvbiBub2RlXG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gbm9kZS5pZFxuICAgICk7XG5cbiAgICBpZiAoY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBObyBjb25uZWN0aW9ucyB0byBzaG93XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2hvdyB0aGUgZGVjaXNpb24gY29uZGl0aW9ucyBwb3B1cFxuICAgIHRoaXMuYWN0aXZlRGVjaXNpb25Ob2RlSWQgPSBub2RlLmlkO1xuICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFggPSBnbG9iYWxYO1xuICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFkgPSBnbG9iYWxZO1xuXG4gICAgLy8gU2V0IHRoZSBjb3JyZWN0IHBvcHVwIHZpc2liaWxpdHkgZmxhZyAtIHRoaXMgaXMgbGlrZWx5IHRoZSBpc3N1ZVxuICAgIHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nID0gdHJ1ZTtcblxuICAgIGNvbnNvbGUubG9nKCdTaG93aW5nIGRlY2lzaW9uIHBvcHVwOicsIHtcbiAgICAgIHg6IGdsb2JhbFgsXG4gICAgICB5OiBnbG9iYWxZLFxuICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgaXNWaXNpYmxlOiB0aGlzLnNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZyxcbiAgICB9KTtcbiAgfVxuXG4gIGVuc3VyZVN3aW1sYW5lSW5WaWV3KHN3aW1sYW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGVub3VnaCBzd2ltbGFuZXMgdmlzaWJsZVxuICAgIGNvbnN0IHJlcXVpcmVkSGVpZ2h0ID0gKHN3aW1sYW5lSW5kZXggKyAxKSAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG4gICAgaWYgKHRoaXMuY2FudmFzSGVpZ2h0IDwgcmVxdWlyZWRIZWlnaHQpIHtcbiAgICAgIHRoaXMuY2FudmFzSGVpZ2h0ID0gcmVxdWlyZWRIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGFiZWxQb3NpdGlvbihjb25uZWN0aW9uOiBDb25uZWN0aW9uKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF0aERhdGEgPSB0aGlzLnN0YXRlLmdldENvbm5lY3Rpb25EYXRhKGNvbm5lY3Rpb24pO1xuICAgICAgaWYgKCFwYXRoRGF0YSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBwYXRoIGRhdGEgZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSB9ID0gcGF0aERhdGE7XG5cbiAgICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoY29ubmVjdGlvbi5zb3VyY2VOb2RlSWQpO1xuICAgICAgaWYgKCFzb3VyY2VOb2RlSW5mbykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTb3VyY2Ugbm9kZSBub3QgZm91bmQgZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGU7XG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgICAgKHApID0+IHAuaWQgPT09IGNvbm5lY3Rpb24uc291cmNlUG9pbnRJZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzb3VyY2VQb2ludCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTb3VyY2UgcG9pbnQgbm90IGZvdW5kIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBtaWRwb2ludCBiYXNlZCBvbiB0aGUgY29ubmVjdGlvbiBwb2ludCB0eXBlXG4gICAgICBpZiAoc291cmNlUG9pbnQudHlwZSA9PT0gJ2xlZnQnIHx8IHNvdXJjZVBvaW50LnR5cGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbERpc3QgPSBlbmRYIC0gc3RhcnRYO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsRGlzdCkgPCAzMCkge1xuICAgICAgICAgIC8vIEZvciBzaG9ydCBob3Jpem9udGFsIGNvbm5lY3Rpb25zXG4gICAgICAgICAgY29uc3QgbWlkWSA9IChzdGFydFkgKyBlbmRZKSAvIDI7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHN0YXJ0WCArIChlbmRYIC0gc3RhcnRYKSAvIDIsXG4gICAgICAgICAgICB5OiBtaWRZLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIHJlZ3VsYXIgY29ubmVjdGlvbnMgc3RhcnRpbmcgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgY29uc3QgbWlkWCA9IHN0YXJ0WCArIGhvcml6b250YWxEaXN0IC8gMjtcbiAgICAgICAgICBjb25zdCBtaWRZID0gZW5kWTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogbWlkWCxcbiAgICAgICAgICAgIHk6IChzdGFydFkgKyBlbmRZKSAvIDIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gJ3RvcCcgb3IgJ2JvdHRvbSdcbiAgICAgICAgY29uc3QgdmVydGljYWxEaXN0ID0gZW5kWSAtIHN0YXJ0WTtcblxuICAgICAgICBpZiAoTWF0aC5hYnModmVydGljYWxEaXN0KSA8IDMwKSB7XG4gICAgICAgICAgLy8gRm9yIHNob3J0IHZlcnRpY2FsIGNvbm5lY3Rpb25zXG4gICAgICAgICAgY29uc3QgbWlkWCA9IChzdGFydFggKyBlbmRYKSAvIDI7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pZFggLSA3NSwgLy8gTWludXMgNzUgLSB3aGljaCBpcyBoYWxmIHRoZSB3aWR0aCBvZiB0aGUgbGFiZWwgaXRzZWxmXG4gICAgICAgICAgICB5OiBzdGFydFkgKyAoZW5kWSAtIHN0YXJ0WSkgLyAyLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIHJlZ3VsYXIgY29ubmVjdGlvbnMgc3RhcnRpbmcgdmVydGljYWxseVxuICAgICAgICAgIGNvbnN0IG1pZFggPSBlbmRYO1xuICAgICAgICAgIGNvbnN0IG1pZFkgPSBzdGFydFkgKyB2ZXJ0aWNhbERpc3QgLyAyO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiAoKHN0YXJ0WCArIGVuZFgpIC8gMikgLSA3NSwgLy8gTWludXMgNzUgLSB3aGljaCBpcyBoYWxmIHRoZSB3aWR0aCBvZiB0aGUgbGFiZWwgaXRzZWxmXG4gICAgICAgICAgICB5OiBtaWRZLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0Vycm9yIGNhbGN1bGF0aW5nIGxhYmVsIHBvc2l0aW9uIGZvciBjb25uZWN0aW9uOicsXG4gICAgICAgIGNvbm5lY3Rpb24sXG4gICAgICAgIGVycm9yXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgIH1cbiAgfVxuXG4gIHNhdmVDb25uZWN0aW9uTGFiZWwoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgbGFiZWw6IHN0cmluZykge1xuICAgIC8vIFVwZGF0ZSB0aGUgY29ubmVjdGlvbiBsYWJlbCBpbiB0aGUgc3RhdGVcbiAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zID0gdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5tYXAoKGNvbm4pID0+IHtcbiAgICAgIGlmIChjb25uLmlkID09PSBjb25uZWN0aW9uLmlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29ubixcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gY29ubjtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgPHN2Z1xuICAgICNjYW52YXNcbiAgICBbYXR0ci53aWR0aF09XCJjYW52YXNXaWR0aFwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cImNhbnZhc0hlaWdodFwiXG4gICAgY2xhc3M9XCJkZXNpZ25lci1jYW52YXNcIlxuICAgIChjbGljayk9XCJvbkNhbnZhc0NsaWNrKCRldmVudClcIlxuICA+XG4gICAgPGRlZnM+XG4gICAgICA8IS0tIEdyaWQgcGF0dGVybiBkZWZpbml0aW9uIC0tPlxuXG4gICAgICA8cGF0dGVyblxuICAgICAgICBpZD1cImdyaWRcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJncmlkU2l6ZVwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJncmlkU2l6ZVwiXG4gICAgICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTSAyMCAwIEwgMCAwIDAgMjBcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICBzdHJva2U9XCIjZTJlOGYwXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjVcIlxuICAgICAgICAvPlxuICAgICAgPC9wYXR0ZXJuPlxuXG4gICAgICA8IS0tIEFycm93IGhlYWQgbWFya2VyIGRlZmluaXRpb24gLS0+XG4gICAgICA8bWFya2VyXG4gICAgICAgIGlkPVwiYXJyb3doZWFkXCJcbiAgICAgICAgbWFya2VyV2lkdGg9XCIxMFwiXG4gICAgICAgIG1hcmtlckhlaWdodD1cIjdcIlxuICAgICAgICByZWZYPVwiOVwiXG4gICAgICAgIHJlZlk9XCIzLjVcIlxuICAgICAgICBvcmllbnQ9XCJhdXRvXCJcbiAgICAgID5cbiAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMCAwLCAxMCAzLjUsIDAgN1wiIGZpbGw9XCIjRDM2Q0ZGXCIgLz5cbiAgICAgIDwvbWFya2VyPlxuXG4gICAgICA8IS0tIENvbm5lY3Rpb24gcG9pbnQgc3R5bGVzIC0tPlxuICAgICAgPGNpcmNsZVxuICAgICAgICBpZD1cImNvbm5lY3Rpb24tcG9pbnQtdGVtcGxhdGVcIlxuICAgICAgICByPVwiNVwiXG4gICAgICAgIGZpbGw9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlPVwiI0ZGRkZGRlwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgLz5cblxuICAgICAgPCEtLSBEYXNoZWQgbGluZSBzdHlsZSBmb3IgY29ubmVjdGlvbiBwcmV2aWV3IC0tPlxuICAgICAgPHBhdHRlcm5cbiAgICAgICAgaWQ9XCJkYXNoZWQtbGluZVwiXG4gICAgICAgIHdpZHRoPVwiMTBcIlxuICAgICAgICBoZWlnaHQ9XCIxMFwiXG4gICAgICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgID5cbiAgICAgICAgPGxpbmVcbiAgICAgICAgICB4MT1cIjBcIlxuICAgICAgICAgIHkxPVwiNVwiXG4gICAgICAgICAgeDI9XCIxMFwiXG4gICAgICAgICAgeTI9XCI1XCJcbiAgICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PVwiNSw1XCJcbiAgICAgICAgLz5cbiAgICAgIDwvcGF0dGVybj5cblxuICAgICAgQGZvciAoc3dpbWxhbmUgb2Ygc3RhdGUuc3dpbWxhbmVzOyB0cmFjayBzd2ltbGFuZS5vcmRlcikge1xuICAgICAgPGNsaXBQYXRoIFthdHRyLmlkXT1cIidzd2ltbGFuZS1jbGlwLScgKyBzd2ltbGFuZS5vcmRlclwiPlxuICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIiBoZWlnaHQ9XCIyNjNcIiAvPlxuICAgICAgPC9jbGlwUGF0aD5cbiAgICAgIH1cbiAgICA8L2RlZnM+XG5cbiAgICA8IS0tIEJhY2tncm91bmQgZ3JpZCAtLT5cbiAgICA8cmVjdCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgZmlsbD1cInVybCgjZ3JpZClcIiAvPlxuXG4gICAgPCEtLSBEaXNwbGF5IGEgbWVzc2FnZSB3aGVuIG5vIHN3aW1sYW5lcyBleGlzdCAtLT5cbiAgICBAaWYgKHN0YXRlLnN3aW1sYW5lcy5sZW5ndGggPT09IDApIHtcbiAgICA8dGV4dFxuICAgICAgeD1cIjUwJVwiXG4gICAgICB5PVwiNTAlXCJcbiAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICBmb250LXNpemU9XCIxNlwiXG4gICAgICBmaWxsPVwiIzk0YTNiOFwiXG4gICAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgPlxuICAgICAgU2VsZWN0IHRoZSBTd2ltbGFuZSB0b29sIGFuZCBjbGljayBvbiB0aGUgY2FudmFzIHRvIGFkZCBhIHN3aW1sYW5lXG4gICAgPC90ZXh0PlxuICAgIH1cblxuICAgIDwhLS0gVGhpcyBpcyB3aGVyZSB3b3JrZmxvdyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIGxhdGVyIC0tPlxuICAgIEBmb3IgKHN3aW1sYW5lIG9mIHN0YXRlLnN3aW1sYW5lczsgdHJhY2sgc3dpbWxhbmUub3JkZXIpIHtcbiAgICA8IS0tIDxnXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgwLCcgKyBzd2ltbGFuZS5vcmRlciAqIDI2MyArICcpJ1wiXG4gICAgICBbYXR0ci5jbGlwLXBhdGhdPVwiJ3VybCgjc3dpbWxhbmUtY2xpcC0nICsgc3dpbWxhbmUub3JkZXIgKyAnKSdcIlxuICAgID5cbiAgICAgIDxyZWN0XG4gICAgICAgIHg9XCIwXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJjYW52YXNXaWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCIyNjNcIlxuICAgICAgICBmaWxsPVwiI2ZmZmZmZlwiXG4gICAgICAgIHN0cm9rZT1cIiNlMmU4ZjBcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgID48L3JlY3Q+XG5cbiAgICAgIDxyZWN0XG4gICAgICAgIHg9XCIwXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJjYW52YXNXaWR0aFwiXG4gICAgICAgIGhlaWdodD1cIjQwXCJcbiAgICAgICAgZmlsbD1cIiNmOGZhZmNcIlxuICAgICAgICBzdHJva2U9XCIjZTJlOGYwXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICA+PC9yZWN0PlxuXG4gICAgICA8dGV4dFxuICAgICAgICB4PVwiMjBcIlxuICAgICAgICB5PVwiMjVcIlxuICAgICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgICBmb250LXNpemU9XCIxNFwiXG4gICAgICAgIGZpbGw9XCIjMzMzMzMzXCJcbiAgICAgICAgZm9udC13ZWlnaHQ9XCJib2xkXCJcbiAgICAgID5cbiAgICAgICAge3sgc3dpbWxhbmUubGFiZWwgfX1cbiAgICAgIDwvdGV4dD5cblxuICAgICAgPGdcbiAgICAgICAgY2xhc3M9XCJlZGl0LXN3aW1sYW5lLWJ1dHRvblwiXG4gICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKDEwMCwgMjApJ1wiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICBvbkVkaXRTd2ltbGFuZSgkZXZlbnQsIHN3aW1sYW5lLCBzd2ltbGFuZS5vcmRlcik7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxyZWN0XG4gICAgICAgICAgeD1cIi01XCJcbiAgICAgICAgICB5PVwiLTE1XCJcbiAgICAgICAgICB3aWR0aD1cIjQwXCJcbiAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgZmlsbD1cIiNmM2U4ZmZcIlxuICAgICAgICAgIHJ4PVwiM1wiXG4gICAgICAgICAgcnk9XCIzXCJcbiAgICAgICAgICBzdHJva2U9XCIjZDhiNGZlXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgPHRleHRcbiAgICAgICAgICB4PVwiMTVcIlxuICAgICAgICAgIHk9XCIwXCJcbiAgICAgICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjEyXCJcbiAgICAgICAgICBmaWxsPVwiIzdlMjJjZVwiXG4gICAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICA+XG4gICAgICAgICAgRWRpdFxuICAgICAgICA8L3RleHQ+XG4gICAgICA8L2c+XG5cbiAgICAgIDxnIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKDIwMCwgMjApJ1wiPlxuICAgICAgICBAZm9yICh0YWcgb2Ygc3dpbWxhbmUudGFncy5zbGljZSgwLCAzKTsgdHJhY2sgdGFnLk5hbWU7IGxldCBpID0gJGluZGV4KVxuICAgICAgICB7XG4gICAgICAgIDx0ZXh0XG4gICAgICAgICAgW2F0dHIueF09XCJpICogMTAwXCJcbiAgICAgICAgICB5PVwiNVwiXG4gICAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgICBmb250LXNpemU9XCIxMlwiXG4gICAgICAgICAgZmlsbD1cIiM2NjY2NjZcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGFnLk5hbWUgfX1cbiAgICAgICAgPC90ZXh0PlxuICAgICAgICB9IEBpZiAoc3dpbWxhbmUudGFncy5sZW5ndGggPiAzKSB7XG4gICAgICAgIDx0ZXh0XG4gICAgICAgICAgW2F0dHIueF09XCIzICogMTAwICsgMTBcIlxuICAgICAgICAgIHk9XCI1XCJcbiAgICAgICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjEyXCJcbiAgICAgICAgICBmaWxsPVwiIzY2NjY2NlwiXG4gICAgICAgID5cbiAgICAgICAgICAre3sgc3dpbWxhbmUudGFncy5sZW5ndGggLSAzIH19IG1vcmVcbiAgICAgICAgPC90ZXh0PlxuICAgICAgICB9XG4gICAgICA8L2c+XG4gICAgPC9nPiAtLT5cblxuICAgIDxnIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKDAsJyArIHN3aW1sYW5lLm9yZGVyICogMjYzICsgJyknXCI+XG4gICAgICA8IS0tIFN3aW1sYW5lIGNvbnRhaW5lciAtIHJlbW92ZSBzdHJva2UgdG8gbWFrZSBpdCBwdXJlbHkgYmFja2dyb3VuZCAtLT5cbiAgICAgIDxyZWN0XG4gICAgICAgIHg9XCIwXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJjYW52YXNXaWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCIyNjNcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInN3aW1sYW5lLm9yZGVyICUgMiA9PT0gMCA/ICcjRkNGM0ZGJyA6ICcjRUNGRkY1J1wiXG4gICAgICAgIHN0cm9rZT1cIm5vbmVcIlxuICAgICAgPjwvcmVjdD5cblxuICAgICAgPCEtLSBWZXJ0aWNhbCBzd2ltbGFuZSBsYWJlbCBvbiB0aGUgbGVmdCAtLT5cbiAgICAgIDxnIGNsYXNzPVwic3dpbWxhbmUtbGFiZWxcIj5cbiAgICAgICAgPCEtLSBQdXJwbGUgYmFja2dyb3VuZCBmb3IgdGhlIGxhYmVsIC0tPlxuICAgICAgICA8cmVjdFxuICAgICAgICAgIHg9XCIwLjVcIlxuICAgICAgICAgIHk9XCIwLjVcIlxuICAgICAgICAgIHdpZHRoPVwiNDNcIlxuICAgICAgICAgIGhlaWdodD1cIjIxNVwiXG4gICAgICAgICAgcng9XCIxMC41XCJcbiAgICAgICAgICBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICA+PC9yZWN0PlxuXG4gICAgICAgIDwhLS0gUGx1cyBidXR0b24gYXQgdGhlIHRvcCAtLT5cbiAgICAgICAgPGdcbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICBvbkVkaXRTd2ltbGFuZSgkZXZlbnQsIHN3aW1sYW5lLCBzd2ltbGFuZS5vcmRlcik7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgIHg9XCIxMi41XCJcbiAgICAgICAgICAgIHk9XCIxMFwiXG4gICAgICAgICAgICB3aWR0aD1cIjE4XCJcbiAgICAgICAgICAgIGhlaWdodD1cIjE4XCJcbiAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgPjwvcmVjdD5cblxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTIyLjUyIDEyLjE3NFYxNy4wOEgyNy40N1YxOC41MUgyMi41MlYyMy4zOTRIMjEuMlYxOC41MUgxNi4yNVYxNy4wOEgyMS4yVjEyLjE3NEgyMi41MlpcIlxuICAgICAgICAgICAgZmlsbD1cIiMwMDAwRkZcIlxuICAgICAgICAgICAgY2xhc3M9XCJwbHVzLWljb25cIlxuICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgID48L3BhdGg+XG4gICAgICAgIDwvZz5cblxuICAgICAgICA8IS0tIFN3aW1sYW5lIGxhYmVsIC0tPlxuICAgICAgICA8dGV4dFxuICAgICAgICAgIHg9XCIyMlwiXG4gICAgICAgICAgeT1cIjEwNlwiXG4gICAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgICBmb250LXNpemU9XCIxNFwiXG4gICAgICAgICAgZmlsbD1cIiMzMzMzMzNcIlxuICAgICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTkwLCAyMiwgMTAwKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgc3dpbWxhbmUubGFiZWwubGVuZ3RoID4gMTJcbiAgICAgICAgICAgICAgPyBzd2ltbGFuZS5sYWJlbC5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgICAgICAgICAgICA6IHN3aW1sYW5lLmxhYmVsXG4gICAgICAgICAgfX1cbiAgICAgICAgPC90ZXh0PlxuXG4gICAgICAgIDwhLS0gVGFnIGNvdW50IGluZGljYXRvciBhdCB0aGUgYm90dG9tIC0tPlxuICAgICAgICA8cmVjdFxuICAgICAgICAgIHg9XCIxMS41XCJcbiAgICAgICAgICB5PVwiMTg3XCJcbiAgICAgICAgICB3aWR0aD1cIjIxXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxOVwiXG4gICAgICAgICAgcng9XCI5LjVcIlxuICAgICAgICAgIGZpbGw9XCIjOUU5RTlFXCJcbiAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgPHRleHRcbiAgICAgICAgICB4PVwiMjRcIlxuICAgICAgICAgIHk9XCIyMDZcIlxuICAgICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgICAgZm9udC1zaXplPVwiMTJcIlxuICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgtOTAsIDIyLCAyMDApXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHN3aW1sYW5lLnRhZ3MubGVuZ3RoIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvZz5cbiAgICA8L2c+XG5cbiAgICB9XG5cbiAgICA8IS0tIE5vZGVzIC0tPlxuICAgIEBmb3IgKHN3aW1sYW5lIG9mIHN0YXRlLnN3aW1sYW5lczsgdHJhY2sgc3dpbWxhbmUub3JkZXIpIHtcbiAgICA8IS0tIFJlbmRlciBub2RlcyBpbiB0aGlzIHN3aW1sYW5lIC0tPlxuICAgIEBmb3IgKG5vZGUgb2Ygc3dpbWxhbmUubm9kZXM7IHRyYWNrIG5vZGUuaWQpIHtcbiAgICA8Z1xuICAgICAgY2xhc3M9XCJub2RlLWVsZW1lbnRcIlxuICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgICAndHJhbnNsYXRlKCcgKyBub2RlLnggKyAnLCcgKyAobm9kZS55IC0gc3dpbWxhbmUub3JkZXIgKiAyNjMpICsgJyknXG4gICAgICBcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwic2hvd0Nvbm5lY3Rpb25Qb2ludHMobm9kZS5pZCwgc3dpbWxhbmUub3JkZXIpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cImhpZGVDb25uZWN0aW9uUG9pbnRzKG5vZGUuaWQpXCJcbiAgICA+XG4gICAgICA8IS0tIFN0YXJ0IG5vZGUgaW5kaWNhdG9yIChjaXJjbGUgYW5kIGFycm93KSBmb3IgdGhlIGZpcnN0IG5vZGUgLS0+XG4gICAgICBAaWYgKG5vZGUuaXNTdGFydE5vZGUpIHtcbiAgICAgIDwhLS0gQ2lyY2xlIC0tPlxuICAgICAgPGNpcmNsZVxuICAgICAgICBjeD1cIi01MFwiXG4gICAgICAgIGN5PVwiNTBcIlxuICAgICAgICByPVwiMzBcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgID48L2NpcmNsZT5cbiAgICAgIDwhLS0gRm9ybSBpY29uIGZvciBzdGFydCBub2RlIC0tPlxuICAgICAgPHN2ZzpnXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICB0b2dnbGVTdGFydE5vZGVGb3JtUG9wdXAoJGV2ZW50LCBub2RlLngsIG5vZGUueSwgc3dpbWxhbmUub3JkZXIpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNDUsIDQyKVwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBwb2ludGVyLWV2ZW50czogYWxsXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgICAgIDxzdmc6cmVjdFxuICAgICAgICAgIHg9XCItMlwiXG4gICAgICAgICAgeT1cIi0yXCJcbiAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzdmc6cGF0aFxuICAgICAgICAgIGQ9XCJNMTYuNSAyMC40NzVWMTcuNDc1SDEzLjVWMTYuNDc1SDE2LjVWMTMuNDc1SDE3LjVWMTYuNDc1SDIwLjVWMTcuNDc1SDE3LjVWMjAuNDc1SDE2LjVaTTMuNSAxNy41VjE2LjVINC41VjE3LjVIMy41Wk02LjUgMTcuNVYxNi41SDExLjUxN0MxMS41MDU3IDE2LjY3NjcgMTEuNTA0MyAxNi44NDUgMTEuNTEzIDE3LjAwNUMxMS41MjEgMTcuMTY1IDExLjUzMSAxNy4zMyAxMS41NDMgMTcuNUg2LjVaTTMuNSAxMy41VjEyLjVINC41VjEzLjVIMy41Wk02LjUgMTMuNVYxMi41SDEzLjgwNEMxMy42MTI3IDEyLjYzODcgMTMuNDMzMyAxMi43OTEzIDEzLjI2NiAxMi45NThDMTMuMDk5MyAxMy4xMjQ3IDEyLjkzNzcgMTMuMzA1MyAxMi43ODEgMTMuNUg2LjVaTTMuNSA5LjVWOC41SDQuNVY5LjVIMy41Wk02LjUgOS41VjguNUgxOC41VjkuNUg2LjVaTTMuNSA1LjVWNC41SDQuNVY1LjVIMy41Wk02LjUgNS41VjQuNUgxOC41VjUuNUg2LjVaXCJcbiAgICAgICAgICBbYXR0ci5maWxsXT1cInN0YXRlLndvcmtmbG93Rm9ybUlkID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiXG4gICAgICAgICAgdHJhbnNmb3JtPVwic2NhbGUoMC43KVwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2ZzpnPlxuICAgICAgPCEtLSBBcnJvdyBmcm9tIGNpcmNsZSB0byBub2RlIC0tPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0gLTIwIDUwIEwgMCA1MFwiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgbWFya2VyLWVuZD1cInVybCgjYXJyb3doZWFkKVwiXG4gICAgICA+PC9wYXRoPlxuICAgICAgfVxuXG4gICAgICA8IS0tIEV4aXQgcG9pbnQgaW5kaWNhdG9yIChjaXJjbGUgYW5kIGFycm93KSAtLT5cbiAgICAgIEBpZiAobm9kZS5zdGFnZURhdGE/LklzRXhpdFBvaW50KSB7XG4gICAgICA8IS0tIEFycm93IGZyb20gbm9kZSB0byBjaXJjbGUgLS0+XG4gICAgICA8cGF0aFxuICAgICAgICBbYXR0ci5kXT1cIidNICcgKyBub2RlLndpZHRoICsgJyA1MCBMICcgKyAobm9kZS53aWR0aCArIDIwKSArICcgNTAnXCJcbiAgICAgICAgc3Ryb2tlPVwiI0QzNkNGRlwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICBtYXJrZXItZW5kPVwidXJsKCNhcnJvd2hlYWQpXCJcbiAgICAgID48L3BhdGg+XG4gICAgICA8IS0tIENpcmNsZSAtLT5cbiAgICAgIDxjaXJjbGVcbiAgICAgICAgW2F0dHIuY3hdPVwibm9kZS53aWR0aCArIDUwXCJcbiAgICAgICAgY3k9XCI1MFwiXG4gICAgICAgIHI9XCIzMFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlPVwiI0QzNkNGRlwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgPjwvY2lyY2xlPlxuICAgICAgfVxuXG4gICAgICA8IS0tIFN0YWdlIG5vZGUgLS0+XG4gICAgICBAaWYgKG5vZGUudHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgPCEtLSA8cmVjdFxuICAgICAgICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwibm9kZS53aWR0aFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwibm9kZS5oZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0QzNkNGRlwiXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgICAgICAgICA+PC9yZWN0PiAtLT5cbiAgICAgIDxzdmc6Z1xuICAgICAgICBsaWItc3RhZ2Utbm9kZVxuICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgW2lzU3RhcnROb2RlXT1cIm5vZGUuaXNTdGFydE5vZGVcIlxuICAgICAgICAoc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZCk9XCJvblN0YWdlUHJvcGVydGllc1VwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChzaG93U2hpZWxkRGlhbG9nKT1cIm9uU2hvd1NoaWVsZERpYWxvZygkZXZlbnQpXCJcbiAgICAgICAgKHNob3dFc2NhbGF0aW9uRGlhbG9nKT1cIm9uU2hvd0VzY2FsYXRpb25EaWFsb2coJGV2ZW50KVwiXG4gICAgICAgIChzaG93Rm9ybURpYWxvZyk9XCJcbiAgICAgICAgICB0b2dnbGVTdGFydE5vZGVGb3JtUG9wdXAoJGV2ZW50LCBub2RlLngsIG5vZGUueSwgc3dpbWxhbmUub3JkZXIsIG5vZGUpXG4gICAgICAgIFwiXG4gICAgICA+PC9zdmc6Zz5cbiAgICAgIH1cblxuICAgICAgPCEtLSBEZWNpc2lvbiBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdkZWNpc2lvbicpIHtcbiAgICAgIDxwYXRoXG4gICAgICAgIFthdHRyLmRdPVwiXG4gICAgICAgICAgJ00gMCAnICtcbiAgICAgICAgICBub2RlLmhlaWdodCAvIDIgK1xuICAgICAgICAgICcgTCAnICtcbiAgICAgICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAgICAgJyAwJyArXG4gICAgICAgICAgJyBMICcgK1xuICAgICAgICAgIG5vZGUud2lkdGggK1xuICAgICAgICAgICcgJyArXG4gICAgICAgICAgbm9kZS5oZWlnaHQgLyAyICtcbiAgICAgICAgICAnIEwgJyArXG4gICAgICAgICAgbm9kZS53aWR0aCAvIDIgK1xuICAgICAgICAgICcgJyArXG4gICAgICAgICAgbm9kZS5oZWlnaHQgK1xuICAgICAgICAgICcgWidcbiAgICAgICAgXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICA+PC9wYXRoPlxuXG4gICAgICA8IS0tIERlY2lzaW9uIG5vZGUgY29uZGl0aW9uIGluZGljYXRvciBpY29uIC0tPlxuICAgICAgPHN2ZzpnXG4gICAgICAgIChjbGljayk9XCJzaG93RGVjaXNpb25Db25kaXRpb25zUG9wdXAoJGV2ZW50LCBub2RlLCBzd2ltbGFuZS5vcmRlcilcIlxuICAgICAgICBjbGFzcz1cImRlY2lzaW9uLWNvbmRpdGlvbi1pY29uXCJcbiAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgICAgICd0cmFuc2xhdGUoJyArXG4gICAgICAgICAgKG5vZGUud2lkdGggLyAyIC0gMTApICtcbiAgICAgICAgICAnLCcgK1xuICAgICAgICAgIChub2RlLmhlaWdodCAvIDIgLSAxMCkgK1xuICAgICAgICAgICcpJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3ZnOnJlY3RcbiAgICAgICAgICB4PVwiLTVcIlxuICAgICAgICAgIHk9XCItNVwiXG4gICAgICAgICAgd2lkdGg9XCIzMFwiXG4gICAgICAgICAgaGVpZ2h0PVwiMzBcIlxuICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAvPlxuICAgICAgICA8c3ZnOnBhdGhcbiAgICAgICAgICBkPVwiTTEwIDBIMjBWMkgxMFYwWk0xMCA4SDIwVjEwSDEwVjhaTTEwIDRIMjBWNkgxMFY0Wk0wIDBIOFYySDBWMFpNMCA4SDhWMTBIMFY4Wk0wIDRIOFY2SDBWNFpcIlxuICAgICAgICAgIGZpbGw9XCIjRDM2Q0ZGXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnOmc+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRm9ybSBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdmb3JtJykge1xuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk05NS4wNjI1IDUwLjU1OTFWOTUuMDYyNUM5NS4wNjI1IDk3Ljk3MTYgOTMuOTA2OSAxMDAuNzYyIDkxLjg0OTggMTAyLjgxOUM4OS43OTI4IDEwNC44NzYgODcuMDAyOCAxMDYuMDMxIDg0LjA5MzggMTA2LjAzMUgzMi45MDYyQzI5Ljk5NzIgMTA2LjAzMSAyNy4yMDcyIDEwNC44NzYgMjUuMTUwMiAxMDIuODE5QzIzLjA5MzEgMTAwLjc2MiAyMS45Mzc1IDk3Ljk3MTYgMjEuOTM3NSA5NS4wNjI1VjIxLjkzNzVDMjEuOTM3NSAxOS4wMjg0IDIzLjA5MzEgMTYuMjM4NSAyNS4xNTAyIDE0LjE4MTRDMjcuMjA3MiAxMi4xMjQ0IDI5Ljk5NzIgMTAuOTY4OCAzMi45MDYyIDEwLjk2ODhINTUuNDcyMkM1Ny40MTA5IDEwLjk2OSA1OS4yNzAxIDExLjczOTIgNjAuNjQxMiAxMy4xMDk5TDkyLjkyMTMgNDUuMzkwMUM5NC4yOTIgNDYuNzYxMSA5NS4wNjIyIDQ4LjYyMDQgOTUuMDYyNSA1MC41NTkxWlwiXG4gICAgICAgIHRyYW5zZm9ybT1cInNjYWxlKDAuNylcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk01OC41IDEyLjc5NjlWNDAuMjE4OEM1OC41IDQyLjE1ODEgNTkuMjcwNCA0NC4wMTgxIDYwLjY0MTggNDUuMzg5NUM2Mi4wMTMxIDQ2Ljc2MDggNjMuODczMSA0Ny41MzEyIDY1LjgxMjUgNDcuNTMxMkg5My4yMzQ0XCJcbiAgICAgICAgdHJhbnNmb3JtPVwic2NhbGUoMC43KVwiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgLz5cbiAgICAgIDx0ZXh0XG4gICAgICAgIHg9XCI1MCVcIlxuICAgICAgICB5PVwiNTAlXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICBkb21pbmFudC1iYXNlbGluZT1cIm1pZGRsZVwiXG4gICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgIGZvbnQtc2l6ZT1cIjE0XCJcbiAgICAgICAgZmlsbD1cIiNEMzZDRkZcIlxuICAgICAgPlxuICAgICAgICBGb3JtXG4gICAgICA8L3RleHQ+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU3ViZmxvdyBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgPHBhdGhcbiAgICAgICAgW2F0dHIuZF09XCJcbiAgICAgICAgICAnTSAxICcgK1xuICAgICAgICAgIG5vZGUuaGVpZ2h0IC8gNCArXG4gICAgICAgICAgJyBMICcgK1xuICAgICAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICAgICAnIDEgTCAnICtcbiAgICAgICAgICAobm9kZS53aWR0aCAtIDEpICtcbiAgICAgICAgICAnICcgK1xuICAgICAgICAgIG5vZGUuaGVpZ2h0IC8gNCArXG4gICAgICAgICAgJyBWICcgK1xuICAgICAgICAgIChub2RlLmhlaWdodCAqIDMpIC8gNCArXG4gICAgICAgICAgJyBMICcgK1xuICAgICAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICAgICAnICcgK1xuICAgICAgICAgIChub2RlLmhlaWdodCAtIDEpICtcbiAgICAgICAgICAnIEwgMSAnICtcbiAgICAgICAgICAobm9kZS5oZWlnaHQgKiAzKSAvIDQgK1xuICAgICAgICAgICcgWidcbiAgICAgICAgXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICA+PC9wYXRoPlxuICAgICAgPHRleHRcbiAgICAgICAgW2F0dHIueF09XCJub2RlLndpZHRoIC8gMlwiXG4gICAgICAgIFthdHRyLnldPVwibm9kZS5oZWlnaHQgLyAyXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICBhbGlnbm1lbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgICBmb250LXNpemU9XCIxMFwiXG4gICAgICAgIGZpbGw9XCIjMDAwMDAwXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBMaW1pdCB0ZXh0IGxlbmd0aCAtLT5cbiAgICAgICAge3tcbiAgICAgICAgICAobm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgXCJTdWJmbG93XCIpLmxlbmd0aCA+IDEyXG4gICAgICAgICAgICA/IChub2RlLndvcmtmbG93RGF0YT8ubmFtZSB8fCBcIlN1YmZsb3dcIikuc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICAgICAgICAgIDogbm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgXCJTdWJmbG93XCJcbiAgICAgICAgfX1cbiAgICAgIDwvdGV4dD5cbiAgICAgIH1cblxuICAgICAgPCEtLSBDb25uZWN0aW9uIHBvaW50cyBmb3IgdGhpcyBub2RlIC0tPlxuICAgICAgQGZvciAocG9pbnQgb2Ygbm9kZS5jb25uZWN0aW9uUG9pbnRzIHx8IFtdOyB0cmFjayBwb2ludC5pZCkgeyBAaWZcbiAgICAgIChpc0Nvbm5lY3Rpb25Qb2ludFZpc2libGUobm9kZS5pZCkpIHtcbiAgICAgIDx1c2VcbiAgICAgICAgW2F0dHIuaHJlZl09XCInI2Nvbm5lY3Rpb24tcG9pbnQtdGVtcGxhdGUnXCJcbiAgICAgICAgW2F0dHIueF09XCJwb2ludC54XCJcbiAgICAgICAgW2F0dHIueV09XCJwb2ludC55XCJcbiAgICAgICAgW2F0dHIuaWRdPVwicG9pbnQuaWRcIlxuICAgICAgICAobW91c2Vkb3duKT1cInN0YXJ0Q29ubmVjdGlvbkRyYWcoJGV2ZW50LCBwb2ludCwgc3dpbWxhbmUub3JkZXIpXCJcbiAgICAgIC8+XG4gICAgICB9IH1cbiAgICA8L2c+XG4gICAgPCEtLSBBIHRyYW5zcGFyZW50IGhvdmVyIGFyZWEgZm9yIGltcHJvdmVkIGhvdmVyIGRldGVjdGlvbiAtLT5cbiAgICA8cmVjdFxuICAgICAgW2F0dHIueF09XCJub2RlLnggLSAxMFwiXG4gICAgICBbYXR0ci55XT1cIm5vZGUueSAtIDEwXCJcbiAgICAgIFthdHRyLndpZHRoXT1cIm5vZGUud2lkdGggKyAyMFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwibm9kZS5oZWlnaHQgKyAyMFwiXG4gICAgICBmaWxsPVwidHJhbnNwYXJlbnRcIlxuICAgICAgKG1vdXNlb3Zlcik9XCJzaG93Q29ubmVjdGlvblBvaW50cyhub2RlLmlkLCBzd2ltbGFuZS5vcmRlcilcIlxuICAgICAgKG1vdXNlb3V0KT1cImhpZGVDb25uZWN0aW9uUG9pbnRzKG5vZGUuaWQpXCJcbiAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmVcIlxuICAgIC8+XG4gICAgfSB9XG5cbiAgICA8IS0tIENvbm5lY3Rpb25zIC0tPlxuICAgIEBmb3IgKGNvbm5lY3Rpb24gb2Ygc3RhdGUuY29ubmVjdGlvbnM7IHRyYWNrIGNvbm5lY3Rpb24uaWQpIHtcbiAgICA8ZyBjbGFzcz1cImNvbm5lY3Rpb24tZWxlbWVudFwiPlxuICAgICAgPHBhdGhcbiAgICAgICAgW2F0dHIuZF09XCJnZXRDb25uZWN0aW9uUGF0aEZvclNhdmVkQ29ubmVjdGlvbihjb25uZWN0aW9uKVwiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBtYXJrZXItZW5kPVwidXJsKCNhcnJvd2hlYWQpXCJcbiAgICAgID48L3BhdGg+XG5cbiAgICAgIDwhLS0gQ29ubmVjdGlvbiBMYWJlbCAtLT5cbiAgICAgIEBpZiAoY29ubmVjdGlvbi5zb3VyY2VOb2RlSWQgJiYgY29ubmVjdGlvbi50YXJnZXROb2RlSWQpIHtcbiAgICAgIDxmb3JlaWduT2JqZWN0XG4gICAgICAgIFthdHRyLnhdPVwiZ2V0TGFiZWxQb3NpdGlvbihjb25uZWN0aW9uKS54XCJcbiAgICAgICAgW2F0dHIueV09XCJnZXRMYWJlbFBvc2l0aW9uKGNvbm5lY3Rpb24pLnlcIlxuICAgICAgICB3aWR0aD1cIjE1MFwiXG4gICAgICAgIGhlaWdodD1cIjQwXCJcbiAgICAgICAgc3R5bGU9XCJvdmVyZmxvdzogdmlzaWJsZTsgcG9pbnRlci1ldmVudHM6IGFsbDtcIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgtNzUsIC0xMCknXCJcbiAgICAgID5cbiAgICAgICAgPHdmLWxhYmVsLWVkaXRvclxuICAgICAgICAgIFtsYWJlbF09XCJjb25uZWN0aW9uLmxhYmVsIHx8ICdOZXcgQWN0aW9uJ1wiXG4gICAgICAgICAgW3hdPVwiMFwiXG4gICAgICAgICAgW3ldPVwiMFwiXG4gICAgICAgICAgW2lzQ29ubmVjdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAobGFiZWxDaGFuZ2UpPVwic2F2ZUNvbm5lY3Rpb25MYWJlbChjb25uZWN0aW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAob3BlbkRpYWxvZyk9XCJvblNob3dBY3Rpb25EaWFsb2coY29ubmVjdGlvbilcIlxuICAgICAgICAvPlxuICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgfVxuICAgIDwvZz5cbiAgICB9XG5cbiAgICA8IS0tIENvbm5lY3Rpb24gcHJldmlldyBsaW5lIC0tPlxuICAgIEBpZiAoc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgIDxnPlxuICAgICAgPHBhdGhcbiAgICAgICAgW2F0dHIuZF09XCJnZXRDb25uZWN0aW9uUGF0aCgpXCJcbiAgICAgICAgc3Ryb2tlPVwiI0QzNkNGRlwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICBzdHJva2UtZGFzaGFycmF5PVwiNSw1XCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgPjwvcGF0aD5cbiAgICA8L2c+XG4gICAgfVxuICA8L3N2Zz5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJwb3B1cFZpc2libGVcIlxuICAgIFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJwb3B1cFhcIlxuICAgIFtzdHlsZS50b3AucHhdPVwicG9wdXBZXCJcbiAgPlxuICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICBbZHJvcGRvd25PcGVuXT1cInRydWVcIlxuICAgICAgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCJcbiAgICAgIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCJcbiAgICAgIChkcm9wZG93bk9wZW5DaGFuZ2UpPVwiJGV2ZW50ID8gbnVsbCA6IGhpZGVDb25uZWN0aW9uUG9wdXAoKVwiXG4gICAgPlxuICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICA8IS0tIEhpZGRlbiB0cmlnZ2VyIGVsZW1lbnQgLS0+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwLTMgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHNoYWRvdy1tZFwiXG4gICAgICAgIGRyb3Bkb3duLWNvbnRlbnRcbiAgICAgID5cbiAgICAgICAgPGg0IGNsYXNzPVwibWItMiBmb250LW1lZGl1bVwiPkNyZWF0ZSBDb25uZWN0aW9uPC9oND5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mIGFsbG93ZWROb2RlVHlwZXNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVOb2RlQ29ubmVjdGlvbih0eXBlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENyZWF0ZSB7eyB0eXBlIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBob3ZlcjpiZy1ncmF5LTUwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoaWRlQ29ubmVjdGlvblBvcHVwKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cFwiXG4gICAgW3N0eWxlLnBvc2l0aW9uXT1cIidhYnNvbHV0ZSdcIlxuICAgIFtzdHlsZS5sZWZ0LnB4XT1cInN0YXJ0Tm9kZUZvcm1Qb3B1cFhcIlxuICAgIFtzdHlsZS50b3AucHhdPVwic3RhcnROb2RlRm9ybVBvcHVwWVwiXG4gID5cbiAgICA8dmVyYmVuLXBvcC1VcCBbZHJvcGRvd25PcGVuXT1cInRydWVcIiBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnMTAwJyB9XCI+XG4gICAgICA8ZGl2IGRyb3Bkb3duLXRyaWdnZXIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICAgIDwhLS0gSGlkZGVuIHRyaWdnZXIgZWxlbWVudCAtLT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInAtMyBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgc2hhZG93LW1kIHctNjRcIlxuICAgICAgICBkcm9wZG93bi1jb250ZW50XG4gICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHotaW5kZXg6IDEwMDBcIlxuICAgICAgPlxuICAgICAgICA8aDQgY2xhc3M9XCJtYi0yIGZvbnQtbWVkaXVtXCI+U2VsZWN0IFdvcmtmbG93IEZvcm08L2g0PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nU3RhcnROb2RlRm9ybXNcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTJcIj5cbiAgICAgICAgICBMb2FkaW5nIGZvcm1zLi4uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1N0YXJ0Tm9kZUZvcm1zXCIgY2xhc3M9XCJtYXgtaC00OCBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U3RhcnROb2RlRm9ybShudWxsKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsZWFyIGZvcm0gc2VsZWN0aW9uXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmb3JtIG9mIHN0YXJ0Tm9kZUZvcm1zTGlzdFwiIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U3RhcnROb2RlRm9ybShmb3JtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGZvcm0uTmFtZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJzdGFydE5vZGVGb3Jtc0xpc3QubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMiB0ZXh0LWdyYXktNTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBObyBmb3JtcyBhdmFpbGFibGVcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dTdWJmbG93UG9wdXBcIlxuICAgIFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJzdWJmbG93UG9wdXBYXCJcbiAgICBbc3R5bGUudG9wLnB4XT1cInN1YmZsb3dQb3B1cFlcIlxuICA+XG4gICAgPHZlcmJlbi1wb3AtVXAgW2Ryb3Bkb3duT3Blbl09XCJ0cnVlXCIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzEwMCcgfVwiPlxuICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICA8IS0tIEhpZGRlbiB0cmlnZ2VyIGVsZW1lbnQgLS0+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwLTMgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHNoYWRvdy1tZCB3LTY0XCJcbiAgICAgICAgZHJvcGRvd24tY29udGVudFxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiAxMDAwXCJcbiAgICAgID5cbiAgICAgICAgPGg0IGNsYXNzPVwibWItMiBmb250LW1lZGl1bVwiPlNlbGVjdCBXb3JrZmxvdzwvaDQ+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdXb3JrZmxvd3NcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTJcIj5cbiAgICAgICAgICBMb2FkaW5nIHdvcmtmbG93cy4uLlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdXb3JrZmxvd3NcIiBjbGFzcz1cIm1heC1oLTQ4IG92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHdvcmtmbG93IG9mIHdvcmtmbG93c0xpc3RcIiBjbGFzcz1cIm1iLTFcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN1YmZsb3dXb3JrZmxvdyh3b3JrZmxvdylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB3b3JrZmxvdy5OYW1lIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIndvcmtmbG93c0xpc3QubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMiB0ZXh0LWdyYXktNTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBObyB3b3JrZmxvd3MgYXZhaWxhYmxlXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC92ZXJiZW4tcG9wLVVwPlxuICA8L2Rpdj5cblxuICA8bGliLWNvbmRpdGlvbnMtcG9wdXBcbiAgICBbdmlzaWJsZV09XCJzaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2dcIlxuICAgIFtkZWNpc2lvbk5vZGVJZF09XCJhY3RpdmVEZWNpc2lvbk5vZGVJZFwiXG4gICAgW25ld0Nvbm5lY3Rpb25JZF09XCJhY3RpdmVDb25uZWN0aW9uSWRcIlxuICAgIFtwb3B1cFhdPVwiZGVjaXNpb25Db25kaXRpb25Qb3B1cFhcIlxuICAgIFtwb3B1cFldPVwiZGVjaXNpb25Db25kaXRpb25Qb3B1cFlcIlxuICAgIChjbG9zZWQpPVwib25EZWNpc2lvbkNvbmRpdGlvbkNhbmNlbGxlZCgpXCJcbiAgICAoc2F2ZWQpPVwib25EZWNpc2lvbkNvbmRpdGlvblNhdmVkKCRldmVudClcIlxuICA+PC9saWItY29uZGl0aW9ucy1wb3B1cD5cblxuICA8IS0tIDxsaWItZGVjaXNpb24tcG9wdXBcbiAgICBbdmlzaWJsZV09XCJzaG93Q29uZGl0aW9uc0RpYWxvZ1wiXG4gICAgW2RlY2lzaW9uTm9kZUlkXT1cImFjdGl2ZURlY2lzaW9uTm9kZUlkXCJcbiAgICBbcG9wdXBYXT1cImRlY2lzaW9uQ29uZGl0aW9uUG9wdXBYXCJcbiAgICBbcG9wdXBZXT1cImRlY2lzaW9uQ29uZGl0aW9uUG9wdXBZXCJcbiAgICAoY2xvc2VkKT1cIm9uRGVjaXNpb25Db25kaXRpb25DYW5jZWxsZWQoKVwiXG4gID48L2xpYi1kZWNpc2lvbi1wb3B1cD4gLS0+XG5cbiAgPGxpYi1zdGFnZS1kaWFsb2dcbiAgICBbdmlzaWJsZV09XCJzaG93U3RhZ2VEaWFsb2dMb2NhbFwiXG4gICAgW3N0YWdlRGF0YV09XCJhY3RpdmVTdGFnZURhdGEgfHwge31cIlxuICAgIChjbG9zZWQpPVwib25TdGFnZURpYWxvZ0Nsb3NlZCgpXCJcbiAgICAoc2F2ZWQpPVwib25TdGFnZURpYWxvZ1NhdmVkKCRldmVudClcIlxuICA+PC9saWItc3RhZ2UtZGlhbG9nPlxuXG4gIDxsaWItYWN0aW9uLWRpYWxvZ1xuICAgIFt2aXNpYmxlXT1cInNob3dBY3Rpb25EaWFsb2dMb2NhbFwiXG4gICAgW2FjdGlvbkRhdGFdPVwiYWN0aXZlQWN0aW9uRGF0YVwiXG4gICAgKGNsb3NlZCk9XCJvbkFjdGlvbkRpYWxvZ0Nsb3NlZCgpXCJcbiAgICAoc2F2ZWQpPVwib25BY3Rpb25EaWFsb2dTYXZlZCgkZXZlbnQpXCJcbiAgPjwvbGliLWFjdGlvbi1kaWFsb2c+XG5cbiAgPGxpYi1lc2NhbGF0aW9uLWRpYWxvZ1xuICAgIFt2aXNpYmxlXT1cInNob3dFc2NhbGF0aW9uRGlhbG9nTG9jYWxcIlxuICAgIFt0eXBlXT1cImFjdGl2ZUVzY2FsYXRpb25UeXBlKCkhXCJcbiAgICBbc3RhZ2VDb2RlXT1cImFjdGl2ZVN0YWdlQ29kZSgpIHx8ICcnXCJcbiAgICBbd29ya2Zsb3dDb2RlXT1cInN0YXRlLndvcmtmbG93Py5Db2RlIHx8ICcnXCJcbiAgICAoY2xvc2VkKT1cIm9uRXNjYWxhdGlvbkRpYWxvZ0Nsb3NlZCgpXCJcbiAgPjwvbGliLWVzY2FsYXRpb24tZGlhbG9nPlxuPC9kaXY+XG4iXX0=
1063
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItY2FudmFzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvZGVzaWduZXItY2FudmFzL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL2Rlc2lnbmVyLWNhbnZhcy9kZXNpZ25lci1jYW52YXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBa0J2QixNQUFNLE9BQU8sdUJBQXVCO0lBMkd6QjtJQUNDO0lBM0dELFlBQVksR0FBYSxJQUFJLENBQUM7SUFDN0IsZUFBZSxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQy9ELGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9DLG9CQUFvQixHQUNsQixJQUFJLENBQUM7SUFDRyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBS3hDLENBQUM7SUFDSyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFHL0MsQ0FBQztJQUNLLHVCQUF1QixHQUFHLElBQUksWUFBWSxFQUdoRCxDQUFDO0lBRUwsK0JBQStCO0lBQ1EsU0FBUyxDQUEwQjtJQUcxRSxlQUFlLENBQUMsS0FBaUI7UUFDL0Isc0VBQXNFO1FBQ3RFLElBQ0UsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RCLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtZQUM1QixDQUFDLElB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SEFLdEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csZUFBZTtzQkFBeEIsTUFBTTtnQkFNRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQU1nQyxTQUFTO3NCQUEvQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3JDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVzY2FsYXRpb25UeXBlLCBGb3JtLCBXb3JrZmxvdywgV29ya2Zsb3dBY3Rpb24sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBDb25uZWN0aW9uUG9pbnQsXG4gIE5vZGUsXG4gIFN3aW1sYW5lSXRlbSxcbiAgVG9vbFR5cGUsXG4gIE5vZGUgYXMgV0ZOb2RlLFxufSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kZXNpZ25lci1jYW52YXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVzaWduZXItY2FudmFzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDYW52YXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzZWxlY3RlZFRvb2w6IFRvb2xUeXBlID0gbnVsbDtcbiAgQE91dHB1dCgpIGNsaWNrZWRQb3NpdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgc3ViZmxvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwZW5kaW5nU3RhZ2VQb3NpdGlvbjogeyBzd2ltbGFuZUluZGV4OiBudW1iZXI7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID1cbiAgICBudWxsO1xuICBAT3V0cHV0KCkgc2hvd1N0YWdlRGlhbG9nID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgcG9zaXRpb246IGFueTtcbiAgICBpc0Zyb21Db25uZWN0aW9uOiBib29sZWFuO1xuICAgIGlzRnJvbURlY2lzaW9uPzogYm9vbGVhbjtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHN0YWdlUHJvcGVydGllc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT47XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25Qcm9wZXJ0aWVzVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGNvbm5lY3Rpb25JZDogc3RyaW5nO1xuICAgIGFjdGlvbkRhdGE6IFBhcnRpYWw8V29ya2Zsb3dBY3Rpb24+O1xuICB9PigpO1xuXG4gIC8vIFJlZmVyZW5jZSB0byB0aGUgU1ZHIGVsZW1lbnRcbiAgQFZpZXdDaGlsZCgnY2FudmFzJywgeyBzdGF0aWM6IHRydWUgfSkgY2FudmFzUmVmITogRWxlbWVudFJlZjxTVkdFbGVtZW50PjtcblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIG9uV2luZG93TW91c2VVcChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIElmIHdlIGhhdmUgYSBwb3B1cCBvcGVuIGJ1dCB0aGUgbW91c2UgaXMgcmVsZWFzZWQgb3V0c2lkZSwgY2xlYW4gdXBcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG93U3ViZmxvd1BvcHVwICYmXG4gICAgICAhdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwICYmXG4gICAgICAhdGhpcy5wb3B1cFZpc2libGUgJiYgLy8gT25seSBlbmQgZHJhZyBpZiBubyBwb3B1cCBpcyB2aXNpYmxlXG4gICAgICB0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKClcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFeHRlcm5hbCBtb3VzZXVwIGRldGVjdGVkIC0gY2xlYW5pbmcgdXAgY29ubmVjdGlvbiBkcmFnJyk7XG4gICAgICB0aGlzLnN0YXRlLmVuZENvbm5lY3Rpb25EcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FudmFzIGRpbWVuc2lvbnNcbiAgY2FudmFzV2lkdGggPSAzMDAwO1xuICBjYW52YXNIZWlnaHQgPSAyMDAwO1xuXG4gIC8vIEdyaWQgc2l6ZVxuICBncmlkU2l6ZSA9IDIwO1xuXG4gIHN3aW1sYW5lSGVpZ2h0ID0gMjYzO1xuICB2aXNpYmxlQ29ubmVjdGlvblBvaW50c05vZGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHBvcHVwVmlzaWJsZSA9IGZhbHNlO1xuICBwb3B1cFggPSAwO1xuICBwb3B1cFkgPSAwO1xuICBhbGxvd2VkTm9kZVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHNob3dTdGFydE5vZGVGb3JtUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3RhcnROb2RlRm9ybXNMaXN0OiBGb3JtW10gPSBbXTtcbiAgaXNMb2FkaW5nU3RhcnROb2RlRm9ybXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3RhcnROb2RlRm9ybVBvcHVwWDogbnVtYmVyID0gMDtcbiAgc3RhcnROb2RlRm9ybVBvcHVwWTogbnVtYmVyID0gMDtcbiAgYWN0aXZlTm9kZUZvckZvcm1TZWxlY3Rpb246IE5vZGUgfCBudWxsID0gbnVsbDtcbiAgbm9kZUZvcm1zOiBXcml0YWJsZVNpZ25hbDxcbiAgICBSZWNvcmQ8c3RyaW5nLCB7IGZvcm1JZDogc3RyaW5nOyBmb3JtTmFtZTogc3RyaW5nIH0+XG4gID4gPSBzaWduYWwoe30pO1xuXG4gIHNob3dTdWJmbG93UG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgd29ya2Zsb3dzTGlzdDogV29ya2Zsb3dbXSA9IFtdO1xuICBpc0xvYWRpbmdXb3JrZmxvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3ViZmxvd1BvcHVwWDogbnVtYmVyID0gMDtcbiAgc3ViZmxvd1BvcHVwWTogbnVtYmVyID0gMDtcbiAgcGVuZGluZ1N1YmZsb3dQb3NpdGlvbjoge1xuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgcGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbjoge1xuICAgIGRlY2lzaW9uTm9kZUlkOiBzdHJpbmc7XG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBwZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50OiBDb25uZWN0aW9uUG9pbnQgfCBudWxsID0gbnVsbDtcbiAgcGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBzaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0NvbmRpdGlvbnNEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWN0aXZlRGVjaXNpb25Ob2RlSWQ6IHN0cmluZyA9ICcnO1xuICBhY3RpdmVDb25uZWN0aW9uSWQ6IHN0cmluZyA9ICcnO1xuICBkZWNpc2lvbkNvbmRpdGlvblBvcHVwWDogbnVtYmVyID0gMDtcbiAgZGVjaXNpb25Db25kaXRpb25Qb3B1cFk6IG51bWJlciA9IDA7XG5cbiAgaXNDcmVhdGluZ1N0YWdlRnJvbURlY2lzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHBlbmRpbmdEZWNpc2lvbkNvbmRpdGlvbjogc3RyaW5nID0gJyc7XG4gIGFjdGl2ZVN0YWdlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBhY3RpdmVBY3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgc2hvd1N0YWdlRGlhbG9nTG9jYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0VzY2FsYXRpb25EaWFsb2dMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3RpdmVFc2NhbGF0aW9uVHlwZTogV3JpdGFibGVTaWduYWw8RXNjYWxhdGlvblR5cGUgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgYWN0aXZlU3RhZ2VDb2RlOiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgYWN0aXZlU3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+ID0ge307XG4gIGFjdGl2ZUFjdGlvbkRhdGE6IENvbm5lY3Rpb24gfCBudWxsID0gbnVsbDtcblxuICBzaG93QWN0aW9uRGlhbG9nTG9jYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwb3RlbnRpYWxUYXJnZXRQb2ludElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdGU6IFdvcmtmbG93RGVzaWduZXJTdGF0ZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDYW52YXNTaXplKCk7XG4gIH1cblxuICAvLyBIYW5kbGUgbW91c2UgY2xpY2sgb24gY2FudmFzXG4gIG9uQ2FudmFzQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHByb2Nlc3MgY2FudmFzIGNsaWNrcyBpZiBhIHRvb2wgaXMgc2VsZWN0ZWRcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUb29sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgY2xpY2sgb2NjdXJyZWRcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnQ2FudmFzIGNsaWNrZWQgYXQ6JyxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgJ3dpdGggdG9vbDonLFxuICAgICAgdGhpcy5zZWxlY3RlZFRvb2xcbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBzd2ltbGFuZSBpbmRleCBiYXNlZCBvbiBwb3NpdGlvblxuICAgIC8vIGNvbnN0IHN3aW1sYW5lSW5kZXggPSBNYXRoLmZsb29yKHBvc2l0aW9uLnkgLyB0aGlzLnN3aW1sYW5lSGVpZ2h0KTtcblxuICAgIC8vIE9ubHkgZW1pdCB0aGUgcG9zaXRpb24gaWYgd2UgaGF2ZSBhIHRvb2wgc2VsZWN0ZWQgYW5kIGl0J3MgYSB2YWxpZCBjbGljayBhcmVhXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUb29sKSB7XG4gICAgICB0aGlzLmNsaWNrZWRQb3NpdGlvbi5lbWl0KHtcbiAgICAgICAgeDogcG9zaXRpb24ueCxcbiAgICAgICAgeTogcG9zaXRpb24ueSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2hvd1NoaWVsZERpYWxvZyhzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBub2RlXG4gICAgY29uc3Qgbm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChzdGFnZUlkKTtcbiAgICBpZiAobm9kZUluZm8pIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgICB0aGlzLmFjdGl2ZVN0YWdlRGF0YSA9IHsgLi4ubm9kZUluZm8ubm9kZS5zdGFnZURhdGEsIGlkOiBzdGFnZUlkIH07XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZVN0YWdlRGF0YSk7XG4gICAgICB0aGlzLnNob3dTdGFnZURpYWxvZ0xvY2FsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvblNob3dBY3Rpb25EaWFsb2coY29ubmVjdGlvbkluZm86IENvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIkNPTkVDVElPTlwiLCBjb25uZWN0aW9uSW5mbyk7XG4gICAgLy8gRmluZCB0aGUgbm9kZVxuICAgIC8vIGNvbnN0IGNvbm5lY3Rpb25JbmZvID0gdGhpcy5zdGF0ZS5maW5kQWN0aW9uQnlJZChhY3Rpb25JZCk7XG4gICAgaWYgKGNvbm5lY3Rpb25JbmZvKSB7XG4gICAgICB0aGlzLmFjdGl2ZUFjdGlvbklkID0gY29ubmVjdGlvbkluZm8uaWQ7XG4gICAgICB0aGlzLmFjdGl2ZUFjdGlvbkRhdGEgPSBjb25uZWN0aW9uSW5mbztcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuYWN0aXZlQWN0aW9uRGF0YSk7XG4gICAgICB0aGlzLnNob3dBY3Rpb25EaWFsb2dMb2NhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25TaG93RXNjYWxhdGlvbkRpYWxvZyhldmVudDoge1xuICAgIHN0YWdlSWQ6IHN0cmluZztcbiAgICB0eXBlOiBFc2NhbGF0aW9uVHlwZTtcbiAgfSk6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIG5vZGVcbiAgICBjb25zdCBub2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGV2ZW50LnN0YWdlSWQpO1xuICAgIGlmIChub2RlSW5mbykge1xuICAgICAgdGhpcy5hY3RpdmVTdGFnZUlkID0gZXZlbnQuc3RhZ2VJZDtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VEYXRhID0gbm9kZUluZm8ubm9kZS5zdGFnZURhdGEgfHwge1xuICAgICAgICBpZDogdGhpcy5hY3RpdmVTdGFnZUlkLFxuICAgICAgfTtcbiAgICAgIHRoaXMuYWN0aXZlRXNjYWxhdGlvblR5cGUuc2V0KGV2ZW50LnR5cGUpO1xuICAgICAgdGhpcy5hY3RpdmVTdGFnZUNvZGUuc2V0KHRoaXMuYWN0aXZlU3RhZ2VEYXRhPy5Db2RlIHx8ICcnKTtcbiAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmUgU3RhZ2UgRGF0YTonLCB0aGlzLmFjdGl2ZVN0YWdlRGF0YSk7XG4gICAgICBjb25zb2xlLmxvZygnRXNjYWxhdGlvbiBUeXBlOicsIHRoaXMuYWN0aXZlRXNjYWxhdGlvblR5cGUoKSk7XG4gICAgICB0aGlzLnNob3dFc2NhbGF0aW9uRGlhbG9nTG9jYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBoYW5kbGUgZGlhbG9nIGNsb3N1cmVcbiAgb25TdGFnZURpYWxvZ0Nsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dTdGFnZURpYWxvZ0xvY2FsID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVTdGFnZUlkID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZVN0YWdlRGF0YSA9IHt9O1xuICB9XG5cbiAgb25BY3Rpb25EaWFsb2dDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QWN0aW9uRGlhbG9nTG9jYWwgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbklkID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbkRhdGEgPSBudWxsO1xuICB9XG5cbiAgLy8gQWRkIHRoaXMgbWV0aG9kIHRvIGhhbmRsZSBkaWFsb2cgY2xvc3VyZVxuICBvbkVzY2FsYXRpb25EaWFsb2dDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZ0xvY2FsID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVTdGFnZUlkID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZUVzY2FsYXRpb25UeXBlLnNldChudWxsKTtcbiAgICB0aGlzLmFjdGl2ZVN0YWdlQ29kZS5zZXQobnVsbCk7XG4gICAgdGhpcy5hY3RpdmVTdGFnZURhdGEgPSB7fTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBoYW5kbGUgc2F2aW5nIHN0YWdlIGRhdGFcbiAgb25TdGFnZURpYWxvZ1NhdmVkKHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZVN0YWdlSWQpIHtcbiAgICAgIC8vIEVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RhZ2VcbiAgICAgIGNvbnN0IG5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQodGhpcy5hY3RpdmVTdGFnZUlkKTtcbiAgICAgIGlmIChub2RlSW5mbykge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICAgICAgbm9kZUluZm8ubm9kZS5zdGFnZURhdGEgPSB7XG4gICAgICAgICAgLi4ubm9kZUluZm8ubm9kZS5zdGFnZURhdGEsXG4gICAgICAgICAgLi4uc3RhZ2VEYXRhLFxuICAgICAgICB9O1xuICAgICAgICBjb25zb2xlLmxvZygnVXBkYXRlZCBzdGFnZSBkYXRhOicsIG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhKTtcblxuICAgICAgICAvLyBFbWl0IGV2ZW50IGZvciBwYXJlbnQgY29tcG9uZW50IHRvIGtub3cgYWJvdXQgdGhlIHVwZGF0ZVxuICAgICAgICB0aGlzLnN0YWdlUHJvcGVydGllc1VwZGF0ZWQuZW1pdCh7XG4gICAgICAgICAgbm9kZUlkOiB0aGlzLmFjdGl2ZVN0YWdlSWQsXG4gICAgICAgICAgc3RhZ2VEYXRhOiBub2RlSW5mby5ub2RlLnN0YWdlRGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIGRpYWxvZ1xuICAgIHRoaXMub25TdGFnZURpYWxvZ0Nsb3NlZCgpO1xuICB9XG5cbiAgb25BY3Rpb25EaWFsb2dTYXZlZChhY3Rpb25EYXRhOiBDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlQWN0aW9uSWQpIHtcbiAgICAgIC8vIEVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RhZ2VcbiAgICAgIC8vIGxldCBjb25uZWN0aW9uSW5mbyA9IHRoaXMuc3RhdGUuZmluZEFjdGlvbkJ5SWQodGhpcy5hY3RpdmVBY3Rpb25JZCk7XG4gICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zID0gdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5tYXAoKGNvbm5lY3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChjb25uZWN0aW9uLmlkID09PSB0aGlzLmFjdGl2ZUFjdGlvbklkKSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5sYWJlbCA9IGFjdGlvbkRhdGEubGFiZWw7XG4gICAgICAgICAgY29ubmVjdGlvbi5hY3Rpb24gPSBhY3Rpb25EYXRhLmFjdGlvbjtcbiAgICAgICAgICBjb25uZWN0aW9uLnRhcmdldFN0YXR1cyA9IGFjdGlvbkRhdGEudGFyZ2V0U3RhdHVzO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdVcGRhdGVkIGFjdGlvbiBkYXRhOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgZGlhbG9nXG4gICAgdGhpcy5vbkFjdGlvbkRpYWxvZ0Nsb3NlZCgpO1xuICB9XG5cbiAgdXBkYXRlQ2FudmFzU2l6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZXF1aXJlZEhlaWdodCA9XG4gICAgICAodGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoICsgMSkgKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuICAgIHRoaXMuY2FudmFzSGVpZ2h0ID0gTWF0aC5tYXgoMjAwMCwgcmVxdWlyZWRIZWlnaHQpOyAvLyBFbnN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvdXIgZGVmYXVsdCBoZWlnaHRcblxuICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHN3aW1sYW5lIGNsaXAgcGF0aHMgd2hlbiBzaXplIGNoYW5nZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzLmZvckVhY2goKHN3aW1sYW5lLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjbGlwUGF0aElkID0gYHN3aW1sYW5lLWNsaXAtJHtpbmRleH1gO1xuICAgICAgICBjb25zdCBjbGlwUGF0aEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbGlwUGF0aElkKTtcbiAgICAgICAgaWYgKGNsaXBQYXRoRWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IHJlY3RFbGVtZW50ID0gY2xpcFBhdGhFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKTtcbiAgICAgICAgICBpZiAocmVjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB0aGlzLmNhbnZhc1dpZHRoLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCB0aGUgbW91c2UgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIFNWRyBjYW52YXNcbiAgcHJpdmF0ZSBnZXRNb3VzZVBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcbiAgICAvLyBVc2UgY2xpZW50WC9ZIGFuZCBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBmb3IgY3Jvc3MtYnJvd3NlciBjb21wYXRpYmlsaXR5XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICB5OiBldmVudC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgfTtcbiAgfVxuXG4gIHNob3dDb25uZWN0aW9uUG9pbnRzKG5vZGVJZDogc3RyaW5nLCBzd2ltbGFuZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGVDb25uZWN0aW9uUG9pbnRzTm9kZUlkID0gbm9kZUlkO1xuICB9XG5cbiAgaXNNb3VzZU92ZXJOb2RlKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG5vZGU6IFdGTm9kZSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE1vdXNlUG9zaXRpb24oZXZlbnQpO1xuICAgIGNvbnN0IG5vZGVCb3VuZHMgPSB0aGlzLmdldE5vZGVCb3VuZHNXaXRoUGFkZGluZyhub2RlLCBzd2ltbGFuZUluZGV4KTtcblxuICAgIHJldHVybiAoXG4gICAgICBwb3NpdGlvbi54ID49IG5vZGVCb3VuZHMueCAmJlxuICAgICAgcG9zaXRpb24ueCA8PSBub2RlQm91bmRzLnggKyBub2RlQm91bmRzLndpZHRoICYmXG4gICAgICBwb3NpdGlvbi55ID49IG5vZGVCb3VuZHMueSAmJlxuICAgICAgcG9zaXRpb24ueSA8PSBub2RlQm91bmRzLnkgKyBub2RlQm91bmRzLmhlaWdodFxuICAgICk7XG4gIH1cblxuICAvLyBoZWxwZXIgbWV0aG9kIHRvIGNhbGN1bGF0ZSBub2RlIGJvdW5kcyB3aXRoIHBhZGRpbmdcbiAgZ2V0Tm9kZUJvdW5kc1dpdGhQYWRkaW5nKFxuICAgIG5vZGU6IFdGTm9kZSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgcGFkZGluZyA9IDEwOyAvLyBBZGQgMTBweCBwYWRkaW5nIGFyb3VuZCBub2RlcyBmb3IgZWFzaWVyIGhvdmVyIGRldGVjdGlvblxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBZIHBvc2l0aW9uIGluY2x1ZGluZyBzd2ltbGFuZSBvZmZzZXRcbiAgICBjb25zdCBhYnNvbHV0ZVkgPSBub2RlLnkgKyBzd2ltbGFuZUluZGV4ICogMjYzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IG5vZGUueCAtIHBhZGRpbmcsXG4gICAgICB5OiBhYnNvbHV0ZVkgLSBwYWRkaW5nLFxuICAgICAgd2lkdGg6IG5vZGUud2lkdGggKyBwYWRkaW5nICogMixcbiAgICAgIGhlaWdodDogbm9kZS5oZWlnaHQgKyBwYWRkaW5nICogMixcbiAgICB9O1xuICB9XG5cbiAgaGlkZUNvbm5lY3Rpb25Qb2ludHMobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnZpc2libGVDb25uZWN0aW9uUG9pbnRzTm9kZUlkID09PSBub2RlSWQgJiZcbiAgICAgICF0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKClcbiAgICApIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29ubmVjdGlvblBvaW50VmlzaWJsZShub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDb25uZWN0aW9uUG9pbnRzTm9kZUlkID09PSBub2RlSWQ7XG4gIH1cblxuICBzdGFydENvbm5lY3Rpb25EcmFnKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHBvaW50OiBDb25uZWN0aW9uUG9pbnQsXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGV4aXQgcG9pbnQgbm9kZVxuICAgIGNvbnN0IG5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQocG9pbnQubm9kZUlkKTtcbiAgICBpZiAoXG4gICAgICBub2RlSW5mbyAmJlxuICAgICAgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnICYmXG4gICAgICBub2RlSW5mby5ub2RlLnN0YWdlRGF0YT8uSXNFeGl0UG9pbnRcbiAgICApIHtcbiAgICAgIC8vIERvbid0IGFsbG93IGNvbm5lY3Rpb25zIGZyb20gZXhpdCBwb2ludHNcbiAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgY3JlYXRlIGNvbm5lY3Rpb25zIGZyb20gZXhpdCBwb2ludHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgdGhpcy5zdGF0ZS5zdGFydENvbm5lY3Rpb25EcmFnKFxuICAgICAgcG9pbnQsXG4gICAgICBzd2ltbGFuZUluZGV4LFxuICAgICAgcG9zaXRpb24ueCxcbiAgICAgIHBvc2l0aW9uLnlcbiAgICApO1xuXG4gICAgLy8gQWRkIG1vdXNlIG1vdmUgYW5kIG1vdXNlIHVwIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgZG9jdW1lbnRcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xuICB9XG5cbiAgaGlnaGxpZ2h0UG90ZW50aWFsVGFyZ2V0cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpKSByZXR1cm47XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc3QgdGFyZ2V0UG9pbnRJbmZvID0gdGhpcy5maW5kQ29ubmVjdGlvblBvaW50QXRQb3NpdGlvbihcbiAgICAgIHBvc2l0aW9uLngsXG4gICAgICBwb3NpdGlvbi55XG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIHRhcmdldFBvaW50SW5mbyAmJlxuICAgICAgdGFyZ2V0UG9pbnRJbmZvLnBvaW50LmlkICE9PSB0aGlzLnBvdGVudGlhbFRhcmdldFBvaW50SWRcbiAgICApIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBuZXcgdGFyZ2V0IHBvaW50XG4gICAgICB0aGlzLnBvdGVudGlhbFRhcmdldFBvaW50SWQgPSB0YXJnZXRQb2ludEluZm8ucG9pbnQuaWQ7XG4gICAgfSBlbHNlIGlmICghdGFyZ2V0UG9pbnRJbmZvICYmIHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZCkge1xuICAgICAgLy8gV2UncmUgbm8gbG9uZ2VyIG92ZXIgYSB0YXJnZXQgcG9pbnRcbiAgICAgIHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlIGFycm93IGZ1bmN0aW9ucyB0byBwcmVzZXJ2ZSAndGhpcycgY29udGV4dFxuICBvbk1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25EcmFnKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgIHRoaXMuaGlnaGxpZ2h0UG90ZW50aWFsVGFyZ2V0cyhldmVudCk7XG4gIH07XG5cbiAgdXBkYXRlQ29ubmVjdGlvbkRyYWcoY3VycmVudFg6IG51bWJlciwgY3VycmVudFk6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHtcbiAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5jdXJyZW50WCA9IGN1cnJlbnRYO1xuICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRZID0gY3VycmVudFk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBzd2ltbGFuZSB0aGUgY3Vyc29yIGlzIG92ZXJcbiAgICAgIGNvbnN0IHN3aW1sYW5lSW5kZXggPSBNYXRoLmZsb29yKGN1cnJlbnRZIC8gdGhpcy5zd2ltbGFuZUhlaWdodCk7XG4gICAgICBpZiAoc3dpbWxhbmVJbmRleCA+PSAwICYmIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSB0YXJnZXQgc3dpbWxhbmUgaXMgZnVsbHkgdmlzaWJsZVxuICAgICAgICB0aGlzLmVuc3VyZVN3aW1sYW5lSW5WaWV3KHN3aW1sYW5lSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uTW91c2VVcCA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc29sZS5sb2coJ01vdXNlIHVwIGF0IHBvc2l0aW9uOicsIHBvc2l0aW9uKTtcbiAgICBjb25zb2xlLmxvZygnSXMgY29ubmVjdGlvbiBkcmFnZ2luZzonLCB0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpO1xuXG4gICAgLy8gT25seSBwcm9jZWVkIGlmIHdlIGFyZSBkcmFnZ2luZyBhIGNvbm5lY3Rpb25cbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRyb3BwaW5nIG9udG8gYSBjb25uZWN0aW9uIHBvaW50XG4gICAgY29uc3QgdGFyZ2V0UG9pbnRJbmZvID0gdGhpcy5maW5kQ29ubmVjdGlvblBvaW50QXRQb3NpdGlvbihcbiAgICAgIHBvc2l0aW9uLngsXG4gICAgICBwb3NpdGlvbi55XG4gICAgKTtcblxuICAgIGlmICh0YXJnZXRQb2ludEluZm8pIHtcbiAgICAgIC8vIFdlIGZvdW5kIGEgdGFyZ2V0IGNvbm5lY3Rpb24gcG9pbnRcbiAgICAgIGNvbnNvbGUubG9nKCdGb3VuZCB0YXJnZXQgY29ubmVjdGlvbiBwb2ludDonLCB0YXJnZXRQb2ludEluZm8pO1xuXG4gICAgICAvLyBHZXQgdGhlIHNvdXJjZSBwb2ludCBhbmQgc3dpbWxhbmUgaW5kZXhcbiAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50O1xuICAgICAgY29uc3Qgc291cmNlU3dpbWxhbmVJbmRleCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VTd2ltbGFuZUluZGV4O1xuXG4gICAgICBpZiAoc291cmNlUG9pbnQgJiYgc291cmNlU3dpbWxhbmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFByZXZlbnQgY29ubmVjdGluZyBhIG5vZGUgdG8gaXRzZWxmXG4gICAgICAgIGlmIChzb3VyY2VQb2ludC5ub2RlSWQgIT09IHRhcmdldFBvaW50SW5mby5ub2RlSWQpIHtcbiAgICAgICAgICAvLyBHZXQgc291cmNlIGFuZCB0YXJnZXQgbm9kZSB0eXBlcyB0byBjaGVjayBpZiBjb25uZWN0aW9uIGlzIGFsbG93ZWRcbiAgICAgICAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKHNvdXJjZVBvaW50Lm5vZGVJZCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChcbiAgICAgICAgICAgIHRhcmdldFBvaW50SW5mby5ub2RlSWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc291cmNlTm9kZUluZm8gJiZcbiAgICAgICAgICAgIHRhcmdldE5vZGVJbmZvICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNhbkNvbm5lY3QoXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZSxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUluZm8ubm9kZS50eXBlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgICAgICAgICAgc291cmNlTm9kZUlkOiBzb3VyY2VQb2ludC5ub2RlSWQsXG4gICAgICAgICAgICAgIHRhcmdldE5vZGVJZDogdGFyZ2V0UG9pbnRJbmZvLm5vZGVJZCxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50SW5mby5wb2ludC5pZCxcbiAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogdGFyZ2V0UG9pbnRJbmZvLnN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgYWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQWRkIHRvIGNvbm5lY3Rpb25zIGFycmF5XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIG5vZGVzOicsIGNvbm5lY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyBOb3RpZnkgYWJvdXQgY29ubmVjdGlvbiBjcmVhdGlvblxuICAgICAgICAgICAgdGhpcy5vbkNvbm5lY3Rpb25DcmVhdGVkKGNvbm5lY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ0Nhbm5vdCBjb25uZWN0IHRoZXNlIG5vZGUgdHlwZXM6JyxcbiAgICAgICAgICAgICAgc291cmNlTm9kZUluZm8/Lm5vZGUudHlwZSxcbiAgICAgICAgICAgICAgJy0+JyxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUluZm8/Lm5vZGUudHlwZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBjb25uZWN0IGEgbm9kZSB0byBpdHNlbGYnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFbmQgdGhlIGNvbm5lY3Rpb24gZHJhZ1xuICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBwb3NpdGlvbiBpcyB3aXRoaW4gYW55IHN3aW1sYW5lXG4gICAgY29uc3QgaXNJbnNpZGVTd2ltbGFuZSA9IHRoaXMuaXNQb3NpdGlvbkluc2lkZVN3aW1sYW5lKHBvc2l0aW9uLnkpO1xuICAgIGNvbnNvbGUubG9nKCdJcyBpbnNpZGUgc3dpbWxhbmU6JywgaXNJbnNpZGVTd2ltbGFuZSk7XG5cbiAgICAvLyBPbmx5IHNob3cgcG9wdXAgaWYgd2l0aGluIGEgc3dpbWxhbmVcbiAgICBpZiAoaXNJbnNpZGVTd2ltbGFuZSAmJiB0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTaG93aW5nIGNvbm5lY3Rpb24gcG9wdXAnKTtcbiAgICAgIHRoaXMuc2hvd0Nvbm5lY3Rpb25Qb3B1cChwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW5kIHRoZSBjb25uZWN0aW9uIGRyYWcgaWYgb3V0c2lkZSBhIHN3aW1sYW5lXG4gICAgICBjb25zb2xlLmxvZygnRW5kaW5nIGNvbm5lY3Rpb24gZHJhZyB3aXRob3V0IHNob3dpbmcgcG9wdXAnKTtcbiAgICAgIHRoaXMuc3RhdGUuZW5kQ29ubmVjdGlvbkRyYWcoKTtcbiAgICB9XG4gIH07XG5cbiAgZmluZENvbm5lY3Rpb25Qb2ludEF0UG9zaXRpb24oXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB0b2xlcmFuY2U6IG51bWJlciA9IDEwXG4gICk6IHtcbiAgICBwb2ludDogQ29ubmVjdGlvblBvaW50O1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgfSB8IG51bGwge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgc3dpbWxhbmVzIGFuZCBub2RlcyB0byBmaW5kIGNvbm5lY3Rpb24gcG9pbnRzXG4gICAgZm9yIChcbiAgICAgIGxldCBzd2ltbGFuZUluZGV4ID0gMDtcbiAgICAgIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGg7XG4gICAgICBzd2ltbGFuZUluZGV4KytcbiAgICApIHtcbiAgICAgIGNvbnN0IHN3aW1sYW5lID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF07XG5cbiAgICAgIGlmICghc3dpbWxhbmUubm9kZXMpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygc3dpbWxhbmUubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLmNvbm5lY3Rpb25Qb2ludHMpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgKGluY2x1ZGluZyBzd2ltbGFuZSBvZmZzZXQpXG4gICAgICAgIGNvbnN0IGFic29sdXRlTm9kZVggPSBub2RlLng7XG4gICAgICAgIGNvbnN0IGFic29sdXRlTm9kZVkgPSBub2RlLnkgKyBzd2ltbGFuZUluZGV4ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIG5vZGUuY29ubmVjdGlvblBvaW50cykge1xuICAgICAgICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgY29ubmVjdGlvbiBwb2ludFxuICAgICAgICAgIGNvbnN0IHBvaW50WCA9IGFic29sdXRlTm9kZVggKyBwb2ludC54O1xuICAgICAgICAgIGNvbnN0IHBvaW50WSA9IGFic29sdXRlTm9kZVkgKyBwb2ludC55O1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIHBvc2l0aW9uIGlzIHdpdGhpbiB0b2xlcmFuY2Ugb2YgdGhpcyBwb2ludFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKHggLSBwb2ludFgpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgTWF0aC5hYnMoeSAtIHBvaW50WSkgPD0gdG9sZXJhbmNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgc3dpbWxhbmVJbmRleDogc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpc1Bvc2l0aW9uSW5zaWRlU3dpbWxhbmUoeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgeSBwb3NpdGlvbiBpcyB3aXRoaW4gYW55IHN3aW1sYW5lXG4gICAgY29uc3Qgc3dpbWxhbmVDb3VudCA9IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aDtcbiAgICBpZiAoc3dpbWxhbmVDb3VudCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gRWFjaCBzd2ltbGFuZSBoYXMgYSBoZWlnaHQgb2YgMjYzcHhcbiAgICBjb25zdCB0b3RhbFN3aW1sYW5lSGVpZ2h0ID0gc3dpbWxhbmVDb3VudCAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG5cbiAgICAvLyBDaGVjayBpZiB5IGlzIHdpdGhpbiB0aGUgdG90YWwgaGVpZ2h0IG9mIGFsbCBzd2ltbGFuZXNcbiAgICByZXR1cm4geSA+PSAwICYmIHkgPCB0b3RhbFN3aW1sYW5lSGVpZ2h0O1xuICB9XG5cbiAgc2hvd0Nvbm5lY3Rpb25Qb3B1cCh4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTaG93aW5nIGNvbm5lY3Rpb24gcG9wdXAgYXQ6JywgeCwgeSk7XG4gICAgdGhpcy5wb3B1cFggPSB4O1xuICAgIHRoaXMucG9wdXBZID0geTtcblxuICAgIC8vIEdldCBhbGxvd2VkIG5vZGUgdHlwZXMgYmFzZWQgb24gdGhlIHNvdXJjZSBub2RlIHR5cGVcbiAgICB0aGlzLmFsbG93ZWROb2RlVHlwZXMgPSB0aGlzLnN0YXRlLmdldEFsbG93ZWRUYXJnZXROb2RlVHlwZXMoKTtcbiAgICBjb25zb2xlLmxvZygnQWxsb3dlZCBub2RlIHR5cGVzOicsIHRoaXMuYWxsb3dlZE5vZGVUeXBlcyk7XG5cbiAgICAvLyBPbmx5IHNob3cgdGhlIHBvcHVwIGlmIHdlIGhhdmUgYWxsb3dlZCBub2RlIHR5cGVzXG4gICAgaWYgKHRoaXMuYWxsb3dlZE5vZGVUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnBvcHVwVmlzaWJsZSA9IHRydWU7XG4gICAgICBjb25zb2xlLmxvZygnUG9wdXAgdmlzaWJpbGl0eSBzZXQgdG8gdHJ1ZScpO1xuXG4gICAgICAvLyBGb3JjZSB0aGUgcG9wdXAgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbmV4dCB0aWNrXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0lzIHBvcHVwIHZpc2libGUgaW4gbmV4dCB0aWNrOicsIHRoaXMucG9wdXBWaXNpYmxlKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBhbGxvd2VkIG5vZGUgdHlwZXMsIGp1c3QgZW5kIHRoZSBkcmFnXG4gICAgICBjb25zb2xlLmxvZygnTm8gYWxsb3dlZCBub2RlIHR5cGVzLCBlbmRpbmcgZHJhZycpO1xuICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVDb25uZWN0aW9uUG9wdXAoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0NhbGwgdG8gaGlkZScpO1xuICAgIHRoaXMucG9wdXBWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICB9XG5cbiAgLy8gQWRkIHRoaXMgaGFuZGxlciB0byBjbG9zZSB0aGUgcG9wdXAgd2hlbiBjbGlja2luZyBvdXRzaWRlXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgLy8gb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gIC8vICAgaWYgKHRoaXMucG9wdXBWaXNpYmxlKSB7XG4gIC8vICAgICBjb25zdCBwb3B1cEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2ZXJiZW4tcG9wLVVwJyk7XG4gIC8vICAgICBpZiAocG9wdXBFbGVtZW50ICYmICFwb3B1cEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gIC8vICAgICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGNyZWF0ZU5vZGVDb25uZWN0aW9uKG5vZGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoRGF0YSA9IHRoaXMuc3RhdGUuZ2V0Q29ubmVjdGlvblBhdGhEYXRhKCk7XG4gICAgaWYgKCFwYXRoRGF0YSkge1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBub2RlIHR5cGUgaXMgYWxsb3dlZCB0byBiZSBjcmVhdGVkXG4gICAgY29uc3QgYWxsb3dlZFR5cGVzID0gdGhpcy5zdGF0ZS5nZXRBbGxvd2VkVGFyZ2V0Tm9kZVR5cGVzKCk7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMobm9kZVR5cGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBjb25uZWN0aW9uIHRvICR7bm9kZVR5cGV9IGZyb20gY3VycmVudCBub2RlIHR5cGVgXG4gICAgICApO1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBlbmRYLCBlbmRZLCBzb3VyY2VTd2ltbGFuZUluZGV4IH0gPSBwYXRoRGF0YTtcblxuICAgIC8vIEdldCBzb3VyY2Ugbm9kZSBpbmZvXG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG4gICAgaWYgKCFzb3VyY2VQb2ludCkge1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChzb3VyY2VQb2ludC5ub2RlSWQpO1xuICAgIGlmICghc291cmNlTm9kZUluZm8pIHtcbiAgICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGNvbm5lY3RpbmcgZnJvbSBhIGRlY2lzaW9uIHRvIGEgc3RhZ2UsIHNob3cgY29uZGl0aW9uIHBvcHVwIGZpcnN0XG4gICAgaWYgKHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZSA9PT0gJ2RlY2lzaW9uJyAmJiBub2RlVHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgLy8gU3RvcmUgaW5mb3JtYXRpb24gZm9yIGxhdGVyIHN0YWdlIGNyZWF0aW9uXG4gICAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbkNvbm5lY3Rpb24gPSB7XG4gICAgICAgIGRlY2lzaW9uTm9kZUlkOiBzb3VyY2VOb2RlSW5mby5ub2RlLmlkLFxuICAgICAgICBzd2ltbGFuZUluZGV4OiBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgICB4OiBlbmRYLFxuICAgICAgICB5OiBlbmRZLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHBvcHVwIHBvc2l0aW9uIC0gcG9zaXRpb24gaXQgbmVhciB0aGUgZGVjaXNpb24gbm9kZVxuICAgICAgY29uc3Qgc3dpbWxhbmVPZmZzZXRZID0gc291cmNlU3dpbWxhbmVJbmRleCAqIDI2MztcblxuICAgICAgLy8gQ2VudGVyIHRoZSBwb3B1cCBvdmVyIHRoZSBjb25uZWN0aW9uIGVuZHBvaW50XG4gICAgICB0aGlzLmRlY2lzaW9uQ29uZGl0aW9uUG9wdXBYID0gZW5kWDtcbiAgICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFkgPSBlbmRZIC0gMTUwOyAvLyBQb3NpdGlvbiBhYm92ZSB0aGUgZW5kcG9pbnRcblxuICAgICAgLy8gU2V0IGRlY2lzaW9uIG5vZGUgSURcbiAgICAgIHRoaXMuYWN0aXZlRGVjaXNpb25Ob2RlSWQgPSBzb3VyY2VOb2RlSW5mby5ub2RlLmlkO1xuICAgICAgdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2cgPSB0cnVlO1xuXG4gICAgICAvLyBFbmQgdGhlIGNvbm5lY3Rpb24gZHJhZ1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IoZW5kWSAvIHRoaXMuc3dpbWxhbmVIZWlnaHQpO1xuICAgIGNvbnN0IHN3aW1sYW5lVG9wID0gc3dpbWxhbmVJbmRleCAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG4gICAgLy8gQ2FsY3VsYXRlIHN3aW1sYW5lLXJlbGF0aXZlIHBvc2l0aW9uXG4gICAgY29uc3Qgc3dpbWxhbmVPZmZzZXRZID0gc291cmNlU3dpbWxhbmVJbmRleCAqIDI2MztcbiAgICBsZXQgcmVsYXRpdmVZID0gZW5kWSAtIHN3aW1sYW5lT2Zmc2V0WSAtIDUwOyAvLyBBZGQgaGFsZiBub2RlIGhlaWdodCBmb3IgYmV0dGVyIGFsaWdubWVudFxuICAgIGNvbnN0IHN3aW1sYW5lQm90dG9tID0gc3dpbWxhbmVUb3AgKyAyNjM7XG5cbiAgICAvLyBDbGFtcCBub2RlWSBzbyBub2RlIHN0YXlzIHdpdGhpbiBzd2ltbGFuZVxuXG4gICAgY29uc29sZS5sb2coZW5kWSwgc3dpbWxhbmVJbmRleCwgc3dpbWxhbmVPZmZzZXRZLCBzd2ltbGFuZUJvdHRvbSk7XG5cbiAgICBpZiAoZW5kWSAtIDUwIDwgc3dpbWxhbmVUb3ApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdMZXNzJyk7XG4gICAgICByZWxhdGl2ZVkgPSBzd2ltbGFuZVRvcDsgLy8gTm9kZSB3b3VsZCBvdmVyZmxvdyBhYm92ZSwgc28gYWxpZ24gdG8gdG9wXG4gICAgfSBlbHNlIGlmIChlbmRZICsgNTAgPiBzd2ltbGFuZUJvdHRvbSkge1xuICAgICAgY29uc29sZS5sb2coJ01vcmUnKTtcbiAgICAgIHJlbGF0aXZlWSA9IHN3aW1sYW5lQm90dG9tIC0gMTAwOyAvLyBOb2RlIHdvdWxkIG92ZXJmbG93IGJlbG93LCBzbyBhbGlnbiB0byBib3R0b21cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJlY29uZGl0aW9ucyBiYXNlZCBvbiBub2RlIHR5cGVcbiAgICBpZiAobm9kZVR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgc3RhZ2UgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICAgICdzdGFnZScsXG4gICAgICAgIGVuZFgsXG4gICAgICAgIHJlbGF0aXZlWSxcbiAgICAgICAgeyBOYW1lOiAnTmV3IFN0YWdlJyB9IC8vIEFkZCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICAgICk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbmV3Tm9kZSAmJlxuICAgICAgICBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMgJiZcbiAgICAgICAgbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgc291cmNlUG9pbnRcbiAgICAgICkge1xuICAgICAgICAvLyBIYW5kbGUgY29ubmVjdGlvbiBjcmVhdGlvblxuICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgcmlnaHQ6ICdsZWZ0JyxcbiAgICAgICAgICBsZWZ0OiAncmlnaHQnLFxuICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgYm90dG9tOiAndG9wJyxcbiAgICAgICAgfVtzb3VyY2VQb2ludC50eXBlXSBhcyAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JztcblxuICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IG5ld05vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09IG9wcG9zaW5nVHlwZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLnN0YXRlLmNyZWF0ZUNvbm5lY3Rpb24oXG4gICAgICAgICAgICBuZXdOb2RlLmlkLFxuICAgICAgICAgICAgdGFyZ2V0UG9pbnQuaWQsXG4gICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICdDcmVhdGluZyBzdWJmbG93IGZyb20gY29ubmVjdGlvbiBhdDonLFxuICAgICAgICBlbmRYLFxuICAgICAgICBlbmRZLFxuICAgICAgICAnc3dpbWxhbmU6JyxcbiAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleFxuICAgICAgKTtcbiAgICAgIC8vIFNob3cgd29ya2Zsb3cgc2VsZWN0aW9uIHBvcHVwIGFuZCBzdG9yZSBjb25uZWN0aW9uIGRhdGEgZm9yIGxhdGVyIHVzZVxuICAgICAgdGhpcy5zaG93U3ViZmxvd1NlbGVjdGlvblBvcHVwKGVuZFgsIGVuZFksIHNvdXJjZVN3aW1sYW5lSW5kZXgpO1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG90aGVyIG5vZGVzIENyZWF0ZSB0aGUgbmV3IG5vZGUgYXQgdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgY29ubmVjdGlvblxuICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgbm9kZVR5cGUgYXMgVG9vbFR5cGUsXG4gICAgICBlbmRYLFxuICAgICAgcmVsYXRpdmVZXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIG5ld05vZGUgJiZcbiAgICAgIG5ld05vZGUuY29ubmVjdGlvblBvaW50cyAmJlxuICAgICAgbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIC8vIEZpbmQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY29ubmVjdGlvbiBwb2ludCAoY2xvc2VzdCB0byB0aGUgc291cmNlKVxuICAgICAgaWYgKHNvdXJjZVBvaW50KSB7XG4gICAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB1c2UgdGhlIGZpcnN0IGNvbm5lY3Rpb24gcG9pbnQgb2Ygb3Bwb3NpbmcgdHlwZVxuICAgICAgICAvLyBJbiBhIHJlYWwgaW1wbGVtZW50YXRpb24sIHlvdSdkIGZpbmQgdGhlIGNsb3Nlc3Qgb3IgbW9zdCBhcHByb3ByaWF0ZSBwb2ludFxuICAgICAgICBsZXQgdGFyZ2V0UG9pbnQ7XG5cbiAgICAgICAgLy8gSWYgc291cmNlIGlzIG9uIHJpZ2h0LCB0YXJnZXQgc2hvdWxkIGJlIG9uIGxlZnQsIGV0Yy5cbiAgICAgICAgY29uc3Qgb3Bwb3NpbmdUeXBlID0ge1xuICAgICAgICAgIHJpZ2h0OiAnbGVmdCcsXG4gICAgICAgICAgbGVmdDogJ3JpZ2h0JyxcbiAgICAgICAgICB0b3A6ICdib3R0b20nLFxuICAgICAgICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgICAgIH1bc291cmNlUG9pbnQudHlwZV0gYXMgJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbiAgICAgICAgdGFyZ2V0UG9pbnQgPSBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMuZmluZChcbiAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBvcHBvc2luZ1R5cGVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5zdGF0ZS5jcmVhdGVDb25uZWN0aW9uKFxuICAgICAgICAgICAgbmV3Tm9kZS5pZCxcbiAgICAgICAgICAgIHRhcmdldFBvaW50LmlkLFxuICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5vbkNvbm5lY3Rpb25DcmVhdGVkKGNvbm5lY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb3VyY2VOb2RlSW5mbykge1xuICAgICAgdGhpcy51cGRhdGVOb2RlQ29ubmVjdGlvbnMoc291cmNlTm9kZUluZm8ubm9kZSk7XG4gICAgfVxuXG4gICAgLy8gRW5kIHRoZSBjb25uZWN0aW9uIGRyYWdcbiAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBoYW5kbGUgc2F2aW5nIHRoZSBjb25kaXRpb25cbiAgb25EZWNpc2lvbkNvbmRpdGlvblNhdmVkKGV2ZW50OiB7XG4gICAgY29ubmVjdGlvbklkOiBzdHJpbmc7XG4gICAgY29uZGl0aW9uOiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2cgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRlY2lzaW9uTm9kZUlkLCBzd2ltbGFuZUluZGV4LCB4LCB5IH0gPVxuICAgICAgdGhpcy5wZW5kaW5nRGVjaXNpb25Db25uZWN0aW9uO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBzdGFnZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgcHJvcGVydGllc1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICBzd2ltbGFuZUluZGV4LFxuICAgICAgJ3N0YWdlJyxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeyBOYW1lOiAnTmV3IFN0YWdlJyB9IC8vIEFkZCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChkZWNpc2lvbk5vZGVJZCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZGVjaXNpb25Ob2RlSW5mbyAmJlxuICAgICAgICBub2RlLmNvbm5lY3Rpb25Qb2ludHMgJiZcbiAgICAgICAgbm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICAvLyBGaW5kIGEgc3VpdGFibGUgY29ubmVjdGlvbiBwb2ludCBmcm9tIHRoZSBkZWNpc2lvbiBub2RlXG4gICAgICAgIGNvbnN0IGRlY2lzaW9uTm9kZSA9IGRlY2lzaW9uTm9kZUluZm8ubm9kZTtcbiAgICAgICAgY29uc3QgZGVjaXNpb25Ob2RlUG9pbnRzID0gZGVjaXNpb25Ob2RlLmNvbm5lY3Rpb25Qb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gZGVjaXNpb25Ob2RlUG9pbnRzLmZpbmQoXG4gICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gJ3JpZ2h0JyB8fCBwLnR5cGUgPT09ICdib3R0b20nXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHNvdXJjZVBvaW50KSB7XG4gICAgICAgICAgLy8gRmluZCBvcHBvc2luZyB0eXBlIGNvbm5lY3Rpb24gcG9pbnQgb24gdGhlIG5ldyBzdGFnZVxuICAgICAgICAgIGNvbnN0IG9wcG9zaW5nVHlwZSA9IHtcbiAgICAgICAgICAgIHJpZ2h0OiAnbGVmdCcsXG4gICAgICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICAgICAgbGVmdDogJ3JpZ2h0JyxcbiAgICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgfVtzb3VyY2VQb2ludC50eXBlXSBhcyAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JztcblxuICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gbm9kZS5jb25uZWN0aW9uUG9pbnRzLmZpbmQoXG4gICAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBvcHBvc2luZ1R5cGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFBvaW50KSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgY29ubmVjdGlvbiB3aXRoIGNvbmRpdGlvblxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgaWQ6IGBjb25uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlSWQ6IGRlY2lzaW9uTm9kZS5pZCxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgICBzb3VyY2VQb2ludElkOiBzb3VyY2VQb2ludC5pZCxcbiAgICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnQuaWQsXG4gICAgICAgICAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IGRlY2lzaW9uTm9kZUluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiBldmVudC5jb25kaXRpb24sXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgYWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQWRkIGNvbm5lY3Rpb24gdG8gdGhlIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ0NyZWF0ZWQgZGVjaXNpb24gY29ubmVjdGlvbiB3aXRoIGNvbmRpdGlvbjonLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHBlbmRpbmcgZGF0YVxuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nRGVjaXNpb25Db25kaXRpb24gPSAnJztcblxuICAgIC8vIEhpZGUgdGhlIGNvbmRpdGlvbiBwb3B1cFxuICAgIHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBvbkRlY2lzaW9uQ29uZGl0aW9uQ2FuY2VsbGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nID0gZmFsc2U7XG4gICAgLy8gRG9uJ3QgY3JlYXRlIHRoZSBzdGFnZSBvciBjb25uZWN0aW9uXG4gIH1cblxuICBnZXRDb25uZWN0aW9uUGF0aCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhEYXRhID0gdGhpcy5zdGF0ZS5nZXRDb25uZWN0aW9uUGF0aERhdGEoKTtcbiAgICBpZiAoIXBhdGhEYXRhKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCB7IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZIH0gPSBwYXRoRGF0YTtcbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludDtcblxuICAgIGlmICghc291cmNlUG9pbnQpIHJldHVybiAnJztcblxuICAgIHJldHVybiB0aGlzLmdldE9ydGhvZ29uYWxQYXRoKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBzb3VyY2VQb2ludC50eXBlKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb25QYXRoRm9yU2F2ZWRDb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXRoRGF0YSA9IHRoaXMuc3RhdGUuZ2V0Q29ubmVjdGlvbkRhdGEoY29ubmVjdGlvbik7XG4gICAgICBpZiAoIXBhdGhEYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHBhdGggZGF0YSBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZIH0gPSBwYXRoRGF0YTtcblxuICAgICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnNvdXJjZU5vZGVJZCk7XG4gICAgICBpZiAoIXNvdXJjZU5vZGVJbmZvKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NvdXJjZSBub2RlIG5vdCBmb3VuZCBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VOb2RlID0gc291cmNlTm9kZUluZm8ubm9kZTtcbiAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gc291cmNlTm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAocCkgPT4gcC5pZCA9PT0gY29ubmVjdGlvbi5zb3VyY2VQb2ludElkXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNvdXJjZVBvaW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NvdXJjZSBwb2ludCBub3QgZm91bmQgZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3J0aG9nb25hbFBhdGgoXG4gICAgICAgIHN0YXJ0WCxcbiAgICAgICAgc3RhcnRZLFxuICAgICAgICBlbmRYLFxuICAgICAgICBlbmRZLFxuICAgICAgICBzb3VyY2VQb2ludC50eXBlXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZW5lcmF0aW5nIHBhdGggZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbiwgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldE9ydGhvZ29uYWxQYXRoKFxuICAgIHN0YXJ0WDogbnVtYmVyLFxuICAgIHN0YXJ0WTogbnVtYmVyLFxuICAgIGVuZFg6IG51bWJlcixcbiAgICBlbmRZOiBudW1iZXIsXG4gICAgcG9pbnRUeXBlOiAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0J1xuICApOiBzdHJpbmcge1xuICAgIC8vIERldGVybWluZSBpbml0aWFsIGRpcmVjdGlvbiBiYXNlZCBvbiBjb25uZWN0aW9uIHBvaW50IHR5cGVcbiAgICBsZXQgcGF0aCA9ICcnO1xuXG4gICAgLy8gRm9yIHNpZGUgcG9pbnRzIChsZWZ0L3JpZ2h0KSwgc3RhcnQgd2l0aCBob3Jpem9udGFsIGxpbmVcbiAgICBpZiAocG9pbnRUeXBlID09PSAnbGVmdCcgfHwgcG9pbnRUeXBlID09PSAncmlnaHQnKSB7XG4gICAgICAvLyBDYWxjdWxhdGUgaG9yaXpvbnRhbCBkaXN0YW5jZVxuICAgICAgY29uc3QgaG9yaXpvbnRhbERpc3QgPSBlbmRYIC0gc3RhcnRYO1xuXG4gICAgICAvLyBJZiB0aGUgZW5kIHBvaW50IGlzIHZlcnkgY2xvc2UgaG9yaXpvbnRhbGx5LCB1c2UgYSBzaW1wbGUgMy1zZWdtZW50IHBhdGhcbiAgICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsRGlzdCkgPCAzMCkge1xuICAgICAgICBjb25zdCBtaWRZID0gKHN0YXJ0WSArIGVuZFkpIC8gMjtcbiAgICAgICAgcGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gSCAke2VuZFh9IFYgJHttaWRZfSBWICR7ZW5kWX1gO1xuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBwYXRoIHdpdGggaG9yaXpvbnRhbCBzZWdtZW50IGZpcnN0LCB0aGVuIHZlcnRpY2FsLCB0aGVuIGhvcml6b250YWxcbiAgICAgIGVsc2Uge1xuICAgICAgICBwYXRoID0gYE0gJHtzdGFydFh9ICR7c3RhcnRZfSBIICR7c3RhcnRYICsgaG9yaXpvbnRhbERpc3QgLyAyXG4gICAgICAgICAgfSBWICR7ZW5kWX0gSCAke2VuZFh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRm9yIHRvcC9ib3R0b20gcG9pbnRzLCBzdGFydCB3aXRoIHZlcnRpY2FsIGxpbmVcbiAgICBlbHNlIGlmIChwb2ludFR5cGUgPT09ICd0b3AnIHx8IHBvaW50VHlwZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIC8vIENhbGN1bGF0ZSB2ZXJ0aWNhbCBkaXN0YW5jZVxuICAgICAgY29uc3QgdmVydGljYWxEaXN0ID0gZW5kWSAtIHN0YXJ0WTtcblxuICAgICAgLy8gSWYgdGhlIGVuZCBwb2ludCBpcyB2ZXJ5IGNsb3NlIHZlcnRpY2FsbHksIHVzZSBhIHNpbXBsZSAzLXNlZ21lbnQgcGF0aFxuICAgICAgaWYgKE1hdGguYWJzKHZlcnRpY2FsRGlzdCkgPCAzMCkge1xuICAgICAgICBjb25zdCBtaWRYID0gKHN0YXJ0WCArIGVuZFgpIC8gMjtcbiAgICAgICAgcGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gViAke2VuZFl9IEggJHttaWRYfSBIICR7ZW5kWH1gO1xuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBwYXRoIHdpdGggdmVydGljYWwgc2VnbWVudCBmaXJzdCwgdGhlbiBob3Jpem9udGFsLCB0aGVuIHZlcnRpY2FsXG4gICAgICBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gViAke3N0YXJ0WSArIHZlcnRpY2FsRGlzdCAvIDJcbiAgICAgICAgICB9IEggJHtlbmRYfSBWICR7ZW5kWX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgc2VsZWN0Rm9ybUZvclN0YWdlKGZvcm06IEZvcm0gfCBudWxsLCBub2RlOiBOb2RlKSB7XG4gICAgLy8gSWYgZm9ybSBpcyBudWxsLCB3ZSdyZSBjbGVhcmluZyB0aGUgc2VsZWN0aW9uXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIGlmICghbm9kZS5zdGFnZURhdGEpIHtcbiAgICAgICAgbm9kZS5zdGFnZURhdGEgPSB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgbm9kZS5zdGFnZURhdGEuZm9ybUlkID0gZm9ybS5Db2RlO1xuICAgICAgICBub2RlLnN0YWdlRGF0YS5mb3JtTmFtZSA9IGZvcm0uTmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENsZWFyIGZvcm0gc2VsZWN0aW9uXG4gICAgICAgIGRlbGV0ZSBub2RlLnN0YWdlRGF0YS5mb3JtSWQ7XG4gICAgICAgIGRlbGV0ZSBub2RlLnN0YWdlRGF0YS5mb3JtTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gRW1pdCBhbiBldmVudCB0byB1cGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICAgIHRoaXMub25TdGFnZVByb3BlcnRpZXNVcGRhdGVkKHtcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICBzdGFnZURhdGE6IG5vZGUuc3RhZ2VEYXRhLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25TdGFnZVByb3BlcnRpZXNVcGRhdGVkKGV2ZW50OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9KTogdm9pZCB7XG4gICAgLy8gRmluZCB0aGUgbm9kZSBpbiB0aGUgc3dpbWxhbmVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3dpbWxhbmUgPSB0aGlzLnN0YXRlLnN3aW1sYW5lc1tpXTtcbiAgICAgIGNvbnN0IG5vZGVJbmRleCA9IHN3aW1sYW5lLm5vZGVzPy5maW5kSW5kZXgoKG4pID0+IG4uaWQgPT09IGV2ZW50Lm5vZGVJZCk7XG5cbiAgICAgIGlmIChub2RlSW5kZXggIT09IHVuZGVmaW5lZCAmJiBub2RlSW5kZXggPj0gMCkge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICAgICAgaWYgKHN3aW1sYW5lLm5vZGVzKSB7XG4gICAgICAgICAgc3dpbWxhbmUubm9kZXNbbm9kZUluZGV4XS5zdGFnZURhdGEgPSB7XG4gICAgICAgICAgICAuLi5zd2ltbGFuZS5ub2Rlc1tub2RlSW5kZXhdLnN0YWdlRGF0YSxcbiAgICAgICAgICAgIC4uLmV2ZW50LnN0YWdlRGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgJ1VwZGF0ZWQgc3RhZ2UgZGF0YSBpbiBzd2ltbGFuZTonLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICdub2RlOicsXG4gICAgICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgICAgICAnZGF0YTonLFxuICAgICAgICAgICAgc3dpbWxhbmUubm9kZXNbbm9kZUluZGV4XS5zdGFnZURhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbjogQ29ubmVjdGlvbik6IHZvaWQge1xuICAgIC8vIEFmdGVyIGEgY29ubmVjdGlvbiBpcyBjcmVhdGVkLCByZWZyZXNoIHRoZSBzb3VyY2Ugbm9kZSB0byB1cGRhdGUgaXRzIHN0YXRlXG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnNvdXJjZU5vZGVJZCk7XG4gICAgaWYgKHNvdXJjZU5vZGVJbmZvICYmIHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgLy8gUmVmcmVzaCBub2RlIHN0YXRlXG4gICAgICB0aGlzLnVwZGF0ZU5vZGVDb25uZWN0aW9ucyhzb3VyY2VOb2RlSW5mby5ub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIHVwZGF0ZSBub2RlJ3MgY29ubmVjdGlvbiBzdGF0dXNcbiAgdXBkYXRlTm9kZUNvbm5lY3Rpb25zKG5vZGU6IFdGTm9kZSk6IHZvaWQge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnMgdGhhdCBjb25uZWN0IHRvIHN0YWdlc1xuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gbm9kZS5pZFxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IG5vZGVzIGFyZSBzdGFnZXNcbiAgICBjb25zdCBjb25uZWN0ZWRTdGFnZU5vZGVzID0gb3V0Z29pbmdDb25uZWN0aW9uc1xuICAgICAgLm1hcCgoY29ubikgPT4gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoY29ubi50YXJnZXROb2RlSWQpKVxuICAgICAgLmZpbHRlcigobm9kZUluZm8pID0+IG5vZGVJbmZvICYmIG5vZGVJbmZvLm5vZGUudHlwZSA9PT0gJ3N0YWdlJyk7XG5cbiAgICBub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5sZW5ndGggPiAxO1xuICAgIG5vZGUuaGFzUGFyYWxsZWxTdGFnZXMgPSBjb25uZWN0ZWRTdGFnZU5vZGVzLmV2ZXJ5KFxuICAgICAgKG5kKSA9PiBuZD8ubm9kZS5zdGFnZURhdGE/LklzUGFyYWxsZWxcbiAgICApO1xuICB9XG5cbiAgb25FZGl0U3dpbWxhbmUoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgc3dpbWxhbmU6IFN3aW1sYW5lSXRlbSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIFByZXZlbnQgdGhlIGNhbnZhcyBjbGljayBldmVudCBmcm9tIGZpcmluZ1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc29sZS5sb2coJ0VkaXQgc3dpbWxhbmUgYnV0dG9uIGNsaWNrZWQgZm9yIHN3aW1sYW5lOicsIHN3aW1sYW5lSW5kZXgpO1xuXG4gICAgLy8gRW1pdCBhIHNwZWNpYWwgZXZlbnQgZm9yIGVkaXRpbmcgYSBzd2ltbGFuZVxuICAgIHRoaXMuY2xpY2tlZFBvc2l0aW9uLmVtaXQoe1xuICAgICAgeDogLTEsIC8vIFNwZWNpYWwgdmFsdWUgdG8gaW5kaWNhdGUgZWRpdCBtb2RlXG4gICAgICB5OiBzd2ltbGFuZUluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAvLyAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIC8vICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgLy8gICAvLyBJbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHNpbWlsYXIgdG8gdGhlIHN0YWdlIGZvcm0gcG9wdXBcbiAgLy8gICAvLyBXZSdsbCBuZWVkIHRvIGFkZCBVSSBlbGVtZW50cyBmb3IgdGhpc1xuICAvLyAgIGNvbnNvbGUubG9nKCdTdGFydCBub2RlIGZvcm0gcG9wdXAgcmVxdWVzdGVkJyk7XG5cbiAgLy8gICAvLyBGb3Igbm93LCB0aGlzIGlzIGEgcGxhY2Vob2xkZXJcbiAgLy8gICAvLyBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHdvdWxkIGxvYWQgZm9ybXMgYW5kIGFkZCB0aGVtIHRvIHRoZSB3b3JrZmxvd1xuICAvLyB9XG5cbiAgdG9nZ2xlU3RhcnROb2RlRm9ybVBvcHVwKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG5vZGVYOiBudW1iZXIsXG4gICAgbm9kZVk6IG51bWJlcixcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgbm9kZT86IE5vZGVcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIFNldCBwb3B1cCBwb3NpdGlvblxuICAgIGNvbnN0IHN3aW1sYW5lT2Zmc2V0ID0gc3dpbWxhbmVJbmRleCAqIDI2MztcbiAgICB0aGlzLnN0YXJ0Tm9kZUZvcm1Qb3B1cFggPSBub2RlWCAtICghbm9kZSA/IDMwIDogMCk7IC8vIFBvc2l0aW9uIG5lYXIgdGhlIHN0YXJ0IG5vZGVcbiAgICB0aGlzLnN0YXJ0Tm9kZUZvcm1Qb3B1cFkgPSBub2RlWSArIHN3aW1sYW5lT2Zmc2V0O1xuXG4gICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgcG9wdXAsIGxvYWQgZm9ybXNcbiAgICBpZiAoIXRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdTdGFydE5vZGVGb3JtcyA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgIC5nZXRGb3JtcygpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhcnROb2RlRm9ybXNMaXN0ID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU3RhcnROb2RlRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybXM6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU3RhcnROb2RlRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMuYWN0aXZlTm9kZUZvckZvcm1TZWxlY3Rpb24gPSBub2RlO1xuICAgICAgY29uc29sZS5sb2coJ0FjdGl2ZSBub2RlIGZvciBmb3JtIHNlbGVjdGlvbjonLCBub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwID0gIXRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cDtcbiAgfVxuXG4gIHNlbGVjdFN0YXJ0Tm9kZUZvcm0oZm9ybTogRm9ybSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RGb3JtRm9yU3RhZ2UoZm9ybSwgdGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dGb3JtKGZvcm0uQ29kZSwgZm9ybS5OYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dGb3JtKG51bGwsIG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBwb3B1cFxuICAgIHRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cCA9IGZhbHNlO1xuICB9XG5cbiAgc2hvd1N1YmZsb3dTZWxlY3Rpb25Qb3B1cCh4OiBudW1iZXIsIHk6IG51bWJlciwgc3dpbWxhbmVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zdWJmbG93UG9wdXBYID0geDtcbiAgICB0aGlzLnN1YmZsb3dQb3B1cFkgPSB5O1xuICAgIHRoaXMucGVuZGluZ1N1YmZsb3dQb3NpdGlvbiA9IHsgc3dpbWxhbmVJbmRleCwgeCwgeSB9O1xuXG4gICAgLy8gU3RvcmUgY29ubmVjdGlvbiBkYXRhIGlmIHdlJ3JlIGNyZWF0aW5nIGZyb20gYSBjb25uZWN0aW9uXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgICAgLy8gU3RvcmUgdGhlIHNvdXJjZSBjb25uZWN0aW9uIGRhdGFcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCA/PyBudWxsO1xuICAgICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXggPVxuICAgICAgICB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlU3dpbWxhbmVJbmRleCA/PyBudWxsO1xuICAgICAgY29uc29sZS5sb2coJ1N0b3JlZCBjb25uZWN0aW9uIGRhdGEgZm9yIHN1YmZsb3c6Jywge1xuICAgICAgICBzb3VyY2VQb2ludDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50LFxuICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIExvYWQgd29ya2Zsb3dzXG4gICAgdGhpcy5pc0xvYWRpbmdXb3JrZmxvd3MgPSB0cnVlO1xuICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgIC5nZXRXb3JrZmxvd3MoKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzTGlzdCA9IHJlc3BvbnNlLlJlc3VsdDtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdXb3JrZmxvd3MgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgd29ya2Zsb3dzOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdXb3JrZmxvd3MgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zaG93U3ViZmxvd1BvcHVwID0gdHJ1ZTtcbiAgfVxuXG4gIHNlbGVjdFN1YmZsb3dXb3JrZmxvdyh3b3JrZmxvdzogV29ya2Zsb3cpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0aW5nIHdvcmtmbG93IGZvciBzdWJmbG93OicsIHdvcmtmbG93Lk5hbWUpO1xuICAgIGNvbnNvbGUubG9nKCdQZW5kaW5nIGNvbm5lY3Rpb24gZGF0YTonLCB7XG4gICAgICBzb3VyY2VQb2ludDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50LFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICBwb3NpdGlvbjogdGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucGVuZGluZ1N1YmZsb3dQb3NpdGlvbikge1xuICAgICAgY29uc3QgeyBzd2ltbGFuZUluZGV4LCB4LCB5IH0gPSB0aGlzLnBlbmRpbmdTdWJmbG93UG9zaXRpb247XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgc3ViZmxvdyBub2RlIHdpdGggdGhlIHNlbGVjdGVkIHdvcmtmbG93IGRhdGFcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICdzdWJmbG93JyxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgdW5kZWZpbmVkLCAvLyBObyBzdGFnZSBkYXRhXG4gICAgICAgIHsgaWQ6IHdvcmtmbG93LkNvZGUsIG5hbWU6IHdvcmtmbG93Lk5hbWUgfVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ0NyZWF0ZWQgc3ViZmxvdyBub2RlOicsIG5vZGUpO1xuXG4gICAgICAvLyBJZiB0aGlzIHdhcyBjcmVhdGVkIGZyb20gYSBjb25uZWN0aW9uLCBjcmVhdGUgdGhlIGNvbm5lY3Rpb25cbiAgICAgIGlmIChub2RlICYmIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCkge1xuICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgY29ubmVjdGlvbiB0byBuZXcgc3ViZmxvdyBub2RlJyk7XG5cbiAgICAgICAgLy8gRmluZCBhIHN1aXRhYmxlIGNvbm5lY3Rpb24gcG9pbnQgb24gdGhlIG5ldyBub2RlXG4gICAgICAgIGlmIChub2RlLmNvbm5lY3Rpb25Qb2ludHMgJiYgbm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludDtcblxuICAgICAgICAgIC8vIEZpbmQgb3Bwb3NpbmcgdHlwZSBjb25uZWN0aW9uIHBvaW50XG4gICAgICAgICAgY29uc3Qgb3Bwb3NpbmdUeXBlID0ge1xuICAgICAgICAgICAgcmlnaHQ6ICdsZWZ0JyxcbiAgICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgICB0b3A6ICdib3R0b20nLFxuICAgICAgICAgICAgYm90dG9tOiAndG9wJyxcbiAgICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSBub2RlLmNvbm5lY3Rpb25Qb2ludHMuZmluZChcbiAgICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09IG9wcG9zaW5nVHlwZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBjb25uZWN0aW9uXG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICBpZDogYGNvbm4tJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApfWAsXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJZDogc291cmNlUG9pbnQubm9kZUlkLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICAgIHNvdXJjZVBvaW50SWQ6IHNvdXJjZVBvaW50LmlkLFxuICAgICAgICAgICAgICB0YXJnZXRQb2ludElkOiB0YXJnZXRQb2ludC5pZCxcbiAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXghLFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIGFjdGlvbjogbnVsbCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIEFkZCBjb25uZWN0aW9uIGRpcmVjdGx5IHRvIHRoZSBzdGF0ZSdzIGNvbm5lY3Rpb25zIGFycmF5XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQWRkZWQgY29ubmVjdGlvbiB0byBzdGF0ZTonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb25uZWN0aW9ucyBhZnRlciBhZGRpbmc6JywgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUuZW5kQ29ubmVjdGlvbkRyYWcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgc2VsZWN0aW9uIHRvb2wgaW4gcGFyZW50IGNvbXBvbmVudFxuICAgICAgdGhpcy5zdWJmbG93U2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwXG4gICAgdGhpcy5zaG93U3ViZmxvd1BvcHVwID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIHNob3dEZWNpc2lvbkNvbmRpdGlvbnNQb3B1cChcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBub2RlOiBXRk5vZGUsXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBHZXQgdGhlIHBvc2l0aW9uIGZvciB0aGUgcG9wdXBcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc3QgZ2xvYmFsWCA9IHBvc2l0aW9uLng7XG4gICAgY29uc3QgZ2xvYmFsWSA9IHBvc2l0aW9uLnk7XG5cbiAgICAvLyBGaW5kIGFsbCBjb25uZWN0aW9ucyBmcm9tIHRoaXMgZGVjaXNpb24gbm9kZVxuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAoY29ubikgPT4gY29ubi5zb3VyY2VOb2RlSWQgPT09IG5vZGUuaWRcbiAgICApO1xuXG4gICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gTm8gY29ubmVjdGlvbnMgdG8gc2hvd1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNob3cgdGhlIGRlY2lzaW9uIGNvbmRpdGlvbnMgcG9wdXBcbiAgICB0aGlzLmFjdGl2ZURlY2lzaW9uTm9kZUlkID0gbm9kZS5pZDtcbiAgICB0aGlzLmRlY2lzaW9uQ29uZGl0aW9uUG9wdXBYID0gZ2xvYmFsWDtcbiAgICB0aGlzLmRlY2lzaW9uQ29uZGl0aW9uUG9wdXBZID0gZ2xvYmFsWTtcblxuICAgIC8vIFNldCB0aGUgY29ycmVjdCBwb3B1cCB2aXNpYmlsaXR5IGZsYWcgLSB0aGlzIGlzIGxpa2VseSB0aGUgaXNzdWVcbiAgICB0aGlzLnNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZyA9IHRydWU7XG5cbiAgICBjb25zb2xlLmxvZygnU2hvd2luZyBkZWNpc2lvbiBwb3B1cDonLCB7XG4gICAgICB4OiBnbG9iYWxYLFxuICAgICAgeTogZ2xvYmFsWSxcbiAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgIGlzVmlzaWJsZTogdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2csXG4gICAgfSk7XG4gIH1cblxuICBlbnN1cmVTd2ltbGFuZUluVmlldyhzd2ltbGFuZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgd2UgaGF2ZSBlbm91Z2ggc3dpbWxhbmVzIHZpc2libGVcbiAgICBjb25zdCByZXF1aXJlZEhlaWdodCA9IChzd2ltbGFuZUluZGV4ICsgMSkgKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuICAgIGlmICh0aGlzLmNhbnZhc0hlaWdodCA8IHJlcXVpcmVkSGVpZ2h0KSB7XG4gICAgICB0aGlzLmNhbnZhc0hlaWdodCA9IHJlcXVpcmVkSGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsUG9zaXRpb24oY29ubmVjdGlvbjogQ29ubmVjdGlvbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdGhEYXRhID0gdGhpcy5zdGF0ZS5nZXRDb25uZWN0aW9uRGF0YShjb25uZWN0aW9uKTtcbiAgICAgIGlmICghcGF0aERhdGEpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gcGF0aCBkYXRhIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkgfSA9IHBhdGhEYXRhO1xuXG4gICAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkKTtcbiAgICAgIGlmICghc291cmNlTm9kZUluZm8pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU291cmNlIG5vZGUgbm90IGZvdW5kIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlO1xuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VOb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAgIChwKSA9PiBwLmlkID09PSBjb25uZWN0aW9uLnNvdXJjZVBvaW50SWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghc291cmNlUG9pbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU291cmNlIHBvaW50IG5vdCBmb3VuZCBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxjdWxhdGUgbWlkcG9pbnQgYmFzZWQgb24gdGhlIGNvbm5lY3Rpb24gcG9pbnQgdHlwZVxuICAgICAgaWYgKHNvdXJjZVBvaW50LnR5cGUgPT09ICdsZWZ0JyB8fCBzb3VyY2VQb2ludC50eXBlID09PSAncmlnaHQnKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxEaXN0ID0gZW5kWCAtIHN0YXJ0WDtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoaG9yaXpvbnRhbERpc3QpIDwgMzApIHtcbiAgICAgICAgICAvLyBGb3Igc2hvcnQgaG9yaXpvbnRhbCBjb25uZWN0aW9uc1xuICAgICAgICAgIGNvbnN0IG1pZFkgPSAoc3RhcnRZICsgZW5kWSkgLyAyO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBzdGFydFggKyAoZW5kWCAtIHN0YXJ0WCkgLyAyLFxuICAgICAgICAgICAgeTogbWlkWSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciByZWd1bGFyIGNvbm5lY3Rpb25zIHN0YXJ0aW5nIGhvcml6b250YWxseVxuICAgICAgICAgIGNvbnN0IG1pZFggPSBzdGFydFggKyBob3Jpem9udGFsRGlzdCAvIDI7XG4gICAgICAgICAgY29uc3QgbWlkWSA9IGVuZFk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pZFgsXG4gICAgICAgICAgICB5OiAoc3RhcnRZICsgZW5kWSkgLyAyLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICd0b3AnIG9yICdib3R0b20nXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsRGlzdCA9IGVuZFkgLSBzdGFydFk7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHZlcnRpY2FsRGlzdCkgPCAzMCkge1xuICAgICAgICAgIC8vIEZvciBzaG9ydCB2ZXJ0aWNhbCBjb25uZWN0aW9uc1xuICAgICAgICAgIGNvbnN0IG1pZFggPSAoc3RhcnRYICsgZW5kWCkgLyAyO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBtaWRYIC0gNzUsIC8vIE1pbnVzIDc1IC0gd2hpY2ggaXMgaGFsZiB0aGUgd2lkdGggb2YgdGhlIGxhYmVsIGl0c2VsZlxuICAgICAgICAgICAgeTogc3RhcnRZICsgKGVuZFkgLSBzdGFydFkpIC8gMixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciByZWd1bGFyIGNvbm5lY3Rpb25zIHN0YXJ0aW5nIHZlcnRpY2FsbHlcbiAgICAgICAgICBjb25zdCBtaWRYID0gZW5kWDtcbiAgICAgICAgICBjb25zdCBtaWRZID0gc3RhcnRZICsgdmVydGljYWxEaXN0IC8gMjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogKChzdGFydFggKyBlbmRYKSAvIDIpIC0gNzUsIC8vIE1pbnVzIDc1IC0gd2hpY2ggaXMgaGFsZiB0aGUgd2lkdGggb2YgdGhlIGxhYmVsIGl0c2VsZlxuICAgICAgICAgICAgeTogbWlkWSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdFcnJvciBjYWxjdWxhdGluZyBsYWJlbCBwb3NpdGlvbiBmb3IgY29ubmVjdGlvbjonLFxuICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICB9XG4gIH1cblxuICBzYXZlQ29ubmVjdGlvbkxhYmVsKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIGxhYmVsOiBzdHJpbmcpIHtcbiAgICAvLyBVcGRhdGUgdGhlIGNvbm5lY3Rpb24gbGFiZWwgaW4gdGhlIHN0YXRlXG4gICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMubWFwKChjb25uKSA9PiB7XG4gICAgICBpZiAoY29ubi5pZCA9PT0gY29ubmVjdGlvbi5pZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbm4sXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbm47XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYW52YXMtY29udGFpbmVyXCI+XG4gIDxzdmdcbiAgICAjY2FudmFzXG4gICAgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIlxuICAgIFthdHRyLmhlaWdodF09XCJjYW52YXNIZWlnaHRcIlxuICAgIGNsYXNzPVwiZGVzaWduZXItY2FudmFzXCJcbiAgICAoY2xpY2spPVwib25DYW52YXNDbGljaygkZXZlbnQpXCJcbiAgPlxuICAgIDxkZWZzPlxuICAgICAgPCEtLSBHcmlkIHBhdHRlcm4gZGVmaW5pdGlvbiAtLT5cblxuICAgICAgPHBhdHRlcm5cbiAgICAgICAgaWQ9XCJncmlkXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiZ3JpZFNpemVcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiZ3JpZFNpemVcIlxuICAgICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0gMjAgMCBMIDAgMCAwIDIwXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgc3Ryb2tlPVwiI2UyZThmMFwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMC41XCJcbiAgICAgICAgLz5cbiAgICAgIDwvcGF0dGVybj5cblxuICAgICAgPCEtLSBBcnJvdyBoZWFkIG1hcmtlciBkZWZpbml0aW9uIC0tPlxuICAgICAgPG1hcmtlclxuICAgICAgICBpZD1cImFycm93aGVhZFwiXG4gICAgICAgIG1hcmtlcldpZHRoPVwiMTBcIlxuICAgICAgICBtYXJrZXJIZWlnaHQ9XCI3XCJcbiAgICAgICAgcmVmWD1cIjlcIlxuICAgICAgICByZWZZPVwiMy41XCJcbiAgICAgICAgb3JpZW50PVwiYXV0b1wiXG4gICAgICA+XG4gICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjAgMCwgMTAgMy41LCAwIDdcIiBmaWxsPVwiI0QzNkNGRlwiIC8+XG4gICAgICA8L21hcmtlcj5cblxuICAgICAgPCEtLSBDb25uZWN0aW9uIHBvaW50IHN0eWxlcyAtLT5cbiAgICAgIDxjaXJjbGVcbiAgICAgICAgaWQ9XCJjb25uZWN0aW9uLXBvaW50LXRlbXBsYXRlXCJcbiAgICAgICAgcj1cIjVcIlxuICAgICAgICBmaWxsPVwiI0QzNkNGRlwiXG4gICAgICAgIHN0cm9rZT1cIiNGRkZGRkZcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gRGFzaGVkIGxpbmUgc3R5bGUgZm9yIGNvbm5lY3Rpb24gcHJldmlldyAtLT5cbiAgICAgIDxwYXR0ZXJuXG4gICAgICAgIGlkPVwiZGFzaGVkLWxpbmVcIlxuICAgICAgICB3aWR0aD1cIjEwXCJcbiAgICAgICAgaGVpZ2h0PVwiMTBcIlxuICAgICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgeDE9XCIwXCJcbiAgICAgICAgICB5MT1cIjVcIlxuICAgICAgICAgIHgyPVwiMTBcIlxuICAgICAgICAgIHkyPVwiNVwiXG4gICAgICAgICAgc3Ryb2tlPVwiI0QzNkNGRlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjUsNVwiXG4gICAgICAgIC8+XG4gICAgICA8L3BhdHRlcm4+XG5cbiAgICAgIEBmb3IgKHN3aW1sYW5lIG9mIHN0YXRlLnN3aW1sYW5lczsgdHJhY2sgc3dpbWxhbmUub3JkZXIpIHtcbiAgICAgIDxjbGlwUGF0aCBbYXR0ci5pZF09XCInc3dpbWxhbmUtY2xpcC0nICsgc3dpbWxhbmUub3JkZXJcIj5cbiAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIFthdHRyLndpZHRoXT1cImNhbnZhc1dpZHRoXCIgaGVpZ2h0PVwiMjYzXCIgLz5cbiAgICAgIDwvY2xpcFBhdGg+XG4gICAgICB9XG4gICAgPC9kZWZzPlxuXG4gICAgPCEtLSBCYWNrZ3JvdW5kIGdyaWQgLS0+XG4gICAgPHJlY3Qgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGZpbGw9XCJ1cmwoI2dyaWQpXCIgLz5cblxuICAgIDwhLS0gRGlzcGxheSBhIG1lc3NhZ2Ugd2hlbiBubyBzd2ltbGFuZXMgZXhpc3QgLS0+XG4gICAgQGlmIChzdGF0ZS5zd2ltbGFuZXMubGVuZ3RoID09PSAwKSB7XG4gICAgPHRleHRcbiAgICAgIHg9XCI1MCVcIlxuICAgICAgeT1cIjUwJVwiXG4gICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgZm9udC1zaXplPVwiMTZcIlxuICAgICAgZmlsbD1cIiM5NGEzYjhcIlxuICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgID5cbiAgICAgIFNlbGVjdCB0aGUgU3dpbWxhbmUgdG9vbCBhbmQgY2xpY2sgb24gdGhlIGNhbnZhcyB0byBhZGQgYSBzd2ltbGFuZVxuICAgIDwvdGV4dD5cbiAgICB9XG5cbiAgICA8IS0tIFRoaXMgaXMgd2hlcmUgd29ya2Zsb3cgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCBsYXRlciAtLT5cbiAgICBAZm9yIChzd2ltbGFuZSBvZiBzdGF0ZS5zd2ltbGFuZXM7IHRyYWNrIHN3aW1sYW5lLm9yZGVyKSB7XG4gICAgPCEtLSA8Z1xuICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoMCwnICsgc3dpbWxhbmUub3JkZXIgKiAyNjMgKyAnKSdcIlxuICAgICAgW2F0dHIuY2xpcC1wYXRoXT1cIid1cmwoI3N3aW1sYW5lLWNsaXAtJyArIHN3aW1sYW5lLm9yZGVyICsgJyknXCJcbiAgICA+XG4gICAgICA8cmVjdFxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiMjYzXCJcbiAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICBzdHJva2U9XCIjZTJlOGYwXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICA+PC9yZWN0PlxuXG4gICAgICA8cmVjdFxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIlxuICAgICAgICBoZWlnaHQ9XCI0MFwiXG4gICAgICAgIGZpbGw9XCIjZjhmYWZjXCJcbiAgICAgICAgc3Ryb2tlPVwiI2UyZThmMFwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgPjwvcmVjdD5cblxuICAgICAgPHRleHRcbiAgICAgICAgeD1cIjIwXCJcbiAgICAgICAgeT1cIjI1XCJcbiAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgZm9udC1zaXplPVwiMTRcIlxuICAgICAgICBmaWxsPVwiIzMzMzMzM1wiXG4gICAgICAgIGZvbnQtd2VpZ2h0PVwiYm9sZFwiXG4gICAgICA+XG4gICAgICAgIHt7IHN3aW1sYW5lLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG5cbiAgICAgIDxnXG4gICAgICAgIGNsYXNzPVwiZWRpdC1zd2ltbGFuZS1idXR0b25cIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgxMDAsIDIwKSdcIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgb25FZGl0U3dpbWxhbmUoJGV2ZW50LCBzd2ltbGFuZSwgc3dpbWxhbmUub3JkZXIpO1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8cmVjdFxuICAgICAgICAgIHg9XCItNVwiXG4gICAgICAgICAgeT1cIi0xNVwiXG4gICAgICAgICAgd2lkdGg9XCI0MFwiXG4gICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgIGZpbGw9XCIjZjNlOGZmXCJcbiAgICAgICAgICByeD1cIjNcIlxuICAgICAgICAgIHJ5PVwiM1wiXG4gICAgICAgICAgc3Ryb2tlPVwiI2Q4YjRmZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgID48L3JlY3Q+XG4gICAgICAgIDx0ZXh0XG4gICAgICAgICAgeD1cIjE1XCJcbiAgICAgICAgICB5PVwiMFwiXG4gICAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgICBmb250LXNpemU9XCIxMlwiXG4gICAgICAgICAgZmlsbD1cIiM3ZTIyY2VcIlxuICAgICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIEVkaXRcbiAgICAgICAgPC90ZXh0PlxuICAgICAgPC9nPlxuXG4gICAgICA8ZyBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgyMDAsIDIwKSdcIj5cbiAgICAgICAgQGZvciAodGFnIG9mIHN3aW1sYW5lLnRhZ3Muc2xpY2UoMCwgMyk7IHRyYWNrIHRhZy5OYW1lOyBsZXQgaSA9ICRpbmRleClcbiAgICAgICAge1xuICAgICAgICA8dGV4dFxuICAgICAgICAgIFthdHRyLnhdPVwiaSAqIDEwMFwiXG4gICAgICAgICAgeT1cIjVcIlxuICAgICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgICAgZm9udC1zaXplPVwiMTJcIlxuICAgICAgICAgIGZpbGw9XCIjNjY2NjY2XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRhZy5OYW1lIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgICAgfSBAaWYgKHN3aW1sYW5lLnRhZ3MubGVuZ3RoID4gMykge1xuICAgICAgICA8dGV4dFxuICAgICAgICAgIFthdHRyLnhdPVwiMyAqIDEwMCArIDEwXCJcbiAgICAgICAgICB5PVwiNVwiXG4gICAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgICBmb250LXNpemU9XCIxMlwiXG4gICAgICAgICAgZmlsbD1cIiM2NjY2NjZcIlxuICAgICAgICA+XG4gICAgICAgICAgK3t7IHN3aW1sYW5lLnRhZ3MubGVuZ3RoIC0gMyB9fSBtb3JlXG4gICAgICAgIDwvdGV4dD5cbiAgICAgICAgfVxuICAgICAgPC9nPlxuICAgIDwvZz4gLS0+XG5cbiAgICA8ZyBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgwLCcgKyBzd2ltbGFuZS5vcmRlciAqIDI2MyArICcpJ1wiPlxuICAgICAgPCEtLSBTd2ltbGFuZSBjb250YWluZXIgLSByZW1vdmUgc3Ryb2tlIHRvIG1ha2UgaXQgcHVyZWx5IGJhY2tncm91bmQgLS0+XG4gICAgICA8cmVjdFxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiMjYzXCJcbiAgICAgICAgW2F0dHIuZmlsbF09XCJzd2ltbGFuZS5vcmRlciAlIDIgPT09IDAgPyAnI0ZDRjNGRicgOiAnI0VDRkZGNSdcIlxuICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgID48L3JlY3Q+XG5cbiAgICAgIDwhLS0gVmVydGljYWwgc3dpbWxhbmUgbGFiZWwgb24gdGhlIGxlZnQgLS0+XG4gICAgICA8ZyBjbGFzcz1cInN3aW1sYW5lLWxhYmVsXCI+XG4gICAgICAgIDwhLS0gUHVycGxlIGJhY2tncm91bmQgZm9yIHRoZSBsYWJlbCAtLT5cbiAgICAgICAgPHJlY3RcbiAgICAgICAgICB4PVwiMC41XCJcbiAgICAgICAgICB5PVwiMC41XCJcbiAgICAgICAgICB3aWR0aD1cIjQzXCJcbiAgICAgICAgICBoZWlnaHQ9XCIyMTVcIlxuICAgICAgICAgIHJ4PVwiMTAuNVwiXG4gICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgPjwvcmVjdD5cblxuICAgICAgICA8IS0tIFBsdXMgYnV0dG9uIGF0IHRoZSB0b3AgLS0+XG4gICAgICAgIDxnXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgb25FZGl0U3dpbWxhbmUoJGV2ZW50LCBzd2ltbGFuZSwgc3dpbWxhbmUub3JkZXIpO1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICB4PVwiMTIuNVwiXG4gICAgICAgICAgICB5PVwiMTBcIlxuICAgICAgICAgICAgd2lkdGg9XCIxOFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxOFwiXG4gICAgICAgICAgICBmaWxsPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgID48L3JlY3Q+XG5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk0yMi41MiAxMi4xNzRWMTcuMDhIMjcuNDdWMTguNTFIMjIuNTJWMjMuMzk0SDIxLjJWMTguNTFIMTYuMjVWMTcuMDhIMjEuMlYxMi4xNzRIMjIuNTJaXCJcbiAgICAgICAgICAgIGZpbGw9XCIjMDAwMEZGXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGx1cy1pY29uXCJcbiAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICA8L2c+XG5cbiAgICAgICAgPCEtLSBTd2ltbGFuZSBsYWJlbCAtLT5cbiAgICAgICAgPHRleHRcbiAgICAgICAgICB4PVwiMjJcIlxuICAgICAgICAgIHk9XCIxMDZcIlxuICAgICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgICAgZm9udC1zaXplPVwiMTRcIlxuICAgICAgICAgIGZpbGw9XCIjMzMzMzMzXCJcbiAgICAgICAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKC05MCwgMjIsIDEwMClcIlxuICAgICAgICA+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIHN3aW1sYW5lLmxhYmVsLmxlbmd0aCA+IDEyXG4gICAgICAgICAgICAgID8gc3dpbWxhbmUubGFiZWwuc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICAgICAgICAgICAgOiBzd2ltbGFuZS5sYWJlbFxuICAgICAgICAgIH19XG4gICAgICAgIDwvdGV4dD5cblxuICAgICAgICA8IS0tIFRhZyBjb3VudCBpbmRpY2F0b3IgYXQgdGhlIGJvdHRvbSAtLT5cbiAgICAgICAgPHJlY3RcbiAgICAgICAgICB4PVwiMTEuNVwiXG4gICAgICAgICAgeT1cIjE4N1wiXG4gICAgICAgICAgd2lkdGg9XCIyMVwiXG4gICAgICAgICAgaGVpZ2h0PVwiMTlcIlxuICAgICAgICAgIHJ4PVwiOS41XCJcbiAgICAgICAgICBmaWxsPVwiIzlFOUU5RVwiXG4gICAgICAgID48L3JlY3Q+XG4gICAgICAgIDx0ZXh0XG4gICAgICAgICAgeD1cIjI0XCJcbiAgICAgICAgICB5PVwiMjA2XCJcbiAgICAgICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjEyXCJcbiAgICAgICAgICBmaWxsPVwiYmxhY2tcIlxuICAgICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTkwLCAyMiwgMjAwKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzd2ltbGFuZS50YWdzLmxlbmd0aCB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICA8L2c+XG4gICAgPC9nPlxuXG4gICAgfVxuXG4gICAgPCEtLSBOb2RlcyAtLT5cbiAgICBAZm9yIChzd2ltbGFuZSBvZiBzdGF0ZS5zd2ltbGFuZXM7IHRyYWNrIHN3aW1sYW5lLm9yZGVyKSB7XG4gICAgPCEtLSBSZW5kZXIgbm9kZXMgaW4gdGhpcyBzd2ltbGFuZSAtLT5cbiAgICBAZm9yIChub2RlIG9mIHN3aW1sYW5lLm5vZGVzOyB0cmFjayBub2RlLmlkKSB7XG4gICAgPGdcbiAgICAgIGNsYXNzPVwibm9kZS1lbGVtZW50XCJcbiAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJcbiAgICAgICAgJ3RyYW5zbGF0ZSgnICsgbm9kZS54ICsgJywnICsgKG5vZGUueSAtIHN3aW1sYW5lLm9yZGVyICogMjYzKSArICcpJ1xuICAgICAgXCJcbiAgICAgIChtb3VzZWVudGVyKT1cInNob3dDb25uZWN0aW9uUG9pbnRzKG5vZGUuaWQsIHN3aW1sYW5lLm9yZGVyKVwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJoaWRlQ29ubmVjdGlvblBvaW50cyhub2RlLmlkKVwiXG4gICAgPlxuICAgICAgPCEtLSBTdGFydCBub2RlIGluZGljYXRvciAoY2lyY2xlIGFuZCBhcnJvdykgZm9yIHRoZSBmaXJzdCBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLmlzU3RhcnROb2RlKSB7XG4gICAgICA8IS0tIENpcmNsZSAtLT5cbiAgICAgIDxjaXJjbGVcbiAgICAgICAgY3g9XCItNTBcIlxuICAgICAgICBjeT1cIjUwXCJcbiAgICAgICAgcj1cIjMwXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICA+PC9jaXJjbGU+XG4gICAgICA8IS0tIEZvcm0gaWNvbiBmb3Igc3RhcnQgbm9kZSAtLT5cbiAgICAgIDxzdmc6Z1xuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgdG9nZ2xlU3RhcnROb2RlRm9ybVBvcHVwKCRldmVudCwgbm9kZS54LCBub2RlLnksIHN3aW1sYW5lLm9yZGVyKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQ1LCA0MilcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgcG9pbnRlci1ldmVudHM6IGFsbFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gVHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRvIGNhcHR1cmUgY2xpY2tzIC0tPlxuICAgICAgICA8c3ZnOnJlY3RcbiAgICAgICAgICB4PVwiLTJcIlxuICAgICAgICAgIHk9XCItMlwiXG4gICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAvPlxuICAgICAgICA8c3ZnOnBhdGhcbiAgICAgICAgICBkPVwiTTE2LjUgMjAuNDc1VjE3LjQ3NUgxMy41VjE2LjQ3NUgxNi41VjEzLjQ3NUgxNy41VjE2LjQ3NUgyMC41VjE3LjQ3NUgxNy41VjIwLjQ3NUgxNi41Wk0zLjUgMTcuNVYxNi41SDQuNVYxNy41SDMuNVpNNi41IDE3LjVWMTYuNUgxMS41MTdDMTEuNTA1NyAxNi42NzY3IDExLjUwNDMgMTYuODQ1IDExLjUxMyAxNy4wMDVDMTEuNTIxIDE3LjE2NSAxMS41MzEgMTcuMzMgMTEuNTQzIDE3LjVINi41Wk0zLjUgMTMuNVYxMi41SDQuNVYxMy41SDMuNVpNNi41IDEzLjVWMTIuNUgxMy44MDRDMTMuNjEyNyAxMi42Mzg3IDEzLjQzMzMgMTIuNzkxMyAxMy4yNjYgMTIuOTU4QzEzLjA5OTMgMTMuMTI0NyAxMi45Mzc3IDEzLjMwNTMgMTIuNzgxIDEzLjVINi41Wk0zLjUgOS41VjguNUg0LjVWOS41SDMuNVpNNi41IDkuNVY4LjVIMTguNVY5LjVINi41Wk0zLjUgNS41VjQuNUg0LjVWNS41SDMuNVpNNi41IDUuNVY0LjVIMTguNVY1LjVINi41WlwiXG4gICAgICAgICAgW2F0dHIuZmlsbF09XCJzdGF0ZS53b3JrZmxvd0Zvcm1JZCA/ICcjRDM2Q0ZGJyA6ICdibGFjaydcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInNjYWxlKDAuNylcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc6Zz5cbiAgICAgIDwhLS0gQXJyb3cgZnJvbSBjaXJjbGUgdG8gbm9kZSAtLT5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNIC0yMCA1MCBMIDAgNTBcIlxuICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgIG1hcmtlci1lbmQ9XCJ1cmwoI2Fycm93aGVhZClcIlxuICAgICAgPjwvcGF0aD5cbiAgICAgIH1cblxuICAgICAgPCEtLSBFeGl0IHBvaW50IGluZGljYXRvciAoY2lyY2xlIGFuZCBhcnJvdykgLS0+XG4gICAgICBAaWYgKG5vZGUuc3RhZ2VEYXRhPy5Jc0V4aXRQb2ludCkge1xuICAgICAgPCEtLSBBcnJvdyBmcm9tIG5vZGUgdG8gY2lyY2xlIC0tPlxuICAgICAgPHBhdGhcbiAgICAgICAgW2F0dHIuZF09XCInTSAnICsgbm9kZS53aWR0aCArICcgNTAgTCAnICsgKG5vZGUud2lkdGggKyAyMCkgKyAnIDUwJ1wiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgbWFya2VyLWVuZD1cInVybCgjYXJyb3doZWFkKVwiXG4gICAgICA+PC9wYXRoPlxuICAgICAgPCEtLSBDaXJjbGUgLS0+XG4gICAgICA8Y2lyY2xlXG4gICAgICAgIFthdHRyLmN4XT1cIm5vZGUud2lkdGggKyA1MFwiXG4gICAgICAgIGN5PVwiNTBcIlxuICAgICAgICByPVwiMzBcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgID48L2NpcmNsZT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBTdGFnZSBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIDwhLS0gPHJlY3RcbiAgICAgICAgICAgICAgICAgIHg9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLndpZHRoXT1cIm5vZGUud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm5vZGUuaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgICAgICAgICAgPjwvcmVjdD4gLS0+XG4gICAgICA8c3ZnOmdcbiAgICAgICAgbGliLXN0YWdlLW5vZGVcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgIFtpc1N0YXJ0Tm9kZV09XCJub2RlLmlzU3RhcnROb2RlXCJcbiAgICAgICAgKHN0YWdlUHJvcGVydGllc1VwZGF0ZWQpPVwib25TdGFnZVByb3BlcnRpZXNVcGRhdGVkKCRldmVudClcIlxuICAgICAgICAoc2hvd1NoaWVsZERpYWxvZyk9XCJvblNob3dTaGllbGREaWFsb2coJGV2ZW50KVwiXG4gICAgICAgIChzaG93RXNjYWxhdGlvbkRpYWxvZyk9XCJvblNob3dFc2NhbGF0aW9uRGlhbG9nKCRldmVudClcIlxuICAgICAgICAoc2hvd0Zvcm1EaWFsb2cpPVwiXG4gICAgICAgICAgdG9nZ2xlU3RhcnROb2RlRm9ybVBvcHVwKCRldmVudCwgbm9kZS54LCBub2RlLnksIHN3aW1sYW5lLm9yZGVyLCBub2RlKVxuICAgICAgICBcIlxuICAgICAgPjwvc3ZnOmc+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRGVjaXNpb24gbm9kZSAtLT5cbiAgICAgIEBpZiAobm9kZS50eXBlID09PSAnZGVjaXNpb24nKSB7XG4gICAgICA8cGF0aFxuICAgICAgICBbYXR0ci5kXT1cIlxuICAgICAgICAgICdNIDAgJyArXG4gICAgICAgICAgbm9kZS5oZWlnaHQgLyAyICtcbiAgICAgICAgICAnIEwgJyArXG4gICAgICAgICAgbm9kZS53aWR0aCAvIDIgK1xuICAgICAgICAgICcgMCcgK1xuICAgICAgICAgICcgTCAnICtcbiAgICAgICAgICBub2RlLndpZHRoICtcbiAgICAgICAgICAnICcgK1xuICAgICAgICAgIG5vZGUuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgJyBMICcgK1xuICAgICAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICAgICAnICcgK1xuICAgICAgICAgIG5vZGUuaGVpZ2h0ICtcbiAgICAgICAgICAnIFonXG4gICAgICAgIFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlPVwiI0QzNkNGRlwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgPjwvcGF0aD5cblxuICAgICAgPCEtLSBEZWNpc2lvbiBub2RlIGNvbmRpdGlvbiBpbmRpY2F0b3IgaWNvbiAtLT5cbiAgICAgIDxzdmc6Z1xuICAgICAgICAoY2xpY2spPVwic2hvd0RlY2lzaW9uQ29uZGl0aW9uc1BvcHVwKCRldmVudCwgbm9kZSwgc3dpbWxhbmUub3JkZXIpXCJcbiAgICAgICAgY2xhc3M9XCJkZWNpc2lvbi1jb25kaXRpb24taWNvblwiXG4gICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJcbiAgICAgICAgICAndHJhbnNsYXRlKCcgK1xuICAgICAgICAgIChub2RlLndpZHRoIC8gMiAtIDEwKSArXG4gICAgICAgICAgJywnICtcbiAgICAgICAgICAobm9kZS5oZWlnaHQgLyAyIC0gMTApICtcbiAgICAgICAgICAnKSdcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHN2ZzpyZWN0XG4gICAgICAgICAgeD1cIi01XCJcbiAgICAgICAgICB5PVwiLTVcIlxuICAgICAgICAgIHdpZHRoPVwiMzBcIlxuICAgICAgICAgIGhlaWdodD1cIjMwXCJcbiAgICAgICAgICBmaWxsPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHN2ZzpwYXRoXG4gICAgICAgICAgZD1cIk0xMCAwSDIwVjJIMTBWMFpNMTAgOEgyMFYxMEgxMFY4Wk0xMCA0SDIwVjZIMTBWNFpNMCAwSDhWMkgwVjBaTTAgOEg4VjEwSDBWOFpNMCA0SDhWNkgwVjRaXCJcbiAgICAgICAgICBmaWxsPVwiI0QzNkNGRlwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2ZzpnPlxuICAgICAgfVxuXG4gICAgICA8IS0tIEZvcm0gbm9kZSAtLT5cbiAgICAgIEBpZiAobm9kZS50eXBlID09PSAnZm9ybScpIHtcbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNOTUuMDYyNSA1MC41NTkxVjk1LjA2MjVDOTUuMDYyNSA5Ny45NzE2IDkzLjkwNjkgMTAwLjc2MiA5MS44NDk4IDEwMi44MTlDODkuNzkyOCAxMDQuODc2IDg3LjAwMjggMTA2LjAzMSA4NC4wOTM4IDEwNi4wMzFIMzIuOTA2MkMyOS45OTcyIDEwNi4wMzEgMjcuMjA3MiAxMDQuODc2IDI1LjE1MDIgMTAyLjgxOUMyMy4wOTMxIDEwMC43NjIgMjEuOTM3NSA5Ny45NzE2IDIxLjkzNzUgOTUuMDYyNVYyMS45Mzc1QzIxLjkzNzUgMTkuMDI4NCAyMy4wOTMxIDE2LjIzODUgMjUuMTUwMiAxNC4xODE0QzI3LjIwNzIgMTIuMTI0NCAyOS45OTcyIDEwLjk2ODggMzIuOTA2MiAxMC45Njg4SDU1LjQ3MjJDNTcuNDEwOSAxMC45NjkgNTkuMjcwMSAxMS43MzkyIDYwLjY0MTIgMTMuMTA5OUw5Mi45MjEzIDQ1LjM5MDFDOTQuMjkyIDQ2Ljc2MTEgOTUuMDYyMiA0OC42MjA0IDk1LjA2MjUgNTAuNTU5MVpcIlxuICAgICAgICB0cmFuc2Zvcm09XCJzY2FsZSgwLjcpXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNNTguNSAxMi43OTY5VjQwLjIxODhDNTguNSA0Mi4xNTgxIDU5LjI3MDQgNDQuMDE4MSA2MC42NDE4IDQ1LjM4OTVDNjIuMDEzMSA0Ni43NjA4IDYzLjg3MzEgNDcuNTMxMiA2NS44MTI1IDQ3LjUzMTJIOTMuMjM0NFwiXG4gICAgICAgIHRyYW5zZm9ybT1cInNjYWxlKDAuNylcIlxuICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgICA8dGV4dFxuICAgICAgICB4PVwiNTAlXCJcbiAgICAgICAgeT1cIjUwJVwiXG4gICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgICBmb250LXNpemU9XCIxNFwiXG4gICAgICAgIGZpbGw9XCIjRDM2Q0ZGXCJcbiAgICAgID5cbiAgICAgICAgRm9ybVxuICAgICAgPC90ZXh0PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFN1YmZsb3cgbm9kZSAtLT5cbiAgICAgIEBpZiAobm9kZS50eXBlID09PSAnc3ViZmxvdycpIHtcbiAgICAgIDxwYXRoXG4gICAgICAgIFthdHRyLmRdPVwiXG4gICAgICAgICAgJ00gMSAnICtcbiAgICAgICAgICBub2RlLmhlaWdodCAvIDQgK1xuICAgICAgICAgICcgTCAnICtcbiAgICAgICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAgICAgJyAxIEwgJyArXG4gICAgICAgICAgKG5vZGUud2lkdGggLSAxKSArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICBub2RlLmhlaWdodCAvIDQgK1xuICAgICAgICAgICcgViAnICtcbiAgICAgICAgICAobm9kZS5oZWlnaHQgKiAzKSAvIDQgK1xuICAgICAgICAgICcgTCAnICtcbiAgICAgICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAobm9kZS5oZWlnaHQgLSAxKSArXG4gICAgICAgICAgJyBMIDEgJyArXG4gICAgICAgICAgKG5vZGUuaGVpZ2h0ICogMykgLyA0ICtcbiAgICAgICAgICAnIFonXG4gICAgICAgIFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlPVwiI0QzNkNGRlwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgPjwvcGF0aD5cbiAgICAgIDx0ZXh0XG4gICAgICAgIFthdHRyLnhdPVwibm9kZS53aWR0aCAvIDJcIlxuICAgICAgICBbYXR0ci55XT1cIm5vZGUuaGVpZ2h0IC8gMlwiXG4gICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgYWxpZ25tZW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgZm9udC1zaXplPVwiMTBcIlxuICAgICAgICBmaWxsPVwiIzAwMDAwMFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gTGltaXQgdGV4dCBsZW5ndGggLS0+XG4gICAgICAgIHt7XG4gICAgICAgICAgKG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lIHx8IFwiU3ViZmxvd1wiKS5sZW5ndGggPiAxMlxuICAgICAgICAgICAgPyAobm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgXCJTdWJmbG93XCIpLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgICAgICAgICA6IG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lIHx8IFwiU3ViZmxvd1wiXG4gICAgICAgIH19XG4gICAgICA8L3RleHQ+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQ29ubmVjdGlvbiBwb2ludHMgZm9yIHRoaXMgbm9kZSAtLT5cbiAgICAgIEBmb3IgKHBvaW50IG9mIG5vZGUuY29ubmVjdGlvblBvaW50cyB8fCBbXTsgdHJhY2sgcG9pbnQuaWQpIHsgQGlmXG4gICAgICAoaXNDb25uZWN0aW9uUG9pbnRWaXNpYmxlKG5vZGUuaWQpKSB7XG4gICAgICA8dXNlXG4gICAgICAgIFthdHRyLmhyZWZdPVwiJyNjb25uZWN0aW9uLXBvaW50LXRlbXBsYXRlJ1wiXG4gICAgICAgIFthdHRyLnhdPVwicG9pbnQueFwiXG4gICAgICAgIFthdHRyLnldPVwicG9pbnQueVwiXG4gICAgICAgIFthdHRyLmlkXT1cInBvaW50LmlkXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJzdGFydENvbm5lY3Rpb25EcmFnKCRldmVudCwgcG9pbnQsIHN3aW1sYW5lLm9yZGVyKVwiXG4gICAgICAvPlxuICAgICAgfSB9XG4gICAgPC9nPlxuICAgIDwhLS0gQSB0cmFuc3BhcmVudCBob3ZlciBhcmVhIGZvciBpbXByb3ZlZCBob3ZlciBkZXRlY3Rpb24gLS0+XG4gICAgPHJlY3RcbiAgICAgIFthdHRyLnhdPVwibm9kZS54IC0gMTBcIlxuICAgICAgW2F0dHIueV09XCJub2RlLnkgLSAxMFwiXG4gICAgICBbYXR0ci53aWR0aF09XCJub2RlLndpZHRoICsgMjBcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cIm5vZGUuaGVpZ2h0ICsgMjBcIlxuICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgIChtb3VzZW92ZXIpPVwic2hvd0Nvbm5lY3Rpb25Qb2ludHMobm9kZS5pZCwgc3dpbWxhbmUub3JkZXIpXCJcbiAgICAgIChtb3VzZW91dCk9XCJoaWRlQ29ubmVjdGlvblBvaW50cyhub2RlLmlkKVwiXG4gICAgICBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCJcbiAgICAvPlxuICAgIH0gfVxuXG4gICAgPCEtLSBDb25uZWN0aW9ucyAtLT5cbiAgICBAZm9yIChjb25uZWN0aW9uIG9mIHN0YXRlLmNvbm5lY3Rpb25zOyB0cmFjayBjb25uZWN0aW9uLmlkKSB7XG4gICAgPGcgY2xhc3M9XCJjb25uZWN0aW9uLWVsZW1lbnRcIj5cbiAgICAgIDxwYXRoXG4gICAgICAgIFthdHRyLmRdPVwiZ2V0Q29ubmVjdGlvblBhdGhGb3JTYXZlZENvbm5lY3Rpb24oY29ubmVjdGlvbilcIlxuICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgbWFya2VyLWVuZD1cInVybCgjYXJyb3doZWFkKVwiXG4gICAgICA+PC9wYXRoPlxuXG4gICAgICA8IS0tIENvbm5lY3Rpb24gTGFiZWwgLS0+XG4gICAgICBAaWYgKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkICYmIGNvbm5lY3Rpb24udGFyZ2V0Tm9kZUlkKSB7XG4gICAgICA8Zm9yZWlnbk9iamVjdFxuICAgICAgICBbYXR0ci54XT1cImdldExhYmVsUG9zaXRpb24oY29ubmVjdGlvbikueFwiXG4gICAgICAgIFthdHRyLnldPVwiZ2V0TGFiZWxQb3NpdGlvbihjb25uZWN0aW9uKS55XCJcbiAgICAgICAgd2lkdGg9XCIxNTBcIlxuICAgICAgICBoZWlnaHQ9XCI0MFwiXG4gICAgICAgIHN0eWxlPVwib3ZlcmZsb3c6IHZpc2libGU7IHBvaW50ZXItZXZlbnRzOiBhbGw7XCJcbiAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoLTc1LCAtMTApJ1wiXG4gICAgICA+XG4gICAgICAgIDx3Zi1sYWJlbC1lZGl0b3JcbiAgICAgICAgICBbbGFiZWxdPVwiY29ubmVjdGlvbi5sYWJlbCB8fCAnTmV3IEFjdGlvbidcIlxuICAgICAgICAgIFt4XT1cIjBcIlxuICAgICAgICAgIFt5XT1cIjBcIlxuICAgICAgICAgIFtpc0Nvbm5lY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgKGxhYmVsQ2hhbmdlKT1cInNhdmVDb25uZWN0aW9uTGFiZWwoY29ubmVjdGlvbiwgJGV2ZW50KVwiXG4gICAgICAgICAgKG9wZW5EaWFsb2cpPVwib25TaG93QWN0aW9uRGlhbG9nKGNvbm5lY3Rpb24pXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgIH1cbiAgICA8L2c+XG4gICAgfVxuXG4gICAgPCEtLSBDb25uZWN0aW9uIHByZXZpZXcgbGluZSAtLT5cbiAgICBAaWYgKHN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpIHtcbiAgICA8Zz5cbiAgICAgIDxwYXRoXG4gICAgICAgIFthdHRyLmRdPVwiZ2V0Q29ubmVjdGlvblBhdGgoKVwiXG4gICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjUsNVwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgID48L3BhdGg+XG4gICAgPC9nPlxuICAgIH1cbiAgPC9zdmc+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwicG9wdXBWaXNpYmxlXCJcbiAgICBbc3R5bGUucG9zaXRpb25dPVwiJ2Fic29sdXRlJ1wiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwicG9wdXBYXCJcbiAgICBbc3R5bGUudG9wLnB4XT1cInBvcHVwWVwiXG4gID5cbiAgICA8dmVyYmVuLXBvcC1VcFxuICAgICAgW2Ryb3Bkb3duT3Blbl09XCJ0cnVlXCJcbiAgICAgIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICc5OScgfVwiXG4gICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAoZHJvcGRvd25PcGVuQ2hhbmdlKT1cIiRldmVudCA/IG51bGwgOiBoaWRlQ29ubmVjdGlvblBvcHVwKClcIlxuICAgID5cbiAgICAgIDxkaXYgZHJvcGRvd24tdHJpZ2dlciBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWRcIlxuICAgICAgICBkcm9wZG93bi1jb250ZW50XG4gICAgICA+XG4gICAgICAgIDxoNCBjbGFzcz1cIm1iLTIgZm9udC1tZWRpdW1cIj5DcmVhdGUgQ29ubmVjdGlvbjwvaDQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdHlwZSBvZiBhbGxvd2VkTm9kZVR5cGVzXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlTm9kZUNvbm5lY3Rpb24odHlwZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDcmVhdGUge3sgdHlwZSB8IHRpdGxlY2FzZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGlkZUNvbm5lY3Rpb25Qb3B1cCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dTdGFydE5vZGVGb3JtUG9wdXBcIlxuICAgIFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJzdGFydE5vZGVGb3JtUG9wdXBYXCJcbiAgICBbc3R5bGUudG9wLnB4XT1cInN0YXJ0Tm9kZUZvcm1Qb3B1cFlcIlxuICA+XG4gICAgPHZlcmJlbi1wb3AtVXAgW2Ryb3Bkb3duT3Blbl09XCJ0cnVlXCIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzEwMCcgfVwiPlxuICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICA8IS0tIEhpZGRlbiB0cmlnZ2VyIGVsZW1lbnQgLS0+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwLTMgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHNoYWRvdy1tZCB3LTY0XCJcbiAgICAgICAgZHJvcGRvd24tY29udGVudFxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiAxMDAwXCJcbiAgICAgID5cbiAgICAgICAgPGg0IGNsYXNzPVwibWItMiBmb250LW1lZGl1bVwiPlNlbGVjdCBXb3JrZmxvdyBGb3JtPC9oND5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1N0YXJ0Tm9kZUZvcm1zXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yXCI+XG4gICAgICAgICAgTG9hZGluZyBmb3Jtcy4uLlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdTdGFydE5vZGVGb3Jtc1wiIGNsYXNzPVwibWF4LWgtNDggb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN0YXJ0Tm9kZUZvcm0obnVsbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZm9ybSBvZiBzdGFydE5vZGVGb3Jtc0xpc3RcIiBjbGFzcz1cIm1iLTFcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN0YXJ0Tm9kZUZvcm0oZm9ybSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBmb3JtLk5hbWUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwic3RhcnROb2RlRm9ybXNMaXN0Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHB5LTIgdGV4dC1ncmF5LTUwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgTm8gZm9ybXMgYXZhaWxhYmxlXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC92ZXJiZW4tcG9wLVVwPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93U3ViZmxvd1BvcHVwXCJcbiAgICBbc3R5bGUucG9zaXRpb25dPVwiJ2Fic29sdXRlJ1wiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwic3ViZmxvd1BvcHVwWFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJzdWJmbG93UG9wdXBZXCJcbiAgPlxuICAgIDx2ZXJiZW4tcG9wLVVwIFtkcm9wZG93bk9wZW5dPVwidHJ1ZVwiIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICcxMDAnIH1cIj5cbiAgICAgIDxkaXYgZHJvcGRvd24tdHJpZ2dlciBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWQgdy02NFwiXG4gICAgICAgIGRyb3Bkb3duLWNvbnRlbnRcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgei1pbmRleDogMTAwMFwiXG4gICAgICA+XG4gICAgICAgIDxoNCBjbGFzcz1cIm1iLTIgZm9udC1tZWRpdW1cIj5TZWxlY3QgV29ya2Zsb3c8L2g0PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nV29ya2Zsb3dzXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yXCI+XG4gICAgICAgICAgTG9hZGluZyB3b3JrZmxvd3MuLi5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nV29ya2Zsb3dzXCIgY2xhc3M9XCJtYXgtaC00OCBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB3b3JrZmxvdyBvZiB3b3JrZmxvd3NMaXN0XCIgY2xhc3M9XCJtYi0xXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBob3ZlcjpiZy1ncmF5LTUwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTdWJmbG93V29ya2Zsb3cod29ya2Zsb3cpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgd29ya2Zsb3cuTmFtZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJ3b3JrZmxvd3NMaXN0Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHB5LTIgdGV4dC1ncmF5LTUwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgTm8gd29ya2Zsb3dzIGF2YWlsYWJsZVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgPC9kaXY+XG5cbiAgPGxpYi1jb25kaXRpb25zLXBvcHVwXG4gICAgW3Zpc2libGVdPVwic2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nXCJcbiAgICBbZGVjaXNpb25Ob2RlSWRdPVwiYWN0aXZlRGVjaXNpb25Ob2RlSWRcIlxuICAgIFtuZXdDb25uZWN0aW9uSWRdPVwiYWN0aXZlQ29ubmVjdGlvbklkXCJcbiAgICBbcG9wdXBYXT1cImRlY2lzaW9uQ29uZGl0aW9uUG9wdXBYXCJcbiAgICBbcG9wdXBZXT1cImRlY2lzaW9uQ29uZGl0aW9uUG9wdXBZXCJcbiAgICAoY2xvc2VkKT1cIm9uRGVjaXNpb25Db25kaXRpb25DYW5jZWxsZWQoKVwiXG4gICAgKHNhdmVkKT1cIm9uRGVjaXNpb25Db25kaXRpb25TYXZlZCgkZXZlbnQpXCJcbiAgPjwvbGliLWNvbmRpdGlvbnMtcG9wdXA+XG5cbiAgPCEtLSA8bGliLWRlY2lzaW9uLXBvcHVwXG4gICAgW3Zpc2libGVdPVwic2hvd0NvbmRpdGlvbnNEaWFsb2dcIlxuICAgIFtkZWNpc2lvbk5vZGVJZF09XCJhY3RpdmVEZWNpc2lvbk5vZGVJZFwiXG4gICAgW3BvcHVwWF09XCJkZWNpc2lvbkNvbmRpdGlvblBvcHVwWFwiXG4gICAgW3BvcHVwWV09XCJkZWNpc2lvbkNvbmRpdGlvblBvcHVwWVwiXG4gICAgKGNsb3NlZCk9XCJvbkRlY2lzaW9uQ29uZGl0aW9uQ2FuY2VsbGVkKClcIlxuICA+PC9saWItZGVjaXNpb24tcG9wdXA+IC0tPlxuXG4gIDxsaWItc3RhZ2UtZGlhbG9nXG4gICAgW3Zpc2libGVdPVwic2hvd1N0YWdlRGlhbG9nTG9jYWxcIlxuICAgIFtzdGFnZURhdGFdPVwiYWN0aXZlU3RhZ2VEYXRhIHx8IHt9XCJcbiAgICAoY2xvc2VkKT1cIm9uU3RhZ2VEaWFsb2dDbG9zZWQoKVwiXG4gICAgKHNhdmVkKT1cIm9uU3RhZ2VEaWFsb2dTYXZlZCgkZXZlbnQpXCJcbiAgPjwvbGliLXN0YWdlLWRpYWxvZz5cblxuICA8bGliLWFjdGlvbi1kaWFsb2dcbiAgICBbdmlzaWJsZV09XCJzaG93QWN0aW9uRGlhbG9nTG9jYWxcIlxuICAgIFthY3Rpb25EYXRhXT1cImFjdGl2ZUFjdGlvbkRhdGFcIlxuICAgIChjbG9zZWQpPVwib25BY3Rpb25EaWFsb2dDbG9zZWQoKVwiXG4gICAgKHNhdmVkKT1cIm9uQWN0aW9uRGlhbG9nU2F2ZWQoJGV2ZW50KVwiXG4gID48L2xpYi1hY3Rpb24tZGlhbG9nPlxuXG4gIDxsaWItZXNjYWxhdGlvbi1kaWFsb2dcbiAgICBbdmlzaWJsZV09XCJzaG93RXNjYWxhdGlvbkRpYWxvZ0xvY2FsXCJcbiAgICBbdHlwZV09XCJhY3RpdmVFc2NhbGF0aW9uVHlwZSgpIVwiXG4gICAgW3N0YWdlQ29kZV09XCJhY3RpdmVTdGFnZUNvZGUoKSB8fCAnJ1wiXG4gICAgW3dvcmtmbG93Q29kZV09XCJzdGF0ZS53b3JrZmxvdz8uQ29kZSB8fCAnJ1wiXG4gICAgKGNsb3NlZCk9XCJvbkVzY2FsYXRpb25EaWFsb2dDbG9zZWQoKVwiXG4gID48L2xpYi1lc2NhbGF0aW9uLWRpYWxvZz5cbjwvZGl2PlxuIl19