@magic-xpa/engine 4.1000.0-dev4100.106 → 4.1000.0-dev4100.108

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.
@@ -2,6 +2,7 @@ import { InternalInterface, Logger } from "@magic-xpa/utils";
2
2
  import { ConstInterface } from "../ConstInterface";
3
3
  import { AccessHelper } from "../AccessHelper";
4
4
  import { isNullOrUndefined } from "@magic-xpa/mscorelib";
5
+ import { FlowMonitorQueue } from "../util/FlowMonitorQueue";
5
6
  export class EventHandlerPosition {
6
7
  constructor() {
7
8
  this._handlerIdx = 0;
@@ -58,6 +59,9 @@ export class EventHandlerPosition {
58
59
  case InternalInterface.MG_ACT_REC_SUFFIX:
59
60
  case InternalInterface.MG_ACT_CTRL_PREFIX:
60
61
  case InternalInterface.MG_ACT_CTRL_SUFFIX: {
62
+ if (this._rtEvt.getInternalCode() == InternalInterface.MG_ACT_REC_PREFIX) {
63
+ FlowMonitorQueue.Instance.addDataViewFlow(this._task);
64
+ }
61
65
  if (this._handlerIdx === -1) {
62
66
  for (this._handlerIdx = this._handlersTab.getSize() - 1; this._handlerIdx >= 0; this._handlerIdx--) {
63
67
  let handler = this._handlersTab.getHandler(this._handlerIdx);
@@ -197,4 +201,4 @@ EventHandlerPosition.PHASE_CONTROL_SPECIFIC = 1;
197
201
  EventHandlerPosition.PHASE_CONTROL_NON_SPECIFIC = 2;
198
202
  EventHandlerPosition.PHASE_GLOBAL = 3;
199
203
  EventHandlerPosition.PHASE_GLOBAL_SPECIFIC = 4;
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRIYW5kbGVyUG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V2ZW50L0V2ZW50SGFuZGxlclBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQU0zRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBTXZELE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CO1FBVlEsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGlCQUFZLEdBQVMsSUFBSSxDQUFDO1FBQzFCLGFBQVEsR0FBUyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixjQUFTLEdBQVMsSUFBSSxDQUFDO1FBQ3ZCLFdBQU0sR0FBaUIsSUFBSSxDQUFDO1FBQzVCLFVBQUssR0FBUyxJQUFJLENBQUM7SUFJM0IsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFxQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVB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Y0FBYyxDQUFDO1FBQ3JELElBQUksY0FBYyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPO1NBQ1I7UUFHRCxJQUFJLE1BQU0sS0FBSyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFHekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBUyxZQUFZLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzdFO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7QUFqUWMsMkNBQXNCLEdBQVcsQ0FBQyxDQUFDO0FBQ25DLCtDQUEwQixHQUFXLENBQUMsQ0FBQztBQUN2QyxpQ0FBWSxHQUFXLENBQUMsQ0FBQztBQUN6QiwwQ0FBcUIsR0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludGVybmFsSW50ZXJmYWNlLCBMb2dnZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7SGFuZGxlcnNUYWJsZX0gZnJvbSBcIi4uL3J0L0hhbmRsZXJzVGFibGVcIjtcclxuaW1wb3J0IHtSdW5UaW1lRXZlbnR9IGZyb20gXCIuL1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi9FdmVudEhhbmRsZXJcIjtcclxuaW1wb3J0IHtNR0RhdGF9IGZyb20gXCIuLi90YXNrcy9NR0RhdGFcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIHBvaW50cyB0byB0aGUgcG9zaXRpb24gb2YgYW4gZXZlbnQgaGFuZGxlciBpbiB0aGVcclxuLy8vICAgY2hhaW4gb2YgdGhlIGV2ZW50IGhhbmRsZXJzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFdmVudEhhbmRsZXJQb3NpdGlvbiB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfQ09OVFJPTF9TUEVDSUZJQzogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQzogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9HTE9CQUw6IG51bWJlciA9IDM7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfR0xPQkFMX1NQRUNJRklDOiBudW1iZXIgPSA0O1xyXG5cclxuICBwcml2YXRlIF9oYW5kbGVySWR4OiBudW1iZXIgPSAwOyAvLyB0aGUgaW5kZXggb2YgdGhlIGhhbmRsZXIgd2l0aGluIHRoZSB0YXNrXHJcbiAgcHJpdmF0ZSBfaGFuZGxlcnNUYWI6IEhhbmRsZXJzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX29yZ1ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9vcmdUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGNoZWNrZWQgdGFza1xyXG4gIHByaXZhdGUgX3BoYXNlOiBudW1iZXIgPSAwOyAvLyB0aGUgcGhhc2Ugb2YgdGhlIHNlYXJjaDogY29udHJvbCBzcGVjaWZpYywgY29udHJvbCBub24tc3BlY2lmaWMsIGdsb2JhbFxyXG4gIHByaXZhdGUgX3ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9ydEV2dDogUnVuVGltZUV2ZW50ID0gbnVsbDsgLy8gdGhlIGV2ZW50XHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7IC8vIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBjaGVja2VkIHRhc2tcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuICAvLy8gICBpbml0IHRoZSBwb3NpdGlvbiB0byBzdGFydCBhIG5ldyBjaGFpbiBvZiBzZWFyY2hcclxuICBpbml0KHJ0RXZlbnQ6IFJ1blRpbWVFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnQgPSBydEV2ZW50O1xyXG4gICAgdGhpcy5fdGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldFRhc2soKTtcclxuICAgIGlmICh0aGlzLl90YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICB0aGlzLl9wcmV2VGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldE1haW5QcmdDcmVhdG9yKCk7XHJcbiAgICAgIGlmICh0aGlzLl9wcmV2VGFzayAhPT0gbnVsbCAmJiB0aGlzLl9wcmV2VGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgICAgdGhpcy5fcHJldlRhc2sgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChydEV2ZW50LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkMpXHJcbiAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHJ0RXZlbnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQylcclxuICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX29yZ1Rhc2sgPSB0aGlzLl90YXNrO1xyXG4gICAgdGhpcy5fb3JnUHJldlRhc2sgPSB0aGlzLl9wcmV2VGFzaztcclxuICAgIHRoaXMuX2hhbmRsZXJzVGFiID0gdGhpcy5fdGFzay5nZXRIYW5kbGVyc1RhYigpO1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJzVGFiID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZ29VcFRhc2tDaGFpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJJZHggPSAtMTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZXZ0OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dCgpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dChldnQ/OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXIge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChldnQpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXROZXh0XzAoZXZ0KTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dF8xKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gICBjaGFuZ2VzIHRoZSBjdXJyZW50IHJ1biB0aW1lIGV2ZW50IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV2ZW50IGhhbmRsZXJcclxuICBwcml2YXRlIGdldE5leHRfMChldnQ6IFJ1blRpbWVFdmVudCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICB0aGlzLl9ydEV2dCA9IGV2dDtcclxuICAgIHJldHVybiB0aGlzLmdldE5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5leHQgZXZlbnQgaGFuZGxlclxyXG4gIHByaXZhdGUgZ2V0TmV4dF8xKCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICBpZiAodGhpcy5faGFuZGxlcnNUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCAmJiB0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSAhPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFKSB7XHJcbiAgICAgIC8vIHNwZWNpYWwgdHJlYXRtZW50IGZvciBUQVNLLCBSRUNPUkQgYW5kIENPTlRST0wgbGV2ZWwgUHJlZml4L1N1ZmZpeCBldmVudHNcclxuICAgICAgc3dpdGNoICh0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDoge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2hhbmRsZXJJZHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZvciAodGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldFNpemUoKSAtIDE7IHRoaXMuX2hhbmRsZXJJZHggPj0gMDsgdGhpcy5faGFuZGxlcklkeC0tKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldEhhbmRsZXIodGhpcy5faGFuZGxlcklkeCk7XHJcbiAgICAgICAgICAgICAgaWYgKChoYW5kbGVyLmlzTm9uU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKSB8fCAoaGFuZGxlci5pc1NwZWNpZmljSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGFuIGV2ZW50IGhhbmRsZXIgd2FzIG5vdCBmb3VuZCBvciB3YXMgcmV0dXJuZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIHRoaXMgbWV0aG9kXHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAvLyBvdGhlciBpbnRlcm5hbCBldmVudHMgc2hvdWxkIGNvbnRpbnVlXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLnNldE5leHRIYW5kbGVySWR4KCkpIHtcclxuICAgICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldEhhbmRsZXIodGhpcy5faGFuZGxlcklkeCk7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fcGhhc2UpIHtcclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfU1BFQ0lGSUM6XHJcbiAgICAgICAgICBpZiAoaGFuZGxlci5pc1NwZWNpZmljSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSlcclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXI7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQzpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzTm9uU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTF9TUEVDSUZJQzpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzR2xvYmFsU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTDpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzR2xvYmFsSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSlcclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXI7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIEV2ZW50SGFuZGxlclBvc2l0aW9uLmdldE5leHQoKSBpbnZhbGlkIHBoYXNlOiBcIiArIHRoaXMuX3BoYXNlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgYSBuZXh0IGhhbmRsZXIgd2FzIGZvdW5kXHJcbiAgcHJpdmF0ZSBzZXROZXh0SGFuZGxlcklkeCgpOiBib29sZWFuIHtcclxuXHJcbiAgICAvLyB0aGUgaGFuZGxlciBpZHggaXMgKC0xKSB3aGVuIHN0YXJ0aW5nIHRvIHNlYXJjaCBpbiBhIHRhc2tcclxuICAgIGlmICh0aGlzLl9oYW5kbGVySWR4IDwgMClcclxuICAgICAgdGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldFNpemUoKSAtIDE7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2hhbmRsZXJJZHggPSB0aGlzLl9oYW5kbGVySWR4IC0gMTtcclxuXHJcbiAgICBpZiAodGhpcy5faGFuZGxlcklkeCA8IDAgfHwgdGhpcy5fdGFzay5pc0Fib3J0aW5nKCkpIHtcclxuICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaGFuZGxlcnMgaW4gdGhlIHRhc2sgdGhlbiBnbyB1cCB0aGUgY2hhaW4gb2YgdGFza3NcclxuICAgICAgaWYgKHRoaXMuZ29VcFRhc2tDaGFpbigpKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldE5leHRIYW5kbGVySWR4KCk7XHJcbiAgICAgIGVsc2UgLy8gbm8gbW9yZSB0YXNrcyBpbiB0aGUgY2hhaW5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gICBnZXQgdGhlIG5leHQgdGFzayBpbiB0aGUgdGFza3MgY2hhaW4gYW5kIHJldHVybnMgZmFsc2UgaWYgbm8gdGFzayB3YXMgZm91bmQuXHJcbiAgLy8vICAgdGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBwaGFzZSB2YXJpYWJsZSBhY2NvcmRpbmdseVxyXG4gIHByaXZhdGUgZ29VcFRhc2tDaGFpbigpOiBib29sZWFuIHtcclxuICAgIGxldCBtR0RhdGE6IE1HRGF0YSA9IHRoaXMuX3Rhc2suZ2V0TUdEYXRhKCk7XHJcbiAgICBsZXQgY3RsSWR4OiBudW1iZXIgPSB0aGlzLl90YXNrLmdldEN0bElkeCgpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5fcGhhc2UpIHtcclxuICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDOlxyXG4gICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDOiB7XHJcbiAgICAgICAgLy8gbm9uIHNwZWNpZmljIGhhbmRsZXJzIGFyZSBzZWFyY2hlZCB0aWxsIHdlIGhpdCBvdXIgbWFpbiBwcm9ncmFtIChpbmNsdXNpdmUpXHJcbiAgICAgICAgLy8gYWZ0ZXJ3YXJkcyB3ZSBzd2l0Y2ggdG8gZ2xvYmFsIHBoYXNlLlxyXG4gICAgICAgIGlmICghdGhpcy5fdGFzay5pc01haW5Qcm9nKCkpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0UGFyZW50T3JDb21wTWFpblByZygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gaW50ZXJuYWwsIGludGVybmFsLCBzeXN0ZW0gYW5kIHVzZXIgZXZlbnRzIG1heSBjcm9zcyBjb21wb25lbnQgYm91bmRlcmllc1xyXG4gICAgICAgICAgaWYgKCh0aGlzLl9ydEV2dC5nZXRUeXBlKCkgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfUFVCTElDIHx8XHJcbiAgICAgICAgICAgICAgIHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCB8fFxyXG4gICAgICAgICAgICAgICB0aGlzLl9ydEV2dC5nZXRUeXBlKCkgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNIHx8XHJcbiAgICAgICAgICAgICAgIHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSKSAmJiBjdGxJZHggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIFJUIHBhcmVudCBvZiB0aGUgcHJldmlvdXMgdGFzay4gSWYgbm8gcHJldnRhc2sgZXhpc3RzIHRoZW4gd2UgYXJlXHJcbiAgICAgICAgICAgIC8vIHNpbXBseSBydW5uaW5nIG9uIHRoZSBtYWluIHByb2dzIGxpc3QgKGZvciBleGFtcGxlLCB3aGVuIGEgbWFpbiBwcmcgY2F0Y2hlc1xyXG4gICAgICAgICAgICAvLyBhIHRpbWVyIGV2ZW50LCBubyBwcmV2dGFzayBleGlzdHMuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2VGFzayA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3Rhc2sgPSBtR0RhdGEuZ2V0TmV4dE1haW5Qcm9nKGN0bElkeCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3Rhc2sgPT09IG51bGwgJiYgY3RsSWR4ID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2sgPSA8VGFzaz5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0TWFpblByb2dCeUN0bElkeCgtMSwgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q29tcE1haW5QcmdUYWIoKS5nZXRDdGxJZHgoMCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQgbWFpbiBwcm9ncmFtIHRoYXQgd2FzIHNldCBpbiBnZXRQYXJlbnRPckNvbXBNYWluUHJnLCBpcyBub3cgcmVwbGFjZWQgYmFjayB0byB0aGUgcGF0aCBwYXJlbnQuXHJcbiAgICAgICAgICAgICAgdGhpcy5fdGFzayA9IHRoaXMuX3ByZXZUYXNrLlBhdGhQYXJlbnRUYXNrO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ByZXZUYXNrID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9ydEV2dC5zZXRNYWluUHJnQ3JlYXRvcihudWxsKTsgLy8gbW92aW5nIG91dCBvZiBhIG1haW4gcHJvZ3JhbSB0byBhbm90aGVyIHRhc2tcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDKSB7XHJcbiAgICAgICAgICAgIC8vIHNwZWNpZmljIHNlYXJjaCBpcyBvdmVyLiBzdGFydCB0aGUgbm9uIHNwZWNpZmljIHNlYXJjaCBmcm9tIHRoZSBmaXJzdCB0YXNrLlxyXG4gICAgICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTF9TUEVDSUZJQztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBoZXJlIHdlIHNjYW4gdGhlIG1haW4gcHJvZ3MgYWNjb3JkaW5nIHRvIHRoZSBsb2FkIHNlcXVlbmNlIChmaXJzdCB0byBsYXN0KS5cclxuICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUw7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5fdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRNYWluUHJvZ0J5Q3RsSWR4KC0xLCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDb21wTWFpblByZ1RhYigpLmdldEN0bElkeCgwKSk7XHJcbiAgICAgICAgICB0aGlzLl9ydEV2dC5zZXRNYWluUHJnQ3JlYXRvcih0aGlzLl90YXNrKTtcclxuICAgICAgICAgIGlmICh0aGlzLl90YXNrID09PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUxfU1BFQ0lGSUM6XHJcbiAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMOiB7XHJcbiAgICAgICAgdGhpcy5fdGFzayA9IG1HRGF0YS5nZXROZXh0TWFpblByb2coY3RsSWR4KTtcclxuICAgICAgICBpZiAodGhpcy5fdGFzayA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAvLyBzcGVjaWZpYyBzZWFyY2ggaXMgb3Zlci4gc3RhcnQgdGhlIG5vbiBzcGVjaWZpYyBzZWFyY2ggZnJvbSB0aGUgZmlyc3QgdGFzay5cclxuICAgICAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM7XHJcbiAgICAgICAgICB0aGlzLl90YXNrID0gdGhpcy5fb3JnVGFzaztcclxuICAgICAgICAgIHRoaXMuX3ByZXZUYXNrID0gdGhpcy5fb3JnUHJldlRhc2s7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRXZlbnRIYW5kbGVyUG9zaXRpb24uZ29VcFRhc2tDaGFpbigpIGludmFsaWQgcGhhc2U6IFwiICsgdGhpcy5fcGhhc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3Rhc2sgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9oYW5kbGVyc1RhYiA9IHRoaXMuX3Rhc2suZ2V0SGFuZGxlcnNUYWIoKTtcclxuICAgIGlmICh0aGlzLl9oYW5kbGVyc1RhYiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIHRoaXMuZ29VcFRhc2tDaGFpbigpO1xyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJJZHggPSAtMTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vICAgaWYgdGhlIGN1cnJlbnQgdGFzayBhbmQgaXRzIHBhcmVudCBhcmUgZnJvbSBkaWZmZXJlbnQgY29tcG9uZW50cyB0aGVuXHJcbiAgLy8vICAgc2V0IHRoZSB0YXNrIHRvIHRoZSBtYWluIHByb2dyYW0gb2YgdGhlIGNvbXBvbmVudCBvZiB0aGUgY3VycmVudCB0YXNrLlxyXG4gIC8vLyAgIG90aGVyd2lzZSwgc2V0IHRoZSB0YXNrIHRvIGJlIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgdGFza1xyXG4gIHByaXZhdGUgZ2V0UGFyZW50T3JDb21wTWFpblByZygpOiB2b2lkIHtcclxuICAgIGxldCBjdGxJZHg6IG51bWJlciA9IHRoaXMuX3Rhc2suZ2V0Q3RsSWR4KCk7XHJcbiAgICB0aGlzLl9wcmV2VGFzayA9IHRoaXMuX3Rhc2s7XHJcblxyXG4gICAgLy8gUmV0cmlldmUgdGhlIHRhc2sncyBjYWxsaW5nLXBhcmVudC4gV2UgbmVlZCB0aGUgdGFzayB3aG8gaW52b2tlZCB0aGUgY3VycmVudCB0YXNrXHJcbiAgICAvLyByYXRoZXIgdGhhbiB0aGUgdGFzaydzIHRyaWdnZXJpbmcgcGFyZW50LlxyXG4gICAgLy8gVGhlIFBhdGggUGFyZW50IGlzIHRoZSBwYXJlbnQgb2YgdGhhdCB0YXNrIGFzIGlmIHRoZSBzZXJ2ZXIgaGFkIGRvbmUgYnVpbGQgcGF0aC4gSXQgaXMgbW9yZSBsb2dpY2FsIHRvIHNlYXJjaCB1c2luZyB0aGUgdHJpZ2dlciB0YXNrIHRyZWVcclxuICAgIC8vIGJ1dCBzaW5jZSB0aGUgb25saW5lL3NlcnZlciBkb2VzIG5vdCB1c2UgdGhlIHRyaWdnZXIgdHJlZSwgd2UgZGVjaWRlZCBub3QgdG8gdXNlIGl0IGhlcmUgYXMgd2VsbC5cclxuICAgIC8vIElmIHRoZSBwYXRoIHBhcmVudCBpcyBmcm9tIGEgZGlmZmVyZW50IGNvbXAsIGl0IG1lYW5zIHRoYXQgYmV0d2VlbiBjdXJyIHRhc2sgYW5kIHBhcmVudCB0aGVyZSBzaG91bGQgYmUgYSBjb21wIG1haW4gcHJvZy5cclxuICAgIGxldCBwYXRoUGFyZW50VGFzazogVGFzayA9IHRoaXMuX3Rhc2suUGF0aFBhcmVudFRhc2s7XHJcbiAgICBpZiAocGF0aFBhcmVudFRhc2sgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fdGFzayA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBpZiB0aGUgcGFyZW50IHRhc2sgaXMgZnJvbSBhbm90aGVyIGNvbXBvbmVudFxyXG4gICAgaWYgKGN0bElkeCAhPT0gcGF0aFBhcmVudFRhc2suZ2V0Q3RsSWR4KCkpIHtcclxuICAgICAgLy8gcmVwbGFjZSB0aGUgcGFyZW50IHRhc2sgdG8gc2VhcmNoIHdpdGggdGhlIGNvbXAgbWFpbiBwcm9ncmFtLiBsYXRlciBvbiwgdGhlIG1haW4gcHJvZyB3aWxsIGJlIHJlcGxhY2VkIHdpdGhcclxuICAgICAgLy8gdGhlIHJlYWwgUGF0aFBhcmVudFRhc2suXHJcbiAgICAgIHRoaXMuX3J0RXZ0LnNldE1haW5QcmdDcmVhdG9yKHRoaXMuX3Rhc2spO1xyXG4gICAgICB0aGlzLl90YXNrID0gPFRhc2s+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldE1haW5Qcm9nQnlDdGxJZHgoLTEsIGN0bElkeCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fcnRFdnQuc2V0TWFpblByZ0NyZWF0b3IobnVsbCk7XHJcbiAgICAgIHRoaXMuX3Rhc2sgPSBwYXRoUGFyZW50VGFzaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRIYW5kbGVyUG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V2ZW50L0V2ZW50SGFuZGxlclBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQU0zRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTTVELE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CO1FBVlEsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGlCQUFZLEdBQVMsSUFBSSxDQUFDO1FBQzFCLGFBQVEsR0FBUyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixjQUFTLEdBQVMsSUFBSSxDQUFDO1FBQ3ZCLFdBQU0sR0FBaUIsSUFBSSxDQUFDO1FBQzVCLFVBQUssR0FBUyxJQUFJLENBQUM7SUFJM0IsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFxQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZELElBQUksSUFBSSxDQUFDLFNB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UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS08sc0JBQXNCO1FBQzVCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBTzVCLElBQUksY0FBYyxHQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ3JELElBQUksY0FBYyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPO1NBQ1I7UUFHRCxJQUFJLE1BQU0sS0FBSyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFHekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBUyxZQUFZLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzdFO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7QUFwUWMsMkNBQXNCLEdBQVcsQ0FBQyxDQUFDO0FBQ25DLCtDQUEwQixHQUFXLENBQUMsQ0FBQztBQUN2QyxpQ0FBWSxHQUFXLENBQUMsQ0FBQztBQUN6QiwwQ0FBcUIsR0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludGVybmFsSW50ZXJmYWNlLCBMb2dnZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7SGFuZGxlcnNUYWJsZX0gZnJvbSBcIi4uL3J0L0hhbmRsZXJzVGFibGVcIjtcclxuaW1wb3J0IHtSdW5UaW1lRXZlbnR9IGZyb20gXCIuL1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi9FdmVudEhhbmRsZXJcIjtcclxuaW1wb3J0IHtNR0RhdGF9IGZyb20gXCIuLi90YXNrcy9NR0RhdGFcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7IEZsb3dNb25pdG9yUXVldWUgfSBmcm9tIFwiLi4vdXRpbC9GbG93TW9uaXRvclF1ZXVlXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIHBvaW50cyB0byB0aGUgcG9zaXRpb24gb2YgYW4gZXZlbnQgaGFuZGxlciBpbiB0aGVcclxuLy8vICAgY2hhaW4gb2YgdGhlIGV2ZW50IGhhbmRsZXJzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFdmVudEhhbmRsZXJQb3NpdGlvbiB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfQ09OVFJPTF9TUEVDSUZJQzogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQzogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBQSEFTRV9HTE9CQUw6IG51bWJlciA9IDM7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhBU0VfR0xPQkFMX1NQRUNJRklDOiBudW1iZXIgPSA0O1xyXG5cclxuICBwcml2YXRlIF9oYW5kbGVySWR4OiBudW1iZXIgPSAwOyAvLyB0aGUgaW5kZXggb2YgdGhlIGhhbmRsZXIgd2l0aGluIHRoZSB0YXNrXHJcbiAgcHJpdmF0ZSBfaGFuZGxlcnNUYWI6IEhhbmRsZXJzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX29yZ1ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9vcmdUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGNoZWNrZWQgdGFza1xyXG4gIHByaXZhdGUgX3BoYXNlOiBudW1iZXIgPSAwOyAvLyB0aGUgcGhhc2Ugb2YgdGhlIHNlYXJjaDogY29udHJvbCBzcGVjaWZpYywgY29udHJvbCBub24tc3BlY2lmaWMsIGdsb2JhbFxyXG4gIHByaXZhdGUgX3ByZXZUYXNrOiBUYXNrID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBjaGVja2VkIHRhc2tcclxuICBwcml2YXRlIF9ydEV2dDogUnVuVGltZUV2ZW50ID0gbnVsbDsgLy8gdGhlIGV2ZW50XHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7IC8vIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBjaGVja2VkIHRhc2tcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuICAvLy8gICBpbml0IHRoZSBwb3NpdGlvbiB0byBzdGFydCBhIG5ldyBjaGFpbiBvZiBzZWFyY2hcclxuICBpbml0KHJ0RXZlbnQ6IFJ1blRpbWVFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnQgPSBydEV2ZW50O1xyXG4gICAgdGhpcy5fdGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldFRhc2soKTtcclxuICAgIGlmICh0aGlzLl90YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICB0aGlzLl9wcmV2VGFzayA9IDxUYXNrPnRoaXMuX3J0RXZ0LmdldE1haW5QcmdDcmVhdG9yKCk7XHJcbiAgICAgIGlmICh0aGlzLl9wcmV2VGFzayAhPT0gbnVsbCAmJiB0aGlzLl9wcmV2VGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgICAgdGhpcy5fcHJldlRhc2sgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChydEV2ZW50LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkMpXHJcbiAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHJ0RXZlbnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQylcclxuICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX1NQRUNJRklDO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX29yZ1Rhc2sgPSB0aGlzLl90YXNrO1xyXG4gICAgdGhpcy5fb3JnUHJldlRhc2sgPSB0aGlzLl9wcmV2VGFzaztcclxuICAgIHRoaXMuX2hhbmRsZXJzVGFiID0gdGhpcy5fdGFzay5nZXRIYW5kbGVyc1RhYigpO1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJzVGFiID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZ29VcFRhc2tDaGFpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJJZHggPSAtMTtcclxuICB9XHJcblxyXG4gIGdldE5leHQoZXZ0OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dCgpOiBFdmVudEhhbmRsZXI7XHJcbiAgZ2V0TmV4dChldnQ/OiBSdW5UaW1lRXZlbnQpOiBFdmVudEhhbmRsZXIge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChldnQpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXROZXh0XzAoZXZ0KTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dF8xKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gICBjaGFuZ2VzIHRoZSBjdXJyZW50IHJ1biB0aW1lIGV2ZW50IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV2ZW50IGhhbmRsZXJcclxuICBwcml2YXRlIGdldE5leHRfMChldnQ6IFJ1blRpbWVFdmVudCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICB0aGlzLl9ydEV2dCA9IGV2dDtcclxuICAgIHJldHVybiB0aGlzLmdldE5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5leHQgZXZlbnQgaGFuZGxlclxyXG4gIHByaXZhdGUgZ2V0TmV4dF8xKCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICBpZiAodGhpcy5faGFuZGxlcnNUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCAmJiB0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSAhPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFKSB7XHJcbiAgICAgIC8vIHNwZWNpYWwgdHJlYXRtZW50IGZvciBUQVNLLCBSRUNPUkQgYW5kIENPTlRST0wgbGV2ZWwgUHJlZml4L1N1ZmZpeCBldmVudHNcclxuICAgICAgc3dpdGNoICh0aGlzLl9ydEV2dC5nZXRJbnRlcm5hbENvZGUoKSkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDoge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3J0RXZ0LmdldEludGVybmFsQ29kZSgpID09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAgIEZsb3dNb25pdG9yUXVldWUuSW5zdGFuY2UuYWRkRGF0YVZpZXdGbG93KHRoaXMuX3Rhc2spO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuX2hhbmRsZXJJZHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZvciAodGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldFNpemUoKSAtIDE7IHRoaXMuX2hhbmRsZXJJZHggPj0gMDsgdGhpcy5faGFuZGxlcklkeC0tKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IHRoaXMuX2hhbmRsZXJzVGFiLmdldEhhbmRsZXIodGhpcy5faGFuZGxlcklkeCk7XHJcbiAgICAgICAgICAgICAgaWYgKChoYW5kbGVyLmlzTm9uU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKSB8fCAoaGFuZGxlci5pc1NwZWNpZmljSGFuZGxlck9mKHRoaXMuX3J0RXZ0KSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gYW4gZXZlbnQgaGFuZGxlciB3YXMgbm90IGZvdW5kIG9yIHdhcyByZXR1cm5lZCBpbiBhIHByZXZpb3VzIGNhbGwgdG8gdGhpcyBtZXRob2RcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIC8vIG90aGVyIGludGVybmFsIGV2ZW50cyBzaG91bGQgY29udGludWVcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuc2V0TmV4dEhhbmRsZXJJZHgoKSkge1xyXG4gICAgICBsZXQgaGFuZGxlcjogRXZlbnRIYW5kbGVyID0gdGhpcy5faGFuZGxlcnNUYWIuZ2V0SGFuZGxlcih0aGlzLl9oYW5kbGVySWR4KTtcclxuICAgICAgc3dpdGNoICh0aGlzLl9waGFzZSkge1xyXG4gICAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9TUEVDSUZJQzpcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmlzU3BlY2lmaWNIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfTk9OX1NQRUNJRklDOlxyXG4gICAgICAgICAgaWYgKGhhbmRsZXIuaXNOb25TcGVjaWZpY0hhbmRsZXJPZih0aGlzLl9ydEV2dCkpXHJcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMX1NQRUNJRklDOlxyXG4gICAgICAgICAgaWYgKGhhbmRsZXIuaXNHbG9iYWxTcGVjaWZpY0hhbmRsZXJPZih0aGlzLl9ydEV2dCkpXHJcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMOlxyXG4gICAgICAgICAgaWYgKGhhbmRsZXIuaXNHbG9iYWxIYW5kbGVyT2YodGhpcy5fcnRFdnQpKVxyXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRXZlbnRIYW5kbGVyUG9zaXRpb24uZ2V0TmV4dCgpIGludmFsaWQgcGhhc2U6IFwiICsgdGhpcy5fcGhhc2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiBhIG5leHQgaGFuZGxlciB3YXMgZm91bmRcclxuICBwcml2YXRlIHNldE5leHRIYW5kbGVySWR4KCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIC8vIHRoZSBoYW5kbGVyIGlkeCBpcyAoLTEpIHdoZW4gc3RhcnRpbmcgdG8gc2VhcmNoIGluIGEgdGFza1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJJZHggPCAwKVxyXG4gICAgICB0aGlzLl9oYW5kbGVySWR4ID0gdGhpcy5faGFuZGxlcnNUYWIuZ2V0U2l6ZSgpIC0gMTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5faGFuZGxlcklkeCA9IHRoaXMuX2hhbmRsZXJJZHggLSAxO1xyXG5cclxuICAgIGlmICh0aGlzLl9oYW5kbGVySWR4IDwgMCB8fCB0aGlzLl90YXNrLmlzQWJvcnRpbmcoKSkge1xyXG4gICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gbW9yZSBoYW5kbGVycyBpbiB0aGUgdGFzayB0aGVuIGdvIHVwIHRoZSBjaGFpbiBvZiB0YXNrc1xyXG4gICAgICBpZiAodGhpcy5nb1VwVGFza0NoYWluKCkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TmV4dEhhbmRsZXJJZHgoKTtcclxuICAgICAgZWxzZSAvLyBubyBtb3JlIHRhc2tzIGluIHRoZSBjaGFpblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyAgIGdldCB0aGUgbmV4dCB0YXNrIGluIHRoZSB0YXNrcyBjaGFpbiBhbmQgcmV0dXJucyBmYWxzZSBpZiBubyB0YXNrIHdhcyBmb3VuZC5cclxuICAvLy8gICB0aGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIHBoYXNlIHZhcmlhYmxlIGFjY29yZGluZ2x5XHJcbiAgcHJpdmF0ZSBnb1VwVGFza0NoYWluKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IG1HRGF0YTogTUdEYXRhID0gdGhpcy5fdGFzay5nZXRNR0RhdGEoKTtcclxuICAgIGxldCBjdGxJZHg6IG51bWJlciA9IHRoaXMuX3Rhc2suZ2V0Q3RsSWR4KCk7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9waGFzZSkge1xyXG4gICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfU1BFQ0lGSUM6XHJcbiAgICAgIGNhc2UgRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfQ09OVFJPTF9OT05fU1BFQ0lGSUM6IHtcclxuICAgICAgICAvLyBub24gc3BlY2lmaWMgaGFuZGxlcnMgYXJlIHNlYXJjaGVkIHRpbGwgd2UgaGl0IG91ciBtYWluIHByb2dyYW0gKGluY2x1c2l2ZSlcclxuICAgICAgICAvLyBhZnRlcndhcmRzIHdlIHN3aXRjaCB0byBnbG9iYWwgcGhhc2UuXHJcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICAgICAgdGhpcy5nZXRQYXJlbnRPckNvbXBNYWluUHJnKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBpbnRlcm5hbCwgaW50ZXJuYWwsIHN5c3RlbSBhbmQgdXNlciBldmVudHMgbWF5IGNyb3NzIGNvbXBvbmVudCBib3VuZGVyaWVzXHJcbiAgICAgICAgICBpZiAoKHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUMgfHxcclxuICAgICAgICAgICAgICAgdGhpcy5fcnRFdnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMIHx8XHJcbiAgICAgICAgICAgICAgIHRoaXMuX3J0RXZ0LmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU0gfHxcclxuICAgICAgICAgICAgICAgdGhpcy5fcnRFdnQuZ2V0VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIpICYmIGN0bElkeCA+IDApIHtcclxuICAgICAgICAgICAgLy8gbG9hZCB0aGUgUlQgcGFyZW50IG9mIHRoZSBwcmV2aW91cyB0YXNrLiBJZiBubyBwcmV2dGFzayBleGlzdHMgdGhlbiB3ZSBhcmVcclxuICAgICAgICAgICAgLy8gc2ltcGx5IHJ1bm5pbmcgb24gdGhlIG1haW4gcHJvZ3MgbGlzdCAoZm9yIGV4YW1wbGUsIHdoZW4gYSBtYWluIHByZyBjYXRjaGVzXHJcbiAgICAgICAgICAgIC8vIGEgdGltZXIgZXZlbnQsIG5vIHByZXZ0YXNrIGV4aXN0cy5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZUYXNrID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdGFzayA9IG1HRGF0YS5nZXROZXh0TWFpblByb2coY3RsSWR4KTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fdGFzayA9PT0gbnVsbCAmJiBjdGxJZHggPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRNYWluUHJvZ0J5Q3RsSWR4KC0xLCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRDb21wTWFpblByZ1RhYigpLmdldEN0bElkeCgwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCBtYWluIHByb2dyYW0gdGhhdCB3YXMgc2V0IGluIGdldFBhcmVudE9yQ29tcE1haW5QcmcsIGlzIG5vdyByZXBsYWNlZCBiYWNrIHRvIHRoZSBwYXRoIHBhcmVudC5cclxuICAgICAgICAgICAgICB0aGlzLl90YXNrID0gdGhpcy5fcHJldlRhc2suUGF0aFBhcmVudFRhc2s7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcHJldlRhc2sgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3J0RXZ0LnNldE1haW5QcmdDcmVhdG9yKG51bGwpOyAvLyBtb3Zpbmcgb3V0IG9mIGEgbWFpbiBwcm9ncmFtIHRvIGFub3RoZXIgdGFza1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgPT09IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0NPTlRST0xfU1BFQ0lGSUMpIHtcclxuICAgICAgICAgICAgLy8gc3BlY2lmaWMgc2VhcmNoIGlzIG92ZXIuIHN0YXJ0IHRoZSBub24gc3BlY2lmaWMgc2VhcmNoIGZyb20gdGhlIGZpcnN0IHRhc2suXHJcbiAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gRXZlbnRIYW5kbGVyUG9zaXRpb24uUEhBU0VfR0xPQkFMX1NQRUNJRklDO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGhlcmUgd2Ugc2NhbiB0aGUgbWFpbiBwcm9ncyBhY2NvcmRpbmcgdG8gdGhlIGxvYWQgc2VxdWVuY2UgKGZpcnN0IHRvIGxhc3QpLlxyXG4gICAgICAgICAgICB0aGlzLl9waGFzZSA9IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLl90YXNrID0gPFRhc2s+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldE1haW5Qcm9nQnlDdGxJZHgoLTEsIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCkuZ2V0Q3RsSWR4KDApKTtcclxuICAgICAgICAgIHRoaXMuX3J0RXZ0LnNldE1haW5QcmdDcmVhdG9yKHRoaXMuX3Rhc2spO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3Rhc2sgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXNlIEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTF9TUEVDSUZJQzpcclxuICAgICAgY2FzZSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9HTE9CQUw6IHtcclxuICAgICAgICB0aGlzLl90YXNrID0gbUdEYXRhLmdldE5leHRNYWluUHJvZyhjdGxJZHgpO1xyXG4gICAgICAgIGlmICh0aGlzLl90YXNrID09PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgPT09IEV2ZW50SGFuZGxlclBvc2l0aW9uLlBIQVNFX0dMT0JBTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgIC8vIHNwZWNpZmljIHNlYXJjaCBpcyBvdmVyLiBzdGFydCB0aGUgbm9uIHNwZWNpZmljIHNlYXJjaCBmcm9tIHRoZSBmaXJzdCB0YXNrLlxyXG4gICAgICAgICAgdGhpcy5fcGhhc2UgPSBFdmVudEhhbmRsZXJQb3NpdGlvbi5QSEFTRV9DT05UUk9MX05PTl9TUEVDSUZJQztcclxuICAgICAgICAgIHRoaXMuX3Rhc2sgPSB0aGlzLl9vcmdUYXNrO1xyXG4gICAgICAgICAgdGhpcy5fcHJldlRhc2sgPSB0aGlzLl9vcmdQcmV2VGFzaztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFdmVudEhhbmRsZXJQb3NpdGlvbi5nb1VwVGFza0NoYWluKCkgaW52YWxpZCBwaGFzZTogXCIgKyB0aGlzLl9waGFzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fdGFzayA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2hhbmRsZXJzVGFiID0gdGhpcy5fdGFzay5nZXRIYW5kbGVyc1RhYigpO1xyXG4gICAgaWYgKHRoaXMuX2hhbmRsZXJzVGFiID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gdGhpcy5nb1VwVGFza0NoYWluKCk7XHJcblxyXG4gICAgdGhpcy5faGFuZGxlcklkeCA9IC0xO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gICBpZiB0aGUgY3VycmVudCB0YXNrIGFuZCBpdHMgcGFyZW50IGFyZSBmcm9tIGRpZmZlcmVudCBjb21wb25lbnRzIHRoZW5cclxuICAvLy8gICBzZXQgdGhlIHRhc2sgdG8gdGhlIG1haW4gcHJvZ3JhbSBvZiB0aGUgY29tcG9uZW50IG9mIHRoZSBjdXJyZW50IHRhc2suXHJcbiAgLy8vICAgb3RoZXJ3aXNlLCBzZXQgdGhlIHRhc2sgdG8gYmUgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudCB0YXNrXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnRPckNvbXBNYWluUHJnKCk6IHZvaWQge1xyXG4gICAgbGV0IGN0bElkeDogbnVtYmVyID0gdGhpcy5fdGFzay5nZXRDdGxJZHgoKTtcclxuICAgIHRoaXMuX3ByZXZUYXNrID0gdGhpcy5fdGFzaztcclxuXHJcbiAgICAvLyBSZXRyaWV2ZSB0aGUgdGFzaydzIGNhbGxpbmctcGFyZW50LiBXZSBuZWVkIHRoZSB0YXNrIHdobyBpbnZva2VkIHRoZSBjdXJyZW50IHRhc2tcclxuICAgIC8vIHJhdGhlciB0aGFuIHRoZSB0YXNrJ3MgdHJpZ2dlcmluZyBwYXJlbnQuXHJcbiAgICAvLyBUaGUgUGF0aCBQYXJlbnQgaXMgdGhlIHBhcmVudCBvZiB0aGF0IHRhc2sgYXMgaWYgdGhlIHNlcnZlciBoYWQgZG9uZSBidWlsZCBwYXRoLiBJdCBpcyBtb3JlIGxvZ2ljYWwgdG8gc2VhcmNoIHVzaW5nIHRoZSB0cmlnZ2VyIHRhc2sgdHJlZVxyXG4gICAgLy8gYnV0IHNpbmNlIHRoZSBvbmxpbmUvc2VydmVyIGRvZXMgbm90IHVzZSB0aGUgdHJpZ2dlciB0cmVlLCB3ZSBkZWNpZGVkIG5vdCB0byB1c2UgaXQgaGVyZSBhcyB3ZWxsLlxyXG4gICAgLy8gSWYgdGhlIHBhdGggcGFyZW50IGlzIGZyb20gYSBkaWZmZXJlbnQgY29tcCwgaXQgbWVhbnMgdGhhdCBiZXR3ZWVuIGN1cnIgdGFzayBhbmQgcGFyZW50IHRoZXJlIHNob3VsZCBiZSBhIGNvbXAgbWFpbiBwcm9nLlxyXG4gICAgbGV0IHBhdGhQYXJlbnRUYXNrOiBUYXNrID0gdGhpcy5fdGFzay5QYXRoUGFyZW50VGFzaztcclxuICAgIGlmIChwYXRoUGFyZW50VGFzayA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl90YXNrID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNoZWNrIGlmIHRoZSBwYXJlbnQgdGFzayBpcyBmcm9tIGFub3RoZXIgY29tcG9uZW50XHJcbiAgICBpZiAoY3RsSWR4ICE9PSBwYXRoUGFyZW50VGFzay5nZXRDdGxJZHgoKSkge1xyXG4gICAgICAvLyByZXBsYWNlIHRoZSBwYXJlbnQgdGFzayB0byBzZWFyY2ggd2l0aCB0aGUgY29tcCBtYWluIHByb2dyYW0uIGxhdGVyIG9uLCB0aGUgbWFpbiBwcm9nIHdpbGwgYmUgcmVwbGFjZWQgd2l0aFxyXG4gICAgICAvLyB0aGUgcmVhbCBQYXRoUGFyZW50VGFzay5cclxuICAgICAgdGhpcy5fcnRFdnQuc2V0TWFpblByZ0NyZWF0b3IodGhpcy5fdGFzayk7XHJcbiAgICAgIHRoaXMuX3Rhc2sgPSA8VGFzaz5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0TWFpblByb2dCeUN0bElkeCgtMSwgY3RsSWR4KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9ydEV2dC5zZXRNYWluUHJnQ3JlYXRvcihudWxsKTtcclxuICAgICAgdGhpcy5fdGFzayA9IHBhdGhQYXJlbnRUYXNrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,5 +1,6 @@
1
+ import { BlobType, DisplayConvertor, PIC, VectorType } from '@magic-xpa/gui';
1
2
  import { DateTime, NString, StringBuilder } from '@magic-xpa/mscorelib';
2
- import { Constants, DateTimeUtils, InternalInterface, Logger, Queue, XMLConstants, XmlParser } from '@magic-xpa/utils';
3
+ import { Constants, DateTimeUtils, InternalInterface, Logger, Queue, StorageAttribute, XMLConstants, XmlParser } from '@magic-xpa/utils';
3
4
  import { FlowMonitorInterface } from '../FlowMonitorInterface';
4
5
  import { ConstInterface } from '../ConstInterface';
5
6
  export class FlowMonitorQueue {
@@ -10,7 +11,17 @@ export class FlowMonitorQueue {
10
11
  this._isRecompute = false;
11
12
  this._isTask = false;
12
13
  this._isTaskFlow = false;
14
+ this._isDataView = false;
13
15
  this.ShouldSerialize = false;
16
+ this.padRight = (string, length, character = ' ') => {
17
+ let result = "";
18
+ let totalLength = length - string.length;
19
+ for (let i = 0; i < totalLength; i++) {
20
+ result = character + result;
21
+ }
22
+ result = result + string;
23
+ return result;
24
+ };
14
25
  }
15
26
  static get Instance() {
16
27
  if (FlowMonitorQueue._instance === null)
@@ -68,6 +79,9 @@ export class FlowMonitorQueue {
68
79
  case ConstInterface.MG_ATTR_TASKFLW:
69
80
  this._isTaskFlow = XmlParser.getBoolean(valueStr);
70
81
  break;
82
+ case ConstInterface.MG_TAG_DATAVIEW:
83
+ this._isDataView = XmlParser.getBoolean(valueStr);
84
+ break;
71
85
  case ConstInterface.MG_ATTR_RECOMP:
72
86
  this._isRecompute = XmlParser.getBoolean(valueStr);
73
87
  break;
@@ -125,6 +139,96 @@ export class FlowMonitorQueue {
125
139
  Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
126
140
  }
127
141
  }
142
+ appendVirtualsAndParameters(currentValues) {
143
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_TASK_FLW, InternalInterface.MG_ACT_REC_PREFIX);
144
+ act.setInfo(currentValues);
145
+ this._queue.put(act);
146
+ }
147
+ addDataViewFlow(task) {
148
+ if (this._isDataView) {
149
+ let fldTab = task.DataView.GetFieldsTab();
150
+ let preparedDisplayString = "";
151
+ let finaldisplayData = "\n";
152
+ let fldValue;
153
+ let data = "";
154
+ for (let i = 0; i < fldTab.getSize(); i++) {
155
+ let fldDef = fldTab.getField(i);
156
+ if (!fldDef.IsEventHandlerField && (fldDef.IsVirtual && !fldDef.VirAsReal) || fldDef.isParam()) {
157
+ fldValue = fldDef.isNull() ? fldDef.getNullValue() : fldDef.getValue(true);
158
+ data = this.getFieldData(fldDef.getType(), fldValue, fldDef.getPicture(), fldDef.getCellsType(), task);
159
+ preparedDisplayString = this.PrepareDisplayString(fldDef.isParam(), fldDef.getVarName(), data, true);
160
+ finaldisplayData = finaldisplayData + preparedDisplayString + "\n";
161
+ }
162
+ }
163
+ this.appendVirtualsAndParameters(finaldisplayData);
164
+ }
165
+ }
166
+ getFieldData(Storagetype, data, picture, vecCellType, task) {
167
+ switch (Storagetype) {
168
+ case StorageAttribute.DOTNET:
169
+ data = FlowMonitorQueue.UNPRINTABLE_STR_LOG;
170
+ break;
171
+ case StorageAttribute.BLOB:
172
+ {
173
+ if (BlobType.isValidBlob(data)) {
174
+ let contentType = BlobType.getContentType(data);
175
+ if (contentType == BlobType.CONTENT_TYPE_ANSI || contentType == BlobType.CONTENT_TYPE_UNICODE)
176
+ data = data != null ? BlobType.getString(data) : "";
177
+ else
178
+ data = FlowMonitorQueue.UNPRINTABLE_STR_LOG;
179
+ }
180
+ else
181
+ data = "";
182
+ }
183
+ break;
184
+ case StorageAttribute.NUMERIC:
185
+ case StorageAttribute.DATE:
186
+ case StorageAttribute.TIME:
187
+ let conv = DisplayConvertor.Instance;
188
+ data = conv.mg2disp(data, " ", new PIC(picture, Storagetype, task.getCompIdx()), false, task.getCompIdx(), false);
189
+ break;
190
+ case StorageAttribute.BLOB_VECTOR:
191
+ let vecOutData;
192
+ if (data == null) {
193
+ vecOutData = "[]";
194
+ }
195
+ else {
196
+ let cellAtt = vecCellType;
197
+ let vector = new VectorType(data);
198
+ if (cellAtt == StorageAttribute.BLOB && !VectorType.validateBlobContents(data))
199
+ vecOutData = "[]";
200
+ else {
201
+ let vecSize = VectorType.getVecSize(data);
202
+ let cellPicture = (cellAtt == StorageAttribute.NUMERIC || cellAtt == StorageAttribute.DATE || cellAtt == StorageAttribute.TIME) ? PIC.buildPicture(cellAtt, vector.getVecCell(1), task.getCompIdx(), true).getFormat() : picture;
203
+ vecOutData = "[";
204
+ for (let i = 0; i < vecSize; i++) {
205
+ vecOutData += this.getFieldData(cellAtt, vector.getVecCell(i + 1), cellPicture, vecCellType, task);
206
+ vecOutData += i < vecSize - 1 ? "," : "]";
207
+ }
208
+ }
209
+ }
210
+ data = vecOutData;
211
+ break;
212
+ case StorageAttribute.BOOLEAN:
213
+ data = data == "1" ? "TRUE" : "FALSE";
214
+ break;
215
+ }
216
+ return data;
217
+ }
218
+ PrepareDisplayString(mode, name, valueContent, addDoubleQuotes) {
219
+ let str = "";
220
+ let finalStringToDisplay = "";
221
+ if (addDoubleQuotes)
222
+ finalStringToDisplay = finalStringToDisplay + "\"";
223
+ finalStringToDisplay = finalStringToDisplay + name;
224
+ if (addDoubleQuotes)
225
+ finalStringToDisplay = finalStringToDisplay + "\"";
226
+ let paddedName = this.padRight(name, 34);
227
+ let formatOfStringVirtual = `Virtual`;
228
+ let formatOfStringParameter = `Parameter`;
229
+ str = (mode ? formatOfStringParameter : formatOfStringVirtual) + " : " + `${paddedName}` + " : " + `${valueContent}`;
230
+ return str;
231
+ }
128
232
  addTaskFlowRec(id, state, taskInfo) {
129
233
  if (this._enabled && this._isTaskFlow) {
130
234
  let info;
@@ -289,6 +393,7 @@ export class FlowMonitorQueue {
289
393
  }
290
394
  }
291
395
  FlowMonitorQueue._instance = null;
396
+ FlowMonitorQueue.UNPRINTABLE_STR_LOG = "#UNPRINTABLE#";
292
397
  FlowMonitorQueue.S_EVENT_STR1 = ">>Starts ";
293
398
  FlowMonitorQueue.S_EVENT_STR2 = " Event";
294
399
  FlowMonitorQueue.S_EVENT_PROPAGATED = "Event was propagated";
@@ -345,4 +450,4 @@ class ActivityItem {
345
450
  message.Append(XMLConstants.TAG_TERM);
346
451
  }
347
452
  }
348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd01vbml0b3JRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdXRpbC9GbG93TW9uaXRvclF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQVEsT0FBTyxFQUFFLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXJILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQTdCO1FBcUNVLFdBQU0sR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDeEQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUNyQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztJQXlabkMsQ0FBQztJQXZaQyxNQUFNLEtBQUssUUFBUTtRQUNqQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxJQUFJO1lBQ3JDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFFdEQsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ2xELElBQUksSUFBSSxHQUFXLHFCQUFxQixDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFB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LENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJRmxvd01vbml0b3JRdWV1ZX0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge0RhdGVUaW1lLCBMaXN0LCBOU3RyaW5nLCBTdHJpbmdCdWlsZGVyfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7Q29uc3RhbnRzLCBEYXRlVGltZVV0aWxzLCBJbnRlcm5hbEludGVyZmFjZSwgTG9nZ2VyLCBRdWV1ZSwgWE1MQ29uc3RhbnRzLCBYbWxQYXJzZXJ9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge09wZXJhdGlvbn0gZnJvbSAnLi4vcnQvT3BlcmF0aW9uJztcclxuaW1wb3J0IHtGbG93TW9uaXRvckludGVyZmFjZX0gZnJvbSAnLi4vRmxvd01vbml0b3JJbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgRmxvd01vbml0b3JRdWV1ZSBpbXBsZW1lbnRzIElGbG93TW9uaXRvclF1ZXVlIHtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEZsb3dNb25pdG9yUXVldWUgPSBudWxsO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfRVZFTlRfU1RSMTogc3RyaW5nID0gXCI+PlN0YXJ0cyBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0VWRU5UX1NUUjI6IHN0cmluZyA9IFwiIEV2ZW50XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19FVkVOVF9QUk9QQUdBVEVEOiBzdHJpbmcgPSBcIkV2ZW50IHdhcyBwcm9wYWdhdGVkXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9FVkVOVF9TVFI6IHN0cmluZyA9IFwiPDxFbmRzIEV2ZW50XCI7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIFNfUkVDUFJGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgUmVjb3JkIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfUkVDUFJGX1NUUjogc3RyaW5nID0gXCJFbmRzIFJlY29yZCBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1JFQ1NVRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFJlY29yZCBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1JFQ1NVRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBSZWNvcmQgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19UQVNLU1VGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVGFzayBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1RBU0tTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgVGFzayBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1RBU0tQUkZfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBUYXNrIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfVEFTS1BSRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBUYXNrIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfQ1RSTFBSRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIENvbnRyb2wgUHJlZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9DVFJMUFJGX1NUUjogc3RyaW5nID0gXCJFbmRzIENvbnRyb2wgUHJlZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19DVFJMU1VGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgQ29udHJvbCBTdWZmaXggLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0NUUkxTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgQ29udHJvbCBTdWZmaXggLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0hBTkRMRVJfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBoYW5kbGluZyBldmVudCB7MH1cIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0hBTkRMRVJfU1RSOiBzdHJpbmcgPSBcIkVuZHMgaGFuZGxpbmcgZXZlbnQgezB9XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19DVFJMVkVSX1NUUjogc3RyaW5nID0gXCJTdGFydHMgQ29udHJvbCBWZXJpZmljYXRpb24gZm9yIENvbnRyb2wgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0NUUkxWRVJfU1RSOiBzdHJpbmcgPSBcIkVuZHMgQ29udHJvbCBWZXJpZmljYXRpb24gZm9yIENvbnRyb2wgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBSRUNPTVBfU1RSOiBzdHJpbmcgPSBcIlJlY29tcHV0ZXMgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1ZBUklBQkxFX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVmFyaWFibGUgQ2hhbmdlIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9WQVJJQUJMRV9TVFI6IHN0cmluZyA9IFwiRW5kcyBWYXJpYWJsZSBDaGFuZ2UgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBWQVJJQUJMRV9SRUFTT05fU1RSOiBzdHJpbmcgPSBcIiAtIFJlYXNvbiAtIFByZXZpb3VzIHZhbHVlXCI7XHJcblxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBGTFdfUEVSRklYOiBzdHJpbmcgPSBcIkZsb3cgLSBcIjtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX1RBU0s6IHN0cmluZyA9ICdUJztcclxuICBwcml2YXRlIHN0YXRpYyBBQ1RfVEFTS19GTFc6IHN0cmluZyA9ICdGJztcclxuICBwcml2YXRlIHN0YXRpYyBBQ1RfUkVDT01QVVRFOiBzdHJpbmcgPSAnUic7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX0ZMV19PUEVSOiBzdHJpbmcgPSAnVCc7XHJcblxyXG4gIHN0YXRpYyBMb25nVGltZVBhdHRlcm4gPSBcIkhIOm1tOnNzOlNTU1wiO1xyXG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZTxBY3Rpdml0eUl0ZW0+ID0gbmV3IFF1ZXVlPEFjdGl2aXR5SXRlbT4oKTtcclxuICBwcml2YXRlIF9lbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNGbG93T3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNSZWNvbXB1dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1Rhc2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1Rhc2tGbG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvdWxkU2VyaWFsaXplOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogRmxvd01vbml0b3JRdWV1ZSB7XHJcbiAgICBpZiAoRmxvd01vbml0b3JRdWV1ZS5faW5zdGFuY2UgPT09IG51bGwpXHJcbiAgICAgIEZsb3dNb25pdG9yUXVldWUuX2luc3RhbmNlID0gbmV3IEZsb3dNb25pdG9yUXVldWUoKTtcclxuXHJcbiAgICByZXR1cm4gRmxvd01vbml0b3JRdWV1ZS5faW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBhZGRUYXNrQ25nTW9kZShuZXdUYXNrTW9kZTogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgaW5mbzogc3RyaW5nID0gXCJUYXNrIE1vZGUgQ2hhbmdlIC0gXCI7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1Rhc2spIHtcclxuICAgICAgbGV0IGFjdGl2aXR5SXRlbTogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9UQVNLLCBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ0hOR19NT0RFKTtcclxuXHJcbiAgICAgIHN3aXRjaCAobmV3VGFza01vZGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfTU9ESUZZOlxyXG4gICAgICAgICAgaW5mbyArPSBcIk1vZGlmeVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfQ1JFQVRFOlxyXG4gICAgICAgICAgaW5mbyArPSBcIkNyZWF0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfREVMRVRFOlxyXG4gICAgICAgICAgaW5mbyArPSBcIkRlbGV0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIENvbnN0YW50cy5UQVNLX01PREVfUVVFUlk6XHJcbiAgICAgICAgICBpbmZvICs9IFwiUXVlcnlcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFjdGl2aXR5SXRlbS5zZXRJbmZvKGluZm8pO1xyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0aXZpdHlJdGVtKTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIGRhdGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpbGxEYXRhKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFwiLz5cIiwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gZmluZCBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoXCJmbHdtdHJfY29uZmlnXCIpICsgXCJmbHdtdHJfY29uZmlnXCIubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnM6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJpbiBGbG93TW9uaXRvclF1ZXVlLkZpbGxEYXRhOiBcIiArIHRva2Vucy50b1N0cmluZygpKTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vucyk7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCIvPlwiIHRvb1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiAgRmxvd01vbml0b3JRdWV1ZS5GaWxsRGF0YSgpIG91dCBvZiBzdHJpbmcgYm91bmRzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBYTUwgZGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj5hdHRyaWJ1dGUvdmFsdWUvLi4uYXR0cmlidXRlL3ZhbHVlLyB2ZWN0b3I8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+KTogdm9pZCB7XHJcblxyXG4gICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogPSBqICsgMikge1xyXG4gICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSA8c3RyaW5nPnRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmcgPSA8c3RyaW5nPnRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKGF0dHJpYnV0ZSArIFwiIHZhbHVlOiBcIiArIHZhbHVlU3RyKTtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RBU0s6XHJcbiAgICAgICAgICB0aGlzLl9pc1Rhc2sgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RBU0tGTFc6XHJcbiAgICAgICAgICB0aGlzLl9pc1Rhc2tGbG93ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUNPTVA6XHJcbiAgICAgICAgICB0aGlzLl9pc1JlY29tcHV0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRkxXT1A6XHJcbiAgICAgICAgICB0aGlzLl9pc0Zsb3dPcGVyYXRpb24gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOQUJMRUQ6XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZShYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBGbG93TW9uaXRvclF1ZXVlLmluaXRFbGVtZW50cygpOiB1bmtub3duICBhdHRyaWJ1dGU6IFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgWE1MIGFuZCBlbXB0eSB0aGUgaW5uZXIgcXVldWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fcXVldWUuaXNFbXB0eSgpICYmIHRoaXMuU2hvdWxkU2VyaWFsaXplKSB7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5TVEFSVF9UQUcgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRkxXTVRSX01TRyArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UpO1xyXG5cclxuICAgICAgd2hpbGUgKCF0aGlzLl9xdWV1ZS5pc0VtcHR5KCkpIHtcclxuICAgICAgICBsZXQgY3VyckFjdDogQWN0aXZpdHlJdGVtID0gPEFjdGl2aXR5SXRlbT50aGlzLl9xdWV1ZS5nZXQoKTtcclxuICAgICAgICBjdXJyQWN0LmJ1aWxkWE1MKG1lc3NhZ2UpO1xyXG4gICAgICB9IC8vIGZpbGwgYWN0aXZpdGllc1xyXG5cclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCI8L1wiICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0ZMV01UUl9NU0cgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFKTtcclxuICAgIH0gLy8gdGhlIHF1ZXVlIGlzIG5vdCBlbXB0eVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGlzIHRoZSBGbG93IE1vbml0b3IgUXVldWUgZW1wdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVldWUuaXNFbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGVuYWJsZSB0aGUgZmxvdyBtb25pdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGhlIHByZXZpb3VzIHN0YXRlIChlbmFibGVkL2Rpc2FibGVkKTwvcmV0dXJucz5cclxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCB3YXNFbmFibGVkOiBib29sZWFuID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuU2hvdWxkU2VyaWFsaXplID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHJldHVybiB3YXNFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBBY3Rpdml0aWVzIHRvIHRoZSBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyZWRCeVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0V2ZW50KHRyaWdnZXJlZEJ5OiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFzaykge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0ssIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FVkVOVCk7XHJcblxyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQ6XHJcbiAgICAgICAgICBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5TX0VWRU5UX1NUUjEgKyB0cmlnZ2VyZWRCeSArIEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9TVFIyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0VORDpcclxuICAgICAgICAgIGluZm8gPSBGbG93TW9uaXRvclF1ZXVlLkVfRVZFTlRfU1RSICsgdHJpZ2dlcmVkQnk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJPUEFHQVRFOlxyXG4gICAgICAgICAgaW5mbyA9IEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9QUk9QQUdBVEVEO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCB0YXNrIGZsb3cgZm9yIHJlY29yZCBwcmVmaXggb3Igc3VmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBGTFdNVFJfUFJFRklYIG9yIEZMV01UUl9TVUZGSVhcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dSZWMoaWQ6IG51bWJlciwgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrRmxvdykge1xyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG5cclxuICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19SRUNQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1JFQ1BSRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9QUkVGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1JFQ1NVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfUkVDU1VGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX1BSRUZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1RBU0tQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1RBU0tQUkZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJFRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfVEFTS1NVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfVEFTS1NVRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIGlkKTtcclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBNR19BQ1RfVkFSSUFCTEU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dGbGQoaWQ6IG51bWJlciwgZmxkTmFtZTogc3RyaW5nLCBzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZFRhc2tGbG93Q3RybChpZCwgZmxkTmFtZSwgc3RhdGUsIHRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBGTFdNVFJfQ1RSTF9QUkVGSVggb3IgRkxXTVRSX0NUUkxfU1VGRklYPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd0N0cmwoaWQ6IG51bWJlciwgY3RybE5hbWU6IHN0cmluZywgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrRmxvdykge1xyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG5cclxuICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfVkFSSUFCTEVfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1ZBUklBQkxFX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1ZBUkNIR19WQUxVRTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX0NUUkxQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX0NUUkxQUkZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ1RSTF9QUkVGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfU1VGRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfQ1RSTFNVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfQ1RSTFNVRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9DVFJMX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1ZFUklGSUNBVElPTjpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX0NUUkxWRVJfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX0NUUkxWRVJfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ1RSTF9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIGlkKTtcclxuICAgICAgaWYgKGluZm8gIT09IG51bGwpIHtcclxuICAgICAgICBpbmZvID0gaW5mbyArIGN0cmxOYW1lO1xyXG4gICAgICAgIGlmIChpZCA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1ZBUkNIR19WQUxVRSAmJiBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUKVxyXG4gICAgICAgICAgaW5mbyA9IGluZm8gKyBGbG93TW9uaXRvclF1ZXVlLlZBUklBQkxFX1JFQVNPTl9TVFI7XHJcbiAgICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaGFuZGxlcklkXCI+aXNpZCBvZiB0aGUgaGFuZGxlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgZXZlbnQgdGFzayBhY3Rpdml0aWVcclxuICAvLy8gPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd0hhbmRsZXIoaGFuZGxlcklkOiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFza0Zsb3cpIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9UQVNLX0ZMVywgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1RTS19IQU5ETEVSKTtcclxuICAgICAgbGV0IGluZm86IHN0cmluZztcclxuXHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVDpcclxuICAgICAgICAgIGluZm8gPSBOU3RyaW5nLkZvcm1hdChGbG93TW9uaXRvclF1ZXVlLlNfSEFORExFUl9TVFIsIGhhbmRsZXJJZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfRU5EOlxyXG4gICAgICAgICAgaW5mbyA9IE5TdHJpbmcuRm9ybWF0KEZsb3dNb25pdG9yUXVldWUuRV9IQU5ETEVSX1NUUiwgaGFuZGxlcklkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaW5mbyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZm8gIT09IG51bGwpIHtcclxuICAgICAgICAvLyBCUktfTEVWRUxfSEFORExFUl9JTlRFUk5BTCxCUktfTEVWRUxfSEFORExFUl9TWVNURU0sQlJLX0xFVkVMX0hBTkRMRVJfVElNRVJcclxuICAgICAgICAvLyBCUktfTEVWRUxfSEFORExFUl9FWFBSRVNTSU9OLEJSS19MRVZFTF9IQU5ETEVSX0VSUk9SLEJSS19MRVZFTF9IQU5ETEVSX1VTRVJcclxuICAgICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyZWRCeVZhck5hbWVcIj52YXIgbmFtZSAsIGhhcyB0cmlnZ2VyZWQgUmVjb21wdXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkUmVjb21wdXRlKHRyaWdnZXJlZEJ5VmFyTmFtZTogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1JlY29tcHV0ZSkge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1JFQ09NUFVURSwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1JFQ09NUCk7XHJcbiAgICAgIGxldCBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5SRUNPTVBfU1RSICsgdHJpZ2dlcmVkQnlWYXJOYW1lO1xyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCBhIGZpZWxkIGZsb3cgb3BlcmF0aW9uIGFjdGl2aXR5IGl0ZW0uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wZXJcIj5UaGUgb3BlcmF0aW9uIGJlaW5nIGxvZ2dlZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYkV4ZWN1dGVkXCI+V2lsbCB0aGUgb3BlcmF0aW9uIGJlIGV4ZWN1dGVkLjwvcGFyYW0+XHJcbiAgYXN5bmMgYWRkRmxvd0ZpZWxkT3BlcmF0aW9uKG9wZXI6IE9wZXJhdGlvbiwgYkV4ZWN1dGVkOiBib29sZWFuLCB0YXNrSW5mbzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc0Zsb3dPcGVyYXRpb24pIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7XHJcbiAgICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihGbG93TW9uaXRvclF1ZXVlLkZMV19QRVJGSVgpO1xyXG4gICAgICBhd2FpdCBvcGVyLkFkZEZsb3dEZXNjcmlwdGlvbihidWZmZXIpO1xyXG4gICAgICBidWZmZXIuQXBwZW5kKCcgJyk7XHJcblxyXG5cclxuICAgICAgaWYgKCFiRXhlY3V0ZWQpXHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIltOb3QgRXhlY3V0ZWRdXCIpO1xyXG5cclxuICAgICAgbGV0IGluZm8gPSBidWZmZXIuVG9TdHJpbmcoKTtcclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgdXBkYXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkRmxvd09wZXJhdGlvblVwZGF0ZShzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc0Zsb3dPcGVyYXRpb24pIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7IC8vIE1HX09QRVJfVVBEQVRFXHJcbiAgICAgIGxldCBpbmZvOiBzdHJpbmc7XHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUKVxyXG4gICAgICAgIGluZm8gPSBcIlN0YXJ0cyBVcGRhdGVcIjtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGluZm8gPSAgXCJFbmRzIFVwZGF0ZVwiO1xyXG5cclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5mb1wiPnN0cmluZyBwYXNzZWQgdG8gc3RhdHVzIGxpbmUgdmVyaWZ5IGFjdGlvbjwvcGFyYW0+XHJcbiAgYWRkRmxvd1ZlcmlmeUluZm8oaW5mbzogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZEZsb3dJbmZvKGluZm8sIHRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5mb1wiPnN0cmluZyBhZGRlZCB0byBmbG93IG1vbml0b3IgcXVldWUgZm9yIEludm9rZU9zPC9wYXJhbT5cclxuICBhZGRGbG93SW52b2tlT3NJbmZvKGluZm86IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRGbG93SW5mbyhpbmZvLCB0YXNrSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXNlciBzdHJpbmcgcGFzc2VkIHRvIHN0YXR1cyBsaW5lIGZvciBhY3Rpb25zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluZm9cIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGFkZEZsb3dJbmZvKGluZm86IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoXCJcIik7XHJcblxyXG4gICAgaWYgKCEoaW5mbyA9PT0gXCJcIikpIHtcclxuICAgICAgYnVmZmVyLkFwcGVuZChcIiA+PiBJTkZPUk1BVElPTiA+PiBcIik7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoaW5mbyk7XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3SW5mbyA9IGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgYWN0LnNldEluZm8obmV3SW5mbyk7XHJcbiAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIG5ld0luZm8sIHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBhbGwgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBBY3Rpdml0eVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5jbGFzcyBBY3Rpdml0eUl0ZW0ge1xyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9IG51bGw7IC8vIEFDVFlfVEFTS3xBQ1RfVEFTS19GTFd8QUNUX0RBVEFWSUVXfEFDVF9SRUNPTVBVVEV8QUNUX0ZMV19PUEVSXHJcbiAgcHJpdmF0ZSBfaW5mbzogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbmNsb3NpbmdJbnN0YW5jZTogRmxvd01vbml0b3JRdWV1ZSwgdHlwZTogc3RyaW5nLCBpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lkID0gaWQ7XHJcbiAgICB0aGlzLnNldFRpbWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzYXZlIGN1cnJlbnQgdGltZSBpbiB0aGUgbmVlZGVkIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzZXRUaW1lKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGltZSA9IERhdGVUaW1lVXRpbHMuVG9TdHJpbmcoRGF0ZVRpbWUuTm93LCBGbG93TW9uaXRvclF1ZXVlLkxvbmdUaW1lUGF0dGVybiwgTG9nZ2VyLkluc3RhbmNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYWRkZWQgaW5mb3JtYXRpb24gZm9yIHRoZSBhY3Rpdml0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SW5mbyhpbmZvXzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbmZvID0gKChpbmZvXyAhPT0gbnVsbCkgPyBYbWxQYXJzZXIuZXNjYXBlKGluZm9fKSA6IGluZm9fKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBYTUwgc3RyaW5nIGZvciB0aGUgYWN0aXZpdHkgaXRlbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYnVpbGRYTUwobWVzc2FnZTogU3RyaW5nQnVpbGRlcik6IHZvaWQge1xyXG4gICAgbWVzc2FnZS5BcHBlbmQoWE1MQ29uc3RhbnRzLlNUQVJUX1RBRyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19GTFdNVFJfQUNUKTtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVFlQRSArIFwiPVxcXCJcIiArIHRoaXMuX3R5cGUgKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIFhNTENvbnN0YW50cy5NR19BVFRSX0lEICsgXCI9XFxcIlwiICsgdGhpcy5faWQgKyBcIlxcXCJcIik7XHJcbiAgICBpZiAodGhpcy5faW5mbyAhPSBudWxsKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5GTyArIFwiPVxcXCJcIiArIHRoaXMuX2luZm8gKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRSArIFwiPVxcXCJcIiArIHRoaXMuX3RpbWUgKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuVEFHX1RFUk0pO1xyXG4gIH1cclxufVxyXG4iXX0=
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd01vbml0b3JRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdXRpbC9GbG93TW9uaXRvclF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQWtDLEdBQUcsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUMsUUFBUSxFQUFRLE9BQU8sRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUV2SSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFLakQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQXNDVSxXQUFNLEdBQXdCLElBQUksS0FBSyxFQUFnQixDQUFDO1FBQ3hELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDckMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUErVHhCLGFBQVEsR0FBRyxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsWUFBb0IsR0FBRyxFQUFVLEVBQUU7WUFDdEYsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksV0FBVyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFD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cnRvciwgRmllbGRzVGFibGUsIElGbG93TW9uaXRvclF1ZXVlLCBQSUMsIFZlY3RvclR5cGV9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtEYXRlVGltZSwgTGlzdCwgTlN0cmluZywgU3RyaW5nQnVpbGRlcn0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0NvbnN0YW50cywgRGF0ZVRpbWVVdGlscywgSW50ZXJuYWxJbnRlcmZhY2UsIExvZ2dlciwgUXVldWUsIFN0b3JhZ2VBdHRyaWJ1dGUsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtPcGVyYXRpb259IGZyb20gJy4uL3J0L09wZXJhdGlvbic7XHJcbmltcG9ydCB7Rmxvd01vbml0b3JJbnRlcmZhY2V9IGZyb20gJy4uL0Zsb3dNb25pdG9ySW50ZXJmYWNlJztcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vdGFza3MvVGFzayc7XHJcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAnLi4vZGF0YS9GaWVsZCc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgRmxvd01vbml0b3JRdWV1ZSBpbXBsZW1lbnRzIElGbG93TW9uaXRvclF1ZXVlIHtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEZsb3dNb25pdG9yUXVldWUgPSBudWxsO1xyXG4gIHByaXZhdGUgc3RhdGljIFVOUFJJTlRBQkxFX1NUUl9MT0c6IHN0cmluZyA9IFwiI1VOUFJJTlRBQkxFI1wiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfRVZFTlRfU1RSMTogc3RyaW5nID0gXCI+PlN0YXJ0cyBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0VWRU5UX1NUUjI6IHN0cmluZyA9IFwiIEV2ZW50XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19FVkVOVF9QUk9QQUdBVEVEOiBzdHJpbmcgPSBcIkV2ZW50IHdhcyBwcm9wYWdhdGVkXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9FVkVOVF9TVFI6IHN0cmluZyA9IFwiPDxFbmRzIEV2ZW50XCI7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIFNfUkVDUFJGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgUmVjb3JkIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfUkVDUFJGX1NUUjogc3RyaW5nID0gXCJFbmRzIFJlY29yZCBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1JFQ1NVRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFJlY29yZCBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1JFQ1NVRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBSZWNvcmQgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19UQVNLU1VGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVGFzayBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1RBU0tTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgVGFzayBTdWZmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1RBU0tQUkZfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBUYXNrIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfVEFTS1BSRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBUYXNrIFByZWZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfQ1RSTFBSRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIENvbnRyb2wgUHJlZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9DVFJMUFJGX1NUUjogc3RyaW5nID0gXCJFbmRzIENvbnRyb2wgUHJlZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19DVFJMU1VGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgQ29udHJvbCBTdWZmaXggLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0NUUkxTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgQ29udHJvbCBTdWZmaXggLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0hBTkRMRVJfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBoYW5kbGluZyBldmVudCB7MH1cIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0hBTkRMRVJfU1RSOiBzdHJpbmcgPSBcIkVuZHMgaGFuZGxpbmcgZXZlbnQgezB9XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19DVFJMVkVSX1NUUjogc3RyaW5nID0gXCJTdGFydHMgQ29udHJvbCBWZXJpZmljYXRpb24gZm9yIENvbnRyb2wgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX0NUUkxWRVJfU1RSOiBzdHJpbmcgPSBcIkVuZHMgQ29udHJvbCBWZXJpZmljYXRpb24gZm9yIENvbnRyb2wgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBSRUNPTVBfU1RSOiBzdHJpbmcgPSBcIlJlY29tcHV0ZXMgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX1ZBUklBQkxFX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVmFyaWFibGUgQ2hhbmdlIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9WQVJJQUJMRV9TVFI6IHN0cmluZyA9IFwiRW5kcyBWYXJpYWJsZSBDaGFuZ2UgLSBcIjtcclxuICBwcml2YXRlIHN0YXRpYyBWQVJJQUJMRV9SRUFTT05fU1RSOiBzdHJpbmcgPSBcIiAtIFJlYXNvbiAtIFByZXZpb3VzIHZhbHVlXCI7XHJcblxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBGTFdfUEVSRklYOiBzdHJpbmcgPSBcIkZsb3cgLSBcIjtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX1RBU0s6IHN0cmluZyA9ICdUJztcclxuICBwcml2YXRlIHN0YXRpYyBBQ1RfVEFTS19GTFc6IHN0cmluZyA9ICdGJztcclxuICBwcml2YXRlIHN0YXRpYyBBQ1RfUkVDT01QVVRFOiBzdHJpbmcgPSAnUic7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX0ZMV19PUEVSOiBzdHJpbmcgPSAnVCc7XHJcblxyXG4gIHN0YXRpYyBMb25nVGltZVBhdHRlcm4gPSBcIkhIOm1tOnNzOlNTU1wiO1xyXG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZTxBY3Rpdml0eUl0ZW0+ID0gbmV3IFF1ZXVlPEFjdGl2aXR5SXRlbT4oKTtcclxuICBwcml2YXRlIF9lbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNGbG93T3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNSZWNvbXB1dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1Rhc2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1Rhc2tGbG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNEYXRhVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFNob3VsZFNlcmlhbGl6ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IEZsb3dNb25pdG9yUXVldWUge1xyXG4gICAgaWYgKEZsb3dNb25pdG9yUXVldWUuX2luc3RhbmNlID09PSBudWxsKVxyXG4gICAgICBGbG93TW9uaXRvclF1ZXVlLl9pbnN0YW5jZSA9IG5ldyBGbG93TW9uaXRvclF1ZXVlKCk7XHJcblxyXG4gICAgcmV0dXJuIEZsb3dNb25pdG9yUXVldWUuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgYWRkVGFza0NuZ01vZGUobmV3VGFza01vZGU6IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGluZm86IHN0cmluZyA9IFwiVGFzayBNb2RlIENoYW5nZSAtIFwiO1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrKSB7XHJcbiAgICAgIGxldCBhY3Rpdml0eUl0ZW06IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTSywgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0NITkdfTU9ERSk7XHJcblxyXG4gICAgICBzd2l0Y2ggKG5ld1Rhc2tNb2RlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdGFudHMuVEFTS19NT0RFX01PRElGWTpcclxuICAgICAgICAgIGluZm8gKz0gXCJNb2RpZnlcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURTpcclxuICAgICAgICAgIGluZm8gKz0gXCJDcmVhdGVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBDb25zdGFudHMuVEFTS19NT0RFX0RFTEVURTpcclxuICAgICAgICAgIGluZm8gKz0gXCJEZWxldGVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBDb25zdGFudHMuVEFTS19NT0RFX1FVRVJZOlxyXG4gICAgICAgICAgaW5mbyArPSBcIlF1ZXJ5XCI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhY3Rpdml0eUl0ZW0uc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdGl2aXR5SXRlbSk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBkYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihcIi8+XCIsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGZpbmQgbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKFwiZmx3bXRyX2NvbmZpZ1wiKSArIFwiZmx3bXRyX2NvbmZpZ1wiLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiaW4gRmxvd01vbml0b3JRdWV1ZS5GaWxsRGF0YTogXCIgKyB0b2tlbnMudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnMpO1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX1RFUk0ubGVuZ3RoKTsgLy8gdG8gZGVsZXRlIFwiLz5cIiB0b29cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gIEZsb3dNb25pdG9yUXVldWUuRmlsbERhdGEoKSBvdXQgb2Ygc3RyaW5nIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSB0aGUgWE1MIGRhdGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9rZW5zVmVjdG9yXCI+YXR0cmlidXRlL3ZhbHVlLy4uLmF0dHJpYnV0ZS92YWx1ZS8gdmVjdG9yPC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPik6IHZvaWQge1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqID0gaiArIDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gPHN0cmluZz50b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaik7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gPHN0cmluZz50b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpO1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhhdHRyaWJ1dGUgKyBcIiB2YWx1ZTogXCIgKyB2YWx1ZVN0cik7XHJcblxyXG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9UQVNLOlxyXG4gICAgICAgICAgdGhpcy5faXNUYXNrID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9UQVNLRkxXOlxyXG4gICAgICAgICAgdGhpcy5faXNUYXNrRmxvdyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBVklFVzpcclxuICAgICAgICAgIHRoaXMuX2lzRGF0YVZpZXcgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFQ09NUDpcclxuICAgICAgICAgIHRoaXMuX2lzUmVjb21wdXRlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9GTFdPUDpcclxuICAgICAgICAgIHRoaXMuX2lzRmxvd09wZXJhdGlvbiA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5BQkxFRDpcclxuICAgICAgICAgIHRoaXMuZW5hYmxlKFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIEZsb3dNb25pdG9yUXVldWUuaW5pdEVsZW1lbnRzKCk6IHVua25vd24gIGF0dHJpYnV0ZTogXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBYTUwgYW5kIGVtcHR5IHRoZSBpbm5lciBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYnVpbGRYTUwobWVzc2FnZTogU3RyaW5nQnVpbGRlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9xdWV1ZS5pc0VtcHR5KCkgJiYgdGhpcy5TaG91bGRTZXJpYWxpemUpIHtcclxuICAgICAgbWVzc2FnZS5BcHBlbmQoWE1MQ29uc3RhbnRzLlNUQVJUX1RBRyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19GTFdNVFJfTVNHICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRSk7XHJcblxyXG4gICAgICB3aGlsZSAoIXRoaXMuX3F1ZXVlLmlzRW1wdHkoKSkge1xyXG4gICAgICAgIGxldCBjdXJyQWN0OiBBY3Rpdml0eUl0ZW0gPSA8QWN0aXZpdHlJdGVtPnRoaXMuX3F1ZXVlLmdldCgpO1xyXG4gICAgICAgIGN1cnJBY3QuYnVpbGRYTUwobWVzc2FnZSk7XHJcbiAgICAgIH0gLy8gZmlsbCBhY3Rpdml0aWVzXHJcblxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIjwvXCIgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRkxXTVRSX01TRyArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UpO1xyXG4gICAgfSAvLyB0aGUgcXVldWUgaXMgbm90IGVtcHR5XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaXMgdGhlIEZsb3cgTW9uaXRvciBRdWV1ZSBlbXB0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNFbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5pc0VtcHR5KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZW5hYmxlIHRoZSBmbG93IG1vbml0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz50aGUgcHJldmlvdXMgc3RhdGUgKGVuYWJsZWQvZGlzYWJsZWQpPC9yZXR1cm5zPlxyXG4gIGVuYWJsZSh2YWx1ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHdhc0VuYWJsZWQ6IGJvb2xlYW4gPSB0aGlzLl9lbmFibGVkO1xyXG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5TaG91bGRTZXJpYWxpemUgPSB0aGlzLl9lbmFibGVkO1xyXG4gICAgcmV0dXJuIHdhc0VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIEFjdGl2aXRpZXMgdG8gdGhlIHF1ZXVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRyaWdnZXJlZEJ5XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllPC9wYXJhbT5cclxuICBhZGRUYXNrRXZlbnQodHJpZ2dlcmVkQnk6IHN0cmluZywgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrKSB7XHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTSywgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0VWRU5UKTtcclxuXHJcbiAgICAgIGxldCBpbmZvOiBzdHJpbmc7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVDpcclxuICAgICAgICAgIGluZm8gPSBGbG93TW9uaXRvclF1ZXVlLlNfRVZFTlRfU1RSMSArIHRyaWdnZXJlZEJ5ICsgRmxvd01vbml0b3JRdWV1ZS5TX0VWRU5UX1NUUjI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfRU5EOlxyXG4gICAgICAgICAgaW5mbyA9IEZsb3dNb25pdG9yUXVldWUuRV9FVkVOVF9TVFIgKyB0cmlnZ2VyZWRCeTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9QUk9QQUdBVEU6XHJcbiAgICAgICAgICBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5TX0VWRU5UX1BST1BBR0FURUQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFjdC5zZXRJbmZvKGluZm8pO1xyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFZpcnR1YWxzQW5kUGFyYW1ldGVycyhjdXJyZW50VmFsdWVzOiBzdHJpbmcpIDogdm9pZFxyXG4gIHtcclxuICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYKTtcclxuICAgIGFjdC5zZXRJbmZvKGN1cnJlbnRWYWx1ZXMpO1xyXG4gICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcbiAgfVxyXG5cclxuICAvLyAvLy8gPHN1bW1hcnk+XHJcbiAgLy8gLy8vICAgYWRkIHZpcnR1YWwgYW5kIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBhbmQgc2VuZCBpdCB0byBzZXJ2ZXIgb24gcmVjb3JkIHByZWZpeFxyXG4gIC8vIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8gLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrXCI+XHJcbiAgLy8gLy8vIDwvcGFyYW0+XHJcbiAgYWRkRGF0YVZpZXdGbG93KHRhc2s6IFRhc2spIDogdm9pZFxyXG4gIHsgXHJcbiAgICAgIGlmICh0aGlzLl9pc0RhdGFWaWV3KVxyXG4gICAgICB7XHJcbiAgICAgICAgICBsZXQgZmxkVGFiOiBGaWVsZHNUYWJsZSA9IHRhc2suRGF0YVZpZXcuR2V0RmllbGRzVGFiKCk7XHJcbiAgICAgICAgICBsZXQgcHJlcGFyZWREaXNwbGF5U3RyaW5nOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgbGV0IGZpbmFsZGlzcGxheURhdGE6IHN0cmluZyA9IFwiXFxuXCI7XHJcbiAgICAgICAgICBsZXQgZmxkVmFsdWU6IHN0cmluZztcclxuICAgICAgICAgIGxldCBkYXRhOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGZsZFRhYi5nZXRTaXplKCk7IGkrKylcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBsZXQgZmxkRGVmOiBGaWVsZCA9IDxGaWVsZD5mbGRUYWIuZ2V0RmllbGQoaSk7XHJcbiAgICAgICAgICAgICAgaWYgKCFmbGREZWYuSXNFdmVudEhhbmRsZXJGaWVsZCAmJiAoZmxkRGVmLklzVmlydHVhbCAmJiAhZmxkRGVmLlZpckFzUmVhbCkgfHwgZmxkRGVmLmlzUGFyYW0oKSlcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGZsZFZhbHVlID0gZmxkRGVmLmlzTnVsbCgpID8gZmxkRGVmLmdldE51bGxWYWx1ZSgpIDogZmxkRGVmLmdldFZhbHVlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRGaWVsZERhdGEoZmxkRGVmLmdldFR5cGUoKSwgZmxkVmFsdWUsIGZsZERlZi5nZXRQaWN0dXJlKCksIGZsZERlZi5nZXRDZWxsc1R5cGUoKSwgdGFzayk7XHJcbiAgICAgICAgICAgICAgICAgIHByZXBhcmVkRGlzcGxheVN0cmluZyA9IHRoaXMuUHJlcGFyZURpc3BsYXlTdHJpbmcoZmxkRGVmLmlzUGFyYW0oKSwgZmxkRGVmLmdldFZhck5hbWUoKSwgZGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIGZpbmFsZGlzcGxheURhdGEgPSBmaW5hbGRpc3BsYXlEYXRhICsgcHJlcGFyZWREaXNwbGF5U3RyaW5nICsgXCJcXG5cIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmFwcGVuZFZpcnR1YWxzQW5kUGFyYW1ldGVycyhmaW5hbGRpc3BsYXlEYXRhKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gIC8vIC8vLyA8c3VtbWFyeT5cclxuICAvLyAvLy8gICBHZXQgdmlydHVhbHMgYW5kIHBhcmFtZXRlciB2YWx1ZXMuXHJcbiAgLy8gLy8vIDwvc3VtbWFyeT5cclxuICAvLyAvLy8gPHBhcmFtIG5hbWUgPSBcIlN0b3JhZ2V0eXBlXCI+PC9wYXJhbT5cclxuICAvLyAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFcIj48L3BhcmFtPlxyXG4gIC8vIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljdHVyZVwiPjwvcGFyYW0+XHJcbiAgLy8gLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNDZWxsVHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8gLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrXCI+PC9wYXJhbT5cclxuICAvLyAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGdldEZpZWxkRGF0YShTdG9yYWdldHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgZGF0YTogc3RyaW5nLCBwaWN0dXJlOiBzdHJpbmcsIHZlY0NlbGxUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCB0YXNrOiBUYXNrKTogc3RyaW5nXHJcbiAge1xyXG4gICAgICBzd2l0Y2ggKFN0b3JhZ2V0eXBlKVxyXG4gICAgICB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUOlxyXG4gICAgICAgICAgICAgIGRhdGEgPSBGbG93TW9uaXRvclF1ZXVlLlVOUFJJTlRBQkxFX1NUUl9MT0c7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYoQmxvYlR5cGUuaXNWYWxpZEJsb2IoZGF0YSkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gQmxvYlR5cGUuZ2V0Q29udGVudFR5cGUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSA9PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQU5TSSB8fCBjb250ZW50VHlwZSA9PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5JQ09ERSlcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBCbG9iVHlwZS5nZXRTdHJpbmcoZGF0YSkgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmxvd01vbml0b3JRdWV1ZS5VTlBSSU5UQUJMRV9TVFJfTE9HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICBkYXRhID0gXCJcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICAgIGxldCBjb252OiBEaXNwbGF5Q29udmVydG9yPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlO1xyXG4gICAgICAgICAgICAgIGRhdGEgPSBjb252Lm1nMmRpc3AoZGF0YSwgXCIgXCIsIG5ldyBQSUMocGljdHVyZSwgU3RvcmFnZXR5cGUsIHRhc2suZ2V0Q29tcElkeCgpKSwgZmFsc2UsIHRhc2suZ2V0Q29tcElkeCgpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgICAgICAgIGxldCB2ZWNPdXREYXRhOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbClcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHZlY091dERhdGEgPSBcIltdXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBjZWxsQXR0OiBTdG9yYWdlQXR0cmlidXRlID0gdmVjQ2VsbFR5cGU7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB2ZWN0b3I6IFZlY3RvclR5cGUgPSBuZXcgVmVjdG9yVHlwZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNlbGxBdHQgPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmICFWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKGRhdGEpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgdmVjT3V0RGF0YSA9IFwiW11cIjtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgdmVjU2l6ZTogbnVtYmVyID0gVmVjdG9yVHlwZS5nZXRWZWNTaXplKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGNlbGxQaWN0dXJlOiBzdHJpbmcgPSAoY2VsbEF0dCA9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgY2VsbEF0dCA9PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgfHwgY2VsbEF0dCA9PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpID8gUElDLmJ1aWxkUGljdHVyZShjZWxsQXR0LCB2ZWN0b3IuZ2V0VmVjQ2VsbCgxKSwgdGFzay5nZXRDb21wSWR4KCksIHRydWUpLmdldEZvcm1hdCgpIDogcGljdHVyZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHZlY091dERhdGEgPSBcIltcIjtcclxuICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgOiBudW1iZXIgPSAwOyBpIDwgdmVjU2l6ZTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZlY091dERhdGEgKz0gdGhpcy5nZXRGaWVsZERhdGEoY2VsbEF0dCwgdmVjdG9yLmdldFZlY0NlbGwoaSArIDEpLCBjZWxsUGljdHVyZSwgdmVjQ2VsbFR5cGUsIHRhc2spO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZlY091dERhdGEgKz0gaSA8IHZlY1NpemUgLSAxID8gXCIsXCIgOiBcIl1cIjtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBkYXRhID0gdmVjT3V0RGF0YTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgICAgICBkYXRhID0gZGF0YSA9PSBcIjFcIiA/IFwiVFJVRVwiIDogXCJGQUxTRVwiO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFByZXBhcmUgZGlzcGxheSBzdHJpbmcgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBvbiByZWNvcmQgcHJlZml4LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtb2RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsdWVDb250ZW50XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFkZERvdWJsZVF1b3Rlc1wiPjwvcGFyYW0+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBQcmVwYXJlRGlzcGxheVN0cmluZyhtb2RlOiBib29sZWFuLCBuYW1lOiBzdHJpbmcsIHZhbHVlQ29udGVudDogc3RyaW5nLCBhZGREb3VibGVRdW90ZXM6IGJvb2xlYW4pOiBzdHJpbmdcclxuICB7XHJcbiAgICAgIGxldCAgc3RyOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICBsZXQgZmluYWxTdHJpbmdUb0Rpc3BsYXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgIGlmIChhZGREb3VibGVRdW90ZXMpXHJcbiAgICAgICAgICBmaW5hbFN0cmluZ1RvRGlzcGxheSA9IGZpbmFsU3RyaW5nVG9EaXNwbGF5ICsgXCJcXFwiXCI7XHJcbiAgICAgIGZpbmFsU3RyaW5nVG9EaXNwbGF5ID0gZmluYWxTdHJpbmdUb0Rpc3BsYXkgKyBuYW1lO1xyXG4gICAgICBpZiAoYWRkRG91YmxlUXVvdGVzKVxyXG4gICAgICAgICAgZmluYWxTdHJpbmdUb0Rpc3BsYXkgPSBmaW5hbFN0cmluZ1RvRGlzcGxheSArIFwiXFxcIlwiO1xyXG5cclxuICAgICAgbGV0IHBhZGRlZE5hbWUgPSB0aGlzLnBhZFJpZ2h0KG5hbWUsMzQpO1xyXG4gICAgICBsZXQgZm9ybWF0T2ZTdHJpbmdWaXJ0dWFsOnN0cmluZyA9IGBWaXJ0dWFsYCA7Ly86ICR7cGFkZGVkTmFtZX0gOiAke3ZhbHVlQ29udGVudH1gO1xyXG4gICAgICBsZXQgZm9ybWF0T2ZTdHJpbmdQYXJhbWV0ZXI6IHN0cmluZyA9IGBQYXJhbWV0ZXJgOy8vYCA6ICR7cGFkZGVkTmFtZX0gOiAke3ZhbHVlQ29udGVudH1gO1xyXG4gICAgIFxyXG4gICAgICAvL2lmICghbW9kZSlcclxuICAgICAgICAgIHN0ciA9IChtb2RlID8gZm9ybWF0T2ZTdHJpbmdQYXJhbWV0ZXIgOiBmb3JtYXRPZlN0cmluZ1ZpcnR1YWwpICsgXCIgOiBcIiArYCR7cGFkZGVkTmFtZX1gKyBcIiA6IFwiK2Ake3ZhbHVlQ29udGVudH1gO1xyXG4gICAgICAvLyAgICBzdHIgPSBTdHJpbmcuRm9ybWF0KGZvcm1hdE9mU3RyaW5nVmlydHVhbCwgbmFtZS5QYWRSaWdodCgzNCksIHZhbHVlQ29udGVudCk7XHJcbiAgICAgLy8gZWxzZVxyXG4gICAgIC8vICAgICBzdHIgPSBTdHJpbmcuRm9ybWF0KGZvcm1hdE9mU3RyaW5nUGFyYW1ldGVyLCBuYW1lLlBhZFJpZ2h0KDM0KSwgdmFsdWVDb250ZW50KTtcclxuXHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAgcHJpdmF0ZSBwYWRSaWdodCA9IChzdHJpbmc6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIGNoYXJhY3Rlcjogc3RyaW5nID0gJyAnKTogc3RyaW5nID0+IHtcclxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgbGV0IHRvdGFsTGVuZ3RoID0gbGVuZ3RoIC0gc3RyaW5nLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxMZW5ndGg7IGkrKykge1xyXG4gICAgICByZXN1bHQgPSBjaGFyYWN0ZXIgKyByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXN1bHQgPSByZXN1bHQgKyBzdHJpbmc7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCB0YXNrIGZsb3cgZm9yIHJlY29yZCBwcmVmaXggb3Igc3VmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBGTFdNVFJfUFJFRklYIG9yIEZMV01UUl9TVUZGSVhcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dSZWMoaWQ6IG51bWJlciwgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrRmxvdykge1xyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG5cclxuICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19SRUNQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1JFQ1BSRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9QUkVGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1JFQ1NVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfUkVDU1VGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX1BSRUZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1RBU0tQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1RBU0tQUkZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJFRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfVEFTS1NVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfVEFTS1NVRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIGlkKTtcclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBNR19BQ1RfVkFSSUFCTEU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0Zsb3dGbGQoaWQ6IG51bWJlciwgZmxkTmFtZTogc3RyaW5nLCBzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZFRhc2tGbG93Q3RybChpZCwgZmxkTmFtZSwgc3RhdGUsIHRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5pcyBGTFdNVFJfQ1RSTF9QUkVGSVggb3IgRkxXTVRSX0NUUkxfU1VGRklYPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd0N0cmwoaWQ6IG51bWJlciwgY3RybE5hbWU6IHN0cmluZywgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrRmxvdykge1xyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG5cclxuICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfVkFSSUFCTEVfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX1ZBUklBQkxFX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1ZBUkNIR19WQUxVRTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX0NUUkxQUkZfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX0NUUkxQUkZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ1RSTF9QUkVGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfU1VGRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfQ1RSTFNVRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfQ1RSTFNVRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9DVFJMX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1ZFUklGSUNBVElPTjpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX0NUUkxWRVJfU1RSXHJcbiAgICAgICAgICAgIDogRmxvd01vbml0b3JRdWV1ZS5FX0NUUkxWRVJfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfQ1RSTF9TVUZGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfVEFTS19GTFcsIGlkKTtcclxuICAgICAgaWYgKGluZm8gIT09IG51bGwpIHtcclxuICAgICAgICBpbmZvID0gaW5mbyArIGN0cmxOYW1lO1xyXG4gICAgICAgIGlmIChpZCA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1ZBUkNIR19WQUxVRSAmJiBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUKVxyXG4gICAgICAgICAgaW5mbyA9IGluZm8gKyBGbG93TW9uaXRvclF1ZXVlLlZBUklBQkxFX1JFQVNPTl9TVFI7XHJcbiAgICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaGFuZGxlcklkXCI+aXNpZCBvZiB0aGUgaGFuZGxlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgZXZlbnQgdGFzayBhY3Rpdml0aWVcclxuICAvLy8gPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd0hhbmRsZXIoaGFuZGxlcklkOiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFza0Zsb3cpIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9UQVNLX0ZMVywgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1RTS19IQU5ETEVSKTtcclxuICAgICAgbGV0IGluZm86IHN0cmluZztcclxuXHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVDpcclxuICAgICAgICAgIGluZm8gPSBOU3RyaW5nLkZvcm1hdChGbG93TW9uaXRvclF1ZXVlLlNfSEFORExFUl9TVFIsIGhhbmRsZXJJZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfRU5EOlxyXG4gICAgICAgICAgaW5mbyA9IE5TdHJpbmcuRm9ybWF0KEZsb3dNb25pdG9yUXVldWUuRV9IQU5ETEVSX1NUUiwgaGFuZGxlcklkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaW5mbyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZm8gIT09IG51bGwpIHtcclxuICAgICAgICAvLyBCUktfTEVWRUxfSEFORExFUl9JTlRFUk5BTCxCUktfTEVWRUxfSEFORExFUl9TWVNURU0sQlJLX0xFVkVMX0hBTkRMRVJfVElNRVJcclxuICAgICAgICAvLyBCUktfTEVWRUxfSEFORExFUl9FWFBSRVNTSU9OLEJSS19MRVZFTF9IQU5ETEVSX0VSUk9SLEJSS19MRVZFTF9IQU5ETEVSX1VTRVJcclxuICAgICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyZWRCeVZhck5hbWVcIj52YXIgbmFtZSAsIGhhcyB0cmlnZ2VyZWQgUmVjb21wdXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkUmVjb21wdXRlKHRyaWdnZXJlZEJ5VmFyTmFtZTogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1JlY29tcHV0ZSkge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1JFQ09NUFVURSwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1JFQ09NUCk7XHJcbiAgICAgIGxldCBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5SRUNPTVBfU1RSICsgdHJpZ2dlcmVkQnlWYXJOYW1lO1xyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCBhIGZpZWxkIGZsb3cgb3BlcmF0aW9uIGFjdGl2aXR5IGl0ZW0uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wZXJcIj5UaGUgb3BlcmF0aW9uIGJlaW5nIGxvZ2dlZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYkV4ZWN1dGVkXCI+V2lsbCB0aGUgb3BlcmF0aW9uIGJlIGV4ZWN1dGVkLjwvcGFyYW0+XHJcbiAgYXN5bmMgYWRkRmxvd0ZpZWxkT3BlcmF0aW9uKG9wZXI6IE9wZXJhdGlvbiwgYkV4ZWN1dGVkOiBib29sZWFuLCB0YXNrSW5mbzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc0Zsb3dPcGVyYXRpb24pIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7XHJcbiAgICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihGbG93TW9uaXRvclF1ZXVlLkZMV19QRVJGSVgpO1xyXG4gICAgICBhd2FpdCBvcGVyLkFkZEZsb3dEZXNjcmlwdGlvbihidWZmZXIpO1xyXG4gICAgICBidWZmZXIuQXBwZW5kKCcgJyk7XHJcblxyXG5cclxuICAgICAgaWYgKCFiRXhlY3V0ZWQpXHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIltOb3QgRXhlY3V0ZWRdXCIpO1xyXG5cclxuICAgICAgbGV0IGluZm8gPSBidWZmZXIuVG9TdHJpbmcoKTtcclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgdXBkYXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgYWRkRmxvd09wZXJhdGlvblVwZGF0ZShzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc0Zsb3dPcGVyYXRpb24pIHtcclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7IC8vIE1HX09QRVJfVVBEQVRFXHJcbiAgICAgIGxldCBpbmZvOiBzdHJpbmc7XHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUKVxyXG4gICAgICAgIGluZm8gPSBcIlN0YXJ0cyBVcGRhdGVcIjtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGluZm8gPSAgXCJFbmRzIFVwZGF0ZVwiO1xyXG5cclxuICAgICAgYWN0LnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5mb1wiPnN0cmluZyBwYXNzZWQgdG8gc3RhdHVzIGxpbmUgdmVyaWZ5IGFjdGlvbjwvcGFyYW0+XHJcbiAgYWRkRmxvd1ZlcmlmeUluZm8oaW5mbzogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZEZsb3dJbmZvKGluZm8sIHRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5mb1wiPnN0cmluZyBhZGRlZCB0byBmbG93IG1vbml0b3IgcXVldWUgZm9yIEludm9rZU9zPC9wYXJhbT5cclxuICBhZGRGbG93SW52b2tlT3NJbmZvKGluZm86IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRGbG93SW5mbyhpbmZvLCB0YXNrSW5mbyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXNlciBzdHJpbmcgcGFzc2VkIHRvIHN0YXR1cyBsaW5lIGZvciBhY3Rpb25zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluZm9cIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGFkZEZsb3dJbmZvKGluZm86IHN0cmluZywgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9GTFdfT1BFUiwgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0RBVEFfT1BFUik7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoXCJcIik7XHJcblxyXG4gICAgaWYgKCEoaW5mbyA9PT0gXCJcIikpIHtcclxuICAgICAgYnVmZmVyLkFwcGVuZChcIiA+PiBJTkZPUk1BVElPTiA+PiBcIik7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoaW5mbyk7XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3SW5mbyA9IGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgYWN0LnNldEluZm8obmV3SW5mbyk7XHJcbiAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIG5ld0luZm8sIHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBhbGwgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBBY3Rpdml0eVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5jbGFzcyBBY3Rpdml0eUl0ZW0ge1xyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9IG51bGw7IC8vIEFDVFlfVEFTS3xBQ1RfVEFTS19GTFd8QUNUX0RBVEFWSUVXfEFDVF9SRUNPTVBVVEV8QUNUX0ZMV19PUEVSXHJcbiAgcHJpdmF0ZSBfaW5mbzogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbmNsb3NpbmdJbnN0YW5jZTogRmxvd01vbml0b3JRdWV1ZSwgdHlwZTogc3RyaW5nLCBpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lkID0gaWQ7XHJcbiAgICB0aGlzLnNldFRpbWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzYXZlIGN1cnJlbnQgdGltZSBpbiB0aGUgbmVlZGVkIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzZXRUaW1lKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGltZSA9IERhdGVUaW1lVXRpbHMuVG9TdHJpbmcoRGF0ZVRpbWUuTm93LCBGbG93TW9uaXRvclF1ZXVlLkxvbmdUaW1lUGF0dGVybiwgTG9nZ2VyLkluc3RhbmNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYWRkZWQgaW5mb3JtYXRpb24gZm9yIHRoZSBhY3Rpdml0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SW5mbyhpbmZvXzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbmZvID0gKChpbmZvXyAhPT0gbnVsbCkgPyBYbWxQYXJzZXIuZXNjYXBlKGluZm9fKSA6IGluZm9fKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBYTUwgc3RyaW5nIGZvciB0aGUgYWN0aXZpdHkgaXRlbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYnVpbGRYTUwobWVzc2FnZTogU3RyaW5nQnVpbGRlcik6IHZvaWQge1xyXG4gICAgbWVzc2FnZS5BcHBlbmQoWE1MQ29uc3RhbnRzLlNUQVJUX1RBRyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19GTFdNVFJfQUNUKTtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVFlQRSArIFwiPVxcXCJcIiArIHRoaXMuX3R5cGUgKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIFhNTENvbnN0YW50cy5NR19BVFRSX0lEICsgXCI9XFxcIlwiICsgdGhpcy5faWQgKyBcIlxcXCJcIik7XHJcbiAgICBpZiAodGhpcy5faW5mbyAhPSBudWxsKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5GTyArIFwiPVxcXCJcIiArIHRoaXMuX2luZm8gKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRSArIFwiPVxcXCJcIiArIHRoaXMuX3RpbWUgKyBcIlxcXCJcIik7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuVEFHX1RFUk0pO1xyXG4gIH1cclxufVxyXG4iXX0=