@eui/components 14.0.11 → 14.0.12-snapshot-1674204393147
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/docs/index.html +1 -1
- package/docs/interfaces/CleaveInstance.html +982 -0
- package/docs/js/menu-wc.js +3 -0
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/esm2020/eui-input-number/eui-input-number.component.mjs +8 -13
- package/eui-input-number/eui-input-number.component.d.ts.map +1 -1
- package/fesm2015/eui-components-eui-input-number.mjs +4 -9
- package/fesm2015/eui-components-eui-input-number.mjs.map +1 -1
- package/fesm2020/eui-components-eui-input-number.mjs +7 -12
- package/fesm2020/eui-components-eui-input-number.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -321,19 +321,14 @@ export class EuiInputNumberComponent extends InputDirective {
|
|
|
321
321
|
if (this.cleaveInstance) {
|
|
322
322
|
// the value before destroying cleave instance
|
|
323
323
|
const previousValue = this.cleaveInstance.getRawValue();
|
|
324
|
-
//
|
|
325
|
-
this.cleaveInstance.
|
|
326
|
-
|
|
327
|
-
// and bind to 'this' reference. Inside onValueChanged there is a call
|
|
328
|
-
// to this.cleaveInstance which was using the old one, causing loop (max call stack)
|
|
329
|
-
// So it is essential to set it to null before creating a new instance.
|
|
330
|
-
this.cleaveInstance = null;
|
|
331
|
-
// create the Cleave instance with the new or updated options
|
|
332
|
-
this.cleaveInstance = new Cleave(this._elementRef.nativeElement, {
|
|
324
|
+
// update the Cleave instance with the new or updated options
|
|
325
|
+
this.cleaveInstance.properties = {
|
|
326
|
+
...this.cleaveInstance.properties,
|
|
333
327
|
...this.options,
|
|
334
|
-
initValue: previousValue
|
|
335
|
-
|
|
336
|
-
|
|
328
|
+
initValue: previousValue
|
|
329
|
+
};
|
|
330
|
+
// init number formatter with updated options
|
|
331
|
+
this.cleaveInstance.initNumeralFormatter();
|
|
337
332
|
// In case previous settings where numeralDecimalMark='.' with value 1000.99 and they changed to
|
|
338
333
|
// numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will
|
|
339
334
|
// remove the decimal part. Set of the value after initialization causes reformat of number and works.
|
|
@@ -563,4 +558,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImpor
|
|
|
563
558
|
type: HostListener,
|
|
564
559
|
args: ['focusout', ['$event']]
|
|
565
560
|
}] } });
|
|
566
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWlucHV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktaW5wdXQtbnVtYmVyL2V1aS1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUVSLElBQUksRUFFSixpQkFBaUIsR0FFcEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUE2QixNQUFNLHVCQUF1QixDQUFDO0FBRS9HLE9BQU8sTUFBTSxNQUFNLFdBQVcsQ0FBQztBQUUvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBU3RFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxjQUFjO0lBdUZ2RCxZQUNrQyxPQUFrQixFQUN0QyxXQUF1QixFQUN2QixTQUFvQixFQUN0QixFQUFxQixFQUNyQixhQUE0QixFQUNwQyxRQUFrQjtRQUNsQixLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFObkIsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBMURoQyxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQXlDVyxTQUFJLEdBQUcsWUFBWSxDQUFDO1FBT2hELG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBK0Y1QixhQUFRLEdBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxP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clJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlLCBMb2NhbGVTdGF0ZSB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBCb29sZWFuSW5wdXQsIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IENsZWF2ZU9wdGlvbnMgfSBmcm9tICdjbGVhdmUuanMvb3B0aW9ucyc7XG5pbXBvcnQgQ2xlYXZlIGZyb20gJ2NsZWF2ZS5qcyc7XG5pbXBvcnQgeyBDbGVhdmVFdmVudE9uQ2hhbmdlIH0gZnJvbSAnLi9tb2RlbHMvY2xlYXZlLWV2ZW50LW9uY2hhbmdlLm1vZGVsJztcbmltcG9ydCB7IElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL3NoYXJlZCc7XG5pbXBvcnQgeyBnZXRMb2NhbGVOdW1iZXJTeW1ib2wsIE51bWJlclN5bWJvbCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdpbnB1dFtldWlJbnB1dE51bWJlcl06bm90KFtldWlJbnB1dENoZWNrQm94XSknLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlJbnB1dE51bWJlckNvbXBvbmVudCBleHRlbmRzIElucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gbnVtYmVyIGNhbiBiZSBlbnRlcmVkLiBCbG9ja3MgdXNlcidzIGlucHV0IGlmIG5vdCBpbiByYW5nZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbWluKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9taW4gPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX21pbjogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBjYW4gYmUgZW50ZXJlZC4gQmxvY2tzIHVzZXIncyBpbnB1dCBpZiBub3QgaW4gcmFuZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1heCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9tYXg6IG51bWJlcjtcbiAgICAvKiogQWRkcyBsZWFkaW5nIHplcm8gdG8gYSBudW1iZXIuIEZvcm1hdHRpbmcgd2lsbCBub3Qgd29yay5cbiAgICAgKiAgICAgIGUuZy4gd2l0aCBsZWFkaW5nWmVybz0zIGlucHV0IG51bWJlciA1ID0+IDAwNVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsZWFkaW5nWmVybygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZGluZ1plcm87XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbGVhZGluZ1plcm8odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX2xlYWRpbmdaZXJvID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9sZWFkaW5nWmVybyA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXNJbnZhbGlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkIHx8IG51bGw7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgaXNJbnZhbGlkKHN0YXRlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zZXRJbnZhbGlkKHN0YXRlKTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHN1cGVyLmdldENzc0NsYXNzZXMoJ2V1aS1pbnB1dC1udW1iZXInKSxcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZCA/IGBldWktaW5wdXQtbnVtYmVyLS1pbnZhbGlkYCA6ICcnLFxuICAgICAgICBdLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuICAgIC8qKiBob3cgbWFueSBkaWdpdHMgZm9yIHRoZSBkZWNpbWFsIHBhcnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBmcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fZnJhY3Rpb25EaWdpdHM7IH1cbiAgICBzZXQgZnJhY3Rpb25EaWdpdHModmFsdWU6IE51bWJlcklucHV0KSB7IHRoaXMuX2ZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpOyB9XG4gICAgLyoqIGhvdyBtYW55IGRpZ2l0cyBmb3IgdGhlIGludGVnZXIgcGFydCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpZ2l0cygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fZGlnaXRzOyB9XG4gICAgc2V0IGRpZ2l0cyh2YWx1ZTogTnVtYmVySW5wdXQpIHsgdGhpcy5fZGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpOyB9XG4gICAgQElucHV0KClcbiAgICBnZXQgZmlsbEZyYWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZmlsbEZyYWN0aW9uOyB9XG4gICAgc2V0IGZpbGxGcmFjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2ZpbGxGcmFjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICAvKiogcm91bmRzIGEgbnVtYmVyIHdpdGggbW9yZSB0aGFuIHR3byBkZWNpbWFscyBVUCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHJvdW5kVXAoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3JvdW5kVXA7IH1cbiAgICBzZXQgcm91bmRVcCh2YWx1ZTogTnVtYmVySW5wdXQpIHsgdGhpcy5fcm91bmRVcCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByb3RlY3RlZCBfaXNJbnZhbGlkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIGRvZXMgbm90IGZvcm1hdCB0aGUgYW5kIGRvIGEgdGhvdXNhbmQgZ3JvdXBpbmcgb2YgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgbm9Gb3JtYXQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9ub0Zvcm1hdDsgfVxuICAgIHNldCBub0Zvcm1hdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX25vRm9ybWF0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByb3RlY3RlZCBfbm9Gb3JtYXQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50eXBlJykgcHJvdGVjdGVkIHR5cGUgPSAnZXVpLW51bWJlcic7XG4gICAgQElucHV0KCkgdmFsdWU6IHN0cmluZztcblxuICAgIC8qKiBob2xkcyBpbnN0YW5jZSBvZiBjbGVhdmUgKi9cbiAgICBwcml2YXRlIGNsZWF2ZUluc3RhbmNlOiBDbGVhdmU7XG4gICAgLyoqIG9wdGlvbnMgZm9yIHRoZSBDbGVhdmUgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIG9wdGlvbnM6IENsZWF2ZU9wdGlvbnM7XG4gICAgcHJpdmF0ZSBfZnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIHByaXZhdGUgX2RpZ2l0czogbnVtYmVyO1xuICAgIHByaXZhdGUgX2ZpbGxGcmFjdGlvbjogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3JvdW5kVXA6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByb3RlY3RlZCBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9yZW5kZXJlciwgY29udHJvbCwgaW5qZWN0b3IpO1xuXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgLy8gc2V0IGNvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICAvLyBpbnN0YW50aWF0ZSBjbGVhdmVcbiAgICAgICAgdGhpcy5pbml0Q2xlYXZlKCk7XG5cbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGxvY2FsaXphdGlvbiBzZXJ2aWNlIGFuZCBsaXN0ZW4gZm9yIGxvY2FsZSBjaGFuZ2UuIERlLWNvbnN0cnVjdGlvbiBvZiBsb2NhbGUgc2hvdWxkIGhhcHBlbiBoZXJlIVxuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0U3RhdGUoKS5zdWJzY3JpYmUoIChzdGF0ZTogTG9jYWxlU3RhdGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZ2V0Q2xlYXZlT3B0c0Jhc2VkT25Mb2NhbGUoc3RhdGU/LmlkKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBvcHRpb25zIG9uIHRoZSBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmlzSW52YWxpZCA9IHRoaXMuY29udHJvbC5pbnZhbGlkICYmIHRoaXMuY29udHJvbC50b3VjaGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZnJhY3Rpb25EaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxEZWNpbWFsU2NhbGU6IHRoaXMuZnJhY3Rpb25EaWdpdHMgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdub0Zvcm1hdCcpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IHRoaXMubm9Gb3JtYXQgPyAnbm9uZScgOiAndGhvdXNhbmQnIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZmlsbEZyYWN0aW9uJykgJiYgdGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdkaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxJbnRlZ2VyU2NhbGU6IHRoaXMuZGlnaXRzIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWluJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydtaW4nXS5jdXJyZW50VmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRha2UgY2FyZSBvZiB0aGUgc2lnbiBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShNYXRoLmFicyhOdW1iZXIodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdyb3VuZFVwJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydyb3VuZFVwJ10uY3VycmVudFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSB0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICAvLyBkZXN0cm95IGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoYW5nZTogYW55ID0gKF8pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiAoXyAhPT0gbnVsbCB8fCBfICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAvLyBwYXJzZSBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKF8pO1xuICAgICAgICAgICAgLy8gcnVuIG9uIG5leHQgTWljcm9UYXNrIHRvIGF2b2lkIE5HMDEwMCBlcnJvciBUT0RPOiBkZWVwZXIgaW52ZXN0aWdhdGlvblxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbiggKCkgPT4gdGhpcy5jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIGNvbnRyb2wgaXMgRm9ybUNvbnRyb2xcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8uY29udHJvbC5zZXRWYWx1ZShpc05hTih2YWx1ZSkgPyBudWxsIDogdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0ludmFsaWQgPSB0aGlzLmNvbnRyb2wuaW52YWxpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHRoZSBudW1iZXIgZm9yIGNsZWF2ZSBpbnN0YW5jZSBhbmQgZGl2IGVsZW1lbnQgKHJlYWQgb25seSBtb2RlKVxuICAgICAqIEBwYXJhbSB2YWwgdGhlIG51bWJlciBmb3JtYXR0ZWQgb3Igbm90XG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uICYmIHZhbCAhPT0gJycgJiYgdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUodmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmV0cmlldmUgZm9ybWF0dGVkIHZhbHVlIChiYXNlZCBvbiBvcHRpb25zKSBhbmQgc2V0IHRoZSBudW1iZXIgdG8gdGhlIG1vZGVsXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LmNvbnRyb2wuc2V0VmFsdWUoaXNOYU4obnVtYmVyKSA/IG51bGwgOiBudW1iZXIsIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gZ2V0IHRoZSB2YWx1ZSBmcm9tIGNsaXBib2FyZFxuICAgICAgICBsZXQgdmFsdWUgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3dbJ2NsaXBib2FyZERhdGEnXSkuZ2V0RGF0YSgndGV4dCcpO1xuICAgICAgICAvLyBpbiBjYXNlIHJvdW5kIFVQIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX3JvdW5kVXAgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgY2xlYXZlSW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSW5zdGFuY2U6IENsZWF2ZSA9IG5ldyBDbGVhdmUoZGl2LCB7Li4udGhpcy5vcHRpb25zLCBudW1lcmFsRGVjaW1hbFNjYWxlOiA4fSk7XG4gICAgICAgICAgICBjbG9uZUluc3RhbmNlLnNldFJhd1ZhbHVlKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgbGV0IG51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KGNsb25lSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgICAgICBudW1iZXIgPSB0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSk7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogaW52ZXN0aWdhdGUgaW4gdGhlIGZ1dHVyZSBob3cgY2FuIHRoaXMgYmUgYXZvaWRlZFxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBzaW5nbGUgc3ltYm9sIGFuZCBub3QgU3BlY2lhbCBsaWtlIChDdHJsLCBiYWNrc3BhY2UgZXRjKVxuICAgICAgICBpZiAoZT8ua2V5Lmxlbmd0aCA8PSAxICYmICFlLmN0cmxLZXkgJiYgIWUuYWx0S2V5ICYmICFlLm1ldGFLZXkpIHtcbiAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gaWYga2V5IHByZXNzZWQgaXMgbm90IGEgbnVtYmVyIG9yIGxvY2FsZSBjaGFyYWN0ZXIgb3IgbWludXMgc2lnblxuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQoZS5rZXksIDEwKSkgJiYgdGhpcy5pc01pbnVzQWxsb3dlZChlLmtleSkgJiZcbiAgICAgICAgICAgICAgICAoZS5rZXkgIT09IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZVNlcnZpY2UuY3VycmVudExvY2FsZSwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gaWYga2V5IHByZXNzZWQgZXhjZWVkcyB0aGUgbWluL21heCB2YWx1ZSByYW5nZVxuICAgICAgICAgICAgfSBlbHNlIGlmICghTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChlLmtleSwgMTApKSAmJiB0aGlzLmlzT3V0U2lkZVJhbmdlKGUpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNPdXRTaWRlUmFuZ2UoZSkpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHByb3RlY3QgZGVjaW1hbCBzeW1ib2wgZGVsZXRpb24gaW4gY2FzZSBmaWxsRnJhY3Rpb24gaXMgb25cbiAgICAgICAgaWYgKChlLmtleSA9PT0gJ0RlbGV0ZScgfHwgZS5rZXkgPT09ICdCYWNrc3BhY2UnKSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIG9mIGNhcmV0XG4gICAgICAgICAgICBjb25zdCBwb3MgPSBlbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgLy8gZ2V0IGNoYXJhY3RlciBhYm91dCB0byBiZSBkZWxldGVkXG4gICAgICAgICAgICBjb25zdCBjaGFyID0gZWxlbWVudC52YWx1ZS5jaGFyQXQocG9zIC0gMSk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBjaGFyIGlzIHRoZSBkZWNpbWFsIHN5bWJvbCBwcmV2ZW50IGRlbGV0aW9uIGFuZCBtb3ZlIGNhcmV0IGluIGZyb250XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlU2VydmljZS5jdXJyZW50TG9jYWxlLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCkpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvcyAtIDEsIHBvcyAtIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzT3V0U2lkZVJhbmdlKGUpKSB7IC8vIGRvbid0IGFsbG93IGluc2VydGlvbiB0aGF0IHdpbGwgcHV0IG51bWJlciBvdXQgb2YgcmFuZ2VcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25Gb2N1c291dChlOiBFdmVudCkge1xuICAgICAgICAvLyBpbiBjYXNlIGZpbGxGcmFjdGlvbiBmZWF0dXJlIGlzIG9uIGFuZCB0aGVyZSdzIG5vIGludGVnZXIgcGFydCBhZGQgbGVhZGluZyAwXG4gICAgICAgIGlmICh0aGlzLmZpbGxGcmFjdGlvbiAmJiB0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkubWF0Y2goL15cXC5bMC05XSsvZykpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUoJzAnICsgdGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIGNhc2Ugcm91bmQgVVAgaXMgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fcm91bmRVcCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRJbnZhbGlkKHN0YXRlPzogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIGluIGNhc2UgaXQncyBjb250cm9sbGVkIGJ5IE5nQ29udHJvbCBvdmVycmlkZVxuICAgICAgICB0aGlzLl9pc0ludmFsaWQgPSB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmNvbnRyb2wudG91Y2hlZCA6IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShzdGF0ZSk7XG5cbiAgICAgICAgLy8gc2V0IEJhc2VEaXJlY3RpdmUgQXR0cmlidXRlXG4gICAgICAgIHN1cGVyLmV1aURhbmdlciA9IHRoaXMuX2lzSW52YWxpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgc2V0UGxhY2Vob2xkZXIgc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUgb2YgSW5wdXREaXJlY3RpdmVcbiAgICAgKiBVcGRhdGVzIHRoZSBwbGFjZWhvbGRlciB2YWx1ZSBiYXNlZCBvbiBjdXJyZW50IG51bWJlciBmb3JtYXQgYW5kIGdpdmVuIHZhbHVlLlxuICAgICAqIElmIHZhbHVlIHBhc3NlZCBjb250YWlucyBjaGFyYWN0ZXJzIGl0IGRvZXNuJ3QgZm9ybWF0IHBsYWNlaG9sZGVyLlxuICAgICAqICovXG4gICAgcHJvdGVjdGVkIHNldFBsYWNlaG9sZGVyQXR0cmlidXRlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgPSA5OTk5OTkuOTk5OSk6IHZvaWQge1xuICAgICAgICAvLyBpZiB2YWx1ZSBpcyBhIG51bWJlciwgZm9ybWF0IHRoZSB2YWx1ZSBiYXNlZCBvbiBjdXJyZW50IG51bWJlciBmb3JtYXRcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNsb25lIG9mIGNsZWF2ZUluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBjbG9uZUluc3RhbmNlOiBDbGVhdmUgPSBuZXcgQ2xlYXZlKGRpdiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEJFV0FSRTogYnkgdGhlIHRpbWUgeW91ciBzZXRSYXdWYWx1ZSBjbGVhdmUgb3B0aW9ucyBoYXZlIGNoYW5nZWQgdGh1cyBudW1iZXIgZm9ybWF0dGluZ1xuICAgICAgICAgICAgY2xvbmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgd2l0aCBjdXJyZW50IGZvcm1hdCBhcyBwbGFjZWhvbGRlclxuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUoY2xvbmVJbnN0YW5jZS5nZXRGb3JtYXR0ZWRWYWx1ZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdXBlci5zZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbnN0YW50aWF0ZSBDbGVhdmUuanNcbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRDbGVhdmUoKTogdm9pZCB7XG4gICAgICAgIC8vIGNoYW5nZSB0aGUgY2xlYXZlIHByb3RvdHlwZSBmdW5jdGlvbiB0byBpbnRlcmNlcHQgb25DdXQgY2FsbGJhY2tcbiAgICAgICAgLy8gYW5kIGFsbG93IGJhc2VkIG9uIHRoZSBldmVudCBidWJibGluZyBhbmQgZGlzYWJsZWQgc3RhdGVcbiAgICAgICAgLy8gVElQOiBjaGFuZ2UgYmVoYXZpb3Igb2Ygb25DdXQgdG8gc3RvcCBpbiBjYXNlIGJ1YmJsZSBpcyBjYW5jZWxlZFxuICAgICAgICAvLyBUT0RPOiBTZWUgcmVsZXZhbnQgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL25vc2lyL2NsZWF2ZS5qcy9pc3N1ZXMvNjc1XG4gICAgICAgIGNvbnN0IF9vbkN1dCA9IENsZWF2ZS5wcm90b3R5cGVbJ29uQ3V0J107XG4gICAgICAgIENsZWF2ZS5wcm90b3R5cGVbJ29uQ3V0J10gPSBmdW5jdGlvbihlOiBFdmVudCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgaWYgKCFlLmNhbmNlbEJ1YmJsZSAmJiAhdGhpcy5lbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgIF9vbkN1dC5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGluIGNhc2Ugb3B0aW9ucyBpcyB1bmRlZmluZWRcbiAgICAgICAgY29uc3Qgb3B0czogQ2xlYXZlT3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zIH07XG5cbiAgICAgICAgLy8gc2V0IHRoZSBvblZhbHVlIGNoYW5nZSBsaXN0ZW5lciB0byBrZWVwIHRoZSB2YWx1ZSBhdCByZWFkT25seSBlbGVtZW50IGluIHN5bmNcbiAgICAgICAgb3B0cy5vblZhbHVlQ2hhbmdlZCA9IHRoaXMub25WYWx1ZUNoYW5nZWQuYmluZCh0aGlzKTtcblxuICAgICAgICAvLyBpbiBjYXNlIHJvdW5kIFVQIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX3JvdW5kVXAgPiAwKSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgQ2xlYXZlIGluc3RhbmNlIHdpdGggdGhlIG5ldyBvciB1cGRhdGVkIG9wdGlvbnNcbiAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBvcHRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBjbGVhdmUgb3B0aW9ucyBieSBkZXN0cm95aW5nIHRoZSBjdXJyZW50IGluc3RhbmNlIGFuZCBjcmVhdGluZyBhbm90aGVyIG9uZSB3aGlsZSBrZWVwaW5nIHRoZSBwcmV2aW91c1xuICAgICAqIHZhbHVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlT3B0aW9ucyhsb2NhbGVVcGRhdGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBiZWZvcmUgZGVzdHJveWluZyBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCk7XG5cbiAgICAgICAgICAgIC8vIGRlc3Ryb3kgcHJldmlvdXMgaW5zdGFuY2UgZnJvbSB0aGUgZWxlbWVudFxuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAvLyB3aGlsZSBjcmVhdGluZyB0aGUgQ2xlYXZlIGluc3RhbmNlIHdlIGFyZSBwYXNzaW5nIG9uVmFsdWVDaGFuZ2VkXG4gICAgICAgICAgICAvLyBhbmQgYmluZCB0byAndGhpcycgcmVmZXJlbmNlLiBJbnNpZGUgb25WYWx1ZUNoYW5nZWQgdGhlcmUgaXMgYSBjYWxsXG4gICAgICAgICAgICAvLyB0byB0aGlzLmNsZWF2ZUluc3RhbmNlIHdoaWNoIHdhcyB1c2luZyB0aGUgb2xkIG9uZSwgY2F1c2luZyBsb29wIChtYXggY2FsbCBzdGFjaylcbiAgICAgICAgICAgIC8vIFNvIGl0IGlzIGVzc2VudGlhbCB0byBzZXQgaXQgdG8gbnVsbCBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UuXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBDbGVhdmUgaW5zdGFuY2Ugd2l0aCB0aGUgbmV3IG9yIHVwZGF0ZWQgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGluaXRWYWx1ZTogcHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogdGhpcy5vblZhbHVlQ2hhbmdlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEluIGNhc2UgcHJldmlvdXMgc2V0dGluZ3Mgd2hlcmUgbnVtZXJhbERlY2ltYWxNYXJrPScuJyB3aXRoIHZhbHVlIDEwMDAuOTkgYW5kIHRoZXkgY2hhbmdlZCB0b1xuICAgICAgICAgICAgLy8gbnVtZXJhbERlY2ltYWxNYXJrPScsJzsgc2V0IGluaXRWYWx1ZSB0byAxMDAwLjk5IG9yIGV2ZW4gMTAwMCw5OSB3aWxsIG5vdCBiZSByZWZsZWN0ZWQgYW5kIGNsZWF2ZSB3aWxsXG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIGRlY2ltYWwgcGFydC4gU2V0IG9mIHRoZSB2YWx1ZSBhZnRlciBpbml0aWFsaXphdGlvbiBjYXVzZXMgcmVmb3JtYXQgb2YgbnVtYmVyIGFuZCB3b3Jrcy5cbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUocHJldmlvdXNWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIHBhcnNlIG51bWJlclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wYXJzZU51bWJlcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXIgfHwgdW5kZWZpbmVkLCBsb2NhbGVVcGRhdGVkKTtcbiAgICAgICAgICAgIC8vIHNldCBwbGFjZWhvbGRlciBpbiBjYXNlIG5vbmUgaXMgcHJvdmlkZWRcbiAgICAgICAgICAgIHRoaXMuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBDbGVhdmUgaW5zdGFuY2UgdGhhdCBpcyBpbnZva2VkIHdoZW4gdmFsdWUgaXMgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0gZXZlbnQgdHlwZSBvZiBDbGVhdmVFdmVudE9uQ2hhbmdlXG4gICAgICovXG4gICAgcHJpdmF0ZSBvblZhbHVlQ2hhbmdlZChldmVudDogQ2xlYXZlRXZlbnRPbkNoYW5nZSkge1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5RnJhY3Rpb25GaWxsKHRhcmdldC5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZShOdW1iZXIucGFyc2VGbG9hdCh0YXJnZXQucmF3VmFsdWUpKTtcbiAgICAgICAgLy8gZmlsbCBsZWFkaW5nIHplcm9cbiAgICAgICAgaWYgKHRoaXMubGVhZGluZ1plcm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmxlYWRpbmdaZXJvID4gdGhpcy5kaWdpdHMgJiYgdGhpcy5kaWdpdHMgPiAwID8gdGhpcy5kaWdpdHMgOiB0aGlzLmxlYWRpbmdaZXJvO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5wYWRaZXJvKGV2ZW50LnRhcmdldC5yYXdWYWx1ZSwgc2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNwb25zaWJsZSB0byBleHRyYWN0IGFsbCBsb2NhbGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkIENsZWF2ZU9wdGlvbnMgcmVsYXRlZCB0byBudW1iZXIgZm9ybWF0LlxuICAgICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIGxvY2FsZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2xlYXZlT3B0c0Jhc2VkT25Mb2NhbGUoaWQ6IHN0cmluZyk6IENsZWF2ZU9wdGlvbnMge1xuICAgICAgICBpZiAoIWlkIHx8IGlkID09PSAnJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGUgaWQgY2Fubm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdHM6IENsZWF2ZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBudW1lcmFsOiB0cnVlLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBnZXRMb2NhbGVOdW1iZXJTeW1ib2woaWQsIE51bWJlclN5bWJvbC5Hcm91cCksXG4gICAgICAgICAgICBudW1lcmFsRGVjaW1hbE1hcms6IGdldExvY2FsZU51bWJlclN5bWJvbChpZCwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpLFxuICAgICAgICAgICAgbnVtZXJhbERlY2ltYWxTY2FsZTogdGhpcy5mcmFjdGlvbkRpZ2l0cyxcbiAgICAgICAgICAgIG51bWVyYWxJbnRlZ2VyU2NhbGU6IHRoaXMuZGlnaXRzLFxuICAgICAgICAgICAgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IHRoaXMubm9Gb3JtYXQgPyAnbm9uZScgOiAndGhvdXNhbmQnLCAvLyBUT0RPOiBpbXBsZW1lbnQgYmFzZWQgb24gbG9jYWxlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRzIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgZmlsbCBvZiBkZWNpbWFsIHBhcnQgd2l0aCB6ZXJvcyBpbiBjYXNlIGRlY2ltYWwgcGFydCBvZiBnaXZlbiBudW1iZXIgaGFzXG4gICAgICogc2l6ZSBsZXNzIHRoYW4gdGhlIG1heCBmcmFjdGlvbiBkaWdpdHMuXG4gICAgICogQHBhcmFtIG51bWJlclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZyYWN0aW9uRmlsbChudW1iZXI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBpZiBmaWxsIGZyYWN0aW9uIGlzIGVuYWJsZWQgYW5kIHRoZXJlJ3MgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgIGlmICh0aGlzLmZpbGxGcmFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXI/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJycgfHwgIW51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0RlY2ltYWwgPSBudW1iZXIuc3BsaXQoJy4nKS5sZW5ndGggPiAxO1xuICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRlY2ltYWwgcG9pbnQgaW4gbnVtYmVyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbFNpemUgPSBudW1iZXIuc3BsaXQoJy4nKVsxXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHNpemUgb2YgZGVjaW1hbCBwYXJ0IG9mIG51bWJlciBpcyBsZXNzIHRoYW4gdGhlIG1heCBmcmFjdGlvbiBkaWdpdHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2ltYWxTaXplIDwgdGhpcy5fZnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciArIG5ldyBBcnJheSh0aGlzLl9mcmFjdGlvbkRpZ2l0cyAtIGRlY2ltYWxTaXplKS5maWxsKDApLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZXJlJ3Mgbm90LCBmb3JjZSBpdCBieSBmaWxsaW5nIGl0IGFzIG11Y2ggemVybyBhcyB0aGUgZnJhY3Rpb24gZGlnaXRzXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyYWN0aW9uRGlnaXRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBgJHtudW1iZXJ9LiR7bmV3IEFycmF5KHRoaXMuX2ZyYWN0aW9uRGlnaXRzKS5maWxsKDApLmpvaW4oJycpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIGdpdmVuIGZvcm1hdHRlZCBudW1iZXIgYW5kIHJldHVybnMgaXQgYXMgYSBudW1iZXIuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBmb3JtYXR0ZWQgbnVtYmVyIHlvdSB3YW50IHRvIHBhcnNlIGUuZy4gMTExLDg4OC4yMlxuICAgICAqIEBwYXJhbSBjdXJyZW50TG9jYWxlU3RhdGUgVXNlIHByZXZpb3VzIGxvY2FsZSBzdGF0ZSB0byBwYXJzZSB0aGUgdmFsdWUuIEJ5IGRlZmF1bHQsIGlzIGZhbHNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbHVlOiBzdHJpbmcsIHVzZXJQcmV2TG9jYWxlU3RhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIC8vIGxvY2FsZSBzdGF0ZVxuICAgICAgICBjb25zdCBsb2NhbGUgPSB1c2VyUHJldkxvY2FsZVN0YXRlID8gdGhpcy5sb2NhbGVTZXJ2aWNlLnByZXZpb3VzTG9jYWxlIDogdGhpcy5sb2NhbGVTZXJ2aWNlLmN1cnJlbnRMb2NhbGU7XG4gICAgICAgIC8vIGdldCBkZWNpbWFsIGFuZCBncm91cCBzeW1ib2xzXG4gICAgICAgIGxldCBkZWNpbWFsU3ltYm9sID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGxvY2FsZSwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpO1xuICAgICAgICBsZXQgZ3JvdXBTeW1ib2wgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuR3JvdXApO1xuICAgICAgICAvLyByZXBsYWNlIHN5bWJvbHMgdG8gcGFyc2UgbnVtYmVyXG4gICAgICAgIGxldCBwYXJzZWROdW1iZXIgPSB2YWx1ZT8uc3BsaXQoZ3JvdXBTeW1ib2wpLmpvaW4oJycpLnNwbGl0KGRlY2ltYWxTeW1ib2wpLmpvaW4oJy4nKTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KHBhcnNlZE51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkIGxlYWRpbmcgemVybyB0byB0aGUgbnVtYmVyXG4gICAgICogQHBhcmFtIG51bSBUaGUgbnVtYmVyIHRvIGFkZCBsZWFkaW5nIHplcm8gdG9cbiAgICAgKiBAcGFyYW0gc2l6ZSBOdW1iZXIgb2YgbnVtYmVyJ3MgbGVhZGluZyB6ZXJvXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhZFplcm8obnVtLCBzaXplKSB7XG4gICAgICAgIG51bSA9IG51bS50b1N0cmluZygpO1xuICAgICAgICAvLyBnZXQgaW50ZWdlciBhbmQgZGVjaW1hbCBwYXJ0XG4gICAgICAgIGxldCBbaW50ZWdlciwgZGVjaW1hbF0gPSBudW0uc3BsaXQoJy4nKTtcbiAgICAgICAgd2hpbGUgKGludGVnZXIubGVuZ3RoIDwgc2l6ZSkge2ludGVnZXIgPSAnMCcgKyBpbnRlZ2VyO31cbiAgICAgICAgcmV0dXJuIGRlY2ltYWwgPyBgJHtpbnRlZ2VyfS4ke2RlY2ltYWx9YCA6IGludGVnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIHdoZXRoZXIgdGhlIG1pbiBzeW1ib2wgaXMgYWxsb3dlZC4gSXQgaXMgYWxsb3dlZCB3aGVuIG1pbnVzIHN5bWJvbFxuICAgICAqIHByb3ZpZGVkIGFuZCBtaW4gaW5wdXQgaXMgdW5kZWZpbmVkIG9yIG1pbiBwcm92aWRlZCBhbmQgaXMgbmVnYXRpdmUuXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHN0cmluZyBjb21pbmcgZnJvbSBhbiBldmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgaXNNaW51c0FsbG93ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICghdGhpcy5taW4gfHwgdGhpcy5taW4gPCAwKSA/IGtleSAhPT0gJy0nIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVjayB3aGV0aGVyIHRoZSBrZXkgZW50ZXJlZCBpcyBpbnNpZGUgdGhlIG1pbiBhbmRcbiAgICAgKiBtYXggcmFuZ2UuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIG91dCBvZiByYW5nZS5cbiAgICAgKiBAcGFyYW0gZSBBIGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc091dFNpZGVSYW5nZShlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBjYXJldCBwb3NpdGlvblxuICAgICAgICBjb25zdCBwb3MgPSBlLnRhcmdldFsnc2VsZWN0aW9uU3RhcnQnXTtcbiAgICAgICAgLy8gZ2V0IGNhcmV0IHBvc2l0aW9uIChpbiBjYXNlIHRoZXJlJ3MgdGV4dCBzZWxlY3RlZClcbiAgICAgICAgY29uc3QgZW5kUG9zID0gZS50YXJnZXRbJ3NlbGVjdGlvbkVuZCddO1xuICAgICAgICAvLyBnZXQgY3VycmVudCB2YWx1ZSAoZm9ybWF0dGVkKVxuICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldFsndmFsdWUnXTtcbiAgICAgICAgLy8gcmVtb3ZlIGtleSBmcm9tIHZhbHVlXG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0RlbGV0ZScgfHwgZS5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSdzIHNlbGVjdGlvbiBvZiB0ZXh0IHRvIGJlIHJlbW92ZWRcbiAgICAgICAgICAgIGlmIChwb3MgIT09IGVuZFBvcykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZS50YXJnZXRbJ3ZhbHVlJ10uc3Vic3RyaW5nKDAsIHBvcykgKyBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoZW5kUG9zLCBlLnRhcmdldFsndmFsdWUnXS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZygwLCBwb3MgLSAxKSArIGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZyhlbmRQb3MsIGUudGFyZ2V0Wyd2YWx1ZSddLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZXtcbiAgICAgICAgICAgIC8vIGFkZCBrZXkgdG8gdGhlIHZhbHVlXG4gICAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZS5zbGljZSgwLCBwb3MpLCBlLmtleSwgdmFsdWUuc2xpY2UoZW5kUG9zKV0uam9pbignJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgYSBDbGVhdmUgaW5zdGFuY2UgdG8gZXh0cmFjdCB0aGUgbnVtYmVyIGZyb20gZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGNsZWF2ZSA9IG5ldyBDbGVhdmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSwgeyAuLi50aGlzLm9wdGlvbnMgfSk7XG4gICAgICAgIGNsZWF2ZS5zZXRSYXdWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihjbGVhdmUuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIC8vIGRlc3Ryb3kgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgIGNsZWF2ZS5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiAodGhpcy5taW4gPiBudW1iZXIgfHwgdGhpcy5tYXggPCBudW1iZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY2ltYWwgYWRqdXN0bWVudCBvZiBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSAgdmFsdWUgVGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IGV4cCAgIFRoZSBleHBvbmVudCAodGhlIDEwIGxvZ2FyaXRobSBvZiB0aGUgYWRqdXN0bWVudCBiYXNlKS5cbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYWRqdXN0ZWQgdmFsdWUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWNpbWFsQWRqdXN0KHZhbHVlOiBudW1iZXIsIGV4cDogbnVtYmVyKSB7XG4gICAgICAgIC8vIElmIHRoZSBleHAgaXMgdW5kZWZpbmVkIG9yIHplcm8uLi5cbiAgICAgICAgaWYgKHR5cGVvZiBleHAgPT09ICd1bmRlZmluZWQnIHx8ICtleHAgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcbiAgICAgICAgZXhwID0gK2V4cDtcbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciBvciB0aGUgZXhwIGlzIG5vdCBhbiBpbnRlZ2VyLi4uXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgISh0eXBlb2YgZXhwID09PSAnbnVtYmVyJyAmJiBleHAgJSAxID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaGlmdFxuICAgICAgICBsZXQgY2xlYW5lZCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ2UnKTtcbiAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKCsoY2xlYW5lZFswXSArICdlJyArIChjbGVhbmVkWzFdID8gKCtjbGVhbmVkWzFdIC0gZXhwKSA6IC1leHApKSk7XG4gICAgICAgIC8vIFNoaWZ0IGJhY2tcbiAgICAgICAgY2xlYW5lZCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ2UnKTtcbiAgICAgICAgcmV0dXJuICsoY2xlYW5lZFswXSArICdlJyArIChjbGVhbmVkWzFdID8gKCtjbGVhbmVkWzFdICsgZXhwKSA6IGV4cCkpO1xuICAgIH1cblxufVxuIl19
|
|
561
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWlucHV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktaW5wdXQtbnVtYmVyL2V1aS1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUVSLElBQUksRUFFSixpQkFBaUIsR0FFcEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUE2QixNQUFNLHVCQUF1QixDQUFDO0FBRS9HLE9BQU8sTUFBTSxNQUFNLFdBQVcsQ0FBQztBQUUvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBOEJ0RSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsY0FBYztJQXVGdkQsWUFDa0MsT0FBa0IsRUFDdEMsV0FBdUIsRUFDdkIsU0FBb0IsRUFDdEIsRUFBcUIsRUFDckIsYUFBNEIsRUFDcEMsUUFBa0I7UUFDbEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBTm5CLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQTFEaEMsaUJBQVksR0FBRyxDQUFDLENBQUM7UUF5Q1csU0FBSSxHQUFHLFlBQVksQ0FBQztRQU9oRCxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQStGNUIsYUFBUSxHQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxJQUFJLENBQUMs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LENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7O3VJQXRqQlEsdUJBQXVCOzJIQUF2Qix1QkFBdUIsNGpCQUh0QixFQUFFOzJGQUdILHVCQUF1QjtrQkFQbkMsU0FBUzsrQkFFSSwrQ0FBK0MsWUFFL0MsRUFBRSxpQkFDRyxpQkFBaUIsQ0FBQyxJQUFJOzswQkEwRmhDLFFBQVE7OzBCQUFJLElBQUk7Z0xBbEZWLEdBQUc7c0JBRGIsS0FBSztnQkFZSyxHQUFHO3NCQURiLEtBQUs7Z0JBWUssV0FBVztzQkFEckIsS0FBSztnQkFVSyxTQUFTO3NCQURuQixLQUFLO2dCQVNLLFVBQVU7c0JBRHBCLFdBQVc7dUJBQUMsT0FBTztnQkFTaEIsY0FBYztzQkFEakIsS0FBSztnQkFLRixNQUFNO3NCQURULEtBQUs7Z0JBSUYsWUFBWTtzQkFEZixLQUFLO2dCQUtGLE9BQU87c0JBRFYsS0FBSztnQkFRRixRQUFRO3NCQURYLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDOEIsSUFBSTtzQkFBdkMsV0FBVzt1QkFBQyxXQUFXO2dCQUNmLEtBQUs7c0JBQWIsS0FBSztnQkFtSk4sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1QnZCLFNBQVM7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVDekIsVUFBVTtzQkFEbkIsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFJlbmRlcmVyMixcbiAgICBTZWxmLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UsIExvY2FsZVN0YXRlIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIEJvb2xlYW5JbnB1dCwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgdHlwZSBDbGVhdmVPcHRpb25zIH0gZnJvbSAnY2xlYXZlLmpzL29wdGlvbnMnO1xuaW1wb3J0IENsZWF2ZSBmcm9tICdjbGVhdmUuanMnO1xuaW1wb3J0IHsgQ2xlYXZlRXZlbnRPbkNoYW5nZSB9IGZyb20gJy4vbW9kZWxzL2NsZWF2ZS1ldmVudC1vbmNoYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sLCBOdW1iZXJTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbnRlcmZhY2UgQ2xlYXZlSW5zdGFuY2UgZXh0ZW5kcyBDbGVhdmUge1xuICAgIGluaXRTd2FwSGlkZGVuSW5wdXQ/OiAoKSA9PiB2b2lkO1xuICAgIGluaXROdW1lcmFsRm9ybWF0dGVyPzogKCkgPT4gdm9pZDtcbiAgICBpbml0VGltZUZvcm1hdHRlcj86ICgpID0+IHZvaWQ7XG4gICAgaW5pdERhdGVGb3JtYXR0ZXI/OiAoKSA9PiB2b2lkO1xuICAgIGluaXRQaG9uZUZvcm1hdHRlcj86ICgpID0+IHZvaWQ7XG4gICAgdXBkYXRlQ3JlZGl0Q2FyZFByb3BzQnlWYWx1ZT86ICgpID0+IHZvaWQ7XG4gICAgdXBkYXRlVmFsdWVTdGF0ZT86ICgpID0+IHZvaWQ7XG4gICAgY2FsbE9uVmFsdWVDaGFuZ2VkPzogKCkgPT4gdm9pZDtcbiAgICBvbkNoYW5nZT86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uQ3V0PzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Gb2N1cz86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uQ29weT86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uS2V5RG93bj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uQ2hhbmdlTGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbktleURvd25MaXN0ZW5lcj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uRm9jdXNMaXN0ZW5lcj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uQ3V0TGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkNvcHlMaXN0ZW5lcj86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnaW5wdXRbZXVpSW5wdXROdW1iZXJdOm5vdChbZXVpSW5wdXRDaGVja0JveF0pJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpSW5wdXROdW1iZXJDb21wb25lbnQgZXh0ZW5kcyBJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrLCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIG51bWJlciBjYW4gYmUgZW50ZXJlZC4gQmxvY2tzIHVzZXIncyBpbnB1dCBpZiBub3QgaW4gcmFuZ2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG1pbih2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbWluID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgY2FuIGJlIGVudGVyZWQuIEJsb2NrcyB1c2VyJ3MgaW5wdXQgaWYgbm90IGluIHJhbmdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICB9XG4gICAgcHVibGljIHNldCBtYXgodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX21heCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfbWF4OiBudW1iZXI7XG4gICAgLyoqIEFkZHMgbGVhZGluZyB6ZXJvIHRvIGEgbnVtYmVyLiBGb3JtYXR0aW5nIHdpbGwgbm90IHdvcmsuXG4gICAgICogICAgICBlLmcuIHdpdGggbGVhZGluZ1plcm89MyBpbnB1dCBudW1iZXIgNSA9PiAwMDVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbGVhZGluZ1plcm8oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWRpbmdaZXJvO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGxlYWRpbmdaZXJvKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9sZWFkaW5nWmVybyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfbGVhZGluZ1plcm8gPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGlzSW52YWxpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCB8fCBudWxsO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlzSW52YWxpZChzdGF0ZTogYW55KSB7XG4gICAgICAgIHRoaXMuc2V0SW52YWxpZChzdGF0ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzdXBlci5nZXRDc3NDbGFzc2VzKCdldWktaW5wdXQtbnVtYmVyJyksXG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWQgPyBgZXVpLWlucHV0LW51bWJlci0taW52YWxpZGAgOiAnJyxcbiAgICAgICAgXS5qb2luKCcgJykudHJpbSgpO1xuICAgIH1cbiAgICAvKiogaG93IG1hbnkgZGlnaXRzIGZvciB0aGUgZGVjaW1hbCBwYXJ0ICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2ZyYWN0aW9uRGlnaXRzOyB9XG4gICAgc2V0IGZyYWN0aW9uRGlnaXRzKHZhbHVlOiBOdW1iZXJJbnB1dCkgeyB0aGlzLl9mcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTsgfVxuICAgIC8qKiBob3cgbWFueSBkaWdpdHMgZm9yIHRoZSBpbnRlZ2VyIHBhcnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaWdpdHMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2RpZ2l0czsgfVxuICAgIHNldCBkaWdpdHModmFsdWU6IE51bWJlcklucHV0KSB7IHRoaXMuX2RpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTsgfVxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGZpbGxGcmFjdGlvbigpIHsgcmV0dXJuIHRoaXMuX2ZpbGxGcmFjdGlvbjsgfVxuICAgIHNldCBmaWxsRnJhY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9maWxsRnJhY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgLyoqIHJvdW5kcyBhIG51bWJlciB3aXRoIG1vcmUgdGhhbiB0d28gZGVjaW1hbHMgVVAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCByb3VuZFVwKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9yb3VuZFVwOyB9XG4gICAgc2V0IHJvdW5kVXAodmFsdWU6IE51bWJlcklucHV0KSB7IHRoaXMuX3JvdW5kVXAgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcm90ZWN0ZWQgX2lzSW52YWxpZDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBkb2VzIG5vdCBmb3JtYXQgdGhlIGFuZCBkbyBhIHRob3VzYW5kIGdyb3VwaW5nIG9mIG51bWJlclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG5vRm9ybWF0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fbm9Gb3JtYXQ7IH1cbiAgICBzZXQgbm9Gb3JtYXQodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9ub0Zvcm1hdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcm90ZWN0ZWQgX25vRm9ybWF0OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudHlwZScpIHByb3RlY3RlZCB0eXBlID0gJ2V1aS1udW1iZXInO1xuICAgIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogaG9sZHMgaW5zdGFuY2Ugb2YgY2xlYXZlICovXG4gICAgcHJpdmF0ZSBjbGVhdmVJbnN0YW5jZTogQ2xlYXZlSW5zdGFuY2U7XG4gICAgLyoqIG9wdGlvbnMgZm9yIHRoZSBDbGVhdmUgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIG9wdGlvbnM6IENsZWF2ZU9wdGlvbnM7XG4gICAgcHJpdmF0ZSBfZnJhY3Rpb25EaWdpdHMgPSAwO1xuICAgIHByaXZhdGUgX2RpZ2l0czogbnVtYmVyO1xuICAgIHByaXZhdGUgX2ZpbGxGcmFjdGlvbjogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3JvdW5kVXA6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByb3RlY3RlZCBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9yZW5kZXJlciwgY29udHJvbCwgaW5qZWN0b3IpO1xuXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgLy8gc2V0IGNvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICAvLyBpbnN0YW50aWF0ZSBjbGVhdmVcbiAgICAgICAgdGhpcy5pbml0Q2xlYXZlKCk7XG5cbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGxvY2FsaXphdGlvbiBzZXJ2aWNlIGFuZCBsaXN0ZW4gZm9yIGxvY2FsZSBjaGFuZ2UuIERlLWNvbnN0cnVjdGlvbiBvZiBsb2NhbGUgc2hvdWxkIGhhcHBlbiBoZXJlIVxuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0U3RhdGUoKS5zdWJzY3JpYmUoIChzdGF0ZTogTG9jYWxlU3RhdGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZ2V0Q2xlYXZlT3B0c0Jhc2VkT25Mb2NhbGUoc3RhdGU/LmlkKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBvcHRpb25zIG9uIHRoZSBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmlzSW52YWxpZCA9IHRoaXMuY29udHJvbC5pbnZhbGlkICYmIHRoaXMuY29udHJvbC50b3VjaGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZnJhY3Rpb25EaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxEZWNpbWFsU2NhbGU6IHRoaXMuZnJhY3Rpb25EaWdpdHMgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdub0Zvcm1hdCcpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGU6IHRoaXMubm9Gb3JtYXQgPyAnbm9uZScgOiAndGhvdXNhbmQnIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnZmlsbEZyYWN0aW9uJykgJiYgdGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdkaWdpdHMnKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxJbnRlZ2VyU2NhbGU6IHRoaXMuZGlnaXRzIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWluJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydtaW4nXS5jdXJyZW50VmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRha2UgY2FyZSBvZiB0aGUgc2lnbiBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShNYXRoLmFicyhOdW1iZXIodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdyb3VuZFVwJykpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzWydyb3VuZFVwJ10uY3VycmVudFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSB0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICAvLyBkZXN0cm95IGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoYW5nZTogYW55ID0gKF8pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiAoXyAhPT0gbnVsbCB8fCBfICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAvLyBwYXJzZSBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKF8pO1xuICAgICAgICAgICAgLy8gcnVuIG9uIG5leHQgTWljcm9UYXNrIHRvIGF2b2lkIE5HMDEwMCBlcnJvciBUT0RPOiBkZWVwZXIgaW52ZXN0aWdhdGlvblxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbiggKCkgPT4gdGhpcy5jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIGNvbnRyb2wgaXMgRm9ybUNvbnRyb2xcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8uY29udHJvbC5zZXRWYWx1ZShpc05hTih2YWx1ZSkgPyBudWxsIDogdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0ludmFsaWQgPSB0aGlzLmNvbnRyb2wuaW52YWxpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHRoZSBudW1iZXIgZm9yIGNsZWF2ZSBpbnN0YW5jZSBhbmQgZGl2IGVsZW1lbnQgKHJlYWQgb25seSBtb2RlKVxuICAgICAqIEBwYXJhbSB2YWwgdGhlIG51bWJlciBmb3JtYXR0ZWQgb3Igbm90XG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uICYmIHZhbCAhPT0gJycgJiYgdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUodmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmV0cmlldmUgZm9ybWF0dGVkIHZhbHVlIChiYXNlZCBvbiBvcHRpb25zKSBhbmQgc2V0IHRoZSBudW1iZXIgdG8gdGhlIG1vZGVsXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LmNvbnRyb2wuc2V0VmFsdWUoaXNOYU4obnVtYmVyKSA/IG51bGwgOiBudW1iZXIsIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gZ2V0IHRoZSB2YWx1ZSBmcm9tIGNsaXBib2FyZFxuICAgICAgICBsZXQgdmFsdWUgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3dbJ2NsaXBib2FyZERhdGEnXSkuZ2V0RGF0YSgndGV4dCcpO1xuICAgICAgICAvLyBpbiBjYXNlIHJvdW5kIFVQIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX3JvdW5kVXAgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgY2xlYXZlSW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZShkaXYsIHsuLi50aGlzLm9wdGlvbnMsIG51bWVyYWxEZWNpbWFsU2NhbGU6IDh9KTtcbiAgICAgICAgICAgIGNsb25lSW5zdGFuY2Uuc2V0UmF3VmFsdWUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQoY2xvbmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgICAgIG51bWJlciA9IHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKG51bWJlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBpbnZlc3RpZ2F0ZSBpbiB0aGUgZnV0dXJlIGhvdyBjYW4gdGhpcyBiZSBhdm9pZGVkXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShudW1iZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgaXQncyBhIHNpbmdsZSBzeW1ib2wgYW5kIG5vdCBTcGVjaWFsIGxpa2UgKEN0cmwsIGJhY2tzcGFjZSBldGMpXG4gICAgICAgIGlmIChlPy5rZXkubGVuZ3RoIDw9IDEgJiYgIWUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgIWUubWV0YUtleSkge1xuICAgICAgICAgICAgLy8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiBpZiBrZXkgcHJlc3NlZCBpcyBub3QgYSBudW1iZXIgb3IgbG9jYWxlIGNoYXJhY3RlciBvciBtaW51cyBzaWduXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChlLmtleSwgMTApKSAmJiB0aGlzLmlzTWludXNBbGxvd2VkKGUua2V5KSAmJlxuICAgICAgICAgICAgICAgIChlLmtleSAhPT0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlU2VydmljZS5jdXJyZW50TG9jYWxlLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCkpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgLy8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiBpZiBrZXkgcHJlc3NlZCBleGNlZWRzIHRoZSBtaW4vbWF4IHZhbHVlIHJhbmdlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGUua2V5LCAxMCkpICYmIHRoaXMuaXNPdXRTaWRlUmFuZ2UoZSkpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc091dFNpZGVSYW5nZShlKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJvdGVjdCBkZWNpbWFsIHN5bWJvbCBkZWxldGlvbiBpbiBjYXNlIGZpbGxGcmFjdGlvbiBpcyBvblxuICAgICAgICBpZiAoKGUua2V5ID09PSAnRGVsZXRlJyB8fCBlLmtleSA9PT0gJ0JhY2tzcGFjZScpKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgLy8gcG9zaXRpb24gb2YgY2FyZXRcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAvLyBnZXQgY2hhcmFjdGVyIGFib3V0IHRvIGJlIGRlbGV0ZWRcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBlbGVtZW50LnZhbHVlLmNoYXJBdChwb3MgLSAxKTtcbiAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIGNoYXIgaXMgdGhlIGRlY2ltYWwgc3ltYm9sIHByZXZlbnQgZGVsZXRpb24gYW5kIG1vdmUgY2FyZXQgaW4gZnJvbnRcbiAgICAgICAgICAgIGlmIChjaGFyID09PSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wodGhpcy5sb2NhbGVTZXJ2aWNlLmN1cnJlbnRMb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zIC0gMSwgcG9zIC0gMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNPdXRTaWRlUmFuZ2UoZSkpIHsgLy8gZG9uJ3QgYWxsb3cgaW5zZXJ0aW9uIHRoYXQgd2lsbCBwdXQgbnVtYmVyIG91dCBvZiByYW5nZVxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkZvY3Vzb3V0KGU6IEV2ZW50KSB7XG4gICAgICAgIC8vIGluIGNhc2UgZmlsbEZyYWN0aW9uIGZlYXR1cmUgaXMgb24gYW5kIHRoZXJlJ3Mgbm8gaW50ZWdlciBwYXJ0IGFkZCBsZWFkaW5nIDBcbiAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uICYmIHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKS5tYXRjaCgvXlxcLlswLTldKy9nKSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSgnMCcgKyB0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW4gY2FzZSByb3VuZCBVUCBpcyBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9yb3VuZFVwID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUodGhpcy5kZWNpbWFsQWRqdXN0KG51bWJlciwgdGhpcy5yb3VuZFVwICogLTEpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldEludmFsaWQoc3RhdGU/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gaW4gY2FzZSBpdCdzIGNvbnRyb2xsZWQgYnkgTmdDb250cm9sIG92ZXJyaWRlXG4gICAgICAgIHRoaXMuX2lzSW52YWxpZCA9IHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC5pbnZhbGlkICYmIHRoaXMuY29udHJvbC50b3VjaGVkIDogY29lcmNlQm9vbGVhblByb3BlcnR5KHN0YXRlKTtcblxuICAgICAgICAvLyBzZXQgQmFzZURpcmVjdGl2ZSBBdHRyaWJ1dGVcbiAgICAgICAgc3VwZXIuZXVpRGFuZ2VyID0gdGhpcy5faXNJbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBzZXRQbGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSBvZiBJbnB1dERpcmVjdGl2ZVxuICAgICAqIFVwZGF0ZXMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGJhc2VkIG9uIGN1cnJlbnQgbnVtYmVyIGZvcm1hdCBhbmQgZ2l2ZW4gdmFsdWUuXG4gICAgICogSWYgdmFsdWUgcGFzc2VkIGNvbnRhaW5zIGNoYXJhY3RlcnMgaXQgZG9lc24ndCBmb3JtYXQgcGxhY2Vob2xkZXIuXG4gICAgICogKi9cbiAgICBwcm90ZWN0ZWQgc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWU6IHN0cmluZyB8IG51bWJlciA9IDk5OTk5OS45OTk5KTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHZhbHVlIGlzIGEgbnVtYmVyLCBmb3JtYXQgdGhlIHZhbHVlIGJhc2VkIG9uIGN1cnJlbnQgbnVtYmVyIGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgY2xlYXZlSW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZShkaXYsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBCRVdBUkU6IGJ5IHRoZSB0aW1lIHlvdXIgc2V0UmF3VmFsdWUgY2xlYXZlIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkIHRodXMgbnVtYmVyIGZvcm1hdHRpbmdcbiAgICAgICAgICAgIGNsb25lSW5zdGFuY2Uuc2V0UmF3VmFsdWUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIHdpdGggY3VycmVudCBmb3JtYXQgYXMgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIHN1cGVyLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKGNsb25lSW5zdGFuY2UuZ2V0Rm9ybWF0dGVkVmFsdWUoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHN1cGVyLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW5zdGFudGlhdGUgQ2xlYXZlLmpzXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0Q2xlYXZlKCk6IHZvaWQge1xuICAgICAgICAvLyBjaGFuZ2UgdGhlIGNsZWF2ZSBwcm90b3R5cGUgZnVuY3Rpb24gdG8gaW50ZXJjZXB0IG9uQ3V0IGNhbGxiYWNrXG4gICAgICAgIC8vIGFuZCBhbGxvdyBiYXNlZCBvbiB0aGUgZXZlbnQgYnViYmxpbmcgYW5kIGRpc2FibGVkIHN0YXRlXG4gICAgICAgIC8vIFRJUDogY2hhbmdlIGJlaGF2aW9yIG9mIG9uQ3V0IHRvIHN0b3AgaW4gY2FzZSBidWJibGUgaXMgY2FuY2VsZWRcbiAgICAgICAgLy8gVE9ETzogU2VlIHJlbGV2YW50IGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3Npci9jbGVhdmUuanMvaXNzdWVzLzY3NVxuICAgICAgICBjb25zdCBfb25DdXQgPSBDbGVhdmUucHJvdG90eXBlWydvbkN1dCddO1xuICAgICAgICBDbGVhdmUucHJvdG90eXBlWydvbkN1dCddID0gZnVuY3Rpb24oZTogRXZlbnQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgIGlmICghZS5jYW5jZWxCdWJibGUgJiYgIXRoaXMuZWxlbWVudC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICBfb25DdXQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpbiBjYXNlIG9wdGlvbnMgaXMgdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IG9wdHM6IENsZWF2ZU9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucyB9O1xuXG4gICAgICAgIC8vIHNldCB0aGUgb25WYWx1ZSBjaGFuZ2UgbGlzdGVuZXIgdG8ga2VlcCB0aGUgdmFsdWUgYXQgcmVhZE9ubHkgZWxlbWVudCBpbiBzeW5jXG4gICAgICAgIG9wdHMub25WYWx1ZUNoYW5nZWQgPSB0aGlzLm9uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgLy8gaW4gY2FzZSByb3VuZCBVUCBpcyBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9yb3VuZFVwID4gMCkge1xuICAgICAgICAgICAgbGV0IG51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgdGhlIENsZWF2ZSBpbnN0YW5jZSB3aXRoIHRoZSBuZXcgb3IgdXBkYXRlZCBvcHRpb25zXG4gICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2UgPSBuZXcgQ2xlYXZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgb3B0cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgY2xlYXZlIG9wdGlvbnMgYnkgZGVzdHJveWluZyB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgY3JlYXRpbmcgYW5vdGhlciBvbmUgd2hpbGUga2VlcGluZyB0aGUgcHJldmlvdXNcbiAgICAgKiB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZU9wdGlvbnMobG9jYWxlVXBkYXRlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyB0aGUgdmFsdWUgYmVmb3JlIGRlc3Ryb3lpbmcgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIENsZWF2ZSBpbnN0YW5jZSB3aXRoIHRoZSBuZXcgb3IgdXBkYXRlZCBvcHRpb25zXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jbGVhdmVJbnN0YW5jZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBpbml0VmFsdWU6IHByZXZpb3VzVmFsdWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIGluaXQgbnVtYmVyIGZvcm1hdHRlciB3aXRoIHVwZGF0ZWQgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5pbml0TnVtZXJhbEZvcm1hdHRlcigpO1xuXG4gICAgICAgICAgICAvLyBJbiBjYXNlIHByZXZpb3VzIHNldHRpbmdzIHdoZXJlIG51bWVyYWxEZWNpbWFsTWFyaz0nLicgd2l0aCB2YWx1ZSAxMDAwLjk5IGFuZCB0aGV5IGNoYW5nZWQgdG9cbiAgICAgICAgICAgIC8vIG51bWVyYWxEZWNpbWFsTWFyaz0nLCc7IHNldCBpbml0VmFsdWUgdG8gMTAwMC45OSBvciBldmVuIDEwMDAsOTkgd2lsbCBub3QgYmUgcmVmbGVjdGVkIGFuZCBjbGVhdmUgd2lsbFxuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBkZWNpbWFsIHBhcnQuIFNldCBvZiB0aGUgdmFsdWUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gY2F1c2VzIHJlZm9ybWF0IG9mIG51bWJlciBhbmQgd29ya3MuXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHByZXZpb3VzVmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBwYXJzZSBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucGFyc2VOdW1iZXIodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZCwgbG9jYWxlVXBkYXRlZCk7XG4gICAgICAgICAgICAvLyBzZXQgcGxhY2Vob2xkZXIgaW4gY2FzZSBub25lIGlzIHByb3ZpZGVkXG4gICAgICAgICAgICB0aGlzLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgQ2xlYXZlIGluc3RhbmNlIHRoYXQgaXMgaW52b2tlZCB3aGVuIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIGV2ZW50IHR5cGUgb2YgQ2xlYXZlRXZlbnRPbkNoYW5nZVxuICAgICAqL1xuICAgIHByaXZhdGUgb25WYWx1ZUNoYW5nZWQoZXZlbnQ6IENsZWF2ZUV2ZW50T25DaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmICh0aGlzLmZpbGxGcmFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZyYWN0aW9uRmlsbCh0YXJnZXQucmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoTnVtYmVyLnBhcnNlRmxvYXQodGFyZ2V0LnJhd1ZhbHVlKSk7XG4gICAgICAgIC8vIGZpbGwgbGVhZGluZyB6ZXJvXG4gICAgICAgIGlmICh0aGlzLmxlYWRpbmdaZXJvKSB7XG4gICAgICAgICAgICBjb25zdCBzaXplID0gdGhpcy5sZWFkaW5nWmVybyA+IHRoaXMuZGlnaXRzICYmIHRoaXMuZGlnaXRzID4gMCA/IHRoaXMuZGlnaXRzIDogdGhpcy5sZWFkaW5nWmVybztcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMucGFkWmVybyhldmVudC50YXJnZXQucmF3VmFsdWUsIHNpemUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzcG9uc2libGUgdG8gZXh0cmFjdCBhbGwgbG9jYWxlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBidWlsZCBDbGVhdmVPcHRpb25zIHJlbGF0ZWQgdG8gbnVtYmVyIGZvcm1hdC5cbiAgICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBsb2NhbGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENsZWF2ZU9wdHNCYXNlZE9uTG9jYWxlKGlkOiBzdHJpbmcpOiBDbGVhdmVPcHRpb25zIHtcbiAgICAgICAgaWYgKCFpZCB8fCBpZCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxlIGlkIGNhbm5vdCBiZSBlbXB0eSBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRzOiBDbGVhdmVPcHRpb25zID0ge1xuICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGltaXRlcjogZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGlkLCBOdW1iZXJTeW1ib2wuR3JvdXApLFxuICAgICAgICAgICAgbnVtZXJhbERlY2ltYWxNYXJrOiBnZXRMb2NhbGVOdW1iZXJTeW1ib2woaWQsIE51bWJlclN5bWJvbC5EZWNpbWFsKSxcbiAgICAgICAgICAgIG51bWVyYWxEZWNpbWFsU2NhbGU6IHRoaXMuZnJhY3Rpb25EaWdpdHMsXG4gICAgICAgICAgICBudW1lcmFsSW50ZWdlclNjYWxlOiB0aGlzLmRpZ2l0cyxcbiAgICAgICAgICAgIG51bWVyYWxUaG91c2FuZHNHcm91cFN0eWxlOiB0aGlzLm5vRm9ybWF0ID8gJ25vbmUnIDogJ3Rob3VzYW5kJywgLy8gVE9ETzogaW1wbGVtZW50IGJhc2VkIG9uIGxvY2FsZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMub3B0aW9ucywgLi4ub3B0cyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGZpbGwgb2YgZGVjaW1hbCBwYXJ0IHdpdGggemVyb3MgaW4gY2FzZSBkZWNpbWFsIHBhcnQgb2YgZ2l2ZW4gbnVtYmVyIGhhc1xuICAgICAqIHNpemUgbGVzcyB0aGFuIHRoZSBtYXggZnJhY3Rpb24gZGlnaXRzLlxuICAgICAqIEBwYXJhbSBudW1iZXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlGcmFjdGlvbkZpbGwobnVtYmVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgZmlsbCBmcmFjdGlvbiBpcyBlbmFibGVkIGFuZCB0aGVyZSdzIGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBpZiAodGhpcy5maWxsRnJhY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyPy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcnIHx8ICFudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNEZWNpbWFsID0gbnVtYmVyLnNwbGl0KCcuJykubGVuZ3RoID4gMTtcbiAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkZWNpbWFsIHBvaW50IGluIG51bWJlclxuICAgICAgICAgICAgICAgIGlmIChoYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxTaXplID0gbnVtYmVyLnNwbGl0KCcuJylbMV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaXplIG9mIGRlY2ltYWwgcGFydCBvZiBudW1iZXIgaXMgbGVzcyB0aGFuIHRoZSBtYXggZnJhY3Rpb24gZGlnaXRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNpbWFsU2l6ZSA8IHRoaXMuX2ZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKyBuZXcgQXJyYXkodGhpcy5fZnJhY3Rpb25EaWdpdHMgLSBkZWNpbWFsU2l6ZSkuZmlsbCgwKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGVyZSdzIG5vdCwgZm9yY2UgaXQgYnkgZmlsbGluZyBpdCBhcyBtdWNoIHplcm8gYXMgdGhlIGZyYWN0aW9uIGRpZ2l0c1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mcmFjdGlvbkRpZ2l0cyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gYCR7bnVtYmVyfS4ke25ldyBBcnJheSh0aGlzLl9mcmFjdGlvbkRpZ2l0cykuZmlsbCgwKS5qb2luKCcnKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBnaXZlbiBmb3JtYXR0ZWQgbnVtYmVyIGFuZCByZXR1cm5zIGl0IGFzIGEgbnVtYmVyLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgZm9ybWF0dGVkIG51bWJlciB5b3Ugd2FudCB0byBwYXJzZSBlLmcuIDExMSw4ODguMjJcbiAgICAgKiBAcGFyYW0gY3VycmVudExvY2FsZVN0YXRlIFVzZSBwcmV2aW91cyBsb2NhbGUgc3RhdGUgdG8gcGFyc2UgdGhlIHZhbHVlLiBCeSBkZWZhdWx0LCBpcyBmYWxzZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZU51bWJlcih2YWx1ZTogc3RyaW5nLCB1c2VyUHJldkxvY2FsZVN0YXRlOiBib29sZWFuID0gZmFsc2UpOiBudW1iZXIge1xuICAgICAgICAvLyBsb2NhbGUgc3RhdGVcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdXNlclByZXZMb2NhbGVTdGF0ZSA/IHRoaXMubG9jYWxlU2VydmljZS5wcmV2aW91c0xvY2FsZSA6IHRoaXMubG9jYWxlU2VydmljZS5jdXJyZW50TG9jYWxlO1xuICAgICAgICAvLyBnZXQgZGVjaW1hbCBhbmQgZ3JvdXAgc3ltYm9sc1xuICAgICAgICBsZXQgZGVjaW1hbFN5bWJvbCA9IGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKTtcbiAgICAgICAgbGV0IGdyb3VwU3ltYm9sID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGxvY2FsZSwgTnVtYmVyU3ltYm9sLkdyb3VwKTtcbiAgICAgICAgLy8gcmVwbGFjZSBzeW1ib2xzIHRvIHBhcnNlIG51bWJlclxuICAgICAgICBsZXQgcGFyc2VkTnVtYmVyID0gdmFsdWU/LnNwbGl0KGdyb3VwU3ltYm9sKS5qb2luKCcnKS5zcGxpdChkZWNpbWFsU3ltYm9sKS5qb2luKCcuJyk7XG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VGbG9hdChwYXJzZWROdW1iZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZCBsZWFkaW5nIHplcm8gdG8gdGhlIG51bWJlclxuICAgICAqIEBwYXJhbSBudW0gVGhlIG51bWJlciB0byBhZGQgbGVhZGluZyB6ZXJvIHRvXG4gICAgICogQHBhcmFtIHNpemUgTnVtYmVyIG9mIG51bWJlcidzIGxlYWRpbmcgemVyb1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYWRaZXJvKG51bSwgc2l6ZSkge1xuICAgICAgICBudW0gPSBudW0udG9TdHJpbmcoKTtcbiAgICAgICAgLy8gZ2V0IGludGVnZXIgYW5kIGRlY2ltYWwgcGFydFxuICAgICAgICBsZXQgW2ludGVnZXIsIGRlY2ltYWxdID0gbnVtLnNwbGl0KCcuJyk7XG4gICAgICAgIHdoaWxlIChpbnRlZ2VyLmxlbmd0aCA8IHNpemUpIHtpbnRlZ2VyID0gJzAnICsgaW50ZWdlcjt9XG4gICAgICAgIHJldHVybiBkZWNpbWFsID8gYCR7aW50ZWdlcn0uJHtkZWNpbWFsfWAgOiBpbnRlZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyB3aGV0aGVyIHRoZSBtaW4gc3ltYm9sIGlzIGFsbG93ZWQuIEl0IGlzIGFsbG93ZWQgd2hlbiBtaW51cyBzeW1ib2xcbiAgICAgKiBwcm92aWRlZCBhbmQgbWluIGlucHV0IGlzIHVuZGVmaW5lZCBvciBtaW4gcHJvdmlkZWQgYW5kIGlzIG5lZ2F0aXZlLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBzdHJpbmcgY29taW5nIGZyb20gYW4gZXZlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTWludXNBbGxvd2VkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoIXRoaXMubWluIHx8IHRoaXMubWluIDwgMCkgPyBrZXkgIT09ICctJyA6IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2hlY2sgd2hldGhlciB0aGUga2V5IGVudGVyZWQgaXMgaW5zaWRlIHRoZSBtaW4gYW5kXG4gICAgICogbWF4IHJhbmdlLiBSZXR1cm5zIHRydWUgaWYgaXQncyBvdXQgb2YgcmFuZ2UuXG4gICAgICogQHBhcmFtIGUgQSBrZXlib2FyZCBldmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgaXNPdXRTaWRlUmFuZ2UoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgY2FyZXQgcG9zaXRpb25cbiAgICAgICAgY29uc3QgcG9zID0gZS50YXJnZXRbJ3NlbGVjdGlvblN0YXJ0J107XG4gICAgICAgIC8vIGdldCBjYXJldCBwb3NpdGlvbiAoaW4gY2FzZSB0aGVyZSdzIHRleHQgc2VsZWN0ZWQpXG4gICAgICAgIGNvbnN0IGVuZFBvcyA9IGUudGFyZ2V0WydzZWxlY3Rpb25FbmQnXTtcbiAgICAgICAgLy8gZ2V0IGN1cnJlbnQgdmFsdWUgKGZvcm1hdHRlZClcbiAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXRbJ3ZhbHVlJ107XG4gICAgICAgIC8vIHJlbW92ZSBrZXkgZnJvbSB2YWx1ZVxuICAgICAgICBpZiAoZS5rZXkgPT09ICdEZWxldGUnIHx8IGUua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUncyBzZWxlY3Rpb24gb2YgdGV4dCB0byBiZSByZW1vdmVkXG4gICAgICAgICAgICBpZiAocG9zICE9PSBlbmRQb3MpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZygwLCBwb3MpICsgZS50YXJnZXRbJ3ZhbHVlJ10uc3Vic3RyaW5nKGVuZFBvcywgZS50YXJnZXRbJ3ZhbHVlJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoMCwgcG9zIC0gMSkgKyBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoZW5kUG9zLCBlLnRhcmdldFsndmFsdWUnXS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAvLyBhZGQga2V5IHRvIHRoZSB2YWx1ZVxuICAgICAgICAgICAgdmFsdWUgPSBbdmFsdWUuc2xpY2UoMCwgcG9zKSwgZS5rZXksIHZhbHVlLnNsaWNlKGVuZFBvcyldLmpvaW4oJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIGEgQ2xlYXZlIGluc3RhbmNlIHRvIGV4dHJhY3QgdGhlIG51bWJlciBmcm9tIGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBjbGVhdmU6IENsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB7IC4uLnRoaXMub3B0aW9ucyB9KTtcbiAgICAgICAgY2xlYXZlLnNldFJhd1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGNsZWF2ZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgLy8gZGVzdHJveSBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgY2xlYXZlLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLm1pbiA+IG51bWJlciB8fCB0aGlzLm1heCA8IG51bWJlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjaW1hbCBhZGp1c3RtZW50IG9mIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9ICB2YWx1ZSBUaGUgbnVtYmVyLlxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gZXhwICAgVGhlIGV4cG9uZW50ICh0aGUgMTAgbG9nYXJpdGhtIG9mIHRoZSBhZGp1c3RtZW50IGJhc2UpLlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBhZGp1c3RlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlY2ltYWxBZGp1c3QodmFsdWU6IG51bWJlciwgZXhwOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSWYgdGhlIGV4cCBpcyB1bmRlZmluZWQgb3IgemVyby4uLlxuICAgICAgICBpZiAodHlwZW9mIGV4cCA9PT0gJ3VuZGVmaW5lZCcgfHwgK2V4cCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuICAgICAgICBleHAgPSArZXhwO1xuICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgbm90IGEgbnVtYmVyIG9yIHRoZSBleHAgaXMgbm90IGFuIGludGVnZXIuLi5cbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAhKHR5cGVvZiBleHAgPT09ICdudW1iZXInICYmIGV4cCAlIDEgPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNoaWZ0XG4gICAgICAgIGxldCBjbGVhbmVkID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnZScpO1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQoKyhjbGVhbmVkWzBdICsgJ2UnICsgKGNsZWFuZWRbMV0gPyAoK2NsZWFuZWRbMV0gLSBleHApIDogLWV4cCkpKTtcbiAgICAgICAgLy8gU2hpZnQgYmFja1xuICAgICAgICBjbGVhbmVkID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnZScpO1xuICAgICAgICByZXR1cm4gKyhjbGVhbmVkWzBdICsgJ2UnICsgKGNsZWFuZWRbMV0gPyAoK2NsZWFuZWRbMV0gKyBleHApIDogZXhwKSk7XG4gICAgfVxuXG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-input-number.component.d.ts","sourceRoot":"","sources":["../../eui-input-number/eui-input-number.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EAEjB,OAAO,EACP,UAAU,EAIV,SAAS,EACT,SAAS,EACT,MAAM,EAEN,SAAS,EAET,aAAa,EAEb,QAAQ,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAe,MAAM,WAAW,CAAC;AACvD,OAAO,EAA+C,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI/G,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;;
|
|
1
|
+
{"version":3,"file":"eui-input-number.component.d.ts","sourceRoot":"","sources":["../../eui-input-number/eui-input-number.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -324,15 +324,10 @@ class EuiInputNumberComponent extends InputDirective {
|
|
|
324
324
|
if (this.cleaveInstance) {
|
|
325
325
|
// the value before destroying cleave instance
|
|
326
326
|
const previousValue = this.cleaveInstance.getRawValue();
|
|
327
|
-
//
|
|
328
|
-
this.cleaveInstance.
|
|
329
|
-
//
|
|
330
|
-
|
|
331
|
-
// to this.cleaveInstance which was using the old one, causing loop (max call stack)
|
|
332
|
-
// So it is essential to set it to null before creating a new instance.
|
|
333
|
-
this.cleaveInstance = null;
|
|
334
|
-
// create the Cleave instance with the new or updated options
|
|
335
|
-
this.cleaveInstance = new Cleave(this._elementRef.nativeElement, Object.assign(Object.assign({}, this.options), { initValue: previousValue, onValueChanged: this.onValueChanged.bind(this) }));
|
|
327
|
+
// update the Cleave instance with the new or updated options
|
|
328
|
+
this.cleaveInstance.properties = Object.assign(Object.assign(Object.assign({}, this.cleaveInstance.properties), this.options), { initValue: previousValue });
|
|
329
|
+
// init number formatter with updated options
|
|
330
|
+
this.cleaveInstance.initNumeralFormatter();
|
|
336
331
|
// In case previous settings where numeralDecimalMark='.' with value 1000.99 and they changed to
|
|
337
332
|
// numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will
|
|
338
333
|
// remove the decimal part. Set of the value after initialization causes reformat of number and works.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-components-eui-input-number.mjs","sources":["../../eui-input-number/eui-input-number.component.ts","../../eui-input-number/eui-input-number.module.ts","../../eui-input-number/eui-components-eui-input-number.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n SimpleChanges,\n ViewEncapsulation,\n Injector,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { LocaleService, LocaleState } from '@eui/core';\nimport { coerceBooleanProperty, coerceNumberProperty, BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { CleaveOptions } from 'cleave.js/options';\nimport Cleave from 'cleave.js';\nimport { CleaveEventOnChange } from './models/cleave-event-onchange.model';\nimport { InputDirective } from '@eui/components/shared';\nimport { getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[euiInputNumber]:not([euiInputCheckBox])',\n styleUrls: ['./styles/_index.scss'],\n template: '',\n encapsulation: ViewEncapsulation.None,\n})\nexport class EuiInputNumberComponent extends InputDirective implements OnInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor {\n\n /**\n * The minimum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get min(): number {\n return this._min;\n }\n public set min(value: NumberInput) {\n this._min = coerceNumberProperty(value);\n }\n private _min: number;\n /**\n * The maximum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get max(): number {\n return this._max;\n }\n public set max(value: NumberInput) {\n this._max = coerceNumberProperty(value);\n }\n private _max: number;\n /** Adds leading zero to a number. Formatting will not work.\n * e.g. with leadingZero=3 input number 5 => 005\n */\n @Input()\n public get leadingZero(): number {\n return this._leadingZero;\n }\n public set leadingZero(value: NumberInput) {\n this._leadingZero = coerceNumberProperty(value);\n }\n private _leadingZero = 0;\n\n @Input()\n public get isInvalid() {\n return this._isInvalid || null;\n }\n public set isInvalid(state: any) {\n this.setInvalid(state);\n }\n\n @HostBinding('class')\n public get cssClasses(): any {\n return [\n super.getCssClasses('eui-input-number'),\n this._isInvalid ? `eui-input-number--invalid` : '',\n ].join(' ').trim();\n }\n /** how many digits for the decimal part */\n @Input()\n get fractionDigits(): number { return this._fractionDigits; }\n set fractionDigits(value: NumberInput) { this._fractionDigits = coerceNumberProperty(value); }\n /** how many digits for the integer part */\n @Input()\n get digits(): number { return this._digits; }\n set digits(value: NumberInput) { this._digits = coerceNumberProperty(value); }\n @Input()\n get fillFraction() { return this._fillFraction; }\n set fillFraction(value: BooleanInput) { this._fillFraction = coerceBooleanProperty(value); }\n /** rounds a number with more than two decimals UP */\n @Input()\n get roundUp(): number { return this._roundUp; }\n set roundUp(value: NumberInput) { this._roundUp = coerceNumberProperty(value); }\n protected _isInvalid: boolean;\n /**\n * does not format the and do a thousand grouping of number\n */\n @Input()\n get noFormat(): boolean { return this._noFormat; }\n set noFormat(value: BooleanInput) { this._noFormat = coerceBooleanProperty(value); }\n protected _noFormat: boolean;\n @Input() styleClass: string;\n @HostBinding('attr.type') protected type = 'eui-number';\n @Input() value: string;\n\n /** holds instance of cleave */\n private cleaveInstance: Cleave;\n /** options for the Cleave instance */\n private options: CleaveOptions;\n private _fractionDigits = 0;\n private _digits: number;\n private _fillFraction: boolean;\n protected _roundUp: number;\n\n constructor(\n @Optional() @Self() protected control: NgControl,\n protected _elementRef: ElementRef,\n protected _renderer: Renderer2,\n private cd: ChangeDetectorRef,\n private localeService: LocaleService,\n injector: Injector) {\n super(_elementRef, _renderer, control, injector);\n\n // set default options\n this.options = {\n numeral: true,\n };\n }\n\n ngOnInit() {\n super.ngOnInit();\n // set controlValueAccessor\n if (this.control) {\n this.control.valueAccessor = this;\n }\n // instantiate cleave\n this.initCleave();\n\n // subscribe to localization service and listen for locale change. De-construction of locale should happen here!\n this.localeService.getState().subscribe( (state: LocaleState) => {\n this.options = this.getCleaveOptsBasedOnLocale(state?.id);\n\n // update the options on the cleave instance\n this.updateOptions(true);\n });\n }\n\n ngDoCheck() {\n if (this.control) {\n this.isInvalid = this.control.invalid && this.control.touched;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n super.ngOnChanges(changes);\n\n if (changes.hasOwnProperty('value')) {\n this._elementRef.nativeElement.value = this.value;\n if (this.cleaveInstance) {\n this.cleaveInstance.setRawValue(this.value);\n }\n }\n if (changes.hasOwnProperty('fractionDigits')) {\n this.options = { ...this.options, numeralDecimalScale: this.fractionDigits };\n this.updateOptions();\n }\n if (changes.hasOwnProperty('noFormat')) {\n this.options = { ...this.options, numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand' };\n this.updateOptions();\n }\n if (changes.hasOwnProperty('fillFraction') && this.cleaveInstance) {\n this.applyFractionFill(this.cleaveInstance.getRawValue());\n }\n if (changes.hasOwnProperty('digits')) {\n this.options = { ...this.options, numeralIntegerScale: this.digits };\n this.updateOptions();\n }\n if (changes.hasOwnProperty('min')) {\n if (changes['min'].currentValue >= 0) {\n if (this.cleaveInstance) {\n // take care of the sign symbol\n this.cleaveInstance.setRawValue(Math.abs(Number(this.cleaveInstance.getRawValue())).toString());\n }\n }\n }\n if (changes.hasOwnProperty('roundUp')) {\n if (changes['roundUp'].currentValue > 0) {\n if (this.cleaveInstance) {\n let number = Number.parseFloat(this.cleaveInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n this.cleaveInstance.setRawValue(number.toString());\n }\n }\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n // destroy cleave instance\n if (this.cleaveInstance) {\n this.cleaveInstance.destroy();\n }\n }\n\n onChange: any = (_) => {\n if (this.control && (_ !== null || _ !== undefined)) {\n // parse number\n const value = Number(_);\n // run on next MicroTask to avoid NG0100 error TODO: deeper investigation\n Promise.resolve().then( () => this.control.viewToModelUpdate(value));\n // in case control is FormControl\n this.control?.control.setValue(isNaN(value) ? null : value, { emitEvent: false, emitModelToViewChange: false });\n }\n }\n onTouched: any = () => {\n this.isInvalid = this.control.invalid;\n }\n\n /**\n * sets the number for cleave instance and div element (read only mode)\n * @param val the number formatted or not\n */\n writeValue(val: string): void {\n if (this.cleaveInstance) {\n if (this.fillFraction && val !== '' && val) {\n this.applyFractionFill(val);\n this.cleaveInstance.setRawValue(val);\n } else {\n this.cleaveInstance.setRawValue(val);\n }\n // retrieve formatted value (based on options) and set the number to the model\n const number = Number.parseFloat(this.cleaveInstance.getRawValue());\n this.control.viewToModelUpdate(number);\n this.control?.control.setValue(isNaN(number) ? null : number, { emitEvent: false, emitModelToViewChange: false });\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n // get the value from clipboard\n let value = (event.clipboardData || window['clipboardData']).getData('text');\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const div = document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: Cleave = new Cleave(div, {...this.options, numeralDecimalScale: 8});\n cloneInstance.setRawValue(value.toString());\n let number = Number.parseFloat(cloneInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n if (!Number.isNaN(number)) {\n this.cleaveInstance.setRawValue(number.toString());\n // TODO: investigate in the future how can this be avoided\n setTimeout(() => {\n this.writeValue(number.toString());\n }, 0);\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(e: KeyboardEvent) {\n // check if it's a single symbol and not Special like (Ctrl, backspace etc)\n if (e?.key.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n // stop event propagation if key pressed is not a number or locale character or minus sign\n if (Number.isNaN(Number.parseInt(e.key, 10)) && this.isMinusAllowed(e.key) &&\n (e.key !== getLocaleNumberSymbol(this.localeService.currentLocale, NumberSymbol.Decimal))) {\n e.stopPropagation();\n e.preventDefault();\n // stop event propagation if key pressed exceeds the min/max value range\n } else if (!Number.isNaN(Number.parseInt(e.key, 10)) && this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n } else if (this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n // protect decimal symbol deletion in case fillFraction is on\n if ((e.key === 'Delete' || e.key === 'Backspace')) {\n const element = this._elementRef.nativeElement;\n // position of caret\n const pos = element.selectionStart;\n // get character about to be deleted\n const char = element.value.charAt(pos - 1);\n // in case the char is the decimal symbol prevent deletion and move caret in front\n if (char === getLocaleNumberSymbol(this.localeService.currentLocale, NumberSymbol.Decimal)) {\n e.stopPropagation();\n e.preventDefault();\n element.setSelectionRange(pos - 1, pos - 1);\n } else if (this.isOutSideRange(e)) { // don't allow insertion that will put number out of range\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusout(e: Event) {\n // in case fillFraction feature is on and there's no integer part add leading 0\n if (this.fillFraction && this.cleaveInstance.getRawValue().match(/^\\.[0-9]+/g)) {\n this.cleaveInstance.setRawValue('0' + this.cleaveInstance.getRawValue());\n }\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const number = Number.parseFloat(this.cleaveInstance.getRawValue());\n this.cleaveInstance.setRawValue(this.decimalAdjust(number, this.roundUp * -1).toString());\n }\n }\n\n protected setInvalid(state?: any): void {\n // in case it's controlled by NgControl override\n this._isInvalid = this.control ? this.control.invalid && this.control.touched : coerceBooleanProperty(state);\n\n // set BaseDirective Attribute\n super.euiDanger = this._isInvalid;\n }\n\n /**\n * @Override setPlaceholder setPlaceholderAttribute of InputDirective\n * Updates the placeholder value based on current number format and given value.\n * If value passed contains characters it doesn't format placeholder.\n * */\n protected setPlaceholderAttribute(value: string | number = 999999.9999): void {\n // if value is a number, format the value based on current number format\n if (typeof value === 'number' && !isNaN(value)) {\n const div = document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: Cleave = new Cleave(div, this.options);\n // BEWARE: by the time your setRawValue cleave options have changed thus number formatting\n cloneInstance.setRawValue(value.toString());\n // set the value with current format as placeholder\n super.setPlaceholderAttribute(cloneInstance.getFormattedValue());\n } else if (typeof value === 'string') {\n super.setPlaceholderAttribute(value.toString());\n } else if (isNaN(value)) {\n value = this._elementRef.nativeElement.placeholder;\n super.setPlaceholderAttribute(value.toString());\n }\n }\n\n /**\n * instantiate Cleave.js\n */\n private initCleave(): void {\n // change the cleave prototype function to intercept onCut callback\n // and allow based on the event bubbling and disabled state\n // TIP: change behavior of onCut to stop in case bubble is canceled\n // TODO: See relevant issue https://github.com/nosir/cleave.js/issues/675\n const _onCut = Cleave.prototype['onCut'];\n Cleave.prototype['onCut'] = function(e: Event) {\n // eslint-disable-next-line no-invalid-this\n if (!e.cancelBubble && !this.element.disabled) {\n // eslint-disable-next-line no-invalid-this\n _onCut.call(this, e);\n }\n };\n\n // in case options is undefined\n const opts: CleaveOptions = { ...this.options };\n\n // set the onValue change listener to keep the value at readOnly element in sync\n opts.onValueChanged = this.onValueChanged.bind(this);\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n let number = Number.parseFloat(this._elementRef.nativeElement.value);\n this._elementRef.nativeElement.value = this.decimalAdjust(number, this.roundUp * -1);\n }\n\n // create the Cleave instance with the new or updated options\n this.cleaveInstance = new Cleave(this._elementRef.nativeElement, opts);\n }\n\n /**\n * Updates the cleave options by destroying the current instance and creating another one while keeping the previous\n * value.\n */\n private updateOptions(localeUpdated: boolean = false): void {\n if (this.cleaveInstance) {\n // the value before destroying cleave instance\n const previousValue = this.cleaveInstance.getRawValue();\n\n // destroy previous instance from the element\n this.cleaveInstance.destroy();\n // while creating the Cleave instance we are passing onValueChanged\n // and bind to 'this' reference. Inside onValueChanged there is a call\n // to this.cleaveInstance which was using the old one, causing loop (max call stack)\n // So it is essential to set it to null before creating a new instance.\n this.cleaveInstance = null;\n\n // create the Cleave instance with the new or updated options\n this.cleaveInstance = new Cleave(this._elementRef.nativeElement, {\n ...this.options,\n initValue: previousValue,\n onValueChanged: this.onValueChanged.bind(this),\n });\n\n // In case previous settings where numeralDecimalMark='.' with value 1000.99 and they changed to\n // numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will\n // remove the decimal part. Set of the value after initialization causes reformat of number and works.\n this.cleaveInstance.setRawValue(previousValue);\n\n // parse number\n const number = this.parseNumber(this._elementRef.nativeElement.placeholder || undefined, localeUpdated);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(number);\n }\n }\n\n /**\n * Callback function of the Cleave instance that is invoked when value is changed.\n * @param event type of CleaveEventOnChange\n */\n private onValueChanged(event: CleaveEventOnChange) {\n const { target } = event;\n\n if (this.fillFraction) {\n this.applyFractionFill(target.rawValue);\n }\n this.onChange(Number.parseFloat(target.rawValue));\n // fill leading zero\n if (this.leadingZero) {\n const size = this.leadingZero > this.digits && this.digits > 0 ? this.digits : this.leadingZero;\n this._elementRef.nativeElement.value = this.padZero(event.target.rawValue, size);\n }\n }\n\n /**\n * responsible to extract all locale information needed to build CleaveOptions related to number format.\n * @param id The id of the locale\n */\n private getCleaveOptsBasedOnLocale(id: string): CleaveOptions {\n if (!id || id === '') {\n throw new Error('Locale id cannot be empty or undefined');\n }\n const opts: CleaveOptions = {\n numeral: true,\n delimiter: getLocaleNumberSymbol(id, NumberSymbol.Group),\n numeralDecimalMark: getLocaleNumberSymbol(id, NumberSymbol.Decimal),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand', // TODO: implement based on locale\n };\n\n return { ...this.options, ...opts };\n }\n\n /**\n * Applies the fill of decimal part with zeros in case decimal part of given number has\n * size less than the max fraction digits.\n * @param number\n * @private\n */\n private applyFractionFill(number: string): void {\n // if fill fraction is enabled and there's cleave instance\n if (this.fillFraction) {\n if (this.cleaveInstance) {\n number = number?.toString();\n if (number === '' || !number) {\n return;\n }\n const hasDecimal = number.split('.').length > 1;\n // in case there's already decimal point in number\n if (hasDecimal) {\n const decimalSize = number.split('.')[1].length;\n // if size of decimal part of number is less than the max fraction digits\n if (decimalSize < this._fractionDigits) {\n number = number + new Array(this._fractionDigits - decimalSize).fill(0).join('');\n const pos = this._elementRef.nativeElement.selectionStart;\n this.cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n // in case there's not, force it by filling it as much zero as the fraction digits\n } else if (this.fractionDigits > 0) {\n number = `${number}.${new Array(this._fractionDigits).fill(0).join('')}`;\n const pos = this._elementRef.nativeElement.selectionStart;\n this.cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n }\n }\n }\n\n /**\n * Parses a given formatted number and returns it as a number.\n * @param value The formatted number you want to parse e.g. 111,888.22\n * @param currentLocaleState Use previous locale state to parse the value. By default, is false\n * @private\n */\n private parseNumber(value: string, userPrevLocaleState: boolean = false): number {\n // locale state\n const locale = userPrevLocaleState ? this.localeService.previousLocale : this.localeService.currentLocale;\n // get decimal and group symbols\n let decimalSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Decimal);\n let groupSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Group);\n // replace symbols to parse number\n let parsedNumber = value?.split(groupSymbol).join('').split(decimalSymbol).join('.');\n return Number.parseFloat(parsedNumber);\n }\n\n /**\n * Pad leading zero to the number\n * @param num The number to add leading zero to\n * @param size Number of number's leading zero\n * @private\n */\n private padZero(num, size) {\n num = num.toString();\n // get integer and decimal part\n let [integer, decimal] = num.split('.');\n while (integer.length < size) {integer = '0' + integer;}\n return decimal ? `${integer}.${decimal}` : integer;\n }\n\n /**\n * checks whether the min symbol is allowed. It is allowed when minus symbol\n * provided and min input is undefined or min provided and is negative.\n * @param key The key string coming from an event\n */\n private isMinusAllowed(key: string): boolean {\n return (!this.min || this.min < 0) ? key !== '-' : true;\n }\n\n /**\n * check whether the key entered is inside the min and\n * max range. Returns true if it's out of range.\n * @param e A keyboard event\n */\n private isOutSideRange(e: KeyboardEvent): boolean {\n if (!this.cleaveInstance) {\n return false;\n }\n // get caret position\n const pos = e.target['selectionStart'];\n // get caret position (in case there's text selected)\n const endPos = e.target['selectionEnd'];\n // get current value (formatted)\n let value = e.target['value'];\n // remove key from value\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // check if there's selection of text to be removed\n if (pos !== endPos) {\n value = e.target['value'].substring(0, pos) + e.target['value'].substring(endPos, e.target['value'].length);\n } else {\n value = e.target['value'].substring(0, pos - 1) + e.target['value'].substring(endPos, e.target['value'].length);\n }\n } else{\n // add key to the value\n value = [value.slice(0, pos), e.key, value.slice(endPos)].join('');\n }\n\n // create a Cleave instance to extract the number from formatted value\n const cleave = new Cleave(document.createElement('input'), { ...this.options });\n cleave.setRawValue(value);\n const number = Number(cleave.getRawValue());\n // destroy cleave instance\n cleave.destroy();\n return (this.min > number || this.max < number);\n }\n\n /**\n * Decimal adjustment of a number.\n *\n * @param {Number} value The number.\n * @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).\n * @returns {Number} The adjusted value.\n */\n private decimalAdjust(value: number, exp: number) {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math.round(value);\n }\n value = +value;\n exp = +exp;\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n let cleaned = value.toString().split('e');\n value = Math.round(+(cleaned[0] + 'e' + (cleaned[1] ? (+cleaned[1] - exp) : -exp)));\n // Shift back\n cleaned = value.toString().split('e');\n return +(cleaned[0] + 'e' + (cleaned[1] ? (+cleaned[1] + exp) : exp));\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiInputNumberComponent } from './eui-input-number.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n EuiInputNumberComponent,\n ],\n exports: [\n EuiInputNumberComponent,\n ],\n})\nexport class EuiInputNumberDirectiveModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-components-eui-input-number.mjs","sources":["../../eui-input-number/eui-input-number.component.ts","../../eui-input-number/eui-input-number.module.ts","../../eui-input-number/eui-components-eui-input-number.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n SimpleChanges,\n ViewEncapsulation,\n Injector,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { LocaleService, LocaleState } from '@eui/core';\nimport { coerceBooleanProperty, coerceNumberProperty, BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { type CleaveOptions } from 'cleave.js/options';\nimport Cleave from 'cleave.js';\nimport { CleaveEventOnChange } from './models/cleave-event-onchange.model';\nimport { InputDirective } from '@eui/components/shared';\nimport { getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\n\ninterface CleaveInstance extends Cleave {\n initSwapHiddenInput?: () => void;\n initNumeralFormatter?: () => void;\n initTimeFormatter?: () => void;\n initDateFormatter?: () => void;\n initPhoneFormatter?: () => void;\n updateCreditCardPropsByValue?: () => void;\n updateValueState?: () => void;\n callOnValueChanged?: () => void;\n onChange?: (event?: Event) => void;\n onCut?: (event?: Event) => void;\n onFocus?: (event?: Event) => void;\n onCopy?: (event?: Event) => void;\n onKeyDown?: (event?: Event) => void;\n onChangeListener?: (event?: Event) => void;\n onKeyDownListener?: (event?: Event) => void;\n onFocusListener?: (event?: Event) => void;\n onCutListener?: (event?: Event) => void;\n onCopyListener?: (event?: Event) => void;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[euiInputNumber]:not([euiInputCheckBox])',\n styleUrls: ['./styles/_index.scss'],\n template: '',\n encapsulation: ViewEncapsulation.None,\n})\nexport class EuiInputNumberComponent extends InputDirective implements OnInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor {\n\n /**\n * The minimum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get min(): number {\n return this._min;\n }\n public set min(value: NumberInput) {\n this._min = coerceNumberProperty(value);\n }\n private _min: number;\n /**\n * The maximum number can be entered. Blocks user's input if not in range.\n */\n @Input()\n public get max(): number {\n return this._max;\n }\n public set max(value: NumberInput) {\n this._max = coerceNumberProperty(value);\n }\n private _max: number;\n /** Adds leading zero to a number. Formatting will not work.\n * e.g. with leadingZero=3 input number 5 => 005\n */\n @Input()\n public get leadingZero(): number {\n return this._leadingZero;\n }\n public set leadingZero(value: NumberInput) {\n this._leadingZero = coerceNumberProperty(value);\n }\n private _leadingZero = 0;\n\n @Input()\n public get isInvalid() {\n return this._isInvalid || null;\n }\n public set isInvalid(state: any) {\n this.setInvalid(state);\n }\n\n @HostBinding('class')\n public get cssClasses(): any {\n return [\n super.getCssClasses('eui-input-number'),\n this._isInvalid ? `eui-input-number--invalid` : '',\n ].join(' ').trim();\n }\n /** how many digits for the decimal part */\n @Input()\n get fractionDigits(): number { return this._fractionDigits; }\n set fractionDigits(value: NumberInput) { this._fractionDigits = coerceNumberProperty(value); }\n /** how many digits for the integer part */\n @Input()\n get digits(): number { return this._digits; }\n set digits(value: NumberInput) { this._digits = coerceNumberProperty(value); }\n @Input()\n get fillFraction() { return this._fillFraction; }\n set fillFraction(value: BooleanInput) { this._fillFraction = coerceBooleanProperty(value); }\n /** rounds a number with more than two decimals UP */\n @Input()\n get roundUp(): number { return this._roundUp; }\n set roundUp(value: NumberInput) { this._roundUp = coerceNumberProperty(value); }\n protected _isInvalid: boolean;\n /**\n * does not format the and do a thousand grouping of number\n */\n @Input()\n get noFormat(): boolean { return this._noFormat; }\n set noFormat(value: BooleanInput) { this._noFormat = coerceBooleanProperty(value); }\n protected _noFormat: boolean;\n @Input() styleClass: string;\n @HostBinding('attr.type') protected type = 'eui-number';\n @Input() value: string;\n\n /** holds instance of cleave */\n private cleaveInstance: CleaveInstance;\n /** options for the Cleave instance */\n private options: CleaveOptions;\n private _fractionDigits = 0;\n private _digits: number;\n private _fillFraction: boolean;\n protected _roundUp: number;\n\n constructor(\n @Optional() @Self() protected control: NgControl,\n protected _elementRef: ElementRef,\n protected _renderer: Renderer2,\n private cd: ChangeDetectorRef,\n private localeService: LocaleService,\n injector: Injector) {\n super(_elementRef, _renderer, control, injector);\n\n // set default options\n this.options = {\n numeral: true,\n };\n }\n\n ngOnInit() {\n super.ngOnInit();\n // set controlValueAccessor\n if (this.control) {\n this.control.valueAccessor = this;\n }\n // instantiate cleave\n this.initCleave();\n\n // subscribe to localization service and listen for locale change. De-construction of locale should happen here!\n this.localeService.getState().subscribe( (state: LocaleState) => {\n this.options = this.getCleaveOptsBasedOnLocale(state?.id);\n\n // update the options on the cleave instance\n this.updateOptions(true);\n });\n }\n\n ngDoCheck() {\n if (this.control) {\n this.isInvalid = this.control.invalid && this.control.touched;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n super.ngOnChanges(changes);\n\n if (changes.hasOwnProperty('value')) {\n this._elementRef.nativeElement.value = this.value;\n if (this.cleaveInstance) {\n this.cleaveInstance.setRawValue(this.value);\n }\n }\n if (changes.hasOwnProperty('fractionDigits')) {\n this.options = { ...this.options, numeralDecimalScale: this.fractionDigits };\n this.updateOptions();\n }\n if (changes.hasOwnProperty('noFormat')) {\n this.options = { ...this.options, numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand' };\n this.updateOptions();\n }\n if (changes.hasOwnProperty('fillFraction') && this.cleaveInstance) {\n this.applyFractionFill(this.cleaveInstance.getRawValue());\n }\n if (changes.hasOwnProperty('digits')) {\n this.options = { ...this.options, numeralIntegerScale: this.digits };\n this.updateOptions();\n }\n if (changes.hasOwnProperty('min')) {\n if (changes['min'].currentValue >= 0) {\n if (this.cleaveInstance) {\n // take care of the sign symbol\n this.cleaveInstance.setRawValue(Math.abs(Number(this.cleaveInstance.getRawValue())).toString());\n }\n }\n }\n if (changes.hasOwnProperty('roundUp')) {\n if (changes['roundUp'].currentValue > 0) {\n if (this.cleaveInstance) {\n let number = Number.parseFloat(this.cleaveInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n this.cleaveInstance.setRawValue(number.toString());\n }\n }\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n // destroy cleave instance\n if (this.cleaveInstance) {\n this.cleaveInstance.destroy();\n }\n }\n\n onChange: any = (_) => {\n if (this.control && (_ !== null || _ !== undefined)) {\n // parse number\n const value = Number(_);\n // run on next MicroTask to avoid NG0100 error TODO: deeper investigation\n Promise.resolve().then( () => this.control.viewToModelUpdate(value));\n // in case control is FormControl\n this.control?.control.setValue(isNaN(value) ? null : value, { emitEvent: false, emitModelToViewChange: false });\n }\n }\n onTouched: any = () => {\n this.isInvalid = this.control.invalid;\n }\n\n /**\n * sets the number for cleave instance and div element (read only mode)\n * @param val the number formatted or not\n */\n writeValue(val: string): void {\n if (this.cleaveInstance) {\n if (this.fillFraction && val !== '' && val) {\n this.applyFractionFill(val);\n this.cleaveInstance.setRawValue(val);\n } else {\n this.cleaveInstance.setRawValue(val);\n }\n // retrieve formatted value (based on options) and set the number to the model\n const number = Number.parseFloat(this.cleaveInstance.getRawValue());\n this.control.viewToModelUpdate(number);\n this.control?.control.setValue(isNaN(number) ? null : number, { emitEvent: false, emitModelToViewChange: false });\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n // get the value from clipboard\n let value = (event.clipboardData || window['clipboardData']).getData('text');\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const div = document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, {...this.options, numeralDecimalScale: 8});\n cloneInstance.setRawValue(value.toString());\n let number = Number.parseFloat(cloneInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n if (!Number.isNaN(number)) {\n this.cleaveInstance.setRawValue(number.toString());\n // TODO: investigate in the future how can this be avoided\n setTimeout(() => {\n this.writeValue(number.toString());\n }, 0);\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(e: KeyboardEvent) {\n // check if it's a single symbol and not Special like (Ctrl, backspace etc)\n if (e?.key.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n // stop event propagation if key pressed is not a number or locale character or minus sign\n if (Number.isNaN(Number.parseInt(e.key, 10)) && this.isMinusAllowed(e.key) &&\n (e.key !== getLocaleNumberSymbol(this.localeService.currentLocale, NumberSymbol.Decimal))) {\n e.stopPropagation();\n e.preventDefault();\n // stop event propagation if key pressed exceeds the min/max value range\n } else if (!Number.isNaN(Number.parseInt(e.key, 10)) && this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n } else if (this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n // protect decimal symbol deletion in case fillFraction is on\n if ((e.key === 'Delete' || e.key === 'Backspace')) {\n const element = this._elementRef.nativeElement;\n // position of caret\n const pos = element.selectionStart;\n // get character about to be deleted\n const char = element.value.charAt(pos - 1);\n // in case the char is the decimal symbol prevent deletion and move caret in front\n if (char === getLocaleNumberSymbol(this.localeService.currentLocale, NumberSymbol.Decimal)) {\n e.stopPropagation();\n e.preventDefault();\n element.setSelectionRange(pos - 1, pos - 1);\n } else if (this.isOutSideRange(e)) { // don't allow insertion that will put number out of range\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusout(e: Event) {\n // in case fillFraction feature is on and there's no integer part add leading 0\n if (this.fillFraction && this.cleaveInstance.getRawValue().match(/^\\.[0-9]+/g)) {\n this.cleaveInstance.setRawValue('0' + this.cleaveInstance.getRawValue());\n }\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n const number = Number.parseFloat(this.cleaveInstance.getRawValue());\n this.cleaveInstance.setRawValue(this.decimalAdjust(number, this.roundUp * -1).toString());\n }\n }\n\n protected setInvalid(state?: any): void {\n // in case it's controlled by NgControl override\n this._isInvalid = this.control ? this.control.invalid && this.control.touched : coerceBooleanProperty(state);\n\n // set BaseDirective Attribute\n super.euiDanger = this._isInvalid;\n }\n\n /**\n * @Override setPlaceholder setPlaceholderAttribute of InputDirective\n * Updates the placeholder value based on current number format and given value.\n * If value passed contains characters it doesn't format placeholder.\n * */\n protected setPlaceholderAttribute(value: string | number = 999999.9999): void {\n // if value is a number, format the value based on current number format\n if (typeof value === 'number' && !isNaN(value)) {\n const div = document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, this.options);\n // BEWARE: by the time your setRawValue cleave options have changed thus number formatting\n cloneInstance.setRawValue(value.toString());\n // set the value with current format as placeholder\n super.setPlaceholderAttribute(cloneInstance.getFormattedValue());\n } else if (typeof value === 'string') {\n super.setPlaceholderAttribute(value.toString());\n } else if (isNaN(value)) {\n value = this._elementRef.nativeElement.placeholder;\n super.setPlaceholderAttribute(value.toString());\n }\n }\n\n /**\n * instantiate Cleave.js\n */\n private initCleave(): void {\n // change the cleave prototype function to intercept onCut callback\n // and allow based on the event bubbling and disabled state\n // TIP: change behavior of onCut to stop in case bubble is canceled\n // TODO: See relevant issue https://github.com/nosir/cleave.js/issues/675\n const _onCut = Cleave.prototype['onCut'];\n Cleave.prototype['onCut'] = function(e: Event) {\n // eslint-disable-next-line no-invalid-this\n if (!e.cancelBubble && !this.element.disabled) {\n // eslint-disable-next-line no-invalid-this\n _onCut.call(this, e);\n }\n };\n\n // in case options is undefined\n const opts: CleaveOptions = { ...this.options };\n\n // set the onValue change listener to keep the value at readOnly element in sync\n opts.onValueChanged = this.onValueChanged.bind(this);\n\n // in case round UP is enabled\n if (this._roundUp > 0) {\n let number = Number.parseFloat(this._elementRef.nativeElement.value);\n this._elementRef.nativeElement.value = this.decimalAdjust(number, this.roundUp * -1);\n }\n\n // create the Cleave instance with the new or updated options\n this.cleaveInstance = new Cleave(this._elementRef.nativeElement, opts);\n }\n\n /**\n * Updates the cleave options by destroying the current instance and creating another one while keeping the previous\n * value.\n */\n private updateOptions(localeUpdated: boolean = false): void {\n if (this.cleaveInstance) {\n // the value before destroying cleave instance\n const previousValue = this.cleaveInstance.getRawValue();\n\n // update the Cleave instance with the new or updated options\n this.cleaveInstance.properties = {\n ...this.cleaveInstance.properties,\n ...this.options,\n initValue: previousValue\n };\n\n // init number formatter with updated options\n this.cleaveInstance.initNumeralFormatter();\n\n // In case previous settings where numeralDecimalMark='.' with value 1000.99 and they changed to\n // numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will\n // remove the decimal part. Set of the value after initialization causes reformat of number and works.\n this.cleaveInstance.setRawValue(previousValue);\n\n // parse number\n const number = this.parseNumber(this._elementRef.nativeElement.placeholder || undefined, localeUpdated);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(number);\n }\n }\n\n /**\n * Callback function of the Cleave instance that is invoked when value is changed.\n * @param event type of CleaveEventOnChange\n */\n private onValueChanged(event: CleaveEventOnChange) {\n const { target } = event;\n\n if (this.fillFraction) {\n this.applyFractionFill(target.rawValue);\n }\n this.onChange(Number.parseFloat(target.rawValue));\n // fill leading zero\n if (this.leadingZero) {\n const size = this.leadingZero > this.digits && this.digits > 0 ? this.digits : this.leadingZero;\n this._elementRef.nativeElement.value = this.padZero(event.target.rawValue, size);\n }\n }\n\n /**\n * responsible to extract all locale information needed to build CleaveOptions related to number format.\n * @param id The id of the locale\n */\n private getCleaveOptsBasedOnLocale(id: string): CleaveOptions {\n if (!id || id === '') {\n throw new Error('Locale id cannot be empty or undefined');\n }\n const opts: CleaveOptions = {\n numeral: true,\n delimiter: getLocaleNumberSymbol(id, NumberSymbol.Group),\n numeralDecimalMark: getLocaleNumberSymbol(id, NumberSymbol.Decimal),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand', // TODO: implement based on locale\n };\n\n return { ...this.options, ...opts };\n }\n\n /**\n * Applies the fill of decimal part with zeros in case decimal part of given number has\n * size less than the max fraction digits.\n * @param number\n * @private\n */\n private applyFractionFill(number: string): void {\n // if fill fraction is enabled and there's cleave instance\n if (this.fillFraction) {\n if (this.cleaveInstance) {\n number = number?.toString();\n if (number === '' || !number) {\n return;\n }\n const hasDecimal = number.split('.').length > 1;\n // in case there's already decimal point in number\n if (hasDecimal) {\n const decimalSize = number.split('.')[1].length;\n // if size of decimal part of number is less than the max fraction digits\n if (decimalSize < this._fractionDigits) {\n number = number + new Array(this._fractionDigits - decimalSize).fill(0).join('');\n const pos = this._elementRef.nativeElement.selectionStart;\n this.cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n // in case there's not, force it by filling it as much zero as the fraction digits\n } else if (this.fractionDigits > 0) {\n number = `${number}.${new Array(this._fractionDigits).fill(0).join('')}`;\n const pos = this._elementRef.nativeElement.selectionStart;\n this.cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n }\n }\n }\n\n /**\n * Parses a given formatted number and returns it as a number.\n * @param value The formatted number you want to parse e.g. 111,888.22\n * @param currentLocaleState Use previous locale state to parse the value. By default, is false\n * @private\n */\n private parseNumber(value: string, userPrevLocaleState: boolean = false): number {\n // locale state\n const locale = userPrevLocaleState ? this.localeService.previousLocale : this.localeService.currentLocale;\n // get decimal and group symbols\n let decimalSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Decimal);\n let groupSymbol = getLocaleNumberSymbol(locale, NumberSymbol.Group);\n // replace symbols to parse number\n let parsedNumber = value?.split(groupSymbol).join('').split(decimalSymbol).join('.');\n return Number.parseFloat(parsedNumber);\n }\n\n /**\n * Pad leading zero to the number\n * @param num The number to add leading zero to\n * @param size Number of number's leading zero\n * @private\n */\n private padZero(num, size) {\n num = num.toString();\n // get integer and decimal part\n let [integer, decimal] = num.split('.');\n while (integer.length < size) {integer = '0' + integer;}\n return decimal ? `${integer}.${decimal}` : integer;\n }\n\n /**\n * checks whether the min symbol is allowed. It is allowed when minus symbol\n * provided and min input is undefined or min provided and is negative.\n * @param key The key string coming from an event\n */\n private isMinusAllowed(key: string): boolean {\n return (!this.min || this.min < 0) ? key !== '-' : true;\n }\n\n /**\n * check whether the key entered is inside the min and\n * max range. Returns true if it's out of range.\n * @param e A keyboard event\n */\n private isOutSideRange(e: KeyboardEvent): boolean {\n if (!this.cleaveInstance) {\n return false;\n }\n // get caret position\n const pos = e.target['selectionStart'];\n // get caret position (in case there's text selected)\n const endPos = e.target['selectionEnd'];\n // get current value (formatted)\n let value = e.target['value'];\n // remove key from value\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // check if there's selection of text to be removed\n if (pos !== endPos) {\n value = e.target['value'].substring(0, pos) + e.target['value'].substring(endPos, e.target['value'].length);\n } else {\n value = e.target['value'].substring(0, pos - 1) + e.target['value'].substring(endPos, e.target['value'].length);\n }\n } else{\n // add key to the value\n value = [value.slice(0, pos), e.key, value.slice(endPos)].join('');\n }\n\n // create a Cleave instance to extract the number from formatted value\n const cleave: CleaveInstance = new Cleave(document.createElement('input'), { ...this.options });\n cleave.setRawValue(value);\n const number = Number(cleave.getRawValue());\n // destroy cleave instance\n cleave.destroy();\n return (this.min > number || this.max < number);\n }\n\n /**\n * Decimal adjustment of a number.\n *\n * @param {Number} value The number.\n * @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).\n * @returns {Number} The adjusted value.\n */\n private decimalAdjust(value: number, exp: number) {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math.round(value);\n }\n value = +value;\n exp = +exp;\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n let cleaned = value.toString().split('e');\n value = Math.round(+(cleaned[0] + 'e' + (cleaned[1] ? (+cleaned[1] - exp) : -exp)));\n // Shift back\n cleaned = value.toString().split('e');\n return +(cleaned[0] + 'e' + (cleaned[1] ? (+cleaned[1] + exp) : exp));\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiInputNumberComponent } from './eui-input-number.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n EuiInputNumberComponent,\n ],\n exports: [\n EuiInputNumberComponent,\n ],\n})\nexport class EuiInputNumberDirectiveModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -322,19 +322,14 @@ class EuiInputNumberComponent extends InputDirective {
|
|
|
322
322
|
if (this.cleaveInstance) {
|
|
323
323
|
// the value before destroying cleave instance
|
|
324
324
|
const previousValue = this.cleaveInstance.getRawValue();
|
|
325
|
-
//
|
|
326
|
-
this.cleaveInstance.
|
|
327
|
-
|
|
328
|
-
// and bind to 'this' reference. Inside onValueChanged there is a call
|
|
329
|
-
// to this.cleaveInstance which was using the old one, causing loop (max call stack)
|
|
330
|
-
// So it is essential to set it to null before creating a new instance.
|
|
331
|
-
this.cleaveInstance = null;
|
|
332
|
-
// create the Cleave instance with the new or updated options
|
|
333
|
-
this.cleaveInstance = new Cleave(this._elementRef.nativeElement, {
|
|
325
|
+
// update the Cleave instance with the new or updated options
|
|
326
|
+
this.cleaveInstance.properties = {
|
|
327
|
+
...this.cleaveInstance.properties,
|
|
334
328
|
...this.options,
|
|
335
|
-
initValue: previousValue
|
|
336
|
-
|
|
337
|
-
|
|
329
|
+
initValue: previousValue
|
|
330
|
+
};
|
|
331
|
+
// init number formatter with updated options
|
|
332
|
+
this.cleaveInstance.initNumeralFormatter();
|
|
338
333
|
// In case previous settings where numeralDecimalMark='.' with value 1000.99 and they changed to
|
|
339
334
|
// numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will
|
|
340
335
|
// remove the decimal part. Set of the value after initialization causes reformat of number and works.
|