@magic-xpa/engine 4.800.0 → 4.801.0-dev481.224

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.
@@ -291,20 +291,6 @@ export class MgControl extends MgControlBase {
291
291
  GetTableBehaviour() {
292
292
  return TableBehaviour.UnlimitedItems;
293
293
  }
294
- getFieldXML(recIdx) {
295
- if (recIdx < 0)
296
- return "";
297
- else {
298
- let rec = super.getForm().getTask().DataView.getRecByIdx(recIdx);
299
- return rec.getFieldDataXML(this._nodeIdField.getId(), false);
300
- }
301
- }
302
- getParentFieldXML(recIdx) {
303
- if (recIdx < 0)
304
- return "";
305
- let rec = super.getForm().getTask().DataView.getRecByIdx(recIdx);
306
- return rec.getFieldDataXML(this._nodeParentIdField.getId(), false);
307
- }
308
294
  validateAndSetValue(NewValue, updateCtrl) {
309
295
  const _super = Object.create(null, {
310
296
  UpdateModifiedByUser: { get: () => super.UpdateModifiedByUser },
@@ -435,4 +421,4 @@ export class MgControl extends MgControlBase {
435
421
  }
436
422
  }
437
423
  MgControl.ReturnToCtrl = null;
438
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ndWkvTWdDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGFBQWEsRUFHYixhQUFhLEVBR2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsY0FBYyxFQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRL0MsTUFBTSxPQUFPLFNBQVUsU0FBUSxhQUFhO0lBb0MxQyxZQUFZLElBQW9CLEVBQUUsa0JBQXdCLEVBQUUsK0JBQXdDO1FBQ2xHLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hCLEtBQUssRUFBRSxDQUFDO2FBQ0wsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksSUFBSSxrQkFBa0IsWUFBWSxRQUFRLENBQUMs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S0FBQTs7QUF4bUJNLHNCQUFZLEdBQWMsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21tYW5kcyxcclxuICBDb21tYW5kVHlwZSxcclxuICBHdWlEYXRhQ29sbGVjdGlvbixcclxuICBIdG1sUHJvcGVydGllcyxcclxuICBNZ0NvbnRyb2xCYXNlLFxyXG4gIE1nRm9ybUJhc2UsXHJcbiAgUHJvcGVydHksXHJcbiAgUHJvcEludGVyZmFjZSxcclxuICBQcm9wUGFyZW50SW50ZXJmYWNlLFxyXG4gIFZhbGlkYXRpb25EZXRhaWxzXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge1xyXG4gIENvbnN0YW50cyxcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWdDb250cm9sVHlwZSxcclxuICBTY3JvbGxCYXJUaHVtYlR5cGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdWJmb3JtVHlwZSxcclxuICBUYWJsZUJlaGF2aW91cixcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgRGVidWcsIE5TdHJpbmcgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEFyZ3VtZW50c0xpc3QgfSBmcm9tICcuLi9ydC9Bcmd1bWVudHNMaXN0JztcclxuaW1wb3J0IHsgVGFza0Jhc2UgfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7IE1nRm9ybSB9IGZyb20gJy4vTWdGb3JtJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi9kYXRhL0ZpZWxkJztcclxuaW1wb3J0IHsgRGF0YVZpZXcgfSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vZGF0YS9SZWNvcmQnO1xyXG5pbXBvcnQgeyBDb25zdEludGVyZmFjZSB9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTGFzdEZvY3VzZWRNYW5hZ2VyIH0gZnJvbSAnLi4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyJztcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGNvbnRyb2w+IC4uLjwvY29udHJvbD4gdGFnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgZWh1ZG1cclxuLy8vXHJcbi8vLyA8L2F1dGhvcj5cclxuZXhwb3J0IGNsYXNzIE1nQ29udHJvbCBleHRlbmRzIE1nQ29udHJvbEJhc2UgaW1wbGVtZW50cyBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcml2YXRlIF9mb2N1c2VkU3RvcEV4ZWN1dGlvbjogYm9vbGVhbjsgLy8gdXNlZCB0byByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZlxyXG4gIHByaXZhdGUgX2luQ29udHJvbFN1ZmZpeDogYm9vbGVhbjsgLy8gdHJ1ZSwgaXMgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIHByaXZhdGUgX3J0RXZ0VGFzazogVGFza0Jhc2U7XHJcblxyXG4gIHByaXZhdGUgX3N1YmZvcm1UYXNrSWQ6IHN0cmluZzsgLy8gdGhlIHRhc2sgaWQgb2YgdGhlIHN1YiBmb3JtIHRhc2sgKGlmIHRoaXNcclxuICBwcml2YXRlIF9zdWJmb3JtVGFzazogVGFza0Jhc2U7IC8vIHJlZmVyZW5jZSB0byB0YXNrIG9mIHRoZSBzdWIgZm9ybSB0YXNrXHJcblxyXG4gIElzSW50ZXJhY3RpdmVVcGRhdGU6IGJvb2xlYW47IC8vIHRydWUgaWYgdGhpcyBjb250cm9sIHdhcyBtb2RpZmllZCBieSB1c2VyXHJcbiAgcHJpdmF0ZSByZWZyZXNoT25TdHJpbmc6IHN0cmluZzsgLy8gT25seSBmb3Igb2ZmbGluZS4gR2V0IGl0IGZyb20gWE1MIGFuZCBwdXQgaXQgb24gdGhlIHN1YmZvcm0gdGFzayB3aGVuIHRoZSBzdWJmb3JtIHRhc2sgaXMgb3BlbmVkXHJcbiAgU3ViZm9ybUxvYWRlZDogYm9vbGVhbjsgLy8gdHJ1ZSwgaWYgdGhlIHN1YmZvcm0gdGFzayB3YXMgbG9hZGVkIGFscmVhZHlcclxuICBIYXNab29tSGFuZGxlcjogYm9vbGVhbjsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSB6b29tIGhhbmRsZXIgb24gdGhpcyBjdHJsXHJcbiAgQXJnTGlzdDogQXJndW1lbnRzTGlzdDsgLy8gYXJndW1lbnQgbGlzdCBidWlsdCBmcm9tIHRoZSBwcm9wZXJ0eVxyXG5cclxuICBzdGF0aWMgUmV0dXJuVG9DdHJsOiBNZ0NvbnRyb2wgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5faW5Db250cm9sU3VmZml4ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBudWxsO1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLklzSW50ZXJhY3RpdmVVcGRhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gbnVsbDtcclxuICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5IYXNab29tSGFuZGxlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHRhc2s6IFRhc2tCYXNlLCBwYXJlbnRDb250cm9sOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHBhcmVudE1nRm9ybTogTWdGb3JtQmFzZSwgcGFyZW50Q29udHJvbElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlPzogTWdDb250cm9sVHlwZSwgdGFza09yUGFyZW50TWdGb3JtPzogYW55LCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgc3VwZXIoKTtcclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAodGFza09yUGFyZW50TWdGb3JtID09PSBudWxsIHx8IHRhc2tPclBhcmVudE1nRm9ybSBpbnN0YW5jZW9mIFRhc2tCYXNlKSAmJiAocGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCA9PT0gbnVsbCB8fCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKVxyXG4gICAgICBzdXBlcih0eXBlLCB0YXNrT3JQYXJlbnRNZ0Zvcm0uZ2V0Rm9ybSgpLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuICAgIGVsc2VcclxuICAgICAgc3VwZXIodHlwZSwgdGFza09yUGFyZW50TWdGb3JtLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIEdldFZhckluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKDxEYXRhVmlldz5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLkRhdGFWaWV3KS5EdmNvdW50ICsgdGhpcy52ZWVJbmR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgYXJndW1lbnRzIGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpdElkeFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBkaXRJZHg6IG51bWJlciwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHN1cGVyLmZpbGxEYXRhKG1nRm9ybSwgZGl0SWR4LCBwYXJzZXIpO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gYXdhaXQgdGhpcy5HZXRBcmd1bWVudExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRyb2wgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUYWdQcm9jZXNzZWQ6IGJvb2xlYW4gPSBzdXBlci5TZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICBpZiAoIWlzVGFnUHJvY2Vzc2VkKSB7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQkZPUk1fVEFTSzpcclxuICAgICAgICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUZSRVNIT046XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPblN0cmluZyA9IHZhbHVlU3RyLnRyaW0oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpc1RhZ1Byb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJ3swfSdcIiwgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVGFnUHJvY2Vzc2VkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBidWlsZCBBcmd1bWVudCBsaXN0IGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIEdldEFyZ3VtZW50TGlzdCgpOiBQcm9taXNlPEFyZ3VtZW50c0xpc3Q+IHtcclxuICAgIGxldCBhcmdMaXN0OiBBcmd1bWVudHNMaXN0ID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl9wcm9wVGFiID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuICAgIGxldCBBcmdMaXN0UHJvcDogUHJvcGVydHkgPSB0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBUkFNRVRFUlMpO1xyXG4gICAgaWYgKEFyZ0xpc3RQcm9wID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuXHJcbiAgICBsZXQgcGFybXM6IHN0cmluZyA9IGF3YWl0IEFyZ0xpc3RQcm9wLmdldFZhbHVlKCk7XHJcbiAgICBpZiAocGFybXMgIT09IG51bGwpIHtcclxuICAgICAgYXJnTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KCk7XHJcbiAgICAgIGFyZ0xpc3QuZmlsbExpc3QocGFybXMsIDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKTtcclxuICAgICAgaWYgKHRoaXMucmVmcmVzaE9uU3RyaW5nICE9PSBudWxsKVxyXG4gICAgICAgIGFyZ0xpc3QuUmVmcmVzaE9uU3RyaW5nID0gdGhpcy5yZWZyZXNoT25TdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJnTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGlzIGNvbnRyb2wgaXMgZGVzY2VuZGFudCBvZiB0aGUgcGFyZW50Rm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRGb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRGVzY2VuZGVudChwYXJlbnRGb3JtOiBNZ0Zvcm0pOiBib29sZWFuIHtcclxuICAgIGxldCBpc0Rlc2NlbmRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjaGVja0N1cnJlbnRGb3JtOiBNZ0Zvcm0gPSA8TWdGb3JtPnN1cGVyLmdldEZvcm0oKTtcclxuXHJcbiAgICBEZWJ1Zy5Bc3NlcnQocGFyZW50Rm9ybSAhPT0gbnVsbCk7XHJcblxyXG4gICAgd2hpbGUgKCFpc0Rlc2NlbmRlbnQgJiYgY2hlY2tDdXJyZW50Rm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAocGFyZW50Rm9ybSA9PT0gY2hlY2tDdXJyZW50Rm9ybSlcclxuICAgICAgICBpc0Rlc2NlbmRlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5jaGVja0N1cnJlbnRGb3JtLmdldFRhc2soKTtcclxuICAgICAgICBpZiAoY3VyclRhc2suZ2V0UGFyZW50KCkgIT09IG51bGwpXHJcbiAgICAgICAgICBjaGVja0N1cnJlbnRGb3JtID0gPE1nRm9ybT5jdXJyVGFzay5nZXRQYXJlbnQoKS5nZXRGb3JtKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpc0Rlc2NlbmRlbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmVmcmVzaCBjb250cm9sIGRpc3BsYXkgaWYgaXQgaGFzIGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2hPbkV4cHJlc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9ICh0aGlzLl9wcm9wVGFiID09PSBudWxsID8gMCA6IHRoaXMuX3Byb3BUYWIuZ2V0U2l6ZSgpKTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eTtcclxuICAgIGxldCByZWZyZXNoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemUgJiYgIXJlZnJlc2g7IGkrKykge1xyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wKGkpO1xyXG5cclxuICAgICAgc3dpdGNoIChwcm9wLmdldElEKCkpIHtcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgICBpZiAoIXByb3AuaXNFeHByZXNzaW9uKCkgJiYgdGhpcy5fZmllbGQgIT09IG51bGwgJiYgdGhpcy5fZmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLmdldEZvcm0oKS5nZXRUYXNrKCkpIHtcclxuICAgICAgICAgICAgcmVmcmVzaCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8qICBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBTlNMQVRPUjpcclxuICAgICAgICAgIGlmIChwcm9wLmlzRXhwcmVzc2lvbigpKVxyXG4gICAgICAgICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVmcmVzaClcclxuICAgICAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbnZva2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaW52b2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIHRoZSBjb250cm9sIGlzIG5vdCB2aXNpYmxlLCBub3QgZW5hYmxlZCBvciBub3QgcGFya2FibGUgc2tpcCB0aGlzIGNvbnRyb2xcclxuICAgIGlmIChhd2FpdCB0aGlzLmlzUGFya2FibGUodHJ1ZSkpIHtcclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhNZ0NvbnRyb2xCYXNlKHRoaXMsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWCk7XHJcbiAgICAgIGludm9rZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludm9rZWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSAhc3VwZXIuaXNJbWFnZUNvbnRyb2woKTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQsIHRydWUpO1xyXG5cclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUsIHRydWUpO1xyXG4gICAgICByZXN1bHQgPSBhd2FpdCBzdXBlci5pc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgc3ViZm9ybSB0YXNrIGlkIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTdWJmb3JtVGFza0lkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViZm9ybVRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaW5kIHRoZSBzdWJmb3JtIHRhc2sgYWNjb3JkaW5nIHRvIGl0cyBpZCBhbmQgc2F2ZSBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaW5pdFN1YmZvcm1UYXNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHN1cGVyLmlzU3ViZm9ybSgpKVxyXG4gICAgICB0aGlzLl9zdWJmb3JtVGFzayA9IDxUYXNrQmFzZT5HdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0aGlzLl9zdWJmb3JtVGFza0lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGNvbnRyb2wncyBwYXJlbnRUYWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGFyZW50VGFibGUoKTogTWdDb250cm9sIHtcclxuICAgIHJldHVybiA8TWdDb250cm9sPnRoaXMuX3BhcmVudFRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlc3RvcmUgYW5kIGRpc3BsYXkgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbCB1c2VkIHdoZW4gdGhlIGNvbnRyb2wgaXMgbm90IG1vZGlmaWFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHJlc3RvcmVPbGRWYWx1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbClcclxuICAgICAgYXdhaXQgKDxGaWVsZD50aGlzLl9maWVsZCkudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN1cGVyLnJlc2V0UHJldlZhbCgpO1xyXG4gICAgICBhd2FpdCBzdXBlci5TZXRBbmRSZWZyZXNoRGlzcGxheVZhbHVlKGF3YWl0IHRoaXMuZ2V0TWdWYWx1ZSh0aGlzLlZhbHVlKSwgdGhpcy5Jc051bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIGV2ZW50IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFJ0RXZ0VGFzayhjdXJUYXNrOiBUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnRUYXNrID0gY3VyVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBldmVudCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRSdEV2dFRhc2soKTogVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3J0RXZ0VGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBzdWJmb3JtIHRhc2sgaWQgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFN1YmZvcm1UYXNrSWQodGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB0YXNrSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNGb2N1c2VkU3RvcEV4ZWN1dGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9jdXNlZFN0b3BFeGVjdXRpb25cIj48L3BhcmFtPlxyXG4gIHNldEZvY3VzZWRTdG9wRXhlY3V0aW9uKGZvY3VzZWRTdG9wRXhlY3V0aW9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZvY3VzZWRTdG9wRXhlY3V0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsLVwiPlRoZSBjdHJsIHRvIGNoZWNrLiBjYW4gYmUgZnJhbWUgZm9ybSBhbmQgYWxzbyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIG9uVGhlU2FtZVN1YkZvcm1Db250cm9sKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoY3RybCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoc3VwZXIuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpICYmIGN0cmwuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpKSB7XHJcbiAgICAgICAgaWYgKHN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkgPT09IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKSlcclxuICAgICAgICAgIHJldFZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRydWUgaWYgdGhlIGN0cmxzIGFyZSBvbiBkaWZmZXJlbnQgZm9ybXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBvbkRpZmZGb3JtKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzU3ViZm9ybTogYm9vbGVhbiA9IHN1cGVyLmdldEZvcm0oKS5pc1N1YkZvcm0oKSB8fCBjdHJsLmdldEZvcm0oKS5pc1N1YkZvcm0oKTtcclxuICAgIGxldCBpc09uRGlmZkZvcm06IGJvb2xlYW4gPSAoaXNTdWJmb3JtICkgJiYgIXRoaXMub25UaGVTYW1lU3ViRm9ybUNvbnRyb2woY3RybCk7XHJcblxyXG4gICAgcmV0dXJuIGlzT25EaWZmRm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNJbkNvbnRyb2xTdWZmaXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5Db250cm9sU3VmZml4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5Db250cm9sU3VmZml4XCI+PC9wYXJhbT5cclxuICBzZXRJbkNvbnRyb2xTdWZmaXgoaW5Db250cm9sU3VmZml4OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbkNvbnRyb2xTdWZmaXggPSBpbkNvbnRyb2xTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRyb2wgaGFzIHNlbGVjdCBwcm9ncmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBIYXNTZWxlY3RQcm9ncmFtKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IEhhc1NlbGVjdFByb2dyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzZWxlY3RQcm9nUHJvcDogUHJvcGVydHkgPSBzdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVF9QUk9HUkFNKTtcclxuICAgIGlmIChzZWxlY3RQcm9nUHJvcCAhPT0gbnVsbCAmJiBzZWxlY3RQcm9nUHJvcC5HZXRDb21wdXRlZFZhbHVlKCkgIT09IG51bGwpXHJcbiAgICAgIEhhc1NlbGVjdFByb2dyYW0gPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBIYXNTZWxlY3RQcm9ncmFtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRoZSBjb250cm9sIHVzZSB0aGUgaGFuZGxlciBaT09NIChmb3Igc2VsZWN0IHByb2dyYW0gb3IgWm9vbSBoYW5kbGVyKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICB1c2Vab29tSGFuZGxlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkhhc1pvb21IYW5kbGVyIHx8IChzdXBlci5nZXRGaWVsZCgpICE9PSBudWxsICYmICgoPEZpZWxkPnN1cGVyLmdldEZpZWxkKCkpLmdldEhhc1pvb21IYW5kbGVyKCkgfHwgKHRoaXMuSGFzU2VsZWN0UHJvZ3JhbSgpKSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVwZGF0ZSBib29sZWFuIHByb3BlcnR5KGV4OnZpc2libGVcXGVuYWJsZSkgb2YgY29udHJvbCBhbmQgaXQncyBjaGlsZHJlblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5wcm9wZXJ0eSBpZCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj5jb21tYW5kIHR5cGUgdGhhdCBiZWxvbmcgdG8gdGhlIHByb3AgaWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZVRoaXNcIj48L3BhcmFtPlxyXG4gIGFzeW5jIHVwZGF0ZVByb3BlcnR5TG9naWNOZXN0aW5nKHByb3BJZDogbnVtYmVyLCBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIHZhbDogYm9vbGVhbiwgdXBkYXRlVGhpczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHZhbCAmJiBzdXBlci5oYXZlVG9DaGVja1BhcmVudFZhbHVlKCkpXHJcbiAgICAgIHZhbCA9IHN1cGVyLmlzUGFyZW50UHJvcFZhbHVlKHByb3BJZCk7XHJcblxyXG4gICAgLy8gaWYgdGhlIHN1YmZvcm0gbXVzdCBiZSBpbnZpc2libGUgKENUUkxfU1VCRk9STV9OT05FKSB3ZSBjaGFuZ2UgaXRzIHZpc2liaWxpdHkgdG8gZmFsc2VcclxuICAgIGlmICh2YWwgJiYgc3VwZXIuaXNTdWJmb3JtKCkgJiYgY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdGhpcy5TaG91bGRTZXRTdWJmb3JtSW52aXNpYmxlKCkpXHJcbiAgICAgIHZhbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh1cGRhdGVUaGlzKSB7XHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcywgc3VwZXIuZ2V0RGlzcGxheUxpbmUoZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSA/IEh0bWxQcm9wZXJ0aWVzLlZpc2libGUgOiBIdG1sUHJvcGVydGllcy5FbmFibGVkLCB2YWwpO1xyXG5cclxuICAgIH1cclxuICAgIGF3YWl0IHN1cGVyLnVwZGF0ZUNoaWxkcmVuUHJvcFZhbHVlKHByb3BJZCwgY29tbWFuZFR5cGUsIHZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIElmIHRoZSBzdWJmb3JtIG11c3QgYmUgaW52aXNpYmxlIChmb3IgZXhhbXBsZSBDVFJMX1NVQkZPUk1fTk9ORSkgcmV0dXJucyB0cnVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIFNob3VsZFNldFN1YmZvcm1JbnZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2V0SW52aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgc3ViZm9ybVR5cGU6IFN1YmZvcm1UeXBlID0gPFN1YmZvcm1UeXBlPnN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgaWYgKHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lICYmIHRoaXMuZ2V0U3ViZm9ybVRhc2tJZCgpID09PSBudWxsKVxyXG4gICAgICBzZXRJbnZpc2libGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHNldEludmlzaWJsZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBVcGRhdGVzIHZpc2liaWxpdHkgb3IgZW5hYmxlIHByb3BlcnR5IG9mIHN1YmZvcm0gY29udHJvbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcElkXCI+SWQgb2YgdmlzaWJpbGl0eSBvciBlbmFibGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj50eXBlIG9mIHRoZSBHVUkgY29tbWFuZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj52YWx1ZSBmb3IgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICBhc3luYyB1cGRhdGVTdWJmb3JtQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoc3VwZXIuaXNTdWJmb3JtKCkpO1xyXG5cclxuICAgIGlmICghKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5BZnRlckZpcnN0UmVjb3JkUHJlZml4KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IHN1YmZvcm1UeXBlOiBTdWJmb3JtVHlwZSA9IDxTdWJmb3JtVHlwZT5zdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NVQkZPUk1fVFlQRSkuR2V0Q29tcHV0ZWRWYWx1ZUludGVnZXIoKTtcclxuICAgIGlmICh0aGlzLl9zdWJmb3JtVGFza0lkICE9PSBudWxsIHx8IHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zdWJmb3JtVGFzayAhPT0gbnVsbCAmJiB0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSkge1xyXG4gICAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5QUk9QX1NFVF9WSVNJQkxFICYmIHZhbCAmJiB0aGlzLlJlZnJlc2hPblZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMuUmVmcmVzaE9uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgYXdhaXQgKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5TdWJmb3JtUmVmcmVzaCh0aGlzLl9zdWJmb3JtVGFzaywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3ViZm9ybUZvcm06IE1nRm9ybUJhc2UgPSB0aGlzLl9zdWJmb3JtVGFzay5nZXRGb3JtKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN1YmZvcm1Gb3JtLmdldEN0cmxDb3VudCgpOyBpKyspIHtcclxuICAgICAgICAgIGxldCBjaGlsZDogTWdDb250cm9sQmFzZSA9IHN1YmZvcm1Gb3JtLmdldEN0cmwoaSk7XHJcbiAgICAgICAgICAvLyBRQ1IgIzk4MTU1NSwgV2Ugc2hvdWxkIG5vdCBhZmZlY3QgdmlzaWJpbGl0eSBvZiB0aGUgVGFibGVDb2x1bW5zIHNpbmNlIGl0IGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlLlNldHRpbmcgdmlzaWJpbGl0eVxyXG4gICAgICAgICAgLy8gb2YgYWxsIGNvbHVtbnMgdG8gZmFsc2UgcHJldmVudHMgdGFibGUgcGxhY2VtZW50XHJcbiAgICAgICAgICBpZiAoIWNoaWxkLmlzQ29sdW1uQ29udHJvbCgpKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIGxldCBjaGlsZFZhbHVlOiBib29sZWFuID0gYXdhaXQgY2hpbGQuY2hlY2tQcm9wKHByb3BJZCwgdHJ1ZSkgJiYgdmFsO1xyXG4gICAgICAgICAgaWYgKGNoaWxkVmFsdWUpXHJcbiAgICAgICAgICAgIGNoaWxkVmFsdWUgPSBjaGlsZC5pc1BhcmVudFByb3BWYWx1ZShwcm9wSWQpO1xyXG5cclxuICAgICAgICAgIC8vIGlmICh0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSlcclxuICAgICAgICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoY29tbWFuZFR5cGUsIGNoaWxkLCBjaGlsZC5nZXREaXNwbGF5TGluZShmYWxzZSksIGNoaWxkVmFsdWUpO1xyXG4gICAgICAgICAgYXdhaXQgY2hpbGQudXBkYXRlQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkLCBjb21tYW5kVHlwZSwgY2hpbGRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdmFsKSAmJiAhdGhpcy5TdWJmb3JtTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoTWdDb250cm9sQmFzZSh0aGlzLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9PUEVOKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHN1YmZvcm0gdGFzayBpZCBmb3IgYSBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRTdWJmb3JtVGFzaygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGJlaGF2aW91ciBmb3IgdGhlIHRhYmxlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0VGFibGVCZWhhdmlvdXIoKTogVGFibGVCZWhhdmlvdXIge1xyXG4gICAgcmV0dXJuIFRhYmxlQmVoYXZpb3VyLlVubGltaXRlZEl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWNJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0RmllbGRYTUwocmVjSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKHJlY0lkeCA8IDApXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCByZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+c3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKS5EYXRhVmlldykuZ2V0UmVjQnlJZHgocmVjSWR4KTtcclxuICAgICAgcmV0dXJuIHJlYy5nZXRGaWVsZERhdGFYTUwodGhpcy5fbm9kZUlkRmllbGQuZ2V0SWQoKSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB4bWwgZnJvbSBwYXJlbnQgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVjSWR4XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFBhcmVudEZpZWxkWE1MKHJlY0lkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChyZWNJZHggPCAwKVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIGxldCByZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+c3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKS5EYXRhVmlldykuZ2V0UmVjQnlJZHgocmVjSWR4KTtcclxuICAgIHJldHVybiByZWMuZ2V0RmllbGREYXRhWE1MKHRoaXMuX25vZGVQYXJlbnRJZEZpZWxkLmdldElkKCksIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB2YWxpZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgYW5kIHNldCBpdCdzIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIk5ld1ZhbHVlXCI+dGhlIHZhbHVlIG9mIHRoZSBjb250cm9sPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZUN0cmxcIj5pZiB0cnVlIHRoZW4gdGhlIGNvbnRyb2wgd2lsbCBiZSB1cGRhdGVkIHVwb24gc3VjY2Vzc2Z1bCBjaGVjazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnJldHVybnMgaWYgdmFsaWRhdGlvbiBpcyBzdWNjZXNzZnVsPC9yZXR1cm5zPlxyXG4gIGFzeW5jIHZhbGlkYXRlQW5kU2V0VmFsdWUoTmV3VmFsdWU6IGFueSwgdXBkYXRlQ3RybDogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgc3VwZXIuVXBkYXRlTW9kaWZpZWRCeVVzZXIoTmV3VmFsdWUpO1xyXG5cclxuICAgIC8vIGlmIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBpcyBudWxsIG9yIHdhcyBjaGFuZ2VkXHJcbiAgICAvLyBjaGVjayB2YWxpZGF0aW9uIGFuZCB1cGRhdGUgdGhlIGNvbnRyb2wgdmFsdWVcclxuICAgIGlmICh0aGlzLk1vZGlmaWVkQnlVc2VyKSB7XHJcbiAgICAgIGxldCBjdHJsQ3VyclZhbHVlOiBhbnkgPSB0aGlzLlZhbHVlO1xyXG4gICAgICBsZXQgdmQ6IFZhbGlkYXRpb25EZXRhaWxzO1xyXG5cclxuICAgICAgaWYgKHN1cGVyLmdldFBJQygpID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB2ZCA9IHN1cGVyLmJ1aWxkUGljdHVyZShjdHJsQ3VyclZhbHVlLCBOZXdWYWx1ZSk7XHJcblxyXG4gICAgICB2ZC5ldmFsdWF0ZSgpO1xyXG5cclxuICAgICAgLy8gdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkcyB2YWx1ZSB3YXMgd3JvbmdcclxuICAgICAgaWYgKHZkLlZhbGlkYXRpb25GYWlsZWQpIHtcclxuICAgICAgICB0aGlzLk1vZGlmaWVkQnlVc2VyID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLklzSW50ZXJhY3RpdmVVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgICAgc3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKS5zZXREYXRhU3luY2VkKGZhbHNlKTtcclxuXHJcbiAgICAgIC8vIHNldCB0aGUgdmFsdWUgKGhhbmRsZSByZWNvbXB1dGUsIGV0Yy4pXHJcbiAgICAgIGlmICh1cGRhdGVDdHJsKSB7XHJcbiAgICAgICAgLy8gUUNSIzQ0MTAyMDpBZnRlciB2YWxpZGF0aW5nIGRpc3BsYXkgdmFsdWUsIHRha2UgdGhlIHNhbWUgY3RybCdzIHZhbHVlIGZvciBtZyB2YWx1ZSBjb252ZXJzaW9uLlxyXG4gICAgICAgIC8vIFVzaW5nIGRpc3BsYXkgdmFsdWUgZ2VuZXJhdGVkIGZyb20gTWdWYWx1ZSwgbWlnaHQgaGF2ZSBwcm9ibGVtIHRvIGNvbnZlcnQgYmFjayB0byBNZ1ZhbCB1c2luZyBwaWN0dXJlIGR1ZSB0byBhbGlnbm1lbnQgKGNoYW5nZWQgYWxpZ25tZW50ICkuXHJcbiAgICAgICAgLy8gVGhpcyBwcm9ibGVtIG9jY3VycyBmb3IgbnVtZXJpYy5cclxuICAgICAgICAvLyBUaGUgZml4IHNob3VsZCBiZSBhcHBsaWNhYmxlIGZvciBudW1lcmljIHR5cGUgb25seS4gQmVjYXVzZSBkYXRlIGFuZCB0aW1lIGZpZWxkIHdpdGggY29tcGxleCBtYXNraW5nIGhhdmUgcHJvYmxlbSBvbiB1c2luZyBjdHJsJ3MgdmFsdWUuXHJcbiAgICAgICAgLy8gUmVmZXIgZGF0ZSBxY3JzOiAjMjkxNjY2LCAjMzA3MzUzLCAjNDM0MjQxIGFuZCBmb3IgdGltZSwgY2hlY2sgZGVmYXVsdCB2YWx1ZSB3aGVuIGZvcm1hdCBpcyAnSEgtTU0tU1MgUE1aQCdcclxuICAgICAgICBpZiAodGhpcy5fZmllbGQgIT09IG51bGwgJiYgdGhpcy5fZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgJiYgdHlwZW9mIE5ld1ZhbHVlID09PSAnc3RyaW5nJyAmJiBOZXdWYWx1ZS50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgIHZkLnNldFZhbHVlKE5ld1ZhbHVlKTtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZSh2ZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdmFsdWUgcmVjZWl2ZWQgZnJvbSB0aGUgdXNlciBpbnB1dCBhZnRlciB2YWxpZGF0aW9uIGFuZCB1cGRhdGUgdGhlIGZpZWxkIGNvbm5lY3RlZCB0byB0aGlzXHJcbiAgLy8vICAgY29udHJvbCAoaWYgZXhpc3RzKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZFwiPnRoZSB2YWxpZGF0aW9uIGRldGFpbHMgb2JqZWN0PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIHNldFZhbHVlKHZkOiBWYWxpZGF0aW9uRGV0YWlscyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGlzTnVsbDogYm9vbGVhbiA9IHZkLmdldElzTnVsbCgpO1xyXG4gICAgbGV0IG5ld1ZhbHVlOiBhbnkgPSB2ZC5nZXREaXNwVmFsdWUoKTtcclxuICAgIGxldCBtZ1ZhbDogc3RyaW5nO1xyXG5cclxuICAgIGlmICghaXNOdWxsIHx8ICF0aGlzLl9maWVsZC5oYXNOdWxsRGlzcGxheVZhbHVlKCkpXHJcbiAgICAgIG1nVmFsID0gYXdhaXQgc3VwZXIuZ2V0TWdWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAvLyBpdCdzIGlubmVyIHZhbHVlIC0+IHRyYW5zbGF0ZSBpdCB0byB0aGUgZGlzcGxheVxyXG4gICAgZWxzZVxyXG4gICAgICBtZ1ZhbCA9ICgodGhpcy5fZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSA/IHRoaXMuX2ZpZWxkLmdldENlbGxEZWZ1YWx0VmFsdWUoKSA6IHRoaXMuX2ZpZWxkLmdldERlZmF1bHRWYWx1ZSgpKTtcclxuICAgIGlmIChtZ1ZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5fZmllbGQgIT09IG51bGwgJiYgKCEobmV3VmFsdWUgPT09IHRoaXMuVmFsdWUpIHx8IHRoaXMuS2V5U3Ryb2tlT24gfHwgdGhpcy5Jc051bGwgIT09IGlzTnVsbCkpIHtcclxuICAgICAgICBhd2FpdCAoPEZpZWxkPnRoaXMuX2ZpZWxkKS5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKG1nVmFsLCBpc051bGwsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLy8gZGVmZWN0IDEyNzczNCA6IHZhbHVlIG9mIHRoZSBmaWVsZCBtaWdodCBiZSBjaGFuZ2VkIGFscmVhZHkgaW5zaWRlIGEgY29udHJvbCBjaGFuZ2UgaGFuZGxlclxyXG4gICAgICAgIC8vIHRvIGF2b2lkIHVwZGF0aW5nIG9sZCB2YWx1ZSBhbmQgb3ZlcnJ1bm5pbmcgdGhlIHZhbHVlIGZyMG0gdGhlIGNvbnRyb2wgY2hhbmdlXHJcbiAgICAgICAgLy8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBmaWVsZC4gKG5lZWQgdG8gYmUgZG9uZSBmb3IgY29tYm8gYW5kIGxpc3QgYm94LCBidXQgaXQncyB0b28gcmlza3lcclxuICAgICAgICAvLyBhbmQgdW5saWtlbHkgdG8gaGFwcGVuLCBzbyB0aGUgZml4IHdpbGwgYmUgZm9yIGNoZWNrIGJveCBvbmx5KVxyXG5cclxuICAgICAgICBpZiAoc3VwZXIuaXNDaGVja0JveCgpKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcmNlUmVmcmVzaCA9IHRydWU7XHJcbiAgICAgICAgICBtZ1ZhbCA9ICg8RmllbGQ+dGhpcy5fZmllbGQpLmdldFZhbHVlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGlmIGZpZWxkIHZhbHVlIGlzIG51bGwgJiBoYXMgbnVsbCBkaXNwbGF5IHZhbHVlLCB0YWtlIGV2YWx1YXRlZCBudWxsIGRpc3BsYXkgdmFsdWUuXHJcbiAgICAgIGlmICgodGhpcy5fZmllbGQgIT09IG51bGwgJiYgaXNOdWxsKSAmJiB0aGlzLl9maWVsZC5oYXNOdWxsRGlzcGxheVZhbHVlKCkpXHJcbiAgICAgICAgbWdWYWwgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAgIGF3YWl0IHN1cGVyLlNldEFuZFJlZnJlc2hEaXNwbGF5VmFsdWUobWdWYWwsIGlzTnVsbCk7XHJcbiAgICAgIHRoaXMuZm9yY2VSZWZyZXNoID0gZmFsc2U7XHJcbiAgICAgIC8vIFFDUiAjNDM4NzUzLiBQcmV2ZW50IFJQJlJTIGN5Y2xlLCB3aGVuIGl0J3Mgbm90IG5lZWRlZC5cclxuICAgICAgdGhpcy5LZXlTdHJva2VPbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZWZyZXNoIHRoZSBpdGVtIGxpc3Qgb2YgcmFkaW8gYnV0dG9uIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleGVjQ29tcHV0ZUNob2ljZVwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgcmVmcmVzaEFuZFNldEl0ZW1zTGlzdEZvclJhZGlvQnV0dG9uKGxpbmU6IG51bWJlciwgZXhlY0NvbXB1dGVDaG9pY2U6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHN1cGVyLnJlZnJlc2hBbmRTZXRJdGVtc0xpc3RGb3JSYWRpb0J1dHRvbihsaW5lLCBleGVjQ29tcHV0ZUNob2ljZSk7XHJcblxyXG4gICAgLy8gSWYgdGhlIHBhcmtpbmcgd2FzIG9uIHRoZSByYWRpbyBjb250cm9sLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBmb2N1cyBiZWNhdXNlXHJcbiAgICAvLyB0aGUgb2xkIGNvbnRyb2xzIHdlcmUgZGlzcG9zZWQgYW5kIHRoZSBuZXcgb25lcyBhcmUgY3JlYXRlZC5cclxuICAgIGxldCBsYXN0Rm9jdXNlZFRhc2s6IFRhc2tCYXNlID0gTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygoPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpLmdldE1nZElEKCkpO1xyXG4gICAgLy8gaWYgKGxhc3RGb2N1c2VkVGFzayAhPT0gbnVsbCAmJiB0aGlzID09PSBsYXN0Rm9jdXNlZFRhc2suZ2V0TGFzdFBhcmtlZEN0cmwoKSlcclxuICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoQ29tbWFuZFR5cGUuU0VUX0ZPQ1VTLCB0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrKCk6IFRhc2tCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFza0lkID0gXCIwXCI7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBNZ0Zvcm0gb2YgdGhlIHN1YmZvcm0gY29udHJvbCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRTdWJmb3JtTWdGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsKVxyXG4gICAgICBmb3JtID0gdGhpcy5fc3ViZm9ybVRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENoZWNrIHdoZXRoZXIgdGFibGUgYmVpbmcgdXNlZCB3aXRoIGFic29sdXRlIHNjcm9sbGJhciB0aHVtYi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIElzVGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIERlYnVnLkFzc2VydCh0aGlzLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFLCBcIkluIE1nQ29udHJvbC5Jc1RhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyKCk6IE5vdCBhIHRhYmxlIGNvbnRyb2wuXCIpO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIucHJvcEV4aXN0cyhQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKSlcclxuICAgICAgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIgPSAodGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpID09PSA8bnVtYmVyPlNjcm9sbEJhclRodW1iVHlwZS5BYnNvbHV0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgdGhlIHJldHVybi10by1jb250cm9sIHBvaW50cyB0byBhbiBleGlzdGluZyB0YXNrLjwvc3VtbWFyeT5cclxuICBzdGF0aWMgdmFsaWRSZXR1cm5Ub0N0cmwoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoTWdDb250cm9sLlJldHVyblRvQ3RybCAhPT0gbnVsbCAmJiBNZ0NvbnRyb2wuUmV0dXJuVG9DdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuaXNBYm9ydGluZygpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIG9uZSBtYXkgZGlyZWN0bHkgKG5vdCB2aWEgdGhlIGd1aSkgc2V0IGEgdmFsdWUgb24gdGhpcyBjb250cm9sLjwvc3VtbWFyeT5cclxuICBtYXlTZXRWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ0hFQ0tCT1g6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT01CTzpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9MSVNUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQjpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgdmFsdWUgc2V0dGluZyBpZiB0aGUgY29udHJvbCBkb2Vzbid0IGhhdmUgYSBmaWVsZCwgb3IgaWYgaXQgZ2V0cyBpdHMgdmFsdWUgZnJvbSBhbiBleHByZXNzaW9uXHJcbiAgICBpZiAodGhpcy5fZmllbGQgPT09IG51bGwgfHwgdGhpcy5fdmFsRXhwSWQgPiAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaXNNb2RpZmlhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIGEgdmFsdWUgbWF5IGJlIHNldCwgYW5kIHRyaWVzIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWx1ZSBzZXR0aW5nIHdhcyBzdWNjZXNzZnVsIDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlSWZBbGxvd2VkKE5ld1ZhbHVlOiBhbnksIHJlZnJlc2hEaXNwbGF5OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMubWF5U2V0VmFsdWUoKSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiVW5hYmxlIHRvIGNoYW5nZSB2YWx1ZSBvZiBjb250cm9sIHswfTogVGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LlwiLCB0aGlzLk5hbWUpKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRWYWwgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kU2V0VmFsdWUoTmV3VmFsdWUsIHRydWUpO1xyXG4gICAgaWYgKCFyZXRWYWwpXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJWYWx1ZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgezB9LlwiLCB0aGlzLk5hbWUpKTtcclxuXHJcbiAgICBpZiAocmVmcmVzaERpc3BsYXkpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkTm9QYXJhbWV0ZXJzKENvbW1hbmRUeXBlLlJFRlJFU0hfVEFTSywgdGhpcy5nZXRGb3JtKCkpO1xyXG4gICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3JlZnJlc2ggdGFza1xyXG4gICAgcmV0dXJuIHJldFZhbDtcclxuICB9XHJcbn1cclxuIl19
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ndWkvTWdDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGFBQWEsRUFHYixhQUFhLEVBR2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsY0FBYyxFQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRL0MsTUFBTSxPQUFPLFNBQVUsU0FBUSxhQUFhO0lBb0MxQyxZQUFZLElBQW9CLEVBQUUsa0JBQXdCLEVBQUUsK0JBQXdDO1FBQ2xHLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hCLEtBQUssRUFBRSxDQUFDO2FBQ0wsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksSUFBSSxrQkFBa0IsWUFBWSxRQUFRLENBQUMs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T0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsTUFBTTtnQkFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRWpHLElBQUksY0FBYyxFQUFFO2dCQUNsQixRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ25FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNuQjtZQUdELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FBQTs7QUEva0JNLHNCQUFZLEdBQWMsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21tYW5kcyxcclxuICBDb21tYW5kVHlwZSxcclxuICBHdWlEYXRhQ29sbGVjdGlvbixcclxuICBIdG1sUHJvcGVydGllcyxcclxuICBNZ0NvbnRyb2xCYXNlLFxyXG4gIE1nRm9ybUJhc2UsXHJcbiAgUHJvcGVydHksXHJcbiAgUHJvcEludGVyZmFjZSxcclxuICBQcm9wUGFyZW50SW50ZXJmYWNlLFxyXG4gIFZhbGlkYXRpb25EZXRhaWxzXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge1xyXG4gIENvbnN0YW50cyxcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWdDb250cm9sVHlwZSxcclxuICBTY3JvbGxCYXJUaHVtYlR5cGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdWJmb3JtVHlwZSxcclxuICBUYWJsZUJlaGF2aW91cixcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgRGVidWcsIE5TdHJpbmcgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEFyZ3VtZW50c0xpc3QgfSBmcm9tICcuLi9ydC9Bcmd1bWVudHNMaXN0JztcclxuaW1wb3J0IHsgVGFza0Jhc2UgfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7IE1nRm9ybSB9IGZyb20gJy4vTWdGb3JtJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi9kYXRhL0ZpZWxkJztcclxuaW1wb3J0IHsgRGF0YVZpZXcgfSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vZGF0YS9SZWNvcmQnO1xyXG5pbXBvcnQgeyBDb25zdEludGVyZmFjZSB9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTGFzdEZvY3VzZWRNYW5hZ2VyIH0gZnJvbSAnLi4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyJztcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGNvbnRyb2w+IC4uLjwvY29udHJvbD4gdGFnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgZWh1ZG1cclxuLy8vXHJcbi8vLyA8L2F1dGhvcj5cclxuZXhwb3J0IGNsYXNzIE1nQ29udHJvbCBleHRlbmRzIE1nQ29udHJvbEJhc2UgaW1wbGVtZW50cyBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcml2YXRlIF9mb2N1c2VkU3RvcEV4ZWN1dGlvbjogYm9vbGVhbjsgLy8gdXNlZCB0byByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZlxyXG4gIHByaXZhdGUgX2luQ29udHJvbFN1ZmZpeDogYm9vbGVhbjsgLy8gdHJ1ZSwgaXMgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIHByaXZhdGUgX3J0RXZ0VGFzazogVGFza0Jhc2U7XHJcblxyXG4gIHByaXZhdGUgX3N1YmZvcm1UYXNrSWQ6IHN0cmluZzsgLy8gdGhlIHRhc2sgaWQgb2YgdGhlIHN1YiBmb3JtIHRhc2sgKGlmIHRoaXNcclxuICBwcml2YXRlIF9zdWJmb3JtVGFzazogVGFza0Jhc2U7IC8vIHJlZmVyZW5jZSB0byB0YXNrIG9mIHRoZSBzdWIgZm9ybSB0YXNrXHJcblxyXG4gIElzSW50ZXJhY3RpdmVVcGRhdGU6IGJvb2xlYW47IC8vIHRydWUgaWYgdGhpcyBjb250cm9sIHdhcyBtb2RpZmllZCBieSB1c2VyXHJcbiAgcHJpdmF0ZSByZWZyZXNoT25TdHJpbmc6IHN0cmluZzsgLy8gT25seSBmb3Igb2ZmbGluZS4gR2V0IGl0IGZyb20gWE1MIGFuZCBwdXQgaXQgb24gdGhlIHN1YmZvcm0gdGFzayB3aGVuIHRoZSBzdWJmb3JtIHRhc2sgaXMgb3BlbmVkXHJcbiAgU3ViZm9ybUxvYWRlZDogYm9vbGVhbjsgLy8gdHJ1ZSwgaWYgdGhlIHN1YmZvcm0gdGFzayB3YXMgbG9hZGVkIGFscmVhZHlcclxuICBIYXNab29tSGFuZGxlcjogYm9vbGVhbjsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSB6b29tIGhhbmRsZXIgb24gdGhpcyBjdHJsXHJcbiAgQXJnTGlzdDogQXJndW1lbnRzTGlzdDsgLy8gYXJndW1lbnQgbGlzdCBidWlsdCBmcm9tIHRoZSBwcm9wZXJ0eVxyXG5cclxuICBzdGF0aWMgUmV0dXJuVG9DdHJsOiBNZ0NvbnRyb2wgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5faW5Db250cm9sU3VmZml4ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBudWxsO1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLklzSW50ZXJhY3RpdmVVcGRhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gbnVsbDtcclxuICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5IYXNab29tSGFuZGxlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHRhc2s6IFRhc2tCYXNlLCBwYXJlbnRDb250cm9sOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHBhcmVudE1nRm9ybTogTWdGb3JtQmFzZSwgcGFyZW50Q29udHJvbElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlPzogTWdDb250cm9sVHlwZSwgdGFza09yUGFyZW50TWdGb3JtPzogYW55LCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgc3VwZXIoKTtcclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAodGFza09yUGFyZW50TWdGb3JtID09PSBudWxsIHx8IHRhc2tPclBhcmVudE1nRm9ybSBpbnN0YW5jZW9mIFRhc2tCYXNlKSAmJiAocGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCA9PT0gbnVsbCB8fCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKVxyXG4gICAgICBzdXBlcih0eXBlLCB0YXNrT3JQYXJlbnRNZ0Zvcm0uZ2V0Rm9ybSgpLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuICAgIGVsc2VcclxuICAgICAgc3VwZXIodHlwZSwgdGFza09yUGFyZW50TWdGb3JtLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIEdldFZhckluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKDxEYXRhVmlldz5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLkRhdGFWaWV3KS5EdmNvdW50ICsgdGhpcy52ZWVJbmR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgYXJndW1lbnRzIGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpdElkeFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBkaXRJZHg6IG51bWJlciwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHN1cGVyLmZpbGxEYXRhKG1nRm9ybSwgZGl0SWR4LCBwYXJzZXIpO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gYXdhaXQgdGhpcy5HZXRBcmd1bWVudExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRyb2wgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUYWdQcm9jZXNzZWQ6IGJvb2xlYW4gPSBzdXBlci5TZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICBpZiAoIWlzVGFnUHJvY2Vzc2VkKSB7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQkZPUk1fVEFTSzpcclxuICAgICAgICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUZSRVNIT046XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPblN0cmluZyA9IHZhbHVlU3RyLnRyaW0oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpc1RhZ1Byb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJ3swfSdcIiwgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVGFnUHJvY2Vzc2VkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBidWlsZCBBcmd1bWVudCBsaXN0IGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIEdldEFyZ3VtZW50TGlzdCgpOiBQcm9taXNlPEFyZ3VtZW50c0xpc3Q+IHtcclxuICAgIGxldCBhcmdMaXN0OiBBcmd1bWVudHNMaXN0ID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl9wcm9wVGFiID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuICAgIGxldCBBcmdMaXN0UHJvcDogUHJvcGVydHkgPSB0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBUkFNRVRFUlMpO1xyXG4gICAgaWYgKEFyZ0xpc3RQcm9wID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuXHJcbiAgICBsZXQgcGFybXM6IHN0cmluZyA9IGF3YWl0IEFyZ0xpc3RQcm9wLmdldFZhbHVlKCk7XHJcbiAgICBpZiAocGFybXMgIT09IG51bGwpIHtcclxuICAgICAgYXJnTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KCk7XHJcbiAgICAgIGFyZ0xpc3QuZmlsbExpc3QocGFybXMsIDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKTtcclxuICAgICAgaWYgKHRoaXMucmVmcmVzaE9uU3RyaW5nICE9PSBudWxsKVxyXG4gICAgICAgIGFyZ0xpc3QuUmVmcmVzaE9uU3RyaW5nID0gdGhpcy5yZWZyZXNoT25TdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJnTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGlzIGNvbnRyb2wgaXMgZGVzY2VuZGFudCBvZiB0aGUgcGFyZW50Rm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRGb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRGVzY2VuZGVudChwYXJlbnRGb3JtOiBNZ0Zvcm0pOiBib29sZWFuIHtcclxuICAgIGxldCBpc0Rlc2NlbmRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjaGVja0N1cnJlbnRGb3JtOiBNZ0Zvcm0gPSA8TWdGb3JtPnN1cGVyLmdldEZvcm0oKTtcclxuXHJcbiAgICBEZWJ1Zy5Bc3NlcnQocGFyZW50Rm9ybSAhPT0gbnVsbCk7XHJcblxyXG4gICAgd2hpbGUgKCFpc0Rlc2NlbmRlbnQgJiYgY2hlY2tDdXJyZW50Rm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAocGFyZW50Rm9ybSA9PT0gY2hlY2tDdXJyZW50Rm9ybSlcclxuICAgICAgICBpc0Rlc2NlbmRlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5jaGVja0N1cnJlbnRGb3JtLmdldFRhc2soKTtcclxuICAgICAgICBpZiAoY3VyclRhc2suZ2V0UGFyZW50KCkgIT09IG51bGwpXHJcbiAgICAgICAgICBjaGVja0N1cnJlbnRGb3JtID0gPE1nRm9ybT5jdXJyVGFzay5nZXRQYXJlbnQoKS5nZXRGb3JtKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpc0Rlc2NlbmRlbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmVmcmVzaCBjb250cm9sIGRpc3BsYXkgaWYgaXQgaGFzIGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2hPbkV4cHJlc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9ICh0aGlzLl9wcm9wVGFiID09PSBudWxsID8gMCA6IHRoaXMuX3Byb3BUYWIuZ2V0U2l6ZSgpKTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eTtcclxuICAgIGxldCByZWZyZXNoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemUgJiYgIXJlZnJlc2g7IGkrKykge1xyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wKGkpO1xyXG5cclxuICAgICAgc3dpdGNoIChwcm9wLmdldElEKCkpIHtcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgICBpZiAoIXByb3AuaXNFeHByZXNzaW9uKCkgJiYgdGhpcy5fZmllbGQgIT09IG51bGwgJiYgdGhpcy5fZmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLmdldEZvcm0oKS5nZXRUYXNrKCkpIHtcclxuICAgICAgICAgICAgcmVmcmVzaCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8qICBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBTlNMQVRPUjpcclxuICAgICAgICAgIGlmIChwcm9wLmlzRXhwcmVzc2lvbigpKVxyXG4gICAgICAgICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVmcmVzaClcclxuICAgICAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbnZva2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaW52b2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIHRoZSBjb250cm9sIGlzIG5vdCB2aXNpYmxlLCBub3QgZW5hYmxlZCBvciBub3QgcGFya2FibGUgc2tpcCB0aGlzIGNvbnRyb2xcclxuICAgIGlmIChhd2FpdCB0aGlzLmlzUGFya2FibGUodHJ1ZSkpIHtcclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhNZ0NvbnRyb2xCYXNlKHRoaXMsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWCk7XHJcbiAgICAgIGludm9rZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludm9rZWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSAhc3VwZXIuaXNJbWFnZUNvbnRyb2woKTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQsIHRydWUpO1xyXG5cclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUsIHRydWUpO1xyXG4gICAgICByZXN1bHQgPSBhd2FpdCBzdXBlci5pc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgc3ViZm9ybSB0YXNrIGlkIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTdWJmb3JtVGFza0lkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViZm9ybVRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaW5kIHRoZSBzdWJmb3JtIHRhc2sgYWNjb3JkaW5nIHRvIGl0cyBpZCBhbmQgc2F2ZSBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaW5pdFN1YmZvcm1UYXNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHN1cGVyLmlzU3ViZm9ybSgpKVxyXG4gICAgICB0aGlzLl9zdWJmb3JtVGFzayA9IDxUYXNrQmFzZT5HdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0aGlzLl9zdWJmb3JtVGFza0lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGNvbnRyb2wncyBwYXJlbnRUYWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGFyZW50VGFibGUoKTogTWdDb250cm9sIHtcclxuICAgIHJldHVybiA8TWdDb250cm9sPnRoaXMuX3BhcmVudFRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlc3RvcmUgYW5kIGRpc3BsYXkgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbCB1c2VkIHdoZW4gdGhlIGNvbnRyb2wgaXMgbm90IG1vZGlmaWFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHJlc3RvcmVPbGRWYWx1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbClcclxuICAgICAgYXdhaXQgKDxGaWVsZD50aGlzLl9maWVsZCkudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN1cGVyLnJlc2V0UHJldlZhbCgpO1xyXG4gICAgICBhd2FpdCBzdXBlci5TZXRBbmRSZWZyZXNoRGlzcGxheVZhbHVlKGF3YWl0IHRoaXMuZ2V0TWdWYWx1ZSh0aGlzLlZhbHVlKSwgdGhpcy5Jc051bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIGV2ZW50IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFJ0RXZ0VGFzayhjdXJUYXNrOiBUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnRUYXNrID0gY3VyVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBldmVudCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRSdEV2dFRhc2soKTogVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3J0RXZ0VGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBzdWJmb3JtIHRhc2sgaWQgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFN1YmZvcm1UYXNrSWQodGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB0YXNrSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNGb2N1c2VkU3RvcEV4ZWN1dGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9jdXNlZFN0b3BFeGVjdXRpb25cIj48L3BhcmFtPlxyXG4gIHNldEZvY3VzZWRTdG9wRXhlY3V0aW9uKGZvY3VzZWRTdG9wRXhlY3V0aW9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZvY3VzZWRTdG9wRXhlY3V0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsLVwiPlRoZSBjdHJsIHRvIGNoZWNrLiBjYW4gYmUgZnJhbWUgZm9ybSBhbmQgYWxzbyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIG9uVGhlU2FtZVN1YkZvcm1Db250cm9sKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoY3RybCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoc3VwZXIuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpICYmIGN0cmwuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpKSB7XHJcbiAgICAgICAgaWYgKHN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkgPT09IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKSlcclxuICAgICAgICAgIHJldFZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRydWUgaWYgdGhlIGN0cmxzIGFyZSBvbiBkaWZmZXJlbnQgZm9ybXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBvbkRpZmZGb3JtKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzU3ViZm9ybTogYm9vbGVhbiA9IHN1cGVyLmdldEZvcm0oKS5pc1N1YkZvcm0oKSB8fCBjdHJsLmdldEZvcm0oKS5pc1N1YkZvcm0oKTtcclxuICAgIGxldCBpc09uRGlmZkZvcm06IGJvb2xlYW4gPSAoaXNTdWJmb3JtICkgJiYgIXRoaXMub25UaGVTYW1lU3ViRm9ybUNvbnRyb2woY3RybCk7XHJcblxyXG4gICAgcmV0dXJuIGlzT25EaWZmRm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNJbkNvbnRyb2xTdWZmaXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5Db250cm9sU3VmZml4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5Db250cm9sU3VmZml4XCI+PC9wYXJhbT5cclxuICBzZXRJbkNvbnRyb2xTdWZmaXgoaW5Db250cm9sU3VmZml4OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbkNvbnRyb2xTdWZmaXggPSBpbkNvbnRyb2xTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRyb2wgaGFzIHNlbGVjdCBwcm9ncmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBIYXNTZWxlY3RQcm9ncmFtKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IEhhc1NlbGVjdFByb2dyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzZWxlY3RQcm9nUHJvcDogUHJvcGVydHkgPSBzdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVF9QUk9HUkFNKTtcclxuICAgIGlmIChzZWxlY3RQcm9nUHJvcCAhPT0gbnVsbCAmJiBzZWxlY3RQcm9nUHJvcC5HZXRDb21wdXRlZFZhbHVlKCkgIT09IG51bGwpXHJcbiAgICAgIEhhc1NlbGVjdFByb2dyYW0gPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBIYXNTZWxlY3RQcm9ncmFtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRoZSBjb250cm9sIHVzZSB0aGUgaGFuZGxlciBaT09NIChmb3Igc2VsZWN0IHByb2dyYW0gb3IgWm9vbSBoYW5kbGVyKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICB1c2Vab29tSGFuZGxlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkhhc1pvb21IYW5kbGVyIHx8IChzdXBlci5nZXRGaWVsZCgpICE9PSBudWxsICYmICgoPEZpZWxkPnN1cGVyLmdldEZpZWxkKCkpLmdldEhhc1pvb21IYW5kbGVyKCkgfHwgKHRoaXMuSGFzU2VsZWN0UHJvZ3JhbSgpKSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVwZGF0ZSBib29sZWFuIHByb3BlcnR5KGV4OnZpc2libGVcXGVuYWJsZSkgb2YgY29udHJvbCBhbmQgaXQncyBjaGlsZHJlblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5wcm9wZXJ0eSBpZCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj5jb21tYW5kIHR5cGUgdGhhdCBiZWxvbmcgdG8gdGhlIHByb3AgaWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZVRoaXNcIj48L3BhcmFtPlxyXG4gIGFzeW5jIHVwZGF0ZVByb3BlcnR5TG9naWNOZXN0aW5nKHByb3BJZDogbnVtYmVyLCBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIHZhbDogYm9vbGVhbiwgdXBkYXRlVGhpczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHZhbCAmJiBzdXBlci5oYXZlVG9DaGVja1BhcmVudFZhbHVlKCkpXHJcbiAgICAgIHZhbCA9IHN1cGVyLmlzUGFyZW50UHJvcFZhbHVlKHByb3BJZCk7XHJcblxyXG4gICAgLy8gaWYgdGhlIHN1YmZvcm0gbXVzdCBiZSBpbnZpc2libGUgKENUUkxfU1VCRk9STV9OT05FKSB3ZSBjaGFuZ2UgaXRzIHZpc2liaWxpdHkgdG8gZmFsc2VcclxuICAgIGlmICh2YWwgJiYgc3VwZXIuaXNTdWJmb3JtKCkgJiYgY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdGhpcy5TaG91bGRTZXRTdWJmb3JtSW52aXNpYmxlKCkpXHJcbiAgICAgIHZhbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh1cGRhdGVUaGlzKSB7XHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcywgc3VwZXIuZ2V0RGlzcGxheUxpbmUoZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSA/IEh0bWxQcm9wZXJ0aWVzLlZpc2libGUgOiBIdG1sUHJvcGVydGllcy5FbmFibGVkLCB2YWwpO1xyXG5cclxuICAgIH1cclxuICAgIGF3YWl0IHN1cGVyLnVwZGF0ZUNoaWxkcmVuUHJvcFZhbHVlKHByb3BJZCwgY29tbWFuZFR5cGUsIHZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIElmIHRoZSBzdWJmb3JtIG11c3QgYmUgaW52aXNpYmxlIChmb3IgZXhhbXBsZSBDVFJMX1NVQkZPUk1fTk9ORSkgcmV0dXJucyB0cnVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIFNob3VsZFNldFN1YmZvcm1JbnZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2V0SW52aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgc3ViZm9ybVR5cGU6IFN1YmZvcm1UeXBlID0gPFN1YmZvcm1UeXBlPnN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgaWYgKHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lICYmIHRoaXMuZ2V0U3ViZm9ybVRhc2tJZCgpID09PSBudWxsKVxyXG4gICAgICBzZXRJbnZpc2libGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHNldEludmlzaWJsZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBVcGRhdGVzIHZpc2liaWxpdHkgb3IgZW5hYmxlIHByb3BlcnR5IG9mIHN1YmZvcm0gY29udHJvbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcElkXCI+SWQgb2YgdmlzaWJpbGl0eSBvciBlbmFibGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj50eXBlIG9mIHRoZSBHVUkgY29tbWFuZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj52YWx1ZSBmb3IgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICBhc3luYyB1cGRhdGVTdWJmb3JtQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoc3VwZXIuaXNTdWJmb3JtKCkpO1xyXG5cclxuICAgIGlmICghKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5BZnRlckZpcnN0UmVjb3JkUHJlZml4KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IHN1YmZvcm1UeXBlOiBTdWJmb3JtVHlwZSA9IDxTdWJmb3JtVHlwZT5zdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NVQkZPUk1fVFlQRSkuR2V0Q29tcHV0ZWRWYWx1ZUludGVnZXIoKTtcclxuICAgIGlmICh0aGlzLl9zdWJmb3JtVGFza0lkICE9PSBudWxsIHx8IHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zdWJmb3JtVGFzayAhPT0gbnVsbCAmJiB0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSkge1xyXG4gICAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5QUk9QX1NFVF9WSVNJQkxFICYmIHZhbCAmJiB0aGlzLlJlZnJlc2hPblZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMuUmVmcmVzaE9uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgYXdhaXQgKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5TdWJmb3JtUmVmcmVzaCh0aGlzLl9zdWJmb3JtVGFzaywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3ViZm9ybUZvcm06IE1nRm9ybUJhc2UgPSB0aGlzLl9zdWJmb3JtVGFzay5nZXRGb3JtKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN1YmZvcm1Gb3JtLmdldEN0cmxDb3VudCgpOyBpKyspIHtcclxuICAgICAgICAgIGxldCBjaGlsZDogTWdDb250cm9sQmFzZSA9IHN1YmZvcm1Gb3JtLmdldEN0cmwoaSk7XHJcbiAgICAgICAgICAvLyBRQ1IgIzk4MTU1NSwgV2Ugc2hvdWxkIG5vdCBhZmZlY3QgdmlzaWJpbGl0eSBvZiB0aGUgVGFibGVDb2x1bW5zIHNpbmNlIGl0IGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlLlNldHRpbmcgdmlzaWJpbGl0eVxyXG4gICAgICAgICAgLy8gb2YgYWxsIGNvbHVtbnMgdG8gZmFsc2UgcHJldmVudHMgdGFibGUgcGxhY2VtZW50XHJcbiAgICAgICAgICBpZiAoIWNoaWxkLmlzQ29sdW1uQ29udHJvbCgpKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIGxldCBjaGlsZFZhbHVlOiBib29sZWFuID0gYXdhaXQgY2hpbGQuY2hlY2tQcm9wKHByb3BJZCwgdHJ1ZSkgJiYgdmFsO1xyXG4gICAgICAgICAgaWYgKGNoaWxkVmFsdWUpXHJcbiAgICAgICAgICAgIGNoaWxkVmFsdWUgPSBjaGlsZC5pc1BhcmVudFByb3BWYWx1ZShwcm9wSWQpO1xyXG5cclxuICAgICAgICAgIC8vIGlmICh0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSlcclxuICAgICAgICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoY29tbWFuZFR5cGUsIGNoaWxkLCBjaGlsZC5nZXREaXNwbGF5TGluZShmYWxzZSksIGNoaWxkVmFsdWUpO1xyXG4gICAgICAgICAgYXdhaXQgY2hpbGQudXBkYXRlQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkLCBjb21tYW5kVHlwZSwgY2hpbGRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdmFsKSAmJiAhdGhpcy5TdWJmb3JtTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoTWdDb250cm9sQmFzZSh0aGlzLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9PUEVOKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHN1YmZvcm0gdGFzayBpZCBmb3IgYSBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRTdWJmb3JtVGFzaygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGJlaGF2aW91ciBmb3IgdGhlIHRhYmxlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0VGFibGVCZWhhdmlvdXIoKTogVGFibGVCZWhhdmlvdXIge1xyXG4gICAgcmV0dXJuIFRhYmxlQmVoYXZpb3VyLlVubGltaXRlZEl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBhbmQgc2V0IGl0J3MgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NmdWw8L3JldHVybnM+XHJcbiAgYXN5bmMgdmFsaWRhdGVBbmRTZXRWYWx1ZShOZXdWYWx1ZTogYW55LCB1cGRhdGVDdHJsOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBzdXBlci5VcGRhdGVNb2RpZmllZEJ5VXNlcihOZXdWYWx1ZSk7XHJcblxyXG4gICAgLy8gaWYgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGlzIG51bGwgb3Igd2FzIGNoYW5nZWRcclxuICAgIC8vIGNoZWNrIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSB0aGUgY29udHJvbCB2YWx1ZVxyXG4gICAgaWYgKHRoaXMuTW9kaWZpZWRCeVVzZXIpIHtcclxuICAgICAgbGV0IGN0cmxDdXJyVmFsdWU6IGFueSA9IHRoaXMuVmFsdWU7XHJcbiAgICAgIGxldCB2ZDogVmFsaWRhdGlvbkRldGFpbHM7XHJcblxyXG4gICAgICBpZiAoc3VwZXIuZ2V0UElDKCkgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIHZkID0gc3VwZXIuYnVpbGRQaWN0dXJlKGN0cmxDdXJyVmFsdWUsIE5ld1ZhbHVlKTtcclxuXHJcbiAgICAgIHZkLmV2YWx1YXRlKCk7XHJcblxyXG4gICAgICAvLyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRzIHZhbHVlIHdhcyB3cm9uZ1xyXG4gICAgICBpZiAodmQuVmFsaWRhdGlvbkZhaWxlZCkge1xyXG4gICAgICAgIHRoaXMuTW9kaWZpZWRCeVVzZXIgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuSXNJbnRlcmFjdGl2ZVVwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgICBzdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLnNldERhdGFTeW5jZWQoZmFsc2UpO1xyXG5cclxuICAgICAgLy8gc2V0IHRoZSB2YWx1ZSAoaGFuZGxlIHJlY29tcHV0ZSwgZXRjLilcclxuICAgICAgaWYgKHVwZGF0ZUN0cmwpIHtcclxuICAgICAgICAvLyBRQ1IjNDQxMDIwOkFmdGVyIHZhbGlkYXRpbmcgZGlzcGxheSB2YWx1ZSwgdGFrZSB0aGUgc2FtZSBjdHJsJ3MgdmFsdWUgZm9yIG1nIHZhbHVlIGNvbnZlcnNpb24uXHJcbiAgICAgICAgLy8gVXNpbmcgZGlzcGxheSB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBNZ1ZhbHVlLCBtaWdodCBoYXZlIHByb2JsZW0gdG8gY29udmVydCBiYWNrIHRvIE1nVmFsIHVzaW5nIHBpY3R1cmUgZHVlIHRvIGFsaWdubWVudCAoY2hhbmdlZCBhbGlnbm1lbnQgKS5cclxuICAgICAgICAvLyBUaGlzIHByb2JsZW0gb2NjdXJzIGZvciBudW1lcmljLlxyXG4gICAgICAgIC8vIFRoZSBmaXggc2hvdWxkIGJlIGFwcGxpY2FibGUgZm9yIG51bWVyaWMgdHlwZSBvbmx5LiBCZWNhdXNlIGRhdGUgYW5kIHRpbWUgZmllbGQgd2l0aCBjb21wbGV4IG1hc2tpbmcgaGF2ZSBwcm9ibGVtIG9uIHVzaW5nIGN0cmwncyB2YWx1ZS5cclxuICAgICAgICAvLyBSZWZlciBkYXRlIHFjcnM6ICMyOTE2NjYsICMzMDczNTMsICM0MzQyNDEgYW5kIGZvciB0aW1lLCBjaGVjayBkZWZhdWx0IHZhbHVlIHdoZW4gZm9ybWF0IGlzICdISC1NTS1TUyBQTVpAJ1xyXG4gICAgICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiB0aGlzLl9maWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyAmJiB0eXBlb2YgTmV3VmFsdWUgPT09ICdzdHJpbmcnICYmIE5ld1ZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgdmQuc2V0VmFsdWUoTmV3VmFsdWUpO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLnNldFZhbHVlKHZkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSB1c2VyIGlucHV0IGFmdGVyIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSB0aGUgZmllbGQgY29ubmVjdGVkIHRvIHRoaXNcclxuICAvLy8gICBjb250cm9sIChpZiBleGlzdHMpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZkXCI+dGhlIHZhbGlkYXRpb24gZGV0YWlscyBvYmplY3Q8L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VmFsdWUodmQ6IFZhbGlkYXRpb25EZXRhaWxzKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaXNOdWxsOiBib29sZWFuID0gdmQuZ2V0SXNOdWxsKCk7XHJcbiAgICBsZXQgbmV3VmFsdWU6IGFueSA9IHZkLmdldERpc3BWYWx1ZSgpO1xyXG4gICAgbGV0IG1nVmFsOiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKCFpc051bGwgfHwgIXRoaXMuX2ZpZWxkLmhhc051bGxEaXNwbGF5VmFsdWUoKSlcclxuICAgICAgbWdWYWwgPSBhd2FpdCBzdXBlci5nZXRNZ1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIC8vIGl0J3MgaW5uZXIgdmFsdWUgLT4gdHJhbnNsYXRlIGl0IHRvIHRoZSBkaXNwbGF5XHJcbiAgICBlbHNlXHJcbiAgICAgIG1nVmFsID0gKCh0aGlzLl9maWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpID8gdGhpcy5fZmllbGQuZ2V0Q2VsbERlZnVhbHRWYWx1ZSgpIDogdGhpcy5fZmllbGQuZ2V0RGVmYXVsdFZhbHVlKCkpO1xyXG4gICAgaWYgKG1nVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiAoIShuZXdWYWx1ZSA9PT0gdGhpcy5WYWx1ZSkgfHwgdGhpcy5LZXlTdHJva2VPbiB8fCB0aGlzLklzTnVsbCAhPT0gaXNOdWxsKSkge1xyXG4gICAgICAgIGF3YWl0ICg8RmllbGQ+dGhpcy5fZmllbGQpLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUobWdWYWwsIGlzTnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAvLyBkZWZlY3QgMTI3NzM0IDogdmFsdWUgb2YgdGhlIGZpZWxkIG1pZ2h0IGJlIGNoYW5nZWQgYWxyZWFkeSBpbnNpZGUgYSBjb250cm9sIGNoYW5nZSBoYW5kbGVyXHJcbiAgICAgICAgLy8gdG8gYXZvaWQgdXBkYXRpbmcgb2xkIHZhbHVlIGFuZCBvdmVycnVubmluZyB0aGUgdmFsdWUgZnIwbSB0aGUgY29udHJvbCBjaGFuZ2VcclxuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIGZpZWxkLiAobmVlZCB0byBiZSBkb25lIGZvciBjb21ibyBhbmQgbGlzdCBib3gsIGJ1dCBpdCdzIHRvbyByaXNreVxyXG4gICAgICAgIC8vIGFuZCB1bmxpa2VseSB0byBoYXBwZW4sIHNvIHRoZSBmaXggd2lsbCBiZSBmb3IgY2hlY2sgYm94IG9ubHkpXHJcblxyXG4gICAgICAgIGlmIChzdXBlci5pc0NoZWNrQm94KCkpIHtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgIG1nVmFsID0gKDxGaWVsZD50aGlzLl9maWVsZCkuZ2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgZmllbGQgdmFsdWUgaXMgbnVsbCAmIGhhcyBudWxsIGRpc3BsYXkgdmFsdWUsIHRha2UgZXZhbHVhdGVkIG51bGwgZGlzcGxheSB2YWx1ZS5cclxuICAgICAgaWYgKCh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiBpc051bGwpICYmIHRoaXMuX2ZpZWxkLmhhc051bGxEaXNwbGF5VmFsdWUoKSlcclxuICAgICAgICBtZ1ZhbCA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgYXdhaXQgc3VwZXIuU2V0QW5kUmVmcmVzaERpc3BsYXlWYWx1ZShtZ1ZhbCwgaXNOdWxsKTtcclxuICAgICAgdGhpcy5mb3JjZVJlZnJlc2ggPSBmYWxzZTtcclxuICAgICAgLy8gUUNSICM0Mzg3NTMuIFByZXZlbnQgUlAmUlMgY3ljbGUsIHdoZW4gaXQncyBub3QgbmVlZGVkLlxyXG4gICAgICB0aGlzLktleVN0cm9rZU9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlZnJlc2ggdGhlIGl0ZW0gbGlzdCBvZiByYWRpbyBidXR0b24gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4ZWNDb21wdXRlQ2hvaWNlXCI+PC9wYXJhbT5cclxuICBhc3luYyByZWZyZXNoQW5kU2V0SXRlbXNMaXN0Rm9yUmFkaW9CdXR0b24obGluZTogbnVtYmVyLCBleGVjQ29tcHV0ZUNob2ljZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgc3VwZXIucmVmcmVzaEFuZFNldEl0ZW1zTGlzdEZvclJhZGlvQnV0dG9uKGxpbmUsIGV4ZWNDb21wdXRlQ2hvaWNlKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgcGFya2luZyB3YXMgb24gdGhlIHJhZGlvIGNvbnRyb2wsIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGZvY3VzIGJlY2F1c2VcclxuICAgIC8vIHRoZSBvbGQgY29udHJvbHMgd2VyZSBkaXNwb3NlZCBhbmQgdGhlIG5ldyBvbmVzIGFyZSBjcmVhdGVkLlxyXG4gICAgbGV0IGxhc3RGb2N1c2VkVGFzazogVGFza0Jhc2UgPSBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0TGFzdEZvY3VzZWRUYXNrKCg8VGFza0Jhc2U+c3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKSkuZ2V0TWdkSUQoKSk7XHJcbiAgICAvLyBpZiAobGFzdEZvY3VzZWRUYXNrICE9PSBudWxsICYmIHRoaXMgPT09IGxhc3RGb2N1c2VkVGFzay5nZXRMYXN0UGFya2VkQ3RybCgpKVxyXG4gICAgLy8gICBDb21tYW5kcy5hZGRBc3luYyhDb21tYW5kVHlwZS5TRVRfRk9DVVMsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHN1YmZvcm0gdGFzayBvZiB0aGlzIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0U3ViZm9ybVRhc2soKTogVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1YmZvcm1UYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHN1YmZvcm0gdGFzayBvZiB0aGlzIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVzZXRTdWJmb3JtVGFzaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrID0gbnVsbDtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSBcIjBcIjtcclxuICB9XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIE1nRm9ybSBvZiB0aGUgc3ViZm9ybSBjb250cm9sIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldFN1YmZvcm1NZ0Zvcm0oKTogTWdGb3JtQmFzZSB7XHJcbiAgICBsZXQgZm9ybTogTWdGb3JtQmFzZSA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5fc3ViZm9ybVRhc2sgIT09IG51bGwpXHJcbiAgICAgIGZvcm0gPSB0aGlzLl9zdWJmb3JtVGFzay5nZXRGb3JtKCk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ2hlY2sgd2hldGhlciB0YWJsZSBiZWluZyB1c2VkIHdpdGggYWJzb2x1dGUgc2Nyb2xsYmFyIHRodW1iLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSXNUYWJsZVdpdGhBYnNvbHV0ZVNjcm9sbGJhcigpOiBib29sZWFuIHtcclxuICAgIGxldCB0YWJsZVdpdGhBYnNvbHV0ZVNjcm9sbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgRGVidWcuQXNzZXJ0KHRoaXMuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEFCTEUsIFwiSW4gTWdDb250cm9sLklzVGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIoKTogTm90IGEgdGFibGUgY29udHJvbC5cIik7XHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYi5wcm9wRXhpc3RzKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NDUk9MTF9CQVJfVEhVTUIpKVxyXG4gICAgICB0YWJsZVdpdGhBYnNvbHV0ZVNjcm9sbGJhciA9ICh0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NDUk9MTF9CQVJfVEhVTUIpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCkgPT09IDxudW1iZXI+U2Nyb2xsQmFyVGh1bWJUeXBlLkFic29sdXRlKTtcclxuXHJcbiAgICByZXR1cm4gdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBjaGVjayBpZiB0aGUgcmV0dXJuLXRvLWNvbnRyb2wgcG9pbnRzIHRvIGFuIGV4aXN0aW5nIHRhc2suPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyB2YWxpZFJldHVyblRvQ3RybCgpOiBib29sZWFuIHtcclxuICAgIGlmIChNZ0NvbnRyb2wuUmV0dXJuVG9DdHJsICE9PSBudWxsICYmIE1nQ29udHJvbC5SZXR1cm5Ub0N0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5pc0Fib3J0aW5nKCkpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgb25lIG1heSBkaXJlY3RseSAobm90IHZpYSB0aGUgZ3VpKSBzZXQgYSB2YWx1ZSBvbiB0aGlzIGNvbnRyb2wuPC9zdW1tYXJ5PlxyXG4gIG1heVNldFZhbHVlKCk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoICh0aGlzLlR5cGUpIHtcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DSEVDS0JPWDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9URVhUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NPTUJPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0xJU1Q6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfUkFESU86XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEFCOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJldmVudCB2YWx1ZSBzZXR0aW5nIGlmIHRoZSBjb250cm9sIGRvZXNuJ3QgaGF2ZSBhIGZpZWxkLCBvciBpZiBpdCBnZXRzIGl0cyB2YWx1ZSBmcm9tIGFuIGV4cHJlc3Npb25cclxuICAgIGlmICh0aGlzLl9maWVsZCA9PT0gbnVsbCB8fCB0aGlzLl92YWxFeHBJZCA+IDApXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5pc01vZGlmaWFibGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGVja3MgaWYgYSB2YWx1ZSBtYXkgYmUgc2V0LCBhbmQgdHJpZXMgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJOZXdWYWx1ZVwiPnRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVDdHJsXCI+aWYgdHJ1ZSB0aGVuIHRoZSBjb250cm9sIHdpbGwgYmUgdXBkYXRlZCB1cG9uIHN1Y2Nlc3NmdWwgY2hlY2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5yZXR1cm5zIGlmIHZhbHVlIHNldHRpbmcgd2FzIHN1Y2Nlc3NmdWwgPC9yZXR1cm5zPlxyXG4gIGFzeW5jIHZhbGlkYXRlQW5kU2V0VmFsdWVJZkFsbG93ZWQoTmV3VmFsdWU6IGFueSwgcmVmcmVzaERpc3BsYXk6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghdGhpcy5tYXlTZXRWYWx1ZSgpKSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJVbmFibGUgdG8gY2hhbmdlIHZhbHVlIG9mIGNvbnRyb2wgezB9OiBUaGUgY29udHJvbCBpcyByZWFkLW9ubHkuXCIsIHRoaXMuTmFtZSkpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJldFZhbCA9IGF3YWl0IHRoaXMudmFsaWRhdGVBbmRTZXRWYWx1ZShOZXdWYWx1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAoIXJldFZhbClcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZyhOU3RyaW5nLkZvcm1hdChcIlZhbHVlIHZhbGlkYXRpb24gZmFpbGVkIGZvciB7MH0uXCIsIHRoaXMuTmFtZSkpO1xyXG5cclxuICAgIGlmIChyZWZyZXNoRGlzcGxheSkge1xyXG4gICAgICBDb21tYW5kcy5hZGROb1BhcmFtZXRlcnMoQ29tbWFuZFR5cGUuUkVGUkVTSF9UQVNLLCB0aGlzLmdldEZvcm0oKSk7XHJcbiAgICAgIENvbW1hbmRzLmludm9rZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vcmVmcmVzaCB0YXNrXHJcbiAgICByZXR1cm4gcmV0VmFsO1xyXG4gIH1cclxufVxyXG4iXX0=