@magic-xpa/gui 4.1100.0-dev4110.252 → 4.1100.0-dev4110.256
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.
- package/esm2022/src/Commands.mjs +1 -1
- package/esm2022/src/Events.mjs +1 -1
- package/esm2022/src/EventsProcessor.mjs +1 -1
- package/esm2022/src/FocusManager.mjs +1 -1
- package/esm2022/src/Manager.mjs +1 -1
- package/esm2022/src/UIBridge.mjs +1 -1
- package/esm2022/src/gui/GuiMgControl.mjs +1 -1
- package/esm2022/src/gui/KeyboardItem.mjs +1 -1
- package/esm2022/src/gui/low/GuiCommand.mjs +1 -1
- package/esm2022/src/gui/low/GuiCommandQueue.mjs +1 -1
- package/esm2022/src/gui/low/GuiInteractive.mjs +1 -1
- package/esm2022/src/management/RuntimeContextBase.mjs +1 -1
- package/esm2022/src/management/data/BlobType.mjs +1 -1
- package/esm2022/src/management/data/DcValues.mjs +1 -1
- package/esm2022/src/management/data/DcValuesBuilderBase.mjs +1 -1
- package/esm2022/src/management/data/FieldDef.mjs +1 -1
- package/esm2022/src/management/data/FieldsTable.mjs +1 -1
- package/esm2022/src/management/data/GuiDataViewBase.mjs +1 -1
- package/esm2022/src/management/data/GuiFieldBase.mjs +1 -1
- package/esm2022/src/management/data/NUM_TYPE.mjs +1 -1
- package/esm2022/src/management/data/ObjectReferenceBase.mjs +1 -1
- package/esm2022/src/management/data/ObjectReferencesCollection.mjs +1 -1
- package/esm2022/src/management/data/RecordUtils.mjs +1 -1
- package/esm2022/src/management/data/VectorType.mjs +1 -1
- package/esm2022/src/management/data/VectorTypeBase.mjs +1 -1
- package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +1 -1
- package/esm2022/src/management/gui/ControlTable.mjs +1 -1
- package/esm2022/src/management/gui/DisplayConvertor.mjs +1 -1
- package/esm2022/src/management/gui/FieldValidator.mjs +1 -1
- package/esm2022/src/management/gui/HebrewDate.mjs +1 -1
- package/esm2022/src/management/gui/Helps.mjs +1 -1
- package/esm2022/src/management/gui/MgControlBase.mjs +1 -1
- package/esm2022/src/management/gui/MgFormBase.mjs +1 -1
- package/esm2022/src/management/gui/PIC.mjs +1 -1
- package/esm2022/src/management/gui/PropDefaults.mjs +1 -1
- package/esm2022/src/management/gui/PropTable.mjs +1 -1
- package/esm2022/src/management/gui/Property.mjs +1 -1
- package/esm2022/src/management/gui/ValidationDetails.mjs +1 -1
- package/esm2022/src/management/gui/ValidationDetailsBase.mjs +1 -1
- package/esm2022/src/management/gui/WrongFormatException.mjs +1 -1
- package/esm2022/src/management/tasks/GuiTaskBase.mjs +1 -1
- package/esm2022/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +1 -1
- package/esm2022/src/util/MemoryUtil.mjs +1 -1
- package/esm2022/src/util/ObjectReference.mjs +1 -1
- package/esm2022/src/util/UsernamePasswordCredentials.mjs +1 -1
- package/fesm2022/magic-xpa-gui.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -738,4 +738,4 @@ export class Row {
|
|
|
738
738
|
this.Validated = validated;
|
|
739
739
|
}
|
|
740
740
|
}
|
|
741
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdGb3JtQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvTWdGb3JtQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFhLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFZLEtBQUssRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7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QUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcm9wUGFyZW50SW50ZXJmYWNlfSBmcm9tICcuLi8uLi9ndWkvUHJvcFBhcmVudEludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29uc3RhbnRzLFxyXG4gIExvZ2dlcl9Mb2dMZXZlbHMsXHJcbiAgTWdDb250cm9sVHlwZSxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0clV0aWwsXHJcbiAgVGFiYmluZ09yZGVyVHlwZSxcclxuICBXaW5kb3dUeXBlLFxyXG4gIFhNTENvbnN0YW50cyxcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtEZWJ1ZywgSUhhc2hDb2RlLCBJbnQzMiwgTGlzdCwgTlN0cmluZywgUmVmUGFyYW0sIFN0YWNrLCBTdHJpbmdCdWlsZGVyfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7TWdDb250cm9sQmFzZX0gZnJvbSAnLi9NZ0NvbnRyb2xCYXNlJztcclxuaW1wb3J0IHtQcm9wVGFibGV9IGZyb20gJy4vUHJvcFRhYmxlJztcclxuaW1wb3J0IHtHdWlUYXNrQmFzZX0gZnJvbSAnLi4vdGFza3MvR3VpVGFza0Jhc2UnO1xyXG5pbXBvcnQge0NvbnRyb2xUYWJsZX0gZnJvbSAnLi9Db250cm9sVGFibGUnO1xyXG5pbXBvcnQge01hbmFnZXJ9IGZyb20gJy4uLy4uL01hbmFnZXInO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSAnLi9Qcm9wZXJ0eSc7XHJcbmltcG9ydCB7Q29tbWFuZFR5cGUsIEh0bWxQcm9wZXJ0aWVzfSBmcm9tICcuLi8uLi9HdWlFbnVtcyc7XHJcbmltcG9ydCB7TlVNX1RZUEV9IGZyb20gJy4uL2RhdGEvTlVNX1RZUEUnO1xyXG5pbXBvcnQge0NvbW1hbmRzfSBmcm9tICcuLi8uLi9Db21tYW5kcyc7XHJcbmltcG9ydCB7R3VpRmllbGRCYXNlfSBmcm9tICcuLi9kYXRhL0d1aUZpZWxkQmFzZSc7XHJcbmltcG9ydCB7UHJvcEludGVyZmFjZX0gZnJvbSAnLi9Qcm9wSW50ZXJmYWNlJztcclxuaW1wb3J0IHtHdWlDb25zdGFudHN9IGZyb20gJy4uLy4uL0d1aUNvbnN0YW50cyc7XHJcbmltcG9ydCB7R3VpRm9ybVByb3BlcnR5QWRhcHRlcn0gZnJvbSAnLi9HdWlGb3JtUHJvcGVydHlBZGFwdGVyJztcclxuaW1wb3J0IHtHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyfSBmcm9tICcuL0d1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXInO1xyXG5cclxuXHJcbmNvbnN0IGRlbGltaXRlcjogc3RyaW5nID0gJywgJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIGRhdGEgZm9yIDxmb3JtPi4uLjwvZm9ybT5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1nRm9ybUJhc2UgZXh0ZW5kcyBHdWlGb3JtUHJvcGVydHlBZGFwdGVyIGltcGxlbWVudHMgUHJvcFBhcmVudEludGVyZmFjZSwgSUhhc2hDb2RlIHtcclxuICBJbkluaXRGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEN0cmxUYWI6IENvbnRyb2xUYWJsZSA9IG51bGw7XHJcbiAgLy8gdW50aWwgdGhlIGZvcm0gaXMgcmVmcmVzaGVkIGluIHRoZSBmaXJzdCB0aW1lXHJcbiAgRm9ybVJlZnJlc2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFJlZnJlc2hSZXBlYXRhYmxlQWxsb3dlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFJvd3M6IExpc3Q8Um93PiA9IG51bGw7XHJcbiAgTW9kYWxGb3Jtc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIEVycm9yT2NjdXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEZvcm1Jc246IG51bWJlciA9IDA7XHJcbiAgTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBPcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0xlZ2FsRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFBCSW1hZ2VzTnVtYmVyOiBudW1iZXIgPSAwO1xyXG4gIGlnbm9yZUZpcnN0UmVmcmVzaFRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBQYXJlbnRGb3JtOiBNZ0Zvcm1CYXNlID0gbnVsbDtcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByb3RlY3RlZCBfZGVzdFRibFJvdzogbnVtYmVyID0gSW50MzIuTWluVmFsdWU7XHJcbiAgcHJvdGVjdGVkIF9maXJzdFRhYmxlVGFiT3JkZXI6IG51bWJlciA9IDA7ICAgICAgICAgICAgLy8gdGFiIG9yZGVyIG9mIGZpcnN0IGNoaWxkIG9mIHRhYmxlXHJcbiAgcHJvdGVjdGVkIF9pblJlZnJlc2hEaXNwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9pblJlc3RvcmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgX2xhc3RSb3dTZW50OiBudW1iZXIgPSAtMTsgICAgICAgICAgICAgICAgICAvLyBsYXN0IHJvdyBzZW50IHJvIGd1aSB0aHJlYWRcclxuICBwcm90ZWN0ZWQgX3ByZXZHdWlUb3BJbmRleDogbnVtYmVyID0gLTE7ICAgICAgICAgICAgICAvLyBGb3IgcGFnaW5hdGVkIHRhYmxlIGl0J3MgR3VpVG9wSW5kZXggZWxzZSBpdCdzIGR2VG9wSW5kZXhcclxuICBwcm90ZWN0ZWQgX3Byb3BUYWI6IFByb3BUYWJsZSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIF9yb3dzSW5QYWdlOiBudW1iZXIgPSAxO1xyXG4gIHByb3RlY3RlZCBfbWF4Um93c0luUGFnaW5hdGVkVGFibGU6IG51bWJlciA9IDA7ICAgICAgIC8vIG1heCBubyBvZiByb3dzIGluIHBhZ2luYXRlZCB0YWJsZVxyXG4gIHByb3RlY3RlZCBfc3ViRm9ybUN0cmw6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBfdGFibGVNZ0NvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBfdGFibGVJdGVtc0NvdW50OiBudW1iZXIgPSAwOyAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZVxyXG4gIHByb3RlY3RlZCBfdGFibGVSZWZyZXNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgX3Rhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDsgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdGFzayB0byB3aGljaCB0aGUgY3VycmVudCBmb3JtIGJlbG9uZ3NcclxuICBwcm90ZWN0ZWQgX3RvcEluZGV4VXBkYXRlZDogYm9vbGVhbiA9IGZhbHNlOyAgICAgICAgICAvLyB0cnVlIGlmIGEgdG9wIGluZGV4IHdhcyB1cGRhdGVkXHJcblxyXG4gIC8vIEZvcm0gcmVwcmVzZW50aW5nIHRoZSBpbnRlcm5hbCBoZWxwIHdpbmRvdy5IZXJlIHRoZSBpbnRlcm5hbCBmb3JtIG9iamVjdCBpcyBrZXB0IG9uIHRoZSBmb3JtIG9iamVjdCBpdHNlbGYuXHJcbiAgcHJvdGVjdGVkIF90cmFuc2ZlcmluZ0RhdGE6IGJvb2xlYW4gPSBmYWxzZTsgICAgICAgICAgLy8gcm93cyBhcmUgcmVxdWVzdGVkIGZvciBhIEdVSSB0aHJlYWRcclxuICAvLyBwcmV2ZW50cyByZWZyZXNoIG9mIERpc3BsYXlMaXN0IGZvciB0aGUgY29ycmVzcG9uZGluZyBjb250cm9scyBhbmQgY3VyclJlY0NvbXB1dGUoUkMpXHJcbiAgcHJpdmF0ZSBfYWxsb3dlZFN1YmZvcm1SZWNvbXB1dGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX2NvbmNyZXRlV2luZG93VHlwZTogV2luZG93VHlwZTtcclxuICBwcml2YXRlIF9jb250YWluZXJDdHJsOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuICBwcml2YXRlIF9maXJzdFJlZnJlc2hPZlByb3BzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfcHJldlNlbEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBwcml2YXRlIF9zaG91bGRDcmVhdGVUb29sYmFyOiBib29sZWFuID0gZmFsc2U7ICAgICAgICAvLyBpZiB0byBjcmVhdGUgdG9vbGJhclxyXG4gIHByaXZhdGUgX3RhYmxlQ2hpbGRyZW46IExpc3Q8TWdDb250cm9sQmFzZT4gPSBudWxsOyAgIC8vIENhbid0IHVzZSBMaXN0PFQ+XHJcbiAgcHJpdmF0ZSBfdGFibGVDb2x1bW5zOiBMaXN0PE1nQ29udHJvbEJhc2U+ID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgX3VzZXJTdGF0ZUlkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHJpdmF0ZSBkaXNwbGF5TGluZTogbnVtYmVyID0gMDtcclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9wcm9wVGFiID0gbmV3IFByb3BUYWJsZSh0aGlzKTtcclxuICAgIHRoaXMuQ3RybFRhYiA9IG5ldyBDb250cm9sVGFibGUoKTtcclxuICAgIHRoaXMuUm93cyA9IG5ldyBMaXN0KCk7XHJcbiAgICB0aGlzLl9jb25jcmV0ZVdpbmRvd1R5cGUgPSA8V2luZG93VHlwZT4wO1xyXG4gICAgdGhpcy5QYXJlbnRGb3JtID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBEaXNwbGF5TGluZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUxpbmU7XHJcbiAgfVxyXG5cclxuICBzZXQgRGlzcGxheUxpbmUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5kaXNwbGF5TGluZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFVuaXF1ZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FKSAhPSBudWxsKVxyXG4gICAgICByZXR1cm4gdGhpcy5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUk1fTkFNRSkuR2V0Q29tcHV0ZWRWYWx1ZSgpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBUYXNrVGFnKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUYXNrKCkuZ2V0VGFza1RhZygpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBUYWJsZUNoaWxkcmVuKCk6IExpc3Q8TWdDb250cm9sQmFzZT4ge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlQ2hpbGRyZW4gPT09IG51bGwpXHJcbiAgICAgIHRoaXMuYnVpbGRUYWJsZUNoaWxkcmVuKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVDaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBUYWJsZUNoaWxkcmVuKHZhbHVlOiBMaXN0PE1nQ29udHJvbEJhc2U+KSB7XHJcbiAgICB0aGlzLl90YWJsZUNoaWxkcmVuID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgU2hvdWxkQ3JlYXRlVG9vbGJhcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zaG91bGRDcmVhdGVUb29sYmFyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IEFsbG93ZWRTdWJmb3JtUmVjb21wdXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FsbG93ZWRTdWJmb3JtUmVjb21wdXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IEFsbG93ZWRTdWJmb3JtUmVjb21wdXRlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hbGxvd2VkU3ViZm9ybVJlY29tcHV0ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyB0cnVlIGZvciBhIEZpdFRvTWRpIHdpbmRvdy5cclxuXHJcbiAgZ2V0IENvbmNyZXRlV2luZG93VHlwZSgpOiBXaW5kb3dUeXBlIHtcclxuICAgIGlmICh0aGlzLl9jb25jcmV0ZVdpbmRvd1R5cGUgPT09IDxXaW5kb3dUeXBlPjApIHtcclxuICAgICAgbGV0IHdpbmRvd1R5cGU6IFdpbmRvd1R5cGUgPSA8V2luZG93VHlwZT50aGlzLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0lORE9XX1RZUEUpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk7XHJcbiAgICAgIGlmICh0aGlzLlBhcmVudEZvcm0gPT09IG51bGwgfHwgd2luZG93VHlwZSAhPT0gV2luZG93VHlwZS5PdmVybGF5KVxyXG4gICAgICAgIHdpbmRvd1R5cGUgPSBXaW5kb3dUeXBlLkRlZmF1bHQ7XHJcblxyXG4gICAgICB0aGlzLl9jb25jcmV0ZVdpbmRvd1R5cGUgPSB3aW5kb3dUeXBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmNyZXRlV2luZG93VHlwZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyB0cnVlIGZvciBGbG9hdGluZywgVG9vbCBvciBNb2RhbC5cclxuXHJcbiAgc2V0IENvbmNyZXRlV2luZG93VHlwZSh2YWx1ZTogV2luZG93VHlwZSkge1xyXG4gICAgdGhpcy5fY29uY3JldGVXaW5kb3dUeXBlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRoaXMgbWV0aG9kIGVuYWJsZXMgYSBzcGVjaWZpYyBhY3Rpb24gb24gYWxsIHRoZSBtZW51IG9iamVjdHMgb2YgdGhlIGZvcm0gYW5kIGl0cyBjaGlsZHJlbidzXHJcbiAgLy8vIG1lbnVzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhY3Rpb25cIj5hY3Rpb24gd2hvc2Ugc3RhdGUgaGFzIGNoYW5nZWQ8L3BhcmFtPlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBTaG91bGRQdXRBY3RPbkZvcm1DbG9zZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBhIHByb3BlcnR5IG9mIHRoZSBmb3JtIHRoYXQgYWxyZWFkeSB3YXMgY29tcHV0ZWQgYnkgaXRzIElkXHJcbiAgLy8vIFRoaXMgbWV0aG9kIGRvZXMgbm90IGNyZWF0ZSBhIHByb3BlcnR5IGlmIGl0IGlzbid0IGV4aXN0LlxyXG4gIC8vLyBNYXkgd2UgbmVlZCB0byBjcmVhdGUgYSBwcm9wZXJ0eSBhbmQgdXNlIGl0cyBkZWZhdWx0IHZhbHVlLlxyXG4gIC8vLyBJbiBQaGFzZSAyIGluIFJlZnJlc2hQcm9wZXJ0aWVzIG1ldGhvZCB3ZSdsbCBjcmVhdGUgYW5kIGNvbXB1dGUgcHJvcGVydGllcyxcclxuICAvLy8gcGVyaGFwcyB3ZSBuZWVkIGNyZWF0ZSBhbGwgcHJvcGVydGllcyBub3Qgb25seSB0aG9zZSB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHN0YXRpYyBTaG91bGRCZWhhdmVBc01vZGFsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjaGVja3MgaWYgcHJvcGVydHkgaGFzIGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInByb3BJZFwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ29udmVydEFycmF5TGlzdFRvU3RyaW5nKGl0ZW1zOiBMaXN0PHN0cmluZz4sIGlzSXRlbU51bVR5cGU6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IGZyb206IHN0cmluZ1tdID0gWydcXFxcJywgJy0nLCAnLCddO1xyXG4gICAgbGV0IHRvOiBzdHJpbmdbXSA9IFsnXFxcXFxcXFwnLCAnXFxcXC0nLCAnXFxcXCwnXTtcclxuICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgIGxldCBuVU1fVFlQRTogTlVNX1RZUEU7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXg6IG51bWJlciA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCA9IGluZGV4ICsgMSkge1xyXG4gICAgICBpZiAoaXNJdGVtTnVtVHlwZSkge1xyXG4gICAgICAgIG5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKDxzdHJpbmc+aXRlbXMuZ2V0X0l0ZW0oaW5kZXgpKTtcclxuICAgICAgICBpdGVtcy5zZXRfSXRlbShpbmRleCwgblVNX1RZUEUudG9fZG91YmxlKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZSg8c3RyaW5nPml0ZW1zLmdldF9JdGVtKGluZGV4KSwgZnJvbSwgdG8pKTtcclxuXHJcbiAgICAgIGlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoZGVsaW1pdGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBwYXJzZSB0aGUgZm9ybSBzdHJ1Y3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluY3JlYXNlXCI+PC9wYXJhbT5cclxuICBVcGRhdGVNb2RhbEZvcm1zQ291bnQobWdGb3JtQmFzZTogTWdGb3JtQmFzZSwgaW5jcmVhc2U6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoaW5jcmVhc2UpXHJcbiAgICAgIHRoaXMuTW9kYWxGb3Jtc0NvdW50ICs9IDE7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuTW9kYWxGb3Jtc0NvdW50IC09IDE7XHJcblxyXG4gICAgRXZlbnRzLlNldE1vZGFsKG1nRm9ybUJhc2UsIGluY3JlYXNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gVG8gYWxsb2NhdGUgYW5kIGZpbGwgaW5uZXIgb2JqZWN0cyBvZiB0aGUgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvdW5kVGFnTmFtZVwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgRXZhbHVhdGVFeHByZXNzaW9uKGV4cElkOiBudW1iZXIsIHJlc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGxlbmd0aDogbnVtYmVyLCBjb250ZW50VHlwZVVuaWNvZGU6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0NlbGxUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBhbHdheXNFdmFsdWF0ZTogYm9vbGVhbiwgd2FzRXZhbHVhdGVkOiBSZWZQYXJhbTxib29sZWFuPik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fdGFzay5FdmFsdWF0ZUV4cHJlc3Npb24oZXhwSWQsIHJlc1R5cGUsIGxlbmd0aCwgY29udGVudFR5cGVVbmljb2RlLCByZXNDZWxsVHlwZSwgdHJ1ZSwgd2FzRXZhbHVhdGVkKTtcclxuICB9XHJcblxyXG4gIEdldEV4cHJlc3Npb25TdG9yYWdlKGV4cElkOiBudW1iZXIpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLl90YXNrLkdldEV4cHJlc3Npb25TdG9yYWdlKGV4cElkKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGluaXRpYWxpemF0aW9uLlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGNoZWNrSWZFeGlzdFByb3AocHJvcElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCBleGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIgIT09IG51bGwpIHtcclxuICAgICAgbGV0IHByb3BCeUlkOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuICAgICAgZXhpc3QgPSAocHJvcEJ5SWQgIT09IG51bGwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4aXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZpbGwgbmFtZSBtZW1iZXIgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj50aGUgSWQgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICBnZXRQcm9wKHByb3BJZDogbnVtYmVyKTogUHJvcGVydHkge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYiAhPT0gbnVsbCkge1xyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG5cclxuICAgICAgLy8gaWYgdGhlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QgdGhlbiBjcmVhdGUgYSBuZXcgcHJvcGVydHkgYW5kIGdpdmUgaXQgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgLy8gaW4gYWRkaXRpb24gYWRkIHRoaXMgcHJvcGVydHkgdG8gdGhlIHByb3BlcnRpZXMgdGFibGVcclxuICAgICAgaWYgKHByb3AgPT09IG51bGwpIHtcclxuICAgICAgICBwcm9wID0gUHJvcGVydHkuZ2V0RGVmYXVsdFByb3AocHJvcElkLCBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSwgdGhpcyk7XHJcbiAgICAgICAgaWYgKHByb3AgIT09IG51bGwpXHJcbiAgICAgICAgICB0aGlzLl9wcm9wVGFiLmFkZFByb3AocHJvcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZvciBlYWNoIGNvbnRyb2wgYnVpbGQgdGhlIGxpc3Qgb2YgYWxsIHRoZSBjb250cm9scyB0aGF0IGFyZSBsaW5rZWQgdG8gaXRcclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj50aGUgSWQgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICBHZXRDb21wdXRlZFByb3BlcnR5KHByb3BJZDogbnVtYmVyKTogUHJvcGVydHkge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYiAhPT0gbnVsbClcclxuICAgICAgcHJvcCA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuXHJcbiAgICByZXR1cm4gcHJvcDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIFByb3BlcnR5SGFzRXhwcmVzc2lvbihwcm9wSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG4gICAgcmV0dXJuIHByb3AgIT09IG51bGwgJiYgcHJvcC5pc0V4cHJlc3Npb24oKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0Q29tcElkeCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICh0aGlzLmdldFRhc2soKSA9PT0gbnVsbCkgPyAwIDogdGhpcy5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFycmFuZ2Ugem9yZGVyIGZvciBjb250cm9scy4gcmVjdXJzaXZlIGZ1bmN0aW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgSXNGaXJzdFJlZnJlc2hPZlByb3BzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0UmVmcmVzaE9mUHJvcHM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgbGlzdCBvZiBhbGwgY29sdW1ucyBjb250cm9sc1xyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEZvcm0oKTogTWdGb3JtQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ2hlY2tzIGlmIGFuIGludGVybmFsIEZpdCB0byBNREkgZm9ybSBuZWVkcyB0byBiZSBjcmVhdGVkIHRvIGhvbGQgdGhlIE1haW4gUHJvZ3JhbSBjb250cm9sc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPnJlZmVyZW5jZSB0byB0aGUgb3duZXJUYXNrIG9mIHRoaXMgZm9ybTwvcGFyYW0+XHJcbiAgZmlsbERhdGEodGFza1JlZjogR3VpVGFza0Jhc2UpOiB2b2lkIHtcclxuICAgIGxldCBwYXJzZXI6IFhtbFBhcnNlciA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuUGFyc2VyO1xyXG5cclxuICAgIGlmICh0aGlzLl90YXNrID09PSBudWxsICYmIHRhc2tSZWYgIT09IG51bGwpXHJcbiAgICAgIHRoaXMuX3Rhc2sgPSB0YXNrUmVmO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLmdldE5leHRUYWcoKSkpIHtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuQ3RybFRhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgY3RybDogTWdDb250cm9sQmFzZSA9IHRoaXMuQ3RybFRhYi5nZXRDdHJsKGkpO1xyXG4gICAgICAvLyBpbml0aWFsaXplcyB0aGUgc3ViZm9ybSBjb250cm9sc1xyXG4gICAgICBjdHJsLkluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBidWlsZCBsaXN0cyBvZiBsaW5rZWQgY29udHJvbHMgb24gdGhlaXIgcGFyZW50c1xyXG4gICAgdGhpcy5idWlsZExpbmtlZENvbnRyb2xzTGlzdHMoKTtcclxuXHJcbiAgICAvLyBidWlsZCBsaXN0IG9mIGNvbHVtbnMgYW5kIG5vbiBjb2x1bW5zXHJcbiAgICB0aGlzLmJ1aWxkVGFibGVDb2x1bW5zTGlzdCgpO1xyXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5fdGFzay5zZXRLZXlib2FyZE1hcHBpbmdTdGF0ZShDb25zdGFudHMuQUNUX1NUVF9UQkxfU0NSRUVOX01PREUsIHRoaXMuaXNTY3JlZW5Nb2RlKCkpO1xyXG4gICAgdGhpcy5fdGFzay5zZXRLZXlib2FyZE1hcHBpbmdTdGF0ZShDb25zdGFudHMuQUNUX1NUVF9UQkxfTEVGVF9UT19SSUdIVCwgIXRoaXMuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9IRUJSRVcpLkdldENvbXB1dGVkVmFsdWVCb29sZWFuKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIG9yZGVyIHRoZSBzcGxpdHRlciBjb250YWluZXIgY2hpbGRyZW4uIFRoZSBjaGlsZCB0aGF0IGlzIGRvY2tlZCB0byBmaWxsIGlzIGFkZGVkIGZpcnN0LCB0aGVuXHJcbiAgLy8vICAgdGhlIHNwbGl0dGVyIGNvbnRyb2wgYW5kIGZpbmFsbHkgdGhlIGNoaWxkIHRoYXQgaXMgZG9ja2VkIGVpdGhlciB0byB0aGUgdG9wIG9yIHRvIHRoZSBsZWZ0XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gZW5kIEluZGV4IG9mIHRoZTxmb3JtIC4uLj4gc3VidGFnPC9yZXR1cm5zPlxyXG4gIGZpbGxOYW1lKGZvcm1UYWc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5QYXJzZXI7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBwYXJzZXIuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG4gICAgICAvLyBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoZm9ybVRhZykgKyBmb3JtVGFnLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcblxyXG4gICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmc7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nO1xyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGkgPSBpICsgMikge1xyXG4gICAgICAgIGF0dHJpYnV0ZSA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpKTtcclxuICAgICAgICB2YWx1ZVN0ciA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpICsgMSk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX05BTUU6XHJcbiAgICAgICAgICAgIHRoaXMuTmFtZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cikudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKEV2ZW50cy5TaG91bGRMb2coTG9nZ2VyX0xvZ0xldmVscy5HdWkpKVxyXG4gICAgICAgICAgICAgIEV2ZW50cy5Xcml0ZUd1aVRvTG9nKE5TdHJpbmcuRm9ybWF0KCdQYXJzaW5nIGZvcm0gXCJ7MH1cIicsIHRoaXMuTmFtZSkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSVNfRlJBTUVTRVQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9JU19MSUdBTF9SQ19GT1JNOlxyXG4gICAgICAgICAgICB0aGlzLmlzTGVnYWxGb3JtID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUEJfSU1BR0VTX05VTUJFUjpcclxuICAgICAgICAgICAgdGhpcy5QQkltYWdlc051bWJlciA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfRk9STV9JU046XHJcbiAgICAgICAgICAgIHRoaXMuRm9ybUlzbiA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVVNFUlNUQVRFX0lEOlxyXG4gICAgICAgICAgICB0aGlzLl91c2VyU3RhdGVJZCA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cikudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdCgnVW5oYW5kbGVkIGF0dHJpYnV0ZSBcXCd7MH1cXCcuJywgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyAxKTsgLy8gdG8gZGVsZXRlIFwiPlwiIHRvb1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZygnaW4gRm9ybS5GaWxsTmFtZSgpIG91dCBvZiBib3VuZHMnKTtcclxuICB9XHJcblxyXG5cclxuICBhYnN0cmFjdCBidWlsZEZvcm1OYW1lKCk6IHN0cmluZztcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIHRydWUgZm9yIG1kaSBjaGlsZCBhbmQgZml0IHRvIG1kaVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwid2luZG93VHlwZVwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgY3JlYXRlRm9ybSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpbnB1dENvbnRyb2xzID0gdGhpcy5HZXRMaXN0T2ZJbnB1dENvbnRyb2xzKCk7XHJcbiAgICBsZXQgZm9ybU5hbWU6IHN0cmluZyA9IHRoaXMuYnVpbGRGb3JtTmFtZSgpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc1N1YkZvcm0oKSkge1xyXG4gICAgICAvL09ubHkgZm9yIG92ZXJsYXkgdHlwZSB1c2UgbmV3IG1ldGhvZFxyXG4gICAgICBpZiAodGhpcy5pc0RpYWxvZygpKVxyXG4gICAgICAgIGF3YWl0IENvbW1hbmRzLm9wZW5PdmVybGF5Rm9ybSh0aGlzLCBmb3JtTmFtZSwgJzAnLCB0aGlzLmdldFRhc2soKS5nZXRUYXNrVGFnKCksIGlucHV0Q29udHJvbHMsIHRoaXMuaXNEaWFsb2coKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBDb21tYW5kcy5hZGRPcGVuRm9ybSh0aGlzLCBmb3JtTmFtZSwgJzAnLCB0aGlzLmdldFRhc2soKS5nZXRUYXNrVGFnKCksIGlucHV0Q29udHJvbHMsIHRoaXMuaXNEaWFsb2coKSk7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZW5zdWJmb3JtKENvbW1hbmRUeXBlLkNSRUFURV9TVUJfRk9STSwgdGhpcy5nZXRTdWJGb3JtQ3RybCgpLCB0aGlzLmdldFRhc2soKS5nZXRUYXNrVGFnKCksICg8TWdDb250cm9sQmFzZT50aGlzLmdldFN1YkZvcm1DdHJsKCkpLmdldE5hbWUoKSxcclxuICAgICAgICBmb3JtTmFtZSwgaW5wdXRDb250cm9scywgdGhpcy5nZXRUYXNrKCkuUm91dGVyUGF0aCwgdGhpcy5nZXRUYXNrKCkuR2V0Um91dGVyUGFyYW1zKCksIHRoaXMuZ2V0VGFzaygpLkluRGVmYXVsdFJvdXRlck91dGxldCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVmYXVsdCBjcmVhdGUgb25lIHJvdyBpbiB0YWJsZSBjb250cm9sLiBET04nVCBzZXQgaXRlbXMgY291bnQgZHVyaW5nIGZvcm0gb3Blbi5cclxuICAgIC8vIGZpcnN0VGFibGVSZWZyZXNoKCkgd2lsbCBjcmVhdGUgdGhlIGFjdHVhbCByb3dzLCBhbmQgcmVmcmVzaCB0aGUgdGFibGUuXHJcbiAgICBpZiAodGhpcy5IYXNUYWJsZSgpKVxyXG4gICAgICB0aGlzLkluaXRUYWJsZUNvbnRyb2woKTtcclxuXHJcbiAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgYWRkIHRoZSBjYWxsIGpzIGNvbW1hbmQgYW5kIGdldCB0aGUgcmV0dXJuIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGFzeW5jIENhbGxKUyhtZXRob2ROYW1lOiBzdHJpbmcsIGFyZ3M6IEFycmF5PGFueT4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIENvbW1hbmRzLmFkZENhbGxKUyh0aGlzLCB0aGlzLlVuaXF1ZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIGZvcm0gaGFzIGF1dG9tYXRpYyB0YWJiaW5nIG9yZGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzQXV0b21hdGljVGFiYmluZ09yZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJCSU5HX09SREVSKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpID09PSBUYWJiaW5nT3JkZXJUeXBlLkF1dG9tYXRpY2FsbHk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJ1ZSBpZiB3ZSBjYW4gcmVmcmVzaCByZXBlYXRhYmxlIGNvbnRyb2xzXHJcbiAgLy8vICAgUUNSICM0MzQ2NDksIHdlIHByZXZlbnQgcGFpbnRpbmcgdGFibGUncyBjb250cm9sIHVudGlsbCBzaGVsbCBpcyBvcGVuZWQgYW5kIHdlIGtub3cgaG93IG1hbnkgcm93cyB0byBwYWludFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc1JlZnJlc2hSZXBlYXRhYmxlQWxsb3dlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLlJlZnJlc2hSZXBlYXRhYmxlQWxsb3dlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhlIGZvcm0gaXMgc2NyZWVuIG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzU2NyZWVuTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5pc0xpbmVNb2RlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBmb3JtIGlzIGxpbmUgbW9kZVxyXG4gIC8vLyAgIGlmIHdlIGhhdmUgYSB0cmVlIG9yIGEgdGFibGUgb24gdGhlIGZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzTGluZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNYWluQ29udHJvbCgpICE9PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRhc2sgaGFzIHRhYmxlIG9yIHRyZWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaGFzVGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVNZ0NvbnRyb2wgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgZm9ybSBzaG91bGQgYmUgb3BlbmVkIGFzIG1vZGFsIHdpbmRvd1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0RpYWxvZygpOiBib29sZWFuIHtcclxuICAgIGxldCBpc0RpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHdpbmRvd1R5cGU6IFdpbmRvd1R5cGUgPSB0aGlzLkNvbmNyZXRlV2luZG93VHlwZTtcclxuICAgIGlmICh3aW5kb3dUeXBlID09PSBXaW5kb3dUeXBlLk92ZXJsYXkpXHJcbiAgICAgIGlzRGlhbG9nID0gdHJ1ZTtcclxuICAgIGVsc2UgaWYgKE1nRm9ybUJhc2UuU2hvdWxkQmVoYXZlQXNNb2RhbCgpKVxyXG4gICAgICBpc0RpYWxvZyA9IHRydWU7XHJcbiAgICByZXR1cm4gaXNEaWFsb2c7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNob3VsZCB0aGlzIGZvcm0gYmVoYXZlIGFzIE1vZGFsIGFsdGhvdWdoIGl0cyBXaW5kb3dUeXBlICE9IE1vZGFsP1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbjwvcmV0dXJucz5cclxuICBpc1N1YkZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViRm9ybUN0cmwgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoaXMgZm9ybSBpcyBzdWJmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBIYXNUYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZU1nQ29udHJvbCAhPT0gbnVsbDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFRvcE1vc3RGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IHRvcE1vc3RGb3JtOiBNZ0Zvcm1CYXNlID0gdGhpcztcclxuXHJcbiAgICAvLyBUaGUgZm9ybSBvZiB0aGUgc3ViIGZvcm0gY29udHJvbFxyXG4gICAgd2hpbGUgKHRvcE1vc3RGb3JtLmlzU3ViRm9ybSgpICYmIHRvcE1vc3RGb3JtLlBhcmVudEZvcm0gIT09IG51bGwpXHJcbiAgICAgIHRvcE1vc3RGb3JtID0gdG9wTW9zdEZvcm0uUGFyZW50Rm9ybTtcclxuXHJcbiAgICByZXR1cm4gdG9wTW9zdEZvcm07XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgdG9wbW9zdCBmcmFtZSBmb3JtIGZvciBtZW51IHJlZnJlc2guXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRUb3BNb3N0RnJhbWVGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IHRvcE1vc3RGb3JtOiBNZ0Zvcm1CYXNlID0gdGhpcztcclxuXHJcbiAgICB3aGlsZSAodG9wTW9zdEZvcm0gIT09IG51bGwpXHJcbiAgICAgIHRvcE1vc3RGb3JtID0gKCh0b3BNb3N0Rm9ybS5QYXJlbnRGb3JtICE9PSBudWxsKSA/IHRvcE1vc3RGb3JtLlBhcmVudEZvcm0gOiBudWxsKTtcclxuXHJcbiAgICByZXR1cm4gdG9wTW9zdEZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSB0b3Btb3N0IG1nZm9ybSBvZiB0aGUgc3ViZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0U3ViRm9ybUN0cmwoKTogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViRm9ybUN0cmw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBvYmplY3QgdGhhdCBpcyB1c2VkIGZvciBmb3JtIG1hcHBpbmcgaW4gY29udHJvbCdzIG1hcFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybElkeFwiPnRoZSBpbmRleCBvZiB0aGUgcmVxdWVzdGVkIGNvbnRyb2w8L3BhcmFtPlxyXG4gIGdldEN0cmwoY3RybElkeDogbnVtYmVyKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5DdHJsVGFiLmdldEN0cmwoY3RybElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+UmV0dXJucyB0aGUgcmVxdWVzdGVkIGNvbnRyb2w8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBvciBudWxsIGlmIGRvZXMgbm90IGV4aXN0PC9yZXR1cm5zPlxyXG4gIEdldEN0cmwoY3RybE5hbWU6IHN0cmluZyk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3RybFRhYi5nZXRDdHJsKGN0cmxOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVmYXVsdFJvdXRlck91dGxldDogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcblxyXG4gIGdldCBEZWZhdWx0Um91dGVyT3V0bGV0KCk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgaWYgKHRoaXMuZGVmYXVsdFJvdXRlck91dGxldCA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFJvdXRlck91dGxldCA9IHRoaXMuQ3RybFRhYi5HZXRDb250cm9sKCh4OiBNZ0NvbnRyb2xCYXNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHguSXNEZWZhdWx0Um91dGVyT3V0bGV0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRSb3V0ZXJPdXRsZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJuIHRoZSBjb250cm9sIHdpdGggYSBnaXZlbiBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+dGhlIG9mIHRoZSByZXF1ZXN0ZWQgY29udHJvbDwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgR2V0Q2hvaWNlQ29udHJvbEl0ZW1MaXN0KG1nQ29udHJvbDogTWdDb250cm9sQmFzZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQobWdDb250cm9sLmlzQ2hvaWNlQ29udHJvbCgpKTtcclxuXHJcbiAgICBsZXQgaXRlbXM6IExpc3Q8c3RyaW5nPiA9IG5ldyBMaXN0KCk7XHJcbiAgICBsZXQgZmxkOiBHdWlGaWVsZEJhc2UgPSBtZ0NvbnRyb2wuZ2V0RmllbGQoKTtcclxuICAgIGxldCBzdG9yYWdlQXR0cmlidXRlOiBTdG9yYWdlQXR0cmlidXRlID0gZmxkLmdldENlbGxzVHlwZSgpO1xyXG5cclxuICAgIGlmIChzdG9yYWdlQXR0cmlidXRlICE9PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgJiYgc3RvcmFnZUF0dHJpYnV0ZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FKSB7XHJcbiAgICAgIGlmIChtZ0NvbnRyb2wuaXNSYWRpbygpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGZsZC5HZXRSYWRpb0N0cmxzKCkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCByYWRpb0NvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBmbGQuR2V0UmFkaW9DdHJscygpLmdldF9JdGVtKGkpO1xyXG4gICAgICAgICAgaXRlbXMuQWRkUmFuZ2UoYXdhaXQgcmFkaW9Db250cm9sLkdldEl0ZW1zUmFuZ2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGl0ZW1zLkFkZFJhbmdlKGF3YWl0IG1nQ29udHJvbC5HZXRJdGVtc1JhbmdlKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBNZ0Zvcm1CYXNlLkNvbnZlcnRBcnJheUxpc3RUb1N0cmluZyhpdGVtcywgc3RvcmFnZUF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTlN0cmluZy5FbXB0eTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IHRoZSBpdGVtcyBsaXN0IG9mIGNob2ljZSBjb250cm9scy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1nQ29udHJvbFwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgR2V0Q2hvaWNlQ29udHJvbERpc3BsYXlMaXN0KG1nQ29udHJvbDogTWdDb250cm9sQmFzZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQobWdDb250cm9sLmlzQ2hvaWNlQ29udHJvbCgpKTtcclxuXHJcbiAgICBsZXQgaXRlbXM6IExpc3Q8c3RyaW5nPiA9IG5ldyBMaXN0KCk7XHJcbiAgICBsZXQgZmxkOiBHdWlGaWVsZEJhc2UgPSBtZ0NvbnRyb2wuZ2V0RmllbGQoKTtcclxuICAgIGxldCBzdG9yYWdlQXR0cmlidXRlOiBTdG9yYWdlQXR0cmlidXRlID0gZmxkLmdldENlbGxzVHlwZSgpO1xyXG5cclxuICAgIGlmIChzdG9yYWdlQXR0cmlidXRlICE9PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUgJiYgc3RvcmFnZUF0dHJpYnV0ZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FKSB7XHJcbiAgICAgIGlmIChtZ0NvbnRyb2wuaXNSYWRpbygpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGZsZC5HZXRSYWRpb0N0cmxzKCkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCByYWRpb0NvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBmbGQuR2V0UmFkaW9DdHJscygpLmdldF9JdGVtKGkpO1xyXG4gICAgICAgICAgaXRlbXMuQWRkUmFuZ2UoYXdhaXQgcmFkaW9Db250cm9sLkdldERpc3BsYXlSYW5nZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbXMuQWRkUmFuZ2UoYXdhaXQgbWdDb250cm9sLkdldERpc3BsYXlSYW5nZSgpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gTWdGb3JtQmFzZS5Db252ZXJ0QXJyYXlMaXN0VG9TdHJpbmcoaXRlbXMsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTlN0cmluZy5FbXB0eTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgdGhlIGNvbW1hIGNvbmNhdGVuYXRlZCBzdHJpbmcgZnJvbSBhcnJheSBsaXN0LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXRlbXNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzSXRlbU51bVR5cGVcIj48L3BhcmFtPlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldENvbnRyb2xDb2x1bW4oY3RybDogTWdDb250cm9sQmFzZSk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgbGV0IGNvbHVtbjogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcblxyXG4gICAgaWYgKChjdHJsLklzUmVwZWF0YWJsZSB8fCBjdHJsLklzVGFibGVIZWFkZXJDaGlsZCkgJiYgdGhpcy5fdGFibGVDb2x1bW5zICE9PSBudWxsKVxyXG4gICAgICBjb2x1bW4gPSB0aGlzLl90YWJsZUNvbHVtbnMuZ2V0X0l0ZW0oY3RybC5nZXRMYXllcigpIC0gMSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGNvbnRhaW5lciBjb250cm9sPC9yZXR1cm5zPlxyXG4gIGdldENvbnRhaW5lckN0cmwoKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyQ3RybDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gY29udHJvbCdzIGNvbHVtblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDb2x1bW5Db250cm9scygpOiBMaXN0PE1nQ29udHJvbEJhc2U+IHtcclxuICAgIGxldCBjb2x1bW5Db250cm9sc0xpc3Q6IExpc3Q8TWdDb250cm9sQmFzZT4gPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLkN0cmxUYWIgIT09IG51bGwpIHtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuQ3RybFRhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5DdHJsVGFiLmdldEN0cmwoaSk7XHJcbiAgICAgICAgaWYgKGN0cmwuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ09MVU1OKSB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uQ29udHJvbHNMaXN0ID09PSBudWxsKVxyXG4gICAgICAgICAgICBjb2x1bW5Db250cm9sc0xpc3QgPSBuZXcgTGlzdDxNZ0NvbnRyb2xCYXNlPigpO1xyXG4gICAgICAgICAgY29sdW1uQ29udHJvbHNMaXN0LnB1c2goY3RybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sdW1uQ29udHJvbHNMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRUYXNrKCk6IEd1aVRhc2tCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl90YXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgY29udmVydHMgZnJvbSBkb3VibGUgcGl4ZWxzIHRvIHVvbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicGl4VmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc1hheGlzXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRUYWJsZUN0cmwoKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVNZ0NvbnRyb2w7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWZ0ZXIgb3BlbiB0aGUgZm9ybSBuZWVkIHRvIG1vdmUgaXQgYWNjb3JkaW5nIHRvIHRoZSBzdGFydHVwIHBvc2l0aW9uIHByb3BlcnR5IG9uIHRoZSBmb3JtXHJcbiAgLy8vICAgUFJPUF9UWVBFX1NUQVJUVVBfUE9TSVRJT05cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRNYWluQ29udHJvbCgpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZU1nQ29udHJvbDtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBvciBudWxsIGlmIGRvZXMgbm90IGV4aXN0PC9yZXR1cm5zPlxyXG4gIGdldEN0cmxCeU5hbWUoY3RybE5hbWU6IHN0cmluZywgY3RybFR5cGU6IE1nQ29udHJvbFR5cGUpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLkN0cmxUYWIuZ2V0Q3RybEJ5TmFtZShjdHJsTmFtZSwgY3RybFR5cGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gUG9pbnQgLGNlbnRlciB0byB0aGUgZ2l2aW5nIHJlbGF0aXZlUmVjdFxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPjwvcGFyYW0+XHJcbiAgY2hlY2tBbmRDcmVhdGVSb3coaWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90YWJsZU1nQ29udHJvbCAhPT0gbnVsbCAmJiAhdGhpcy5pc1Jvd0NyZWF0ZWQoaWR4KSlcclxuICAgICAgdGhpcy5jcmVhdGVSb3coaWR4KTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpZHhcIj48L3BhcmFtPlxyXG4gIElzVmFsaWRSb3coaWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWxpZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLl90YWJsZU1nQ29udHJvbCAhPT0gbnVsbCAmJiBpZHggPj0gMCAmJiBpZHggPCB0aGlzLlJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIGxldCByb3c6IFJvdyA9IHRoaXMuUm93cy5nZXRfSXRlbShpZHgpO1xyXG4gICAgICB2YWxpZFJvdyA9IChyb3cgIT09IG51bGwgJiYgcm93LlZhbGlkYXRlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRSb3c7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRhYmxlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRyZWUgb3IgdGFibGUgY29udHJvbCBvZiB0aGUgZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgcmVmcmVzaFByb3BzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2ZpcnN0UmVmcmVzaE9mUHJvcHMpIHtcclxuICAgICAgdGhpcy5nZXRQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RJVExFX0JBUik7XHJcblxyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5fcHJvcFRhYi5SZWZyZXNoRGlzcGxheShmYWxzZSwgZmFsc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLl9maXJzdFJlZnJlc2hPZlByb3BzKVxyXG4gICAgICB0aGlzLl9maXJzdFJlZnJlc2hPZlByb3BzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJuIHRoZSBjb250cm9sICh3aGljaCBpcyBub3QgdGhlIGZyYW1lIGZvcm0pIHdpdGggYSBnaXZlbiBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+dGhlIG9mIHRoZSByZXF1ZXN0ZWQgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFR5cGVcIj48L3BhcmFtPlxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlcGVhdGFibGVPbmx5XCI+c2hvdWxkIGJlIHRydWUgaW4gb3JkZXIgdG8gcmVmcmVzaCBvbmx5IHRoZSBjb250cm9scyB0aGF0IGJlbG9uZyB0byBhIHRhYmxlPC9wYXJhbT5cclxuICBhc3luYyByZWZyZXNoQ29udHJvbHMocmVwZWF0YWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlO1xyXG4gICAgLy8gcmVjb3JkIGRvZXMgbm90IGV4aXN0XHJcbiAgICBpZiAodGhpcy5EaXNwbGF5TGluZSA9PT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICAvLyByZWZyZXNoIHRoZSB0YWJsZSBmaXJzdFxyXG4gICAgaWYgKHRoaXMuX3RhYmxlTWdDb250cm9sICE9PSBudWxsICYmICFyZXBlYXRhYmxlT25seSlcclxuICAgICAgYXdhaXQgdGhpcy5fdGFibGVNZ0NvbnRyb2wuUmVmcmVzaERpc3BsYXkoKTtcclxuXHJcbiAgICAvLyByZWZyZXNoIGFsbCBDT0xVTU5TIChyZWZyZXNoIGZvciBlYWNoIGNvbnRyb2wgYmFzZSBvbiB0aGUgcmVmcmVzaCBvZiB0aGUgY29sdW1uIChlLmc6Y29sdW1uIHdpZHRoKVxyXG4gICAgLy8gc28gd2UgbXVzdCByZWZyZXNoIHRoZSBjb2x1bW4gZmlyc3RcclxuICAgIGlmICh0aGlzLl90YWJsZUNvbHVtbnMgIT09IG51bGwgJiYgIXJlcGVhdGFibGVPbmx5KSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YWJsZUNvbHVtbnMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgbWdDb250cm9sQmFzZTogTWdDb250cm9sQmFzZSA9IHRoaXMuX3RhYmxlQ29sdW1ucy5nZXRfSXRlbShpKTtcclxuICAgICAgICBhd2FpdCBtZ0NvbnRyb2xCYXNlLlJlZnJlc2hEaXNwbGF5KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoZWNrQW5kQ3JlYXRlUm93KHRoaXMuRGlzcGxheUxpbmUpO1xyXG5cclxuICAgIC8vIFFDUiAjNzA5NTYzIE11c3QgcmVmcmVzaCBmcmFtZXNldCdzIHN1YmZyb21zIGJlZm9yZSB3ZSByZWZyZXNoIGZyYW1lc2V0IGl0c2VsZi5cclxuICAgIC8vIER1cmluZyByZWZyZXNoIG9mIHRoZSBmcmFtZXNldCBuZXN0ZWQgc3ViZm9ybXMgd2l0aCBSZWZyZXNoV2hlbkhpZGRlbiBtaWdodCBiZSBicm91Z2h0IHRvIHNlcnZlclxyXG4gICAgLy8gYnV0IHRoZWlyIHN1YmZvcm0ncyBjb250cm9scyBoYXZlIG5vdCBiZWVuIHNldCB3aXRoIGNvcnJlY3QgYm91bmRzLiBUaGlzIGNhdXNlcyBpbGxlZ2FsIHBsYWNlbWVudFxyXG4gICAgLy8gYW5kIGluY29ycmVjdCBmaW5hbCBsb2NhdGlvbiBvZiBjb250cm9scyBvbiBuZXN0ZWQgc3ViZm9ybXNcclxuICAgIGxldCB0YWJBbmRHcm91cENvbnRyb2xzOiBTdGFjazxNZ0NvbnRyb2xCYXNlPiA9IG5ldyBTdGFjazxNZ0NvbnRyb2xCYXNlPigpO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgY3RybCA9IHRoaXMuQ3RybFRhYi5nZXRDdHJsKGkpO1xyXG4gICAgICBpZiAoKGN0cmwuaXNUYWJDb250cm9sKCkgfHwgY3RybC5pc0dyb3VwKCkpICYmICFyZXBlYXRhYmxlT25seSkge1xyXG4gICAgICAgIHRhYkFuZEdyb3VwQ29udHJvbHMucHVzaChjdHJsKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjdHJsLlR5cGUgIT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFICYmIGN0cmwuVHlwZSAhPT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ09MVU1OKSB7XHJcbiAgICAgICAgaWYgKGN0cmwuSXNSZXBlYXRhYmxlIHx8ICFyZXBlYXRhYmxlT25seSlcclxuICAgICAgICAgIGF3YWl0IGN0cmwuUmVmcmVzaERpc3BsYXkoKTtcclxuICAgICAgfSBlbHNlIGlmIChjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFICYmIHJlcGVhdGFibGVPbmx5KVxyXG4gICAgICAgIGF3YWl0IGN0cmwuUmVmcmVzaERpc3BsYXkocmVwZWF0YWJsZU9ubHkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+PC9wYXJhbT5cclxuICBtYXJrUm93Tk9UQ3JlYXRlZChpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgQ29tbWFuZHMuYWRkV2l0aE51bWJlcihDb21tYW5kVHlwZS5VTkRPX0NSRUFURV9UQUJMRV9ST1csIHRoaXMuX3RhYmxlTWdDb250cm9sLCBpZHgpO1xyXG5cclxuICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLlJvd3MubGVuZ3RoKVxyXG4gICAgICB0aGlzLlJvd3Muc2V0X0l0ZW0oaWR4LCBuZXcgUm93KGZhbHNlLCBmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHJvd1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIFNlbGVjdFJvdygpOiB2b2lkIHtcclxuICAgIHRoaXMuU2VsZWN0Um93QnlJZHgodGhpcy5EaXNwbGF5TGluZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHB1YmxpYylcclxuICAvLy8gY2hlY2sgaWYgc3BlY2lmaWVkIHJvdyBpcyB2YWxpZCByb3cgaW4gcGFnZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZWZyZXNoIHRoZSBjb250cm9scyBvZiB0aGUgY3VycmVudCByb3dcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHJldHVybnM+IGludCBpcyB0aGUgdGFibGUgc2l6ZTwvcmV0dXJucz5cclxuICBnZXRSb3dzSW5QYWdlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm93c0luUGFnZTtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gaW50IGlzIHRoZSB0YWJsZSBzaXplPC9yZXR1cm5zPlxyXG4gIGdldE1heFJvd3NJblBhZ2luYXRlZFRhYmxlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4Um93c0luUGFnaW5hdGVkVGFibGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIFJvdyBpcyBjcmVhdGVkIG9uIEdVSSBsZXZlbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj48L3BhcmFtPlxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNpemVcIj50aGUgdGFibGUgc2l6ZTwvcGFyYW0+XHJcbiAgc2V0Um93c0luUGFnZShzaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jvd3NJblBhZ2UgPSBzaXplO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIG1hcmtzIHRoaXMgcm93IGFzIG5vdCBjcmVhdGVkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRDb2x1bW5zQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGxldCBjb2x1bW5zQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuQ3RybFRhYiAhPT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5DdHJsVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSB0aGlzLkN0cmxUYWIuZ2V0Q3RybChpKTtcclxuICAgICAgICBpZiAoY29udHJvbC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT0xVTU4pXHJcbiAgICAgICAgICBjb2x1bW5zQ291bnQgPSBjb2x1bW5zQ291bnQgKyAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnNDb3VudDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGluUmVmcmVzaERpc3BsYXkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5SZWZyZXNoRGlzcDtcclxuICB9XHJcblxyXG4gIHNldFRpdGxlKG5ld1RpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIENvbW1hbmRzLnNldFRpdGxlKHRoaXMsIG5ld1RpdGxlKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIFwiaW4gcmVmcmVzaCBkaXNwbGF5XCIgZmxhZ1xyXG5cclxuICBnZXRDb250cm9sSWR4KGN0cmw6IE1nQ29udHJvbEJhc2UpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3RybFRhYi5nZXRDb250cm9sSWR4KGN0cmwsIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFeGVjdXRlIHRoZSBsYXlvdXQgYW5kIGFsbCBpdHMgY2hpbGRyZW5cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRUb3BJbmRleEZyb21HVUkoKTogbnVtYmVyIHtcclxuICAgIGxldCB0b3BEaXNwbGF5TGluZTogbnVtYmVyID0gMDtcclxuICAgIGlmICh0aGlzLmhhc1RhYmxlKCkpXHJcbiAgICAgIHRvcERpc3BsYXlMaW5lID0gQ29tbWFuZHMuZ2V0VG9wSW5kZXgodGhpcy5nZXRNYWluQ29udHJvbCgpKTtcclxuICAgIHJldHVybiB0b3BEaXNwbGF5TGluZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiB0aGlzIGdyb3VwIGlzIHRoZSBsYXN0IGdyb3VwIGluIHRoZSB0b29sYmFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdyb3VwTnVtYmVyXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiB0YWJsZSBpdGVtcyBjb3VudDwvcmV0dXJucz5cclxuICBnZXRUYWJsZUl0ZW1zQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZUl0ZW1zQ291bnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRhYmxlIGNvbnRyb2wgaXMgYWx3YXlzIGZpcnN0IG9uIHRoZSBmb3JtXHJcbiAgLy8vIFdoZW4gdGFibGUgaXMgYSBjaGlsZCBvZiB0YWIsIGl0IGlzIGNyZWF0ZWQgYmVmb3JlIHRhYidzIGxheWVycyhUYWJQYWdlcykgYXJlIGNyZWF0ZWQuXHJcbiAgLy8vIENvbXB1dGluZyBUYWIncyBjaGlsZHJlbiBjb29yZGluYXRlcyBkZXBlbmRzIG9uIHRoZSBUYWJQYWdlcyBiZWluZyBjcmVhdGVkXHJcbiAgLy8vIFNvLCB3ZSBtdXN0IGZpeCB0YWJsZSdzIGxvY2F0aW9uIGFmdGVyIFRhYiBpcyBjcmVhdGVkXHJcbiAgLy8vIFFDUiAjMjg5OTY2XHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVtb3ZlUmVmc1RvQ3RybHMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5DdHJsVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRoaXMuQ3RybFRhYi5nZXRDdHJsKGkpLnJlbW92ZVJlZkZyb21GaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB0aGlzIGZvcm0gbWF5IGhhdmUgQWN0aXZlUm93SGlnaHRsaWdodFN0YXRlXHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYnVpbGRUYWJsZUNoaWxkcmVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlQ2hpbGRyZW4gPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fdGFibGVDaGlsZHJlbiA9IG5ldyBMaXN0PE1nQ29udHJvbEJhc2U+KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5DdHJsVGFiICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IG1pblRhYk9yZGVyOiBudW1iZXIgPSAyMTQ3NDgzNjQ3O1xyXG4gICAgICAgIGxldCBhdXRvbWF0aWNUYWJiaW5nT3JkZXI6IGJvb2xlYW4gPSB0aGlzLmlzQXV0b21hdGljVGFiYmluZ09yZGVyKCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5DdHJsVGFiLmdldEN0cmwoaSk7XHJcblxyXG4gICAgICAgICAgaWYgKGN0cmwuSXNSZXBlYXRhYmxlIHx8IGN0cmwuSXNUYWJsZUhlYWRlckNoaWxkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2hpbGRyZW4ucHVzaChjdHJsKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhdXRvbWF0aWNUYWJiaW5nT3JkZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgcHJvcDogUHJvcGVydHkgPSBjdHJsLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCX09SREVSKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHByb3AgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZUludDogbnVtYmVyID0gcHJvcC5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlSW50IDwgbWluVGFiT3JkZXIpXHJcbiAgICAgICAgICAgICAgICAgIG1pblRhYk9yZGVyID0gdmFsdWVJbnQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWluVGFiT3JkZXIgIT09IEludDMyLk1heFZhbHVlICYmIGF1dG9tYXRpY1RhYmJpbmdPcmRlcikge1xyXG4gICAgICAgICAgdGhpcy5fZmlyc3RUYWJsZVRhYk9yZGVyID0gbWluVGFiT3JkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBwcmV2IGdyb3VwIGluZGV4IGlmIGV4aXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN1cnJHcm91cFwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFibGVDdHJsXCI+dGhlIHRhYmxlQ3RybCB0byBzZXQ8L3BhcmFtPlxyXG4gIHNldFRhYmxlQ3RybCh0YWJsZUN0cmw6IE1nQ29udHJvbEJhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RhYmxlTWdDb250cm9sID0gdGFibGVDdHJsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj48L3BhcmFtPlxyXG5cclxuICBnZXRDdHJsQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRDb250cm9sc0NvdW50RXhjbHVkaW5nU3RhdHVzQmFyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5DdHJsVGFiLmdldFNpemUoKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHJlZnJlc2hQcm9wc09uRXhwcmVzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gKHRoaXMuX3Byb3BUYWIgPT0gbnVsbCA/IDAgOiB0aGlzLl9wcm9wVGFiLmdldFNpemUoKSk7XHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHk7XHJcbiAgICBsZXQgcmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemUgJiYgIXJlZnJlc2g7IGkrKykge1xyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wKGkpO1xyXG4gICAgICBpZiAocHJvcC5pc0V4cHJlc3Npb24oKSkge1xyXG4gICAgICAgIHJlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFByb3BzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0VGFiQ29udHJvbChjdHJsOiBNZ0NvbnRyb2xCYXNlKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICBsZXQgb2JqOiBPYmplY3Q7XHJcbiAgICBsZXQgcmVzdWx0OiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgICBvYmogPSBjdHJsO1xyXG4gICAgd2hpbGUgKG9iaiBpbnN0YW5jZW9mIE1nQ29udHJvbEJhc2UpIHtcclxuICAgICAgbGV0IGN1cnJDdHJsID0gPE1nQ29udHJvbEJhc2U+b2JqO1xyXG4gICAgICBpZiAoY3VyckN0cmwuaXNUYWJDb250cm9sKCkpIHtcclxuICAgICAgICByZXN1bHQgPSBjdXJyQ3RybDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBvYmogPSBjdXJyQ3RybC5nZXRQYXJlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBjdHJsIGlzIG5vdCB0YWIgYW5kIG5vdCB0YWIncyBjaGlsZCAtIGZpbmQgZmlyc3QgdGFiIGluIHRoZSBmb3JtXHJcbiAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuQ3RybFRhYi5nZXRTaXplKCk7IGkrKykge1xyXG4gICAgICAgIG9iaiA9IHRoaXMuQ3RybFRhYi5nZXRDdHJsKGkpO1xyXG4gICAgICAgIGlmICgoPE1nQ29udHJvbEJhc2U+b2JqKS5pc1RhYkNvbnRyb2woKSkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gPE1nQ29udHJvbEJhc2U+b2JqO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1vdmUgcmVmZXJlbmNlcyB0byB0aGUgY29udHJvbHMgb2YgdGhpcyBmb3JtXHJcblxyXG4gIElzSW5wdXRUeXBlKGN0cmw6IE1nQ29udHJvbEJhc2UpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoY3RybC5UeXBlKSB7XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ0hFQ0tCT1g6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT01CTzpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9MSVNUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgbGlzdCBvZiB0YWJsZSBjaGlsZHJlblxyXG5cclxuICBwdWJsaWMgR2V0TGlzdE9mSW5wdXRDb250cm9scygpOiBhbnkge1xyXG4gICAgbGV0IGZpbHRlcnRlckxpc3QgPSB0aGlzLkN0cmxUYWIuZmlsdGVyKCgoYykgPT4gdGhpcy5Jc0lucHV0VHlwZShjKSkpO1xyXG4gICAgbGV0IG5hbWVzID0gZmlsdGVydGVyTGlzdC5yZWR1Y2UoKHByZSwgY3RybCkgPT4ge1xyXG4gICAgICBwcmVbY3RybC5VbmlxdWVOYW1lXSA9IGN0cmwuSXNSZXBlYXRhYmxlID8gJzEnIDogJzAnO1xyXG4gICAgICByZXR1cm4gcHJlO1xyXG4gICAgfSwge30pO1xyXG4gICAgcmV0dXJuIG5hbWVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYWJzdHJhY3QgQ29uc3RydWN0TWdDb250cm9sKCk6IE1nQ29udHJvbEJhc2U7XHJcblxyXG4gIC8vIGdldEd1aVRhYmxlQ2hpbGRyZW4oKTogTGlzdDxHdWlNZ0NvbnRyb2w+IHtcclxuICAvLyAgIGxldCBmbGFnOiBib29sZWFuID0gdGhpcy5fZ3VpVGFibGVDaGlsZHJlbiA9PT0gbnVsbDtcclxuICAvLyAgIGlmIChmbGFnKSB7XHJcbiAgLy8gICAgIHRoaXMuX2d1aVRhYmxlQ2hpbGRyZW4gPSBuZXcgTGlzdDxHdWlNZ0NvbnRyb2w+KCk7XHJcbiAgLy8gICAgIGxldCB0YWJsZUNoaWxkcmVuOiBMaXN0PE1nQ29udHJvbEJhc2U+ID0gdGhpcy5UYWJsZUNoaWxkcmVuO1xyXG4gIC8vICAgICBsZXQgZW51bWVyYXRvcjogTGlzdF9FbnVtZXJhdG9yPE1nQ29udHJvbEJhc2U+ID0gdGFibGVDaGlsZHJlbi5HZXRFbnVtZXJhdG9yKCk7XHJcbiAgLy8gICAgIHRyeSB7XHJcbiAgLy8gICAgICAgd2hpbGUgKGVudW1lcmF0b3IuTW92ZU5leHQoKSkge1xyXG4gIC8vICAgICAgICAgbGV0IGN1cnJlbnQ6IE1nQ29udHJvbEJhc2UgPSBlbnVtZXJhdG9yLkN1cnJlbnQ7XHJcbiAgLy8gICAgICAgICB0aGlzLl9ndWlUYWJsZUNoaWxkcmVuLkFkZChjdXJyZW50KTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZmluYWxseSB7XHJcbiAgLy8gICAgICAgKDxJRGlzcG9zYWJsZT5lbnVtZXJhdG9yKS5EaXNwb3NlKCk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiB0aGlzLl9ndWlUYWJsZUNoaWxkcmVuO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldHMgdGhlIHRhYmxlIGNvbnRyb2wgcmVsYXRlZCB0byB0aGlzIGZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJlZnJlc2ggZm9ybSBkaXNwbGF5IGlmIGl0IGhhcyBhIHByb3BlcnR5IHdoaWNoIGlzIGFuIGV4cHJlc3Npb25cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBmaXJzdFRhYmxlUmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90YWJsZU1nQ29udHJvbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9yb3dzSW5QYWdlID0gQ29tbWFuZHMuZ2V0Um93c0luUGFnZSh0aGlzLl90YWJsZU1nQ29udHJvbCk7XHJcbiAgICAgIHRoaXMuUmVmcmVzaFJlcGVhdGFibGVBbGxvd2VkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB1cGRhdGUgdGFibGUgaXRlbSdzIGNvdW50IGFjY29yZGluZyB0byBwYXJhbWV0ZXIgc2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkdnNpemVcIj5uZXcgZHZzaXplPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhYmxlSXRlbXNDb3VudFwiPm5ldyB0YWJsZUl0ZW1zQ291bnQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVtb3ZlQWxsXCI+cmVtb3ZlIGFsbCBlbGVtZW50cyBmb3JtIHRoZSB0YWJsZSBpbmNsdWRpbmcgZmlyc3QgYW5kIGxhc3QgZHVtbXkgZWxlbWVudHM8L3BhcmFtPlxyXG4gIFNldFRhYmxlSXRlbXNDb3VudChkdnNpemU6IG51bWJlciwgcmVtb3ZlQWxsOiBib29sZWFuKTogdm9pZFxyXG4gIFNldFRhYmxlSXRlbXNDb3VudChkdnNpemU6IG51bWJlciwgdGFibGVJdGVtc0NvdW50OiBudW1iZXIsIHJlbW92ZUFsbDogYm9vbGVhbik6IHZvaWQ7XHJcbiAgU2V0VGFibGVJdGVtc0NvdW50KGR2c2l6ZTogbnVtYmVyLCB0YWJsZUl0ZW1zQ291bnRPclJlbW92ZUFsbDogYW55LCByZW1vdmVBbGw/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgaWYgKHR5cGVvZiB0YWJsZUl0ZW1zQ291bnRPclJlbW92ZUFsbCA9PSAnYm9vbGVhbicpe1xyXG4gICAgICB0aGlzLlNldFRhYmxlSXRlbXNDb3VudF8wKGR2c2l6ZSwgdGFibGVJdGVtc0NvdW50T3JSZW1vdmVBbGwpO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgIHRoaXMuU2V0VGFibGVJdGVtc0NvdW50XzEoZHZzaXplLCB0YWJsZUl0ZW1zQ291bnRPclJlbW92ZUFsbCwgcmVtb3ZlQWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgU2V0VGFibGVJdGVtc0NvdW50XzAoZHZzaXplOiBudW1iZXIsIHJlbW92ZUFsbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5TZXRUYWJsZUl0ZW1zQ291bnRfMShkdnNpemUsIGR2c2l6ZSwgcmVtb3ZlQWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgU2V0VGFibGVJdGVtc0NvdW50XzEoZHZzaXplOiBudW1iZXIsIHRhYmxlSXRlbXNDb3VudDogbnVtYmVyLCByZW1vdmVBbGw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuSW5pdFRhYmxlQ29udHJvbChkdnNpemUsIHRhYmxlSXRlbXNDb3VudCwgcmVtb3ZlQWxsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdHMgdGhlIHRhYmxlIGNvbnRyb2xcclxuICAvLy8gdXBkYXRlIHRhYmxlIGl0ZW0ncyBjb3VudCBhY2NvcmRpbmcgdG8gcGFyYW1ldGVyIGR2c2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSW5pdFRhYmxlQ29udHJvbCgpOiB2b2lkO1xyXG4gIEluaXRUYWJsZUNvbnRyb2woZHZTaXplOiBudW1iZXIsIHRhYmxlSXRlbXNDb3VudDogbnVtYmVyLCByZW1vdmVBbGw6IGJvb2xlYW4pOiB2b2lkO1xyXG4gIEluaXRUYWJsZUNvbnRyb2woZHZTaXplPzogbnVtYmVyLCB0YWJsZUl0ZW1zQ291bnQ/OiBudW1iZXIsIHJlbW92ZUFsbD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuSW5pdFRhYmxlQ29udHJvbF8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuSW5pdFRhYmxlQ29udHJvbF8xKGR2U2l6ZSwgdGFibGVJdGVtc0NvdW50KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gdXBkYXRlIGFycmF5cyBvZiB0YWJsZSBjaGlsZHJlbiBjb250cm9sc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2l6ZVwiPjwvcGFyYW0+XHJcbiAgVXBkYXRlVGFibGVDaGlsZHJlbkFycmF5c1NpemUoc2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgY2hpbGRyZW46IExpc3Q8TWdDb250cm9sQmFzZT4gPSB0aGlzLlRhYmxlQ2hpbGRyZW47XHJcbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY29udHJvbDogTWdDb250cm9sQmFzZSA9IGNoaWxkcmVuLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIGNvbnRyb2wudXBkYXRlQXJyYXlzKHNpemUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fdGFibGVNZ0NvbnRyb2wgIT0gbnVsbClcclxuICAgICAgdGhpcy5fdGFibGVNZ0NvbnRyb2wudXBkYXRlQXJyYXlzKHNpemUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbmQgdGFiIGNvbnRyb2wgZm9yIHBlcmZvcm1pbmcgQ1RSTCtUQUIgJiYgQ1RSTCtTSElGVCtUQUIgYWN0aW9uc1xyXG4gIC8vLyAgIHRoZSBjb2RlIG9yaWdpbmFsIGlzIGluIFJUOjpza2lwX3RvX3RhYl9jb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5jdXJyZW50IGNvbnRyb2w8L3BhcmFtPlxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICd7R3VpTWdGb3JtJyArICc6IElkPScgKyB0aGlzLl91c2VyU3RhdGVJZCArICd9JztcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgSW5jbHVkZUNvbnRyb2xJblRhYmJpbmdPcmRlcihjb250cm9sOiBNZ0NvbnRyb2xCYXNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWNvbnRyb2wuUHJvcGVydHlFeGlzdHMoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCX09SREVSKSlcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICBHZXRIYXNoQ29kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLkZvcm1Jc247XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByb3RlY3RlZCBpbml0SW5uZXJPYmplY3RzKGZvdW5kVGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG5cclxuICAgIGxldCBwYXJzZXI6IFhtbFBhcnNlciA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuUGFyc2VyO1xyXG4gICAgaWYgKE1nRm9ybUJhc2UuSXNGb3JtVGFnKGZvdW5kVGFnTmFtZSkpXHJcbiAgICAgIHRoaXMuZmlsbE5hbWUoZm91bmRUYWdOYW1lKTtcclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19QUk9QKVxyXG4gICAgICB0aGlzLl9wcm9wVGFiLmZpbGxEYXRhKHRoaXMsICdGJywgcGFyc2VyKTtcclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19DT05UUk9MKSB7XHJcbiAgICAgIHRoaXMuQ3RybFRhYi5maWxsRGF0YSh0aGlzLCBwYXJzZXIpO1xyXG4gICAgICAvL3RoaXMuaW5pdENvbnRleHRQcm9wRm9yQ29udHJvbHMoKTtcclxuICAgICAgaWYgKCF0aGlzLkhhc1RhYmxlKCkpXHJcbiAgICAgICAgdGhpcy5SZWZyZXNoUmVwZWF0YWJsZUFsbG93ZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChNZ0Zvcm1CYXNlLklzRW5kRm9ybVRhZyhmb3VuZFRhZ05hbWUpKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY29uc3RydWN0cyBhbiBvYmplY3Qgb2YgTWdDb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0eXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJlbnRDb250cm9sXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNSb3dDcmVhdGVkKGlkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5Sb3dzLmxlbmd0aCA8PSBpZHggfHwgaWR4IDwgMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJvdzogUm93ID0gdGhpcy5Sb3dzLmdldF9JdGVtKGlkeCk7XHJcbiAgICBpZiAocm93ID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHJvdy5DcmVhdGVkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBidWlsZExpbmtlZENvbnRyb2xzTGlzdHMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5DdHJsVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5DdHJsVGFiLmdldEN0cmwoaSk7XHJcbiAgICAgIGxldCBsaW5rZWRQYXJlbnQ6IE1nQ29udHJvbEJhc2UgPSA8TWdDb250cm9sQmFzZT5jdHJsLmdldExpbmtlZFBhcmVudChmYWxzZSk7XHJcbiAgICAgIGlmIChsaW5rZWRQYXJlbnQgIT09IG51bGwpXHJcbiAgICAgICAgbGlua2VkUGFyZW50LmxpbmtDdHJsKGN0cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBsaXN0IG9mIGFsbCBjb2x1bW5zIGNvbnRyb2xzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGJ1aWxkVGFibGVDb2x1bW5zTGlzdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90YWJsZU1nQ29udHJvbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl90YWJsZUNvbHVtbnMgPSBuZXcgTGlzdDxNZ0NvbnRyb2xCYXNlPigpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5DdHJsVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSB0aGlzLkN0cmxUYWIuZ2V0Q3RybChpKTtcclxuICAgICAgICBpZiAoY29udHJvbC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT0xVTU4pXHJcbiAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtbnMucHVzaChjb250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gdXBkYXRlIGFycmF5cyBvZiB0YWJsZSBjaGlsZHJlbiBjb250cm9sc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGNyZWF0ZVJvdyhpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgQ29tbWFuZHMuYWRkV2l0aE51bWJlcihDb21tYW5kVHlwZS5DUkVBVEVfVEFCTEVfUk9XLCB0aGlzLl90YWJsZU1nQ29udHJvbCwgaWR4KTtcclxuXHJcbiAgICBpZiAodGhpcy5Sb3dzLmxlbmd0aCA8PSBpZHgpXHJcbiAgICAgIHRoaXMuUm93cy5TZXRTaXplKGlkeCArIDEpO1xyXG5cclxuICAgIHRoaXMuUm93cy5zZXRfSXRlbShpZHgsIG5ldyBSb3codHJ1ZSwgdHJ1ZSkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gTWFyayBhIHJvdyBhcyBzZWxlY3RlZCByb3dcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicm93SWR4XCI+cm93IHRvIHNlbGVjdDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBTZWxlY3RSb3dCeUlkeChyb3dJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gY29udHJvbEZvclNlbGVjdCBjYW4gYmUgdGFibGUgY29udHJvbCBvciB0cmVlIGNvbnRyb2xcclxuICAgIGxldCBtYWluQ29udHJvbDogTWdDb250cm9sQmFzZSA9IHRoaXMuZ2V0TWFpbkNvbnRyb2woKTtcclxuXHJcbiAgICBpZiAobWFpbkNvbnRyb2wgIT09IG51bGwgJiYgdGhpcy5SZWZyZXNoUmVwZWF0YWJsZUFsbG93ZWQpIHtcclxuICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSByb3dJZHg7XHJcbiAgICAgIGlmICh0aGlzLl90YXNrLkRhdGFWaWV3LmlzRW1wdHlEYXRhdmlldygpKVxyXG4gICAgICAgIGluZGV4ID0gR3VpQ29uc3RhbnRzLk5PX1JPV19TRUxFQ1RFRDtcclxuXHJcbiAgICAgIGlmIChpbmRleCAhPT0gdGhpcy5fcHJldlNlbEluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5fcHJldlNlbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCBtYWluQ29udHJvbCwgMCwgSHRtbFByb3BlcnRpZXMuU2VsZWN0ZWRSb3csIGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZm9yY2UgYWxsIE1nQ29udHJvbHMgdG8gdXBkYXRlIHRoZSBjb2xvcnMgdXNlZCBvbiB0aGUgY29udHJvbHNcclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIEluaXRUYWJsZUNvbnRyb2xfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuSW5pdFRhYmxlQ29udHJvbCgxLCAxLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlbW92ZUFsbFwiPnJlbW92ZSBhbGwgZWxlbWVudHMgZm9ybSB0aGUgdGFibGUgaW5jbHVkaW5nIGZpcnN0IGFuZCBsYXN0IGR1bW15IGVsZW1lbnRzPC9wYXJhbT5cclxuICBwcml2YXRlIEluaXRUYWJsZUNvbnRyb2xfMShkdlNpemU6IG51bWJlciwgdGFibGVJdGVtc0NvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90YWJsZU1nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIENvbW1hbmRzLmFkZFdpdGhOdW1iZXIoQ29tbWFuZFR5cGUuU0VUX1RBQkxFX0lURU1TX0NPVU5ULCB0aGlzLl90YWJsZU1nQ29udHJvbCwgdGFibGVJdGVtc0NvdW50KTtcclxuICAgICAgQ29tbWFuZHMuYWRkV2l0aE51bWJlcihDb21tYW5kVHlwZS5TRVRfQ0hVTktfU0laRSwgdGhpcy5fdGFibGVNZ0NvbnRyb2wsICh0aGlzLl90YXNrLkRhdGFWaWV3KS5nZXRDaHVua1NpemUoKSk7XHJcbiAgICAgIHRoaXMuX3RhYmxlSXRlbXNDb3VudCA9IHRhYmxlSXRlbXNDb3VudDtcclxuICAgICAgdGhpcy5Sb3dzLlNldFNpemUoZHZTaXplKTtcclxuICAgICAgdGhpcy5fcHJldkd1aVRvcEluZGV4ID0gLTI7XHJcbiAgICAgIHRoaXMuX3ByZXZTZWxJbmRleCA9IC0yO1xyXG4gICAgICB0aGlzLlVwZGF0ZVRhYmxlQ2hpbGRyZW5BcnJheXNTaXplKGR2U2l6ZSk7XHJcbiAgICAgIHRoaXMuX21heFJvd3NJblBhZ2luYXRlZFRhYmxlID0gQ29tbWFuZHMuZ2V0TWF4Um93c0luUGFnaW5hdGVkVGFibGUodGhpcy5fdGFibGVNZ0NvbnRyb2wpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB1cGRhdGUgYXJyYXlzIG9mIHRhYmxlIGNoaWxkcmVuIGNvbnRyb2xzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzaXplXCI+PC9wYXJhbT5cclxuICBwdWJsaWMgSW5zZXJ0VGFibGVDaGlsZHJlbkFycmF5cyhpZHg6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICBsZXQgY2hpbGRyZW46IExpc3Q8TWdDb250cm9sQmFzZT4gPSB0aGlzLlRhYmxlQ2hpbGRyZW47XHJcbiAgICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgY29udHJvbDogTWdDb250cm9sQmFzZSA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgIGNvbnRyb2wuSW5zZXJ0QXJyYXlzKGlkeCwgY291bnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNsYXNzIGRlc2NyaWJpbmcgcm93XHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPnJpbmF2PC9hdXRob3I+XHJcbmV4cG9ydCBjbGFzcyBSb3cge1xyXG4gIENyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgICAgIC8vIGlzIHJvdyBjcmVhdGVkIG9uIGd1aSBsZXZlbFxyXG4gIFZhbGlkYXRlZDogYm9vbGVhbiA9IGZhbHNlOyAgIC8vIGlzIHJvdyBWYWxpZGF0ZWRcclxuXHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3RvcihjcmVhdGVkOiBib29sZWFuLCB2YWxpZGF0ZWQ6IGJvb2xlYW4pO1xyXG4gIGNvbnN0cnVjdG9yKGNyZWF0ZWQ/OiBib29sZWFuLCB2YWxpZGF0ZWQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKGNyZWF0ZWQsIHZhbGlkYXRlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLlZhbGlkYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoY3JlYXRlZDogYm9vbGVhbiwgdmFsaWRhdGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLkNyZWF0ZWQgPSBjcmVhdGVkO1xyXG4gICAgdGhpcy5WYWxpZGF0ZWQgPSB2YWxpZGF0ZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
741
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdGb3JtQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvTWdGb3JtQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFhLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFZLEtBQUssRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7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LEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBZ0IsRUFBRSxTQUFrQjtRQUN4RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1Byb3BQYXJlbnRJbnRlcmZhY2V9IGZyb20gJy4uLy4uL2d1aS9Qcm9wUGFyZW50SW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgTG9nZ2VyX0xvZ0xldmVscyxcclxuICBNZ0NvbnRyb2xUeXBlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RyVXRpbCxcclxuICBUYWJiaW5nT3JkZXJUeXBlLFxyXG4gIFdpbmRvd1R5cGUsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge0RlYnVnLCBJSGFzaENvZGUsIEludDMyLCBMaXN0LCBOU3RyaW5nLCBSZWZQYXJhbSwgU3RhY2ssIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtNZ0NvbnRyb2xCYXNlfSBmcm9tICcuL01nQ29udHJvbEJhc2UnO1xyXG5pbXBvcnQge1Byb3BUYWJsZX0gZnJvbSAnLi9Qcm9wVGFibGUnO1xyXG5pbXBvcnQge0d1aVRhc2tCYXNlfSBmcm9tICcuLi90YXNrcy9HdWlUYXNrQmFzZSc7XHJcbmltcG9ydCB7Q29udHJvbFRhYmxlfSBmcm9tICcuL0NvbnRyb2xUYWJsZSc7XHJcbmltcG9ydCB7TWFuYWdlcn0gZnJvbSAnLi4vLi4vTWFuYWdlcic7XHJcbmltcG9ydCB7RXZlbnRzfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQge1Byb3BlcnR5fSBmcm9tICcuL1Byb3BlcnR5JztcclxuaW1wb3J0IHtDb21tYW5kVHlwZSwgSHRtbFByb3BlcnRpZXN9IGZyb20gJy4uLy4uL0d1aUVudW1zJztcclxuaW1wb3J0IHtOVU1fVFlQRX0gZnJvbSAnLi4vZGF0YS9OVU1fVFlQRSc7XHJcbmltcG9ydCB7Q29tbWFuZHN9IGZyb20gJy4uLy4uL0NvbW1hbmRzJztcclxuaW1wb3J0IHtHdWlGaWVsZEJhc2V9IGZyb20gJy4uL2RhdGEvR3VpRmllbGRCYXNlJztcclxuaW1wb3J0IHtQcm9wSW50ZXJmYWNlfSBmcm9tICcuL1Byb3BJbnRlcmZhY2UnO1xyXG5pbXBvcnQge0d1aUNvbnN0YW50c30gZnJvbSAnLi4vLi4vR3VpQ29uc3RhbnRzJztcclxuaW1wb3J0IHtHdWlGb3JtUHJvcGVydHlBZGFwdGVyfSBmcm9tICcuL0d1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXInO1xyXG5pbXBvcnQge0d1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXJ9IGZyb20gJy4vR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcic7XHJcblxyXG5cclxuY29uc3QgZGVsaW1pdGVyOiBzdHJpbmcgPSAnLCAnO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gZGF0YSBmb3IgPGZvcm0+Li4uPC9mb3JtPlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWdGb3JtQmFzZSBleHRlbmRzIEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIgaW1wbGVtZW50cyBQcm9wUGFyZW50SW50ZXJmYWNlLCBJSGFzaENvZGUge1xyXG4gIEluSW5pdEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQ3RybFRhYjogQ29udHJvbFRhYmxlID0gbnVsbDtcclxuICAvLyB1bnRpbCB0aGUgZm9ybSBpcyByZWZyZXNoZWQgaW4gdGhlIGZpcnN0IHRpbWVcclxuICBGb3JtUmVmcmVzaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUmVmcmVzaFJlcGVhdGFibGVBbGxvd2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUm93czogTGlzdDxSb3c+ID0gbnVsbDtcclxuICBNb2RhbEZvcm1zQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgRXJyb3JPY2N1cmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRm9ybUlzbjogbnVtYmVyID0gMDtcclxuICBOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIE9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTGVnYWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUEJJbWFnZXNOdW1iZXI6IG51bWJlciA9IDA7XHJcbiAgaWdub3JlRmlyc3RSZWZyZXNoVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFBhcmVudEZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJvdGVjdGVkIF9kZXN0VGJsUm93OiBudW1iZXIgPSBJbnQzMi5NaW5WYWx1ZTtcclxuICBwcm90ZWN0ZWQgX2ZpcnN0VGFibGVUYWJPcmRlcjogbnVtYmVyID0gMDsgICAgICAgICAgICAvLyB0YWIgb3JkZXIgb2YgZmlyc3QgY2hpbGQgb2YgdGFibGVcclxuICBwcm90ZWN0ZWQgX2luUmVmcmVzaERpc3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgX2luUmVzdG9yZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBfbGFzdFJvd1NlbnQ6IG51bWJlciA9IC0xOyAgICAgICAgICAgICAgICAgIC8vIGxhc3Qgcm93IHNlbnQgcm8gZ3VpIHRocmVhZFxyXG4gIHByb3RlY3RlZCBfcHJldkd1aVRvcEluZGV4OiBudW1iZXIgPSAtMTsgICAgICAgICAgICAgIC8vIEZvciBwYWdpbmF0ZWQgdGFibGUgaXQncyBHdWlUb3BJbmRleCBlbHNlIGl0J3MgZHZUb3BJbmRleFxyXG4gIHByb3RlY3RlZCBfcHJvcFRhYjogUHJvcFRhYmxlID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgX3Jvd3NJblBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcHJvdGVjdGVkIF9tYXhSb3dzSW5QYWdpbmF0ZWRUYWJsZTogbnVtYmVyID0gMDsgICAgICAgLy8gbWF4IG5vIG9mIHJvd3MgaW4gcGFnaW5hdGVkIHRhYmxlXHJcbiAgcHJvdGVjdGVkIF9zdWJGb3JtQ3RybDogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIF90YWJsZU1nQ29udHJvbDogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIF90YWJsZUl0ZW1zQ291bnQ6IG51bWJlciA9IDA7ICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlXHJcbiAgcHJvdGVjdGVkIF90YWJsZVJlZnJlc2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBfdGFzazogR3VpVGFza0Jhc2UgPSBudWxsOyAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0YXNrIHRvIHdoaWNoIHRoZSBjdXJyZW50IGZvcm0gYmVsb25nc1xyXG4gIHByb3RlY3RlZCBfdG9wSW5kZXhVcGRhdGVkOiBib29sZWFuID0gZmFsc2U7ICAgICAgICAgIC8vIHRydWUgaWYgYSB0b3AgaW5kZXggd2FzIHVwZGF0ZWRcclxuXHJcbiAgLy8gRm9ybSByZXByZXNlbnRpbmcgdGhlIGludGVybmFsIGhlbHAgd2luZG93LkhlcmUgdGhlIGludGVybmFsIGZvcm0gb2JqZWN0IGlzIGtlcHQgb24gdGhlIGZvcm0gb2JqZWN0IGl0c2VsZi5cclxuICBwcm90ZWN0ZWQgX3RyYW5zZmVyaW5nRGF0YTogYm9vbGVhbiA9IGZhbHNlOyAgICAgICAgICAvLyByb3dzIGFyZSByZXF1ZXN0ZWQgZm9yIGEgR1VJIHRocmVhZFxyXG4gIC8vIHByZXZlbnRzIHJlZnJlc2ggb2YgRGlzcGxheUxpc3QgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRyb2xzIGFuZCBjdXJyUmVjQ29tcHV0ZShSQylcclxuICBwcml2YXRlIF9hbGxvd2VkU3ViZm9ybVJlY29tcHV0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfY29uY3JldGVXaW5kb3dUeXBlOiBXaW5kb3dUeXBlO1xyXG4gIHByaXZhdGUgX2NvbnRhaW5lckN0cmw6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gIHByaXZhdGUgX2ZpcnN0UmVmcmVzaE9mUHJvcHM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIF9wcmV2U2VsSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgX3Nob3VsZENyZWF0ZVRvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTsgICAgICAgIC8vIGlmIHRvIGNyZWF0ZSB0b29sYmFyXHJcbiAgcHJpdmF0ZSBfdGFibGVDaGlsZHJlbjogTGlzdDxNZ0NvbnRyb2xCYXNlPiA9IG51bGw7ICAgLy8gQ2FuJ3QgdXNlIExpc3Q8VD5cclxuICBwcml2YXRlIF90YWJsZUNvbHVtbnM6IExpc3Q8TWdDb250cm9sQmFzZT4gPSBudWxsO1xyXG4gIHByb3RlY3RlZCBfdXNlclN0YXRlSWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwcml2YXRlIGRpc3BsYXlMaW5lOiBudW1iZXIgPSAwO1xyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuX3Byb3BUYWIgPSBuZXcgUHJvcFRhYmxlKHRoaXMpO1xyXG4gICAgdGhpcy5DdHJsVGFiID0gbmV3IENvbnRyb2xUYWJsZSgpO1xyXG4gICAgdGhpcy5Sb3dzID0gbmV3IExpc3QoKTtcclxuICAgIHRoaXMuX2NvbmNyZXRlV2luZG93VHlwZSA9IDxXaW5kb3dUeXBlPjA7XHJcbiAgICB0aGlzLlBhcmVudEZvcm0gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IERpc3BsYXlMaW5lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TGluZTtcclxuICB9XHJcblxyXG4gIHNldCBEaXNwbGF5TGluZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlMaW5lID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgVW5pcXVlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNX05BTUUpICE9IG51bGwpXHJcbiAgICAgIHJldHVybiB0aGlzLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FKS5HZXRDb21wdXRlZFZhbHVlKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFRhc2tUYWcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFRhc2soKS5nZXRUYXNrVGFnKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IFRhYmxlQ2hpbGRyZW4oKTogTGlzdDxNZ0NvbnRyb2xCYXNlPiB7XHJcbiAgICBpZiAodGhpcy5fdGFibGVDaGlsZHJlbiA9PT0gbnVsbClcclxuICAgICAgdGhpcy5idWlsZFRhYmxlQ2hpbGRyZW4oKTtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZUNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IFRhYmxlQ2hpbGRyZW4odmFsdWU6IExpc3Q8TWdDb250cm9sQmFzZT4pIHtcclxuICAgIHRoaXMuX3RhYmxlQ2hpbGRyZW4gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBTaG91bGRDcmVhdGVUb29sYmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZENyZWF0ZVRvb2xiYXI7XHJcbiAgfVxyXG5cclxuICBnZXQgQWxsb3dlZFN1YmZvcm1SZWNvbXB1dGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dlZFN1YmZvcm1SZWNvbXB1dGU7XHJcbiAgfVxyXG5cclxuICBzZXQgQWxsb3dlZFN1YmZvcm1SZWNvbXB1dGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2FsbG93ZWRTdWJmb3JtUmVjb21wdXRlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHRydWUgZm9yIGEgRml0VG9NZGkgd2luZG93LlxyXG5cclxuICBnZXQgQ29uY3JldGVXaW5kb3dUeXBlKCk6IFdpbmRvd1R5cGUge1xyXG4gICAgaWYgKHRoaXMuX2NvbmNyZXRlV2luZG93VHlwZSA9PT0gPFdpbmRvd1R5cGU+MCkge1xyXG4gICAgICBsZXQgd2luZG93VHlwZTogV2luZG93VHlwZSA9IDxXaW5kb3dUeXBlPnRoaXMuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9XSU5ET1dfVFlQRSkuR2V0Q29tcHV0ZWRWYWx1ZUludGVnZXIoKTtcclxuICAgICAgaWYgKHRoaXMuUGFyZW50Rm9ybSA9PT0gbnVsbCB8fCB3aW5kb3dUeXBlICE9PSBXaW5kb3dUeXBlLk92ZXJsYXkpXHJcbiAgICAgICAgd2luZG93VHlwZSA9IFdpbmRvd1R5cGUuRGVmYXVsdDtcclxuXHJcbiAgICAgIHRoaXMuX2NvbmNyZXRlV2luZG93VHlwZSA9IHdpbmRvd1R5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fY29uY3JldGVXaW5kb3dUeXBlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHRydWUgZm9yIEZsb2F0aW5nLCBUb29sIG9yIE1vZGFsLlxyXG5cclxuICBzZXQgQ29uY3JldGVXaW5kb3dUeXBlKHZhbHVlOiBXaW5kb3dUeXBlKSB7XHJcbiAgICB0aGlzLl9jb25jcmV0ZVdpbmRvd1R5cGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gVGhpcyBtZXRob2QgZW5hYmxlcyBhIHNwZWNpZmljIGFjdGlvbiBvbiBhbGwgdGhlIG1lbnUgb2JqZWN0cyBvZiB0aGUgZm9ybSBhbmQgaXRzIGNoaWxkcmVuJ3NcclxuICAvLy8gbWVudXMuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFjdGlvblwiPmFjdGlvbiB3aG9zZSBzdGF0ZSBoYXMgY2hhbmdlZDwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFNob3VsZFB1dEFjdE9uRm9ybUNsb3NlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IGEgcHJvcGVydHkgb2YgdGhlIGZvcm0gdGhhdCBhbHJlYWR5IHdhcyBjb21wdXRlZCBieSBpdHMgSWRcclxuICAvLy8gVGhpcyBtZXRob2QgZG9lcyBub3QgY3JlYXRlIGEgcHJvcGVydHkgaWYgaXQgaXNuJ3QgZXhpc3QuXHJcbiAgLy8vIE1heSB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHByb3BlcnR5IGFuZCB1c2UgaXRzIGRlZmF1bHQgdmFsdWUuXHJcbiAgLy8vIEluIFBoYXNlIDIgaW4gUmVmcmVzaFByb3BlcnRpZXMgbWV0aG9kIHdlJ2xsIGNyZWF0ZSBhbmQgY29tcHV0ZSBwcm9wZXJ0aWVzLFxyXG4gIC8vLyBwZXJoYXBzIHdlIG5lZWQgY3JlYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBvbmx5IHRob3NlIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIGRlZmF1bHQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcm90ZWN0ZWQgc3RhdGljIFNob3VsZEJlaGF2ZUFzTW9kYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNoZWNrcyBpZiBwcm9wZXJ0eSBoYXMgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicHJvcElkXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBDb252ZXJ0QXJyYXlMaXN0VG9TdHJpbmcoaXRlbXM6IExpc3Q8c3RyaW5nPiwgaXNJdGVtTnVtVHlwZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogc3RyaW5nW10gPSBbJ1xcXFwnLCAnLScsICcsJ107XHJcbiAgICBsZXQgdG86IHN0cmluZ1tdID0gWydcXFxcXFxcXCcsICdcXFxcLScsICdcXFxcLCddO1xyXG4gICAgbGV0IHN0cmluZ0J1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgbGV0IG5VTV9UWVBFOiBOVU1fVFlQRTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleDogbnVtYmVyID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4ID0gaW5kZXggKyAxKSB7XHJcbiAgICAgIGlmIChpc0l0ZW1OdW1UeXBlKSB7XHJcbiAgICAgICAgblVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoPHN0cmluZz5pdGVtcy5nZXRfSXRlbShpbmRleCkpO1xyXG4gICAgICAgIGl0ZW1zLnNldF9JdGVtKGluZGV4LCBuVU1fVFlQRS50b19kb3VibGUoKS50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKDxzdHJpbmc+aXRlbXMuZ2V0X0l0ZW0oaW5kZXgpLCBmcm9tLCB0bykpO1xyXG5cclxuICAgICAgaWYgKGluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMSlcclxuICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChkZWxpbWl0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHBhcnNlIHRoZSBmb3JtIHN0cnVjdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5jcmVhc2VcIj48L3BhcmFtPlxyXG4gIFVwZGF0ZU1vZGFsRm9ybXNDb3VudChtZ0Zvcm1CYXNlOiBNZ0Zvcm1CYXNlLCBpbmNyZWFzZTogYm9vbGVhbik6IHZvaWQge1xyXG5cclxuICAgIGlmIChpbmNyZWFzZSlcclxuICAgICAgdGhpcy5Nb2RhbEZvcm1zQ291bnQgKz0gMTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5Nb2RhbEZvcm1zQ291bnQgLT0gMTtcclxuXHJcbiAgICBFdmVudHMuU2V0TW9kYWwobWdGb3JtQmFzZSwgaW5jcmVhc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUbyBhbGxvY2F0ZSBhbmQgZmlsbCBpbm5lciBvYmplY3RzIG9mIHRoZSBjbGFzc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm91bmRUYWdOYW1lXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBhc3luYyBFdmFsdWF0ZUV4cHJlc3Npb24oZXhwSWQ6IG51bWJlciwgcmVzVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgbGVuZ3RoOiBudW1iZXIsIGNvbnRlbnRUeXBlVW5pY29kZTogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzQ2VsbFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGFsd2F5c0V2YWx1YXRlOiBib29sZWFuLCB3YXNFdmFsdWF0ZWQ6IFJlZlBhcmFtPGJvb2xlYW4+KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl90YXNrLkV2YWx1YXRlRXhwcmVzc2lvbihleHBJZCwgcmVzVHlwZSwgbGVuZ3RoLCBjb250ZW50VHlwZVVuaWNvZGUsIHJlc0NlbGxUeXBlLCB0cnVlLCB3YXNFdmFsdWF0ZWQpO1xyXG4gIH1cclxuXHJcbiAgR2V0RXhwcmVzc2lvblN0b3JhZ2UoZXhwSWQ6IG51bWJlcik6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2suR2V0RXhwcmVzc2lvblN0b3JhZ2UoZXhwSWQpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdGlhbGl6YXRpb24uXHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgY2hlY2tJZkV4aXN0UHJvcChwcm9wSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGV4aXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYiAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgcHJvcEJ5SWQ6IFByb3BlcnR5ID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG4gICAgICBleGlzdCA9IChwcm9wQnlJZCAhPT0gbnVsbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRmlsbCBuYW1lIG1lbWJlciBvZiB0aGUgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPnRoZSBJZCBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIGdldFByb3AocHJvcElkOiBudW1iZXIpOiBQcm9wZXJ0eSB7XHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHkgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9wcm9wVGFiICE9PSBudWxsKSB7XHJcbiAgICAgIHByb3AgPSB0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKHByb3BJZCk7XHJcblxyXG4gICAgICAvLyBpZiB0aGUgcHJvcGVydHkgZG9lc24ndCBleGlzdCB0aGVuIGNyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBhbmQgZ2l2ZSBpdCB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAvLyBpbiBhZGRpdGlvbiBhZGQgdGhpcyBwcm9wZXJ0eSB0byB0aGUgcHJvcGVydGllcyB0YWJsZVxyXG4gICAgICBpZiAocHJvcCA9PT0gbnVsbCkge1xyXG4gICAgICAgIHByb3AgPSBQcm9wZXJ0eS5nZXREZWZhdWx0UHJvcChwcm9wSWQsIEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9GT1JNLCB0aGlzKTtcclxuICAgICAgICBpZiAocHJvcCAhPT0gbnVsbClcclxuICAgICAgICAgIHRoaXMuX3Byb3BUYWIuYWRkUHJvcChwcm9wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3A7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZm9yIGVhY2ggY29udHJvbCBidWlsZCB0aGUgbGlzdCBvZiBhbGwgdGhlIGNvbnRyb2xzIHRoYXQgYXJlIGxpbmtlZCB0byBpdFxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPnRoZSBJZCBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIEdldENvbXB1dGVkUHJvcGVydHkocHJvcElkOiBudW1iZXIpOiBQcm9wZXJ0eSB7XHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHkgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9wcm9wVGFiICE9PSBudWxsKVxyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG5cclxuICAgIHJldHVybiBwcm9wO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgUHJvcGVydHlIYXNFeHByZXNzaW9uKHByb3BJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHkgPSB0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKHByb3BJZCk7XHJcbiAgICByZXR1cm4gcHJvcCAhPT0gbnVsbCAmJiBwcm9wLmlzRXhwcmVzc2lvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRDb21wSWR4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuZ2V0VGFzaygpID09PSBudWxsKSA/IDAgOiB0aGlzLmdldFRhc2soKS5nZXRDb21wSWR4KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYXJyYW5nZSB6b3JkZXIgZm9yIGNvbnRyb2xzLiByZWN1cnNpdmUgZnVuY3Rpb24uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBJc0ZpcnN0UmVmcmVzaE9mUHJvcHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlyc3RSZWZyZXNoT2ZQcm9wcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBsaXN0IG9mIGFsbCBjb2x1bW5zIGNvbnRyb2xzXHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Rm9ybSgpOiBNZ0Zvcm1CYXNlIHtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDaGVja3MgaWYgYW4gaW50ZXJuYWwgRml0IHRvIE1ESSBmb3JtIG5lZWRzIHRvIGJlIGNyZWF0ZWQgdG8gaG9sZCB0aGUgTWFpbiBQcm9ncmFtIGNvbnRyb2xzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+cmVmZXJlbmNlIHRvIHRoZSBvd25lclRhc2sgb2YgdGhpcyBmb3JtPC9wYXJhbT5cclxuICBmaWxsRGF0YSh0YXNrUmVmOiBHdWlUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5QYXJzZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Rhc2sgPT09IG51bGwgJiYgdGFza1JlZiAhPT0gbnVsbClcclxuICAgICAgdGhpcy5fdGFzayA9IHRhc2tSZWY7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuaW5pdElubmVyT2JqZWN0cyhwYXJzZXIuZ2V0TmV4dFRhZygpKSkge1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5DdHJsVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5DdHJsVGFiLmdldEN0cmwoaSk7XHJcbiAgICAgIC8vIGluaXRpYWxpemVzIHRoZSBzdWJmb3JtIGNvbnRyb2xzXHJcbiAgICAgIGN0cmwuSW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGJ1aWxkIGxpc3RzIG9mIGxpbmtlZCBjb250cm9scyBvbiB0aGVpciBwYXJlbnRzXHJcbiAgICB0aGlzLmJ1aWxkTGlua2VkQ29udHJvbHNMaXN0cygpO1xyXG5cclxuICAgIC8vIGJ1aWxkIGxpc3Qgb2YgY29sdW1ucyBhbmQgbm9uIGNvbHVtbnNcclxuICAgIHRoaXMuYnVpbGRUYWJsZUNvbHVtbnNMaXN0KCk7XHJcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuXHJcbiAgICB0aGlzLl90YXNrLnNldEtleWJvYXJkTWFwcGluZ1N0YXRlKENvbnN0YW50cy5BQ1RfU1RUX1RCTF9TQ1JFRU5fTU9ERSwgdGhpcy5pc1NjcmVlbk1vZGUoKSk7XHJcbiAgICB0aGlzLl90YXNrLnNldEtleWJvYXJkTWFwcGluZ1N0YXRlKENvbnN0YW50cy5BQ1RfU1RUX1RCTF9MRUZUX1RPX1JJR0hULCAhdGhpcy5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0hFQlJFVykuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgb3JkZXIgdGhlIHNwbGl0dGVyIGNvbnRhaW5lciBjaGlsZHJlbi4gVGhlIGNoaWxkIHRoYXQgaXMgZG9ja2VkIHRvIGZpbGwgaXMgYWRkZWQgZmlyc3QsIHRoZW5cclxuICAvLy8gICB0aGUgc3BsaXR0ZXIgY29udHJvbCBhbmQgZmluYWxseSB0aGUgY2hpbGQgdGhhdCBpcyBkb2NrZWQgZWl0aGVyIHRvIHRoZSB0b3Agb3IgdG8gdGhlIGxlZnRcclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBlbmQgSW5kZXggb2YgdGhlPGZvcm0gLi4uPiBzdWJ0YWc8L3JldHVybnM+XHJcbiAgZmlsbE5hbWUoZm9ybVRhZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgcGFyc2VyOiBYbWxQYXJzZXIgPSBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLlBhcnNlcjtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihmb3JtVGFnKSArIGZvcm1UYWcubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuXHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZztcclxuICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmc7XHJcblxyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaSA9IGkgKyAyKSB7XHJcbiAgICAgICAgYXR0cmlidXRlID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIHZhbHVlU3RyID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGkgKyAxKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfTkFNRTpcclxuICAgICAgICAgICAgdGhpcy5OYW1lID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoRXZlbnRzLlNob3VsZExvZyhMb2dnZXJfTG9nTGV2ZWxzLkd1aSkpXHJcbiAgICAgICAgICAgICAgRXZlbnRzLldyaXRlR3VpVG9Mb2coTlN0cmluZy5Gb3JtYXQoJ1BhcnNpbmcgZm9ybSBcInswfVwiJywgdGhpcy5OYW1lKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9JU19GUkFNRVNFVDpcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0lTX0xJR0FMX1JDX0ZPUk06XHJcbiAgICAgICAgICAgIHRoaXMuaXNMZWdhbEZvcm0gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9QQl9JTUFHRVNfTlVNQkVSOlxyXG4gICAgICAgICAgICB0aGlzLlBCSW1hZ2VzTnVtYmVyID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9GT1JNX0lTTjpcclxuICAgICAgICAgICAgdGhpcy5Gb3JtSXNuID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9VU0VSU1RBVEVfSUQ6XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJTdGF0ZUlkID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKE5TdHJpbmcuRm9ybWF0KCdVbmhhbmRsZWQgYXR0cmlidXRlIFxcJ3swfVxcJy4nLCBhdHRyaWJ1dGUpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIDEpOyAvLyB0byBkZWxldGUgXCI+XCIgdG9vXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKCdpbiBGb3JtLkZpbGxOYW1lKCkgb3V0IG9mIGJvdW5kcycpO1xyXG4gIH1cclxuXHJcblxyXG4gIGFic3RyYWN0IGJ1aWxkRm9ybU5hbWUoKTogc3RyaW5nO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybnMgdHJ1ZSBmb3IgbWRpIGNoaWxkIGFuZCBmaXQgdG8gbWRpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ3aW5kb3dUeXBlXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBjcmVhdGVGb3JtKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGlucHV0Q29udHJvbHMgPSB0aGlzLkdldExpc3RPZklucHV0Q29udHJvbHMoKTtcclxuICAgIGxldCBmb3JtTmFtZTogc3RyaW5nID0gdGhpcy5idWlsZEZvcm1OYW1lKCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzU3ViRm9ybSgpKSB7XHJcbiAgICAgIC8vT25seSBmb3Igb3ZlcmxheSB0eXBlIHVzZSBuZXcgbWV0aG9kXHJcbiAgICAgIGlmICh0aGlzLmlzRGlhbG9nKCkpXHJcbiAgICAgICAgYXdhaXQgQ29tbWFuZHMub3Blbk92ZXJsYXlGb3JtKHRoaXMsIGZvcm1OYW1lLCAnMCcsIHRoaXMuZ2V0VGFzaygpLmdldFRhc2tUYWcoKSwgaW5wdXRDb250cm9scywgdGhpcy5pc0RpYWxvZygpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIENvbW1hbmRzLmFkZE9wZW5Gb3JtKHRoaXMsIGZvcm1OYW1lLCAnMCcsIHRoaXMuZ2V0VGFzaygpLmdldFRhc2tUYWcoKSwgaW5wdXRDb250cm9scywgdGhpcy5pc0RpYWxvZygpKTtcclxuICAgIH1lbHNlIHtcclxuICAgICAgQ29tbWFuZHMuYWRkT3BlbnN1YmZvcm0oQ29tbWFuZFR5cGUuQ1JFQVRFX1NVQl9GT1JNLCB0aGlzLmdldFN1YkZvcm1DdHJsKCksIHRoaXMuZ2V0VGFzaygpLmdldFRhc2tUYWcoKSwgKDxNZ0NvbnRyb2xCYXNlPnRoaXMuZ2V0U3ViRm9ybUN0cmwoKSkuZ2V0TmFtZSgpLFxyXG4gICAgICAgIGZvcm1OYW1lLCBpbnB1dENvbnRyb2xzLCB0aGlzLmdldFRhc2soKS5Sb3V0ZXJQYXRoLCB0aGlzLmdldFRhc2soKS5HZXRSb3V0ZXJQYXJhbXMoKSwgdGhpcy5nZXRUYXNrKCkuSW5EZWZhdWx0Um91dGVyT3V0bGV0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0IGNyZWF0ZSBvbmUgcm93IGluIHRhYmxlIGNvbnRyb2wuIERPTidUIHNldCBpdGVtcyBjb3VudCBkdXJpbmcgZm9ybSBvcGVuLlxyXG4gICAgLy8gZmlyc3RUYWJsZVJlZnJlc2goKSB3aWxsIGNyZWF0ZSB0aGUgYWN0dWFsIHJvd3MsIGFuZCByZWZyZXNoIHRoZSB0YWJsZS5cclxuICAgIGlmICh0aGlzLkhhc1RhYmxlKCkpXHJcbiAgICAgIHRoaXMuSW5pdFRhYmxlQ29udHJvbCgpO1xyXG5cclxuICAgIENvbW1hbmRzLmJlZ2luSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICBhZGQgdGhlIGNhbGwganMgY29tbWFuZCBhbmQgZ2V0IHRoZSByZXR1cm4gdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgQ2FsbEpTKG1ldGhvZE5hbWU6IHN0cmluZywgYXJnczogQXJyYXk8YW55Pik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gQ29tbWFuZHMuYWRkQ2FsbEpTKHRoaXMsIHRoaXMuVW5pcXVlTmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgZm9ybSBoYXMgYXV0b21hdGljIHRhYmJpbmcgb3JkZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNBdXRvbWF0aWNUYWJiaW5nT3JkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQkJJTkdfT1JERVIpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCkgPT09IFRhYmJpbmdPcmRlclR5cGUuQXV0b21hdGljYWxseTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cnVlIGlmIHdlIGNhbiByZWZyZXNoIHJlcGVhdGFibGUgY29udHJvbHNcclxuICAvLy8gICBRQ1IgIzQzNDY0OSwgd2UgcHJldmVudCBwYWludGluZyB0YWJsZSdzIGNvbnRyb2wgdW50aWxsIHNoZWxsIGlzIG9wZW5lZCBhbmQgd2Uga25vdyBob3cgbWFueSByb3dzIHRvIHBhaW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzUmVmcmVzaFJlcGVhdGFibGVBbGxvd2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVmcmVzaFJlcGVhdGFibGVBbGxvd2VkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgZm9ybSBpcyBzY3JlZW4gbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNTY3JlZW5Nb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzTGluZU1vZGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhlIGZvcm0gaXMgbGluZSBtb2RlXHJcbiAgLy8vICAgaWYgd2UgaGF2ZSBhIHRyZWUgb3IgYSB0YWJsZSBvbiB0aGUgZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNMaW5lTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldE1haW5Db250cm9sKCkgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGFzayBoYXMgdGFibGUgb3IgdHJlZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBoYXNUYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZU1nQ29udHJvbCAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiBmb3JtIHNob3VsZCBiZSBvcGVuZWQgYXMgbW9kYWwgd2luZG93XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRGlhbG9nKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgd2luZG93VHlwZTogV2luZG93VHlwZSA9IHRoaXMuQ29uY3JldGVXaW5kb3dUeXBlO1xyXG4gICAgaWYgKHdpbmRvd1R5cGUgPT09IFdpbmRvd1R5cGUuT3ZlcmxheSlcclxuICAgICAgaXNEaWFsb2cgPSB0cnVlO1xyXG4gICAgZWxzZSBpZiAoTWdGb3JtQmFzZS5TaG91bGRCZWhhdmVBc01vZGFsKCkpXHJcbiAgICAgIGlzRGlhbG9nID0gdHJ1ZTtcclxuICAgIHJldHVybiBpc0RpYWxvZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2hvdWxkIHRoaXMgZm9ybSBiZWhhdmUgYXMgTW9kYWwgYWx0aG91Z2ggaXRzIFdpbmRvd1R5cGUgIT0gTW9kYWw/XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuPC9yZXR1cm5zPlxyXG4gIGlzU3ViRm9ybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJGb3JtQ3RybCAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhpcyBmb3JtIGlzIHN1YmZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEhhc1RhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlTWdDb250cm9sICE9PSBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0VG9wTW9zdEZvcm0oKTogTWdGb3JtQmFzZSB7XHJcbiAgICBsZXQgdG9wTW9zdEZvcm06IE1nRm9ybUJhc2UgPSB0aGlzO1xyXG5cclxuICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBzdWIgZm9ybSBjb250cm9sXHJcbiAgICB3aGlsZSAodG9wTW9zdEZvcm0uaXNTdWJGb3JtKCkgJiYgdG9wTW9zdEZvcm0uUGFyZW50Rm9ybSAhPT0gbnVsbClcclxuICAgICAgdG9wTW9zdEZvcm0gPSB0b3BNb3N0Rm9ybS5QYXJlbnRGb3JtO1xyXG5cclxuICAgIHJldHVybiB0b3BNb3N0Rm9ybTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSB0b3Btb3N0IGZyYW1lIGZvcm0gZm9yIG1lbnUgcmVmcmVzaC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFRvcE1vc3RGcmFtZUZvcm0oKTogTWdGb3JtQmFzZSB7XHJcbiAgICBsZXQgdG9wTW9zdEZvcm06IE1nRm9ybUJhc2UgPSB0aGlzO1xyXG5cclxuICAgIHdoaWxlICh0b3BNb3N0Rm9ybSAhPT0gbnVsbClcclxuICAgICAgdG9wTW9zdEZvcm0gPSAoKHRvcE1vc3RGb3JtLlBhcmVudEZvcm0gIT09IG51bGwpID8gdG9wTW9zdEZvcm0uUGFyZW50Rm9ybSA6IG51bGwpO1xyXG5cclxuICAgIHJldHVybiB0b3BNb3N0Rm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHRvcG1vc3QgbWdmb3JtIG9mIHRoZSBzdWJmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXRTdWJGb3JtQ3RybCgpOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJGb3JtQ3RybDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIG9iamVjdCB0aGF0IGlzIHVzZWQgZm9yIGZvcm0gbWFwcGluZyBpbiBjb250cm9sJ3MgbWFwXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsSWR4XCI+dGhlIGluZGV4IG9mIHRoZSByZXF1ZXN0ZWQgY29udHJvbDwvcGFyYW0+XHJcbiAgZ2V0Q3RybChjdHJsSWR4OiBudW1iZXIpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLkN0cmxUYWIuZ2V0Q3RybChjdHJsSWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5SZXR1cm5zIHRoZSByZXF1ZXN0ZWQgY29udHJvbDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBhIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lIG9yIG51bGwgaWYgZG9lcyBub3QgZXhpc3Q8L3JldHVybnM+XHJcbiAgR2V0Q3RybChjdHJsTmFtZTogc3RyaW5nKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5DdHJsVGFiLmdldEN0cmwoY3RybE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWZhdWx0Um91dGVyT3V0bGV0OiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgZ2V0IERlZmF1bHRSb3V0ZXJPdXRsZXQoKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0Um91dGVyT3V0bGV0ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Um91dGVyT3V0bGV0ID0gdGhpcy5DdHJsVGFiLkdldENvbnRyb2woKHg6IE1nQ29udHJvbEJhc2UpID0+IHtcclxuICAgICAgICByZXR1cm4geC5Jc0RlZmF1bHRSb3V0ZXJPdXRsZXQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFJvdXRlck91dGxldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm4gdGhlIGNvbnRyb2wgd2l0aCBhIGdpdmVuIG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybE5hbWVcIj50aGUgb2YgdGhlIHJlcXVlc3RlZCBjb250cm9sPC9wYXJhbT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBhc3luYyBHZXRDaG9pY2VDb250cm9sSXRlbUxpc3QobWdDb250cm9sOiBNZ0NvbnRyb2xCYXNlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIERlYnVnLkFzc2VydChtZ0NvbnRyb2wuaXNDaG9pY2VDb250cm9sKCkpO1xyXG5cclxuICAgIGxldCBpdGVtczogTGlzdDxzdHJpbmc+ID0gbmV3IExpc3QoKTtcclxuICAgIGxldCBmbGQ6IEd1aUZpZWxkQmFzZSA9IG1nQ29udHJvbC5nZXRGaWVsZCgpO1xyXG4gICAgbGV0IHN0b3JhZ2VBdHRyaWJ1dGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcblxyXG4gICAgaWYgKHN0b3JhZ2VBdHRyaWJ1dGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSAmJiBzdG9yYWdlQXR0cmlidXRlICE9PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpIHtcclxuICAgICAgaWYgKG1nQ29udHJvbC5pc1JhZGlvKCkpIHtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZmxkLkdldFJhZGlvQ3RybHMoKS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHJhZGlvQ29udHJvbDogTWdDb250cm9sQmFzZSA9IGZsZC5HZXRSYWRpb0N0cmxzKCkuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgICBpdGVtcy5BZGRSYW5nZShhd2FpdCByYWRpb0NvbnRyb2wuR2V0SXRlbXNSYW5nZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbXMuQWRkUmFuZ2UoYXdhaXQgbWdDb250cm9sLkdldEl0ZW1zUmFuZ2UoKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIE1nRm9ybUJhc2UuQ29udmVydEFycmF5TGlzdFRvU3RyaW5nKGl0ZW1zLCBzdG9yYWdlQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOU3RyaW5nLkVtcHR5O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgdGhlIGl0ZW1zIGxpc3Qgb2YgY2hvaWNlIGNvbnRyb2xzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWdDb250cm9sXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBhc3luYyBHZXRDaG9pY2VDb250cm9sRGlzcGxheUxpc3QobWdDb250cm9sOiBNZ0NvbnRyb2xCYXNlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIERlYnVnLkFzc2VydChtZ0NvbnRyb2wuaXNDaG9pY2VDb250cm9sKCkpO1xyXG5cclxuICAgIGxldCBpdGVtczogTGlzdDxzdHJpbmc+ID0gbmV3IExpc3QoKTtcclxuICAgIGxldCBmbGQ6IEd1aUZpZWxkQmFzZSA9IG1nQ29udHJvbC5nZXRGaWVsZCgpO1xyXG4gICAgbGV0IHN0b3JhZ2VBdHRyaWJ1dGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcblxyXG4gICAgaWYgKHN0b3JhZ2VBdHRyaWJ1dGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSAmJiBzdG9yYWdlQXR0cmlidXRlICE9PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpIHtcclxuICAgICAgaWYgKG1nQ29udHJvbC5pc1JhZGlvKCkpIHtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZmxkLkdldFJhZGlvQ3RybHMoKS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHJhZGlvQ29udHJvbDogTWdDb250cm9sQmFzZSA9IGZsZC5HZXRSYWRpb0N0cmxzKCkuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgICBpdGVtcy5BZGRSYW5nZShhd2FpdCByYWRpb0NvbnRyb2wuR2V0RGlzcGxheVJhbmdlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpdGVtcy5BZGRSYW5nZShhd2FpdCBtZ0NvbnRyb2wuR2V0RGlzcGxheVJhbmdlKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBNZ0Zvcm1CYXNlLkNvbnZlcnRBcnJheUxpc3RUb1N0cmluZyhpdGVtcywgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOU3RyaW5nLkVtcHR5O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyB0aGUgY29tbWEgY29uY2F0ZW5hdGVkIHN0cmluZyBmcm9tIGFycmF5IGxpc3QuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpdGVtc1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNJdGVtTnVtVHlwZVwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0Q29udHJvbENvbHVtbihjdHJsOiBNZ0NvbnRyb2xCYXNlKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICBsZXQgY29sdW1uOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuXHJcbiAgICBpZiAoKGN0cmwuSXNSZXBlYXRhYmxlIHx8IGN0cmwuSXNUYWJsZUhlYWRlckNoaWxkKSAmJiB0aGlzLl90YWJsZUNvbHVtbnMgIT09IG51bGwpXHJcbiAgICAgIGNvbHVtbiA9IHRoaXMuX3RhYmxlQ29sdW1ucy5nZXRfSXRlbShjdHJsLmdldExheWVyKCkgLSAxKTtcclxuXHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY29udGFpbmVyIGNvbnRyb2w8L3JldHVybnM+XHJcbiAgZ2V0Q29udGFpbmVyQ3RybCgpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250YWluZXJDdHJsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBjb250cm9sJ3MgY29sdW1uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj48L3BhcmFtPlxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldENvbHVtbkNvbnRyb2xzKCk6IExpc3Q8TWdDb250cm9sQmFzZT4ge1xyXG4gICAgbGV0IGNvbHVtbkNvbnRyb2xzTGlzdDogTGlzdDxNZ0NvbnRyb2xCYXNlPiA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuQ3RybFRhYiAhPT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5DdHJsVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGN0cmw6IE1nQ29udHJvbEJhc2UgPSB0aGlzLkN0cmxUYWIuZ2V0Q3RybChpKTtcclxuICAgICAgICBpZiAoY3RybC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT0xVTU4pIHtcclxuICAgICAgICAgIGlmIChjb2x1bW5Db250cm9sc0xpc3QgPT09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbHVtbkNvbnRyb2xzTGlzdCA9IG5ldyBMaXN0PE1nQ29udHJvbEJhc2U+KCk7XHJcbiAgICAgICAgICBjb2x1bW5Db250cm9sc0xpc3QucHVzaChjdHJsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW5Db250cm9sc0xpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2soKTogR3VpVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICBjb252ZXJ0cyBmcm9tIGRvdWJsZSBwaXhlbHMgdG8gdW9tXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwaXhWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzWGF4aXNcIj48L3BhcmFtPlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFRhYmxlQ3RybCgpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZU1nQ29udHJvbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZnRlciBvcGVuIHRoZSBmb3JtIG5lZWQgdG8gbW92ZSBpdCBhY2NvcmRpbmcgdG8gdGhlIHN0YXJ0dXAgcG9zaXRpb24gcHJvcGVydHkgb24gdGhlIGZvcm1cclxuICAvLy8gICBQUk9QX1RZUEVfU1RBUlRVUF9QT1NJVElPTlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldE1haW5Db250cm9sKCk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlTWdDb250cm9sO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBhIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lIG9yIG51bGwgaWYgZG9lcyBub3QgZXhpc3Q8L3JldHVybnM+XHJcbiAgZ2V0Q3RybEJ5TmFtZShjdHJsTmFtZTogc3RyaW5nLCBjdHJsVHlwZTogTWdDb250cm9sVHlwZSk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3RybFRhYi5nZXRDdHJsQnlOYW1lKGN0cmxOYW1lLCBjdHJsVHlwZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBQb2ludCAsY2VudGVyIHRvIHRoZSBnaXZpbmcgcmVsYXRpdmVSZWN0XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+PC9wYXJhbT5cclxuICBjaGVja0FuZENyZWF0ZVJvdyhpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlTWdDb250cm9sICE9PSBudWxsICYmICF0aGlzLmlzUm93Q3JlYXRlZChpZHgpKVxyXG4gICAgICB0aGlzLmNyZWF0ZVJvdyhpZHgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlkeFwiPjwvcGFyYW0+XHJcbiAgSXNWYWxpZFJvdyhpZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbGlkUm93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RhYmxlTWdDb250cm9sICE9PSBudWxsICYmIGlkeCA+PSAwICYmIGlkeCA8IHRoaXMuUm93cy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHJvdzogUm93ID0gdGhpcy5Sb3dzLmdldF9JdGVtKGlkeCk7XHJcbiAgICAgIHZhbGlkUm93ID0gKHJvdyAhPT0gbnVsbCAmJiByb3cuVmFsaWRhdGVkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZFJvdztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGFibGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJlZSBvciB0YWJsZSBjb250cm9sIG9mIHRoZSBmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyByZWZyZXNoUHJvcHMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fZmlyc3RSZWZyZXNoT2ZQcm9wcykge1xyXG4gICAgICB0aGlzLmdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVElUTEVfQkFSKTtcclxuXHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLl9wcm9wVGFiLlJlZnJlc2hEaXNwbGF5KGZhbHNlLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2ZpcnN0UmVmcmVzaE9mUHJvcHMpXHJcbiAgICAgIHRoaXMuX2ZpcnN0UmVmcmVzaE9mUHJvcHMgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm4gdGhlIGNvbnRyb2wgKHdoaWNoIGlzIG5vdCB0aGUgZnJhbWUgZm9ybSkgd2l0aCBhIGdpdmVuIG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybE5hbWVcIj50aGUgb2YgdGhlIHJlcXVlc3RlZCBjb250cm9sPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsVHlwZVwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVwZWF0YWJsZU9ubHlcIj5zaG91bGQgYmUgdHJ1ZSBpbiBvcmRlciB0byByZWZyZXNoIG9ubHkgdGhlIGNvbnRyb2xzIHRoYXQgYmVsb25nIHRvIGEgdGFibGU8L3BhcmFtPlxyXG4gIGFzeW5jIHJlZnJlc2hDb250cm9scyhyZXBlYXRhYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGN0cmw6IE1nQ29udHJvbEJhc2U7XHJcbiAgICAvLyByZWNvcmQgZG9lcyBub3QgZXhpc3RcclxuICAgIGlmICh0aGlzLkRpc3BsYXlMaW5lID09PSBJbnQzMi5NaW5WYWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIHJlZnJlc2ggdGhlIHRhYmxlIGZpcnN0XHJcbiAgICBpZiAodGhpcy5fdGFibGVNZ0NvbnRyb2wgIT09IG51bGwgJiYgIXJlcGVhdGFibGVPbmx5KVxyXG4gICAgICBhd2FpdCB0aGlzLl90YWJsZU1nQ29udHJvbC5SZWZyZXNoRGlzcGxheSgpO1xyXG5cclxuICAgIC8vIHJlZnJlc2ggYWxsIENPTFVNTlMgKHJlZnJlc2ggZm9yIGVhY2ggY29udHJvbCBiYXNlIG9uIHRoZSByZWZyZXNoIG9mIHRoZSBjb2x1bW4gKGUuZzpjb2x1bW4gd2lkdGgpXHJcbiAgICAvLyBzbyB3ZSBtdXN0IHJlZnJlc2ggdGhlIGNvbHVtbiBmaXJzdFxyXG4gICAgaWYgKHRoaXMuX3RhYmxlQ29sdW1ucyAhPT0gbnVsbCAmJiAhcmVwZWF0YWJsZU9ubHkpIHtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3RhYmxlQ29sdW1ucy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCBtZ0NvbnRyb2xCYXNlOiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5fdGFibGVDb2x1bW5zLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIGF3YWl0IG1nQ29udHJvbEJhc2UuUmVmcmVzaERpc3BsYXkoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tBbmRDcmVhdGVSb3codGhpcy5EaXNwbGF5TGluZSk7XHJcblxyXG4gICAgLy8gUUNSICM3MDk1NjMgTXVzdCByZWZyZXNoIGZyYW1lc2V0J3Mgc3ViZnJvbXMgYmVmb3JlIHdlIHJlZnJlc2ggZnJhbWVzZXQgaXRzZWxmLlxyXG4gICAgLy8gRHVyaW5nIHJlZnJlc2ggb2YgdGhlIGZyYW1lc2V0IG5lc3RlZCBzdWJmb3JtcyB3aXRoIFJlZnJlc2hXaGVuSGlkZGVuIG1pZ2h0IGJlIGJyb3VnaHQgdG8gc2VydmVyXHJcbiAgICAvLyBidXQgdGhlaXIgc3ViZm9ybSdzIGNvbnRyb2xzIGhhdmUgbm90IGJlZW4gc2V0IHdpdGggY29ycmVjdCBib3VuZHMuIFRoaXMgY2F1c2VzIGlsbGVnYWwgcGxhY2VtZW50XHJcbiAgICAvLyBhbmQgaW5jb3JyZWN0IGZpbmFsIGxvY2F0aW9uIG9mIGNvbnRyb2xzIG9uIG5lc3RlZCBzdWJmb3Jtc1xyXG4gICAgbGV0IHRhYkFuZEdyb3VwQ29udHJvbHM6IFN0YWNrPE1nQ29udHJvbEJhc2U+ID0gbmV3IFN0YWNrPE1nQ29udHJvbEJhc2U+KCk7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuQ3RybFRhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICBjdHJsID0gdGhpcy5DdHJsVGFiLmdldEN0cmwoaSk7XHJcbiAgICAgIGlmICgoY3RybC5pc1RhYkNvbnRyb2woKSB8fCBjdHJsLmlzR3JvdXAoKSkgJiYgIXJlcGVhdGFibGVPbmx5KSB7XHJcbiAgICAgICAgdGFiQW5kR3JvdXBDb250cm9scy5wdXNoKGN0cmwpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGN0cmwuVHlwZSAhPT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEFCTEUgJiYgY3RybC5UeXBlICE9PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT0xVTU4pIHtcclxuICAgICAgICBpZiAoY3RybC5Jc1JlcGVhdGFibGUgfHwgIXJlcGVhdGFibGVPbmx5KVxyXG4gICAgICAgICAgYXdhaXQgY3RybC5SZWZyZXNoRGlzcGxheSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKGN0cmwuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEFCTEUgJiYgcmVwZWF0YWJsZU9ubHkpXHJcbiAgICAgICAgYXdhaXQgY3RybC5SZWZyZXNoRGlzcGxheShyZXBlYXRhYmxlT25seSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj48L3BhcmFtPlxyXG4gIG1hcmtSb3dOT1RDcmVhdGVkKGlkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBDb21tYW5kcy5hZGRXaXRoTnVtYmVyKENvbW1hbmRUeXBlLlVORE9fQ1JFQVRFX1RBQkxFX1JPVywgdGhpcy5fdGFibGVNZ0NvbnRyb2wsIGlkeCk7XHJcblxyXG4gICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IHRoaXMuUm93cy5sZW5ndGgpXHJcbiAgICAgIHRoaXMuUm93cy5zZXRfSXRlbShpZHgsIG5ldyBSb3coZmFsc2UsIGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdmFsaWRhdGUgcm93XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgU2VsZWN0Um93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5TZWxlY3RSb3dCeUlkeCh0aGlzLkRpc3BsYXlMaW5lKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHVibGljKVxyXG4gIC8vLyBjaGVjayBpZiBzcGVjaWZpZWQgcm93IGlzIHZhbGlkIHJvdyBpbiBwYWdlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlZnJlc2ggdGhlIGNvbnRyb2xzIG9mIHRoZSBjdXJyZW50IHJvd1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gaW50IGlzIHRoZSB0YWJsZSBzaXplPC9yZXR1cm5zPlxyXG4gIGdldFJvd3NJblBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9yb3dzSW5QYWdlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBpbnQgaXMgdGhlIHRhYmxlIHNpemU8L3JldHVybnM+XHJcbiAgZ2V0TWF4Um93c0luUGFnaW5hdGVkVGFibGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhSb3dzSW5QYWdpbmF0ZWRUYWJsZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgUm93IGlzIGNyZWF0ZWQgb24gR1VJIGxldmVsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPjwvcGFyYW0+XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2l6ZVwiPnRoZSB0YWJsZSBzaXplPC9wYXJhbT5cclxuICBzZXRSb3dzSW5QYWdlKHNpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fcm93c0luUGFnZSA9IHNpemU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgbWFya3MgdGhpcyByb3cgYXMgbm90IGNyZWF0ZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldENvbHVtbnNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvbHVtbnNDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5DdHJsVGFiICE9PSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgY29udHJvbDogTWdDb250cm9sQmFzZSA9IHRoaXMuQ3RybFRhYi5nZXRDdHJsKGkpO1xyXG4gICAgICAgIGlmIChjb250cm9sLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NPTFVNTilcclxuICAgICAgICAgIGNvbHVtbnNDb3VudCA9IGNvbHVtbnNDb3VudCArIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uc0NvdW50O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaW5SZWZyZXNoRGlzcGxheSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pblJlZnJlc2hEaXNwO1xyXG4gIH1cclxuXHJcbiAgc2V0VGl0bGUobmV3VGl0bGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgQ29tbWFuZHMuc2V0VGl0bGUodGhpcywgbmV3VGl0bGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgXCJpbiByZWZyZXNoIGRpc3BsYXlcIiBmbGFnXHJcblxyXG4gIGdldENvbnRyb2xJZHgoY3RybDogTWdDb250cm9sQmFzZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5DdHJsVGFiLmdldENvbnRyb2xJZHgoY3RybCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV4ZWN1dGUgdGhlIGxheW91dCBhbmQgYWxsIGl0cyBjaGlsZHJlblxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRvcEluZGV4RnJvbUdVSSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHRvcERpc3BsYXlMaW5lOiBudW1iZXIgPSAwO1xyXG4gICAgaWYgKHRoaXMuaGFzVGFibGUoKSlcclxuICAgICAgdG9wRGlzcGxheUxpbmUgPSBDb21tYW5kcy5nZXRUb3BJbmRleCh0aGlzLmdldE1haW5Db250cm9sKCkpO1xyXG4gICAgcmV0dXJuIHRvcERpc3BsYXlMaW5lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUUlVFIGlmIHRoaXMgZ3JvdXAgaXMgdGhlIGxhc3QgZ3JvdXAgaW4gdGhlIHRvb2xiYXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ3JvdXBOdW1iZXJcIj48L3BhcmFtPlxyXG5cclxuICAvLy8gPHJldHVybnM+IHRhYmxlIGl0ZW1zIGNvdW50PC9yZXR1cm5zPlxyXG4gIGdldFRhYmxlSXRlbXNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlSXRlbXNDb3VudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gVGFibGUgY29udHJvbCBpcyBhbHdheXMgZmlyc3Qgb24gdGhlIGZvcm1cclxuICAvLy8gV2hlbiB0YWJsZSBpcyBhIGNoaWxkIG9mIHRhYiwgaXQgaXMgY3JlYXRlZCBiZWZvcmUgdGFiJ3MgbGF5ZXJzKFRhYlBhZ2VzKSBhcmUgY3JlYXRlZC5cclxuICAvLy8gQ29tcHV0aW5nIFRhYidzIGNoaWxkcmVuIGNvb3JkaW5hdGVzIGRlcGVuZHMgb24gdGhlIFRhYlBhZ2VzIGJlaW5nIGNyZWF0ZWRcclxuICAvLy8gU28sIHdlIG11c3QgZml4IHRhYmxlJ3MgbG9jYXRpb24gYWZ0ZXIgVGFiIGlzIGNyZWF0ZWRcclxuICAvLy8gUUNSICMyODk5NjZcclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZW1vdmVSZWZzVG9DdHJscygpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgdGhpcy5DdHJsVGFiLmdldEN0cmwoaSkucmVtb3ZlUmVmRnJvbUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHRoaXMgZm9ybSBtYXkgaGF2ZSBBY3RpdmVSb3dIaWdodGxpZ2h0U3RhdGVcclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBidWlsZFRhYmxlQ2hpbGRyZW4oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdGFibGVDaGlsZHJlbiA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl90YWJsZUNoaWxkcmVuID0gbmV3IExpc3Q8TWdDb250cm9sQmFzZT4oKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLkN0cmxUYWIgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgbWluVGFiT3JkZXI6IG51bWJlciA9IDIxNDc0ODM2NDc7XHJcbiAgICAgICAgbGV0IGF1dG9tYXRpY1RhYmJpbmdPcmRlcjogYm9vbGVhbiA9IHRoaXMuaXNBdXRvbWF0aWNUYWJiaW5nT3JkZXIoKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuQ3RybFRhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgbGV0IGN0cmw6IE1nQ29udHJvbEJhc2UgPSB0aGlzLkN0cmxUYWIuZ2V0Q3RybChpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY3RybC5Jc1JlcGVhdGFibGUgfHwgY3RybC5Jc1RhYmxlSGVhZGVyQ2hpbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGFibGVDaGlsZHJlbi5wdXNoKGN0cmwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGF1dG9tYXRpY1RhYmJpbmdPcmRlcikge1xyXG4gICAgICAgICAgICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IGN0cmwuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJfT1JERVIpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAocHJvcCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlSW50OiBudW1iZXIgPSBwcm9wLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVJbnQgPCBtaW5UYWJPcmRlcilcclxuICAgICAgICAgICAgICAgICAgbWluVGFiT3JkZXIgPSB2YWx1ZUludDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtaW5UYWJPcmRlciAhPT0gSW50MzIuTWF4VmFsdWUgJiYgYXV0b21hdGljVGFiYmluZ09yZGVyKSB7XHJcbiAgICAgICAgICB0aGlzLl9maXJzdFRhYmxlVGFiT3JkZXIgPSBtaW5UYWJPcmRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHByZXYgZ3JvdXAgaW5kZXggaWYgZXhpc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3Vyckdyb3VwXCI+PC9wYXJhbT5cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YWJsZUN0cmxcIj50aGUgdGFibGVDdHJsIHRvIHNldDwvcGFyYW0+XHJcbiAgc2V0VGFibGVDdHJsKHRhYmxlQ3RybDogTWdDb250cm9sQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFibGVNZ0NvbnRyb2wgPSB0YWJsZUN0cmw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPjwvcGFyYW0+XHJcblxyXG4gIGdldEN0cmxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3RybFRhYi5nZXRTaXplKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldENvbnRyb2xzQ291bnRFeGNsdWRpbmdTdGF0dXNCYXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgcmVmcmVzaFByb3BzT25FeHByZXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBzaXplOiBudW1iZXIgPSAodGhpcy5fcHJvcFRhYiA9PSBudWxsID8gMCA6IHRoaXMuX3Byb3BUYWIuZ2V0U2l6ZSgpKTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eTtcclxuICAgIGxldCByZWZyZXNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZSAmJiAhcmVmcmVzaDsgaSsrKSB7XHJcbiAgICAgIHByb3AgPSB0aGlzLl9wcm9wVGFiLmdldFByb3AoaSk7XHJcbiAgICAgIGlmIChwcm9wLmlzRXhwcmVzc2lvbigpKSB7XHJcbiAgICAgICAgcmVmcmVzaCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJvcHMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRUYWJDb250cm9sKGN0cmw6IE1nQ29udHJvbEJhc2UpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIGxldCBvYmo6IE9iamVjdDtcclxuICAgIGxldCByZXN1bHQ6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG5cclxuICAgIG9iaiA9IGN0cmw7XHJcbiAgICB3aGlsZSAob2JqIGluc3RhbmNlb2YgTWdDb250cm9sQmFzZSkge1xyXG4gICAgICBsZXQgY3VyckN0cmwgPSA8TWdDb250cm9sQmFzZT5vYmo7XHJcbiAgICAgIGlmIChjdXJyQ3RybC5pc1RhYkNvbnRyb2woKSkge1xyXG4gICAgICAgIHJlc3VsdCA9IGN1cnJDdHJsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIG9iaiA9IGN1cnJDdHJsLmdldFBhcmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGN0cmwgaXMgbm90IHRhYiBhbmQgbm90IHRhYidzIGNoaWxkIC0gZmluZCBmaXJzdCB0YWIgaW4gdGhlIGZvcm1cclxuICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5DdHJsVGFiLmdldFNpemUoKTsgaSsrKSB7XHJcbiAgICAgICAgb2JqID0gdGhpcy5DdHJsVGFiLmdldEN0cmwoaSk7XHJcbiAgICAgICAgaWYgKCg8TWdDb250cm9sQmFzZT5vYmopLmlzVGFiQ29udHJvbCgpKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSA8TWdDb250cm9sQmFzZT5vYmo7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBjb250cm9scyBvZiB0aGlzIGZvcm1cclxuXHJcbiAgSXNJbnB1dFR5cGUoY3RybDogTWdDb250cm9sQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChjdHJsLlR5cGUpIHtcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DSEVDS0JPWDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9URVhUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NPTUJPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0xJU1Q6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfUkFESU86XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBsaXN0IG9mIHRhYmxlIGNoaWxkcmVuXHJcblxyXG4gIHB1YmxpYyBHZXRMaXN0T2ZJbnB1dENvbnRyb2xzKCk6IGFueSB7XHJcbiAgICBsZXQgZmlsdGVydGVyTGlzdCA9IHRoaXMuQ3RybFRhYi5maWx0ZXIoKChjKSA9PiB0aGlzLklzSW5wdXRUeXBlKGMpKSk7XHJcbiAgICBsZXQgbmFtZXMgPSBmaWx0ZXJ0ZXJMaXN0LnJlZHVjZSgocHJlLCBjdHJsKSA9PiB7XHJcbiAgICAgIHByZVtjdHJsLlVuaXF1ZU5hbWVdID0gY3RybC5Jc1JlcGVhdGFibGUgPyAnMScgOiAnMCc7XHJcbiAgICAgIHJldHVybiBwcmU7XHJcbiAgICB9LCB7fSk7XHJcbiAgICByZXR1cm4gbmFtZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBhYnN0cmFjdCBDb25zdHJ1Y3RNZ0NvbnRyb2woKTogTWdDb250cm9sQmFzZTtcclxuXHJcbiAgLy8gZ2V0R3VpVGFibGVDaGlsZHJlbigpOiBMaXN0PEd1aU1nQ29udHJvbD4ge1xyXG4gIC8vICAgbGV0IGZsYWc6IGJvb2xlYW4gPSB0aGlzLl9ndWlUYWJsZUNoaWxkcmVuID09PSBudWxsO1xyXG4gIC8vICAgaWYgKGZsYWcpIHtcclxuICAvLyAgICAgdGhpcy5fZ3VpVGFibGVDaGlsZHJlbiA9IG5ldyBMaXN0PEd1aU1nQ29udHJvbD4oKTtcclxuICAvLyAgICAgbGV0IHRhYmxlQ2hpbGRyZW46IExpc3Q8TWdDb250cm9sQmFzZT4gPSB0aGlzLlRhYmxlQ2hpbGRyZW47XHJcbiAgLy8gICAgIGxldCBlbnVtZXJhdG9yOiBMaXN0X0VudW1lcmF0b3I8TWdDb250cm9sQmFzZT4gPSB0YWJsZUNoaWxkcmVuLkdldEVudW1lcmF0b3IoKTtcclxuICAvLyAgICAgdHJ5IHtcclxuICAvLyAgICAgICB3aGlsZSAoZW51bWVyYXRvci5Nb3ZlTmV4dCgpKSB7XHJcbiAgLy8gICAgICAgICBsZXQgY3VycmVudDogTWdDb250cm9sQmFzZSA9IGVudW1lcmF0b3IuQ3VycmVudDtcclxuICAvLyAgICAgICAgIHRoaXMuX2d1aVRhYmxlQ2hpbGRyZW4uQWRkKGN1cnJlbnQpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBmaW5hbGx5IHtcclxuICAvLyAgICAgICAoPElEaXNwb3NhYmxlPmVudW1lcmF0b3IpLkRpc3Bvc2UoKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2d1aVRhYmxlQ2hpbGRyZW47XHJcbiAgLy8gfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0cyB0aGUgdGFibGUgY29udHJvbCByZWxhdGVkIHRvIHRoaXMgZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmVmcmVzaCBmb3JtIGRpc3BsYXkgaWYgaXQgaGFzIGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gZXhwcmVzc2lvblxyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpcnN0VGFibGVSZWZyZXNoKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlTWdDb250cm9sICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3Jvd3NJblBhZ2UgPSBDb21tYW5kcy5nZXRSb3dzSW5QYWdlKHRoaXMuX3RhYmxlTWdDb250cm9sKTtcclxuICAgICAgdGhpcy5SZWZyZXNoUmVwZWF0YWJsZUFsbG93ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHVwZGF0ZSB0YWJsZSBpdGVtJ3MgY291bnQgYWNjb3JkaW5nIHRvIHBhcmFtZXRlciBzaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImR2c2l6ZVwiPm5ldyBkdnNpemU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFibGVJdGVtc0NvdW50XCI+bmV3IHRhYmxlSXRlbXNDb3VudDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZW1vdmVBbGxcIj5yZW1vdmUgYWxsIGVsZW1lbnRzIGZvcm0gdGhlIHRhYmxlIGluY2x1ZGluZyBmaXJzdCBhbmQgbGFzdCBkdW1teSBlbGVtZW50czwvcGFyYW0+XHJcbiAgU2V0VGFibGVJdGVtc0NvdW50KGR2c2l6ZTogbnVtYmVyLCByZW1vdmVBbGw6IGJvb2xlYW4pOiB2b2lkXHJcbiAgU2V0VGFibGVJdGVtc0NvdW50KGR2c2l6ZTogbnVtYmVyLCB0YWJsZUl0ZW1zQ291bnQ6IG51bWJlciwgcmVtb3ZlQWxsOiBib29sZWFuKTogdm9pZDtcclxuICBTZXRUYWJsZUl0ZW1zQ291bnQoZHZzaXplOiBudW1iZXIsIHRhYmxlSXRlbXNDb3VudE9yUmVtb3ZlQWxsOiBhbnksIHJlbW92ZUFsbD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICBpZiAodHlwZW9mIHRhYmxlSXRlbXNDb3VudE9yUmVtb3ZlQWxsID09ICdib29sZWFuJyl7XHJcbiAgICAgIHRoaXMuU2V0VGFibGVJdGVtc0NvdW50XzAoZHZzaXplLCB0YWJsZUl0ZW1zQ291bnRPclJlbW92ZUFsbCk7XHJcbiAgICB9IGVsc2VcclxuICAgICAgdGhpcy5TZXRUYWJsZUl0ZW1zQ291bnRfMShkdnNpemUsIHRhYmxlSXRlbXNDb3VudE9yUmVtb3ZlQWxsLCByZW1vdmVBbGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBTZXRUYWJsZUl0ZW1zQ291bnRfMChkdnNpemU6IG51bWJlciwgcmVtb3ZlQWxsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLlNldFRhYmxlSXRlbXNDb3VudF8xKGR2c2l6ZSwgZHZzaXplLCByZW1vdmVBbGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBTZXRUYWJsZUl0ZW1zQ291bnRfMShkdnNpemU6IG51bWJlciwgdGFibGVJdGVtc0NvdW50OiBudW1iZXIsIHJlbW92ZUFsbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5Jbml0VGFibGVDb250cm9sKGR2c2l6ZSwgdGFibGVJdGVtc0NvdW50LCByZW1vdmVBbGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbml0cyB0aGUgdGFibGUgY29udHJvbFxyXG4gIC8vLyB1cGRhdGUgdGFibGUgaXRlbSdzIGNvdW50IGFjY29yZGluZyB0byBwYXJhbWV0ZXIgZHZzaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBJbml0VGFibGVDb250cm9sKCk6IHZvaWQ7XHJcbiAgSW5pdFRhYmxlQ29udHJvbChkdlNpemU6IG51bWJlciwgdGFibGVJdGVtc0NvdW50OiBudW1iZXIsIHJlbW92ZUFsbDogYm9vbGVhbik6IHZvaWQ7XHJcbiAgSW5pdFRhYmxlQ29udHJvbChkdlNpemU/OiBudW1iZXIsIHRhYmxlSXRlbXNDb3VudD86IG51bWJlciwgcmVtb3ZlQWxsPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5Jbml0VGFibGVDb250cm9sXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5Jbml0VGFibGVDb250cm9sXzEoZHZTaXplLCB0YWJsZUl0ZW1zQ291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB1cGRhdGUgYXJyYXlzIG9mIHRhYmxlIGNoaWxkcmVuIGNvbnRyb2xzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzaXplXCI+PC9wYXJhbT5cclxuICBVcGRhdGVUYWJsZUNoaWxkcmVuQXJyYXlzU2l6ZShzaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBjaGlsZHJlbjogTGlzdDxNZ0NvbnRyb2xCYXNlPiA9IHRoaXMuVGFibGVDaGlsZHJlbjtcclxuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gY2hpbGRyZW4uZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgY29udHJvbC51cGRhdGVBcnJheXMoc2l6ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl90YWJsZU1nQ29udHJvbCAhPSBudWxsKVxyXG4gICAgICB0aGlzLl90YWJsZU1nQ29udHJvbC51cGRhdGVBcnJheXMoc2l6ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmluZCB0YWIgY29udHJvbCBmb3IgcGVyZm9ybWluZyBDVFJMK1RBQiAmJiBDVFJMK1NISUZUK1RBQiBhY3Rpb25zXHJcbiAgLy8vICAgdGhlIGNvZGUgb3JpZ2luYWwgaXMgaW4gUlQ6OnNraXBfdG9fdGFiX2NvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPmN1cnJlbnQgY29udHJvbDwvcGFyYW0+XHJcblxyXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ3tHdWlNZ0Zvcm0nICsgJzogSWQ9JyArIHRoaXMuX3VzZXJTdGF0ZUlkICsgJ30nO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBJbmNsdWRlQ29udHJvbEluVGFiYmluZ09yZGVyKGNvbnRyb2w6IE1nQ29udHJvbEJhc2UpOiBib29sZWFuIHtcclxuICAgIGlmICghY29udHJvbC5Qcm9wZXJ0eUV4aXN0cyhQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJfT1JERVIpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIEdldEhhc2hDb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuRm9ybUlzbjtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIGluaXRJbm5lck9iamVjdHMoZm91bmRUYWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcblxyXG4gICAgbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5QYXJzZXI7XHJcbiAgICBpZiAoTWdGb3JtQmFzZS5Jc0Zvcm1UYWcoZm91bmRUYWdOYW1lKSlcclxuICAgICAgdGhpcy5maWxsTmFtZShmb3VuZFRhZ05hbWUpO1xyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX1BST1ApXHJcbiAgICAgIHRoaXMuX3Byb3BUYWIuZmlsbERhdGEodGhpcywgJ0YnLCBwYXJzZXIpO1xyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0NPTlRST0wpIHtcclxuICAgICAgdGhpcy5DdHJsVGFiLmZpbGxEYXRhKHRoaXMsIHBhcnNlcik7XHJcbiAgICAgIC8vdGhpcy5pbml0Q29udGV4dFByb3BGb3JDb250cm9scygpO1xyXG4gICAgICBpZiAoIXRoaXMuSGFzVGFibGUoKSlcclxuICAgICAgICB0aGlzLlJlZnJlc2hSZXBlYXRhYmxlQWxsb3dlZCA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKE1nRm9ybUJhc2UuSXNFbmRGb3JtVGFnKGZvdW5kVGFnTmFtZSkpIHtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2VcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBNZ0NvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInR5cGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhc2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcmVudENvbnRyb2xcIj48L3BhcmFtPlxyXG5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc1Jvd0NyZWF0ZWQoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLlJvd3MubGVuZ3RoIDw9IGlkeCB8fCBpZHggPCAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcm93OiBSb3cgPSB0aGlzLlJvd3MuZ2V0X0l0ZW0oaWR4KTtcclxuICAgIGlmIChyb3cgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gcm93LkNyZWF0ZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGJ1aWxkTGlua2VkQ29udHJvbHNMaXN0cygpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IGN0cmw6IE1nQ29udHJvbEJhc2UgPSB0aGlzLkN0cmxUYWIuZ2V0Q3RybChpKTtcclxuICAgICAgbGV0IGxpbmtlZFBhcmVudDogTWdDb250cm9sQmFzZSA9IDxNZ0NvbnRyb2xCYXNlPmN0cmwuZ2V0TGlua2VkUGFyZW50KGZhbHNlKTtcclxuICAgICAgaWYgKGxpbmtlZFBhcmVudCAhPT0gbnVsbClcclxuICAgICAgICBsaW5rZWRQYXJlbnQubGlua0N0cmwoY3RybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkIGxpc3Qgb2YgYWxsIGNvbHVtbnMgY29udHJvbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYnVpbGRUYWJsZUNvbHVtbnNMaXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlTWdDb250cm9sICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3RhYmxlQ29sdW1ucyA9IG5ldyBMaXN0PE1nQ29udHJvbEJhc2U+KCk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLkN0cmxUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgY29udHJvbDogTWdDb250cm9sQmFzZSA9IHRoaXMuQ3RybFRhYi5nZXRDdHJsKGkpO1xyXG4gICAgICAgIGlmIChjb250cm9sLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NPTFVNTilcclxuICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1ucy5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB1cGRhdGUgYXJyYXlzIG9mIHRhYmxlIGNoaWxkcmVuIGNvbnRyb2xzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgY3JlYXRlUm93KGlkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBDb21tYW5kcy5hZGRXaXRoTnVtYmVyKENvbW1hbmRUeXBlLkNSRUFURV9UQUJMRV9ST1csIHRoaXMuX3RhYmxlTWdDb250cm9sLCBpZHgpO1xyXG5cclxuICAgIGlmICh0aGlzLlJvd3MubGVuZ3RoIDw9IGlkeClcclxuICAgICAgdGhpcy5Sb3dzLlNldFNpemUoaWR4ICsgMSk7XHJcblxyXG4gICAgdGhpcy5Sb3dzLnNldF9JdGVtKGlkeCwgbmV3IFJvdyh0cnVlLCB0cnVlKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBNYXJrIGEgcm93IGFzIHNlbGVjdGVkIHJvd1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyb3dJZHhcIj5yb3cgdG8gc2VsZWN0PC9wYXJhbT5cclxuICBwcml2YXRlIFNlbGVjdFJvd0J5SWR4KHJvd0lkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAvLyBjb250cm9sRm9yU2VsZWN0IGNhbiBiZSB0YWJsZSBjb250cm9sIG9yIHRyZWUgY29udHJvbFxyXG4gICAgbGV0IG1haW5Db250cm9sOiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5nZXRNYWluQ29udHJvbCgpO1xyXG5cclxuICAgIGlmIChtYWluQ29udHJvbCAhPT0gbnVsbCAmJiB0aGlzLlJlZnJlc2hSZXBlYXRhYmxlQWxsb3dlZCkge1xyXG4gICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHJvd0lkeDtcclxuICAgICAgaWYgKHRoaXMuX3Rhc2suRGF0YVZpZXcuaXNFbXB0eURhdGF2aWV3KCkpXHJcbiAgICAgICAgaW5kZXggPSBHdWlDb25zdGFudHMuTk9fUk9XX1NFTEVDVEVEO1xyXG5cclxuICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLl9wcmV2U2VsSW5kZXgpIHtcclxuICAgICAgICB0aGlzLl9wcmV2U2VsSW5kZXggPSBpbmRleDtcclxuICAgICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFksIG1haW5Db250cm9sLCAwLCBIdG1sUHJvcGVydGllcy5TZWxlY3RlZFJvdywgaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBmb3JjZSBhbGwgTWdDb250cm9scyB0byB1cGRhdGUgdGhlIGNvbG9ycyB1c2VkIG9uIHRoZSBjb250cm9sc1xyXG5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgSW5pdFRhYmxlQ29udHJvbF8wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5Jbml0VGFibGVDb250cm9sKDEsIDEsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVtb3ZlQWxsXCI+cmVtb3ZlIGFsbCBlbGVtZW50cyBmb3JtIHRoZSB0YWJsZSBpbmNsdWRpbmcgZmlyc3QgYW5kIGxhc3QgZHVtbXkgZWxlbWVudHM8L3BhcmFtPlxyXG4gIHByaXZhdGUgSW5pdFRhYmxlQ29udHJvbF8xKGR2U2l6ZTogbnVtYmVyLCB0YWJsZUl0ZW1zQ291bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlTWdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkV2l0aE51bWJlcihDb21tYW5kVHlwZS5TRVRfVEFCTEVfSVRFTVNfQ09VTlQsIHRoaXMuX3RhYmxlTWdDb250cm9sLCB0YWJsZUl0ZW1zQ291bnQpO1xyXG4gICAgICBDb21tYW5kcy5hZGRXaXRoTnVtYmVyKENvbW1hbmRUeXBlLlNFVF9DSFVOS19TSVpFLCB0aGlzLl90YWJsZU1nQ29udHJvbCwgKHRoaXMuX3Rhc2suRGF0YVZpZXcpLmdldENodW5rU2l6ZSgpKTtcclxuICAgICAgdGhpcy5fdGFibGVJdGVtc0NvdW50ID0gdGFibGVJdGVtc0NvdW50O1xyXG4gICAgICB0aGlzLlJvd3MuU2V0U2l6ZShkdlNpemUpO1xyXG4gICAgICB0aGlzLl9wcmV2R3VpVG9wSW5kZXggPSAtMjtcclxuICAgICAgdGhpcy5fcHJldlNlbEluZGV4ID0gLTI7XHJcbiAgICAgIHRoaXMuVXBkYXRlVGFibGVDaGlsZHJlbkFycmF5c1NpemUoZHZTaXplKTtcclxuICAgICAgdGhpcy5fbWF4Um93c0luUGFnaW5hdGVkVGFibGUgPSBDb21tYW5kcy5nZXRNYXhSb3dzSW5QYWdpbmF0ZWRUYWJsZSh0aGlzLl90YWJsZU1nQ29udHJvbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHVwZGF0ZSBhcnJheXMgb2YgdGFibGUgY2hpbGRyZW4gY29udHJvbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNpemVcIj48L3BhcmFtPlxyXG4gIHB1YmxpYyBJbnNlcnRUYWJsZUNoaWxkcmVuQXJyYXlzKGlkeDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgIGxldCBjaGlsZHJlbjogTGlzdDxNZ0NvbnRyb2xCYXNlPiA9IHRoaXMuVGFibGVDaGlsZHJlbjtcclxuICAgICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGxldCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgY29udHJvbC5JbnNlcnRBcnJheXMoaWR4LCBjb3VudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2xhc3MgZGVzY3JpYmluZyByb3dcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxhdXRob3I+cmluYXY8L2F1dGhvcj5cclxuZXhwb3J0IGNsYXNzIFJvdyB7XHJcbiAgQ3JlYXRlZDogYm9vbGVhbiA9IGZhbHNlOyAgICAgLy8gaXMgcm93IGNyZWF0ZWQgb24gZ3VpIGxldmVsXHJcbiAgVmFsaWRhdGVkOiBib29sZWFuID0gZmFsc2U7ICAgLy8gaXMgcm93IFZhbGlkYXRlZFxyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKGNyZWF0ZWQ6IGJvb2xlYW4sIHZhbGlkYXRlZDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IoY3JlYXRlZD86IGJvb2xlYW4sIHZhbGlkYXRlZD86IGJvb2xlYW4pIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoY3JlYXRlZCwgdmFsaWRhdGVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuVmFsaWRhdGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShjcmVhdGVkOiBib29sZWFuLCB2YWxpZGF0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuQ3JlYXRlZCA9IGNyZWF0ZWQ7XHJcbiAgICB0aGlzLlZhbGlkYXRlZCA9IHZhbGlkYXRlZDtcclxuICB9XHJcbn1cclxuIl19
|