New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ngx-nested-ellipsis

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ngx-nested-ellipsis - npm Package Compare versions

Comparing version

to
1.1.4

6

bundles/ngx-nested-ellipsis.umd.js

@@ -336,3 +336,3 @@ (function (global, factory) {

var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
var ResizeObserver = resizeObserver.ResizeObserver;
/**

@@ -413,2 +413,6 @@ * Directive to truncate the contained text, if it exceeds the element's boundaries

}
// Prefer native ResizeObserver over ponyfill, if available:
if (window.ResizeObserver != null) {
ResizeObserver = window.ResizeObserver;
}
if (typeof (this.active) !== 'boolean') {

@@ -415,0 +419,0 @@ this.active = true;

8

esm2015/lib/directives/nested-ellipsis.directive.js

@@ -7,3 +7,3 @@ import { Directive, Renderer2, Input, Output, EventEmitter, NgZone, Inject, PLATFORM_ID, TemplateRef, ViewContainerRef, ComponentFactoryResolver } from '@angular/core';

import { take } from 'rxjs/operators';
const ResizeObserver = window.ResizeObserver || ResizeObserverPonyfill;
let ResizeObserver = ResizeObserverPonyfill;
/**

@@ -84,2 +84,6 @@ * Directive to truncate the contained text, if it exceeds the element's boundaries

}
// Prefer native ResizeObserver over ponyfill, if available:
if (window.ResizeObserver != null) {
ResizeObserver = window.ResizeObserver;
}
if (typeof (this.active) !== 'boolean') {

@@ -398,2 +402,2 @@ this.active = true;

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWVsbGlwc2lzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1uZXN0ZWQtZWxsaXBzaXMvc3JjL2xpYi9kaXJlY3RpdmVzL25lc3RlZC1lbGxpcHNpcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUVOLE1BQU0sRUFDTixXQUFXLEVBQ1gsV0FBVyxFQUNYLGdCQUFnQixFQUNoQix3QkFBd0IsRUFLekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE1BQU0sY0FBYyxHQUFVLE1BQU8sQ0FBQyxjQUFjLElBQUksc0JBQXNCLENBQUM7QUFFL0U7OztHQUdHO0FBS0gsTUFBTSxPQUFPLHVCQUF1QjtJQXFJbEM7O09BRUc7SUFDSCxZQUNtQixXQUFpQyxFQUNqQyxhQUErQixFQUMvQixRQUFrQyxFQUNsQyxRQUFtQixFQUNuQixNQUFjLEVBQ0YsVUFBa0I7UUFMOUIsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBQ2pDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDRixlQUFVLEdBQVYsVUFB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QUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFL0gsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7UUFFM0MsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs7O1lBdGZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixRQUFRLEVBQUUsbUJBQW1CO2FBQzlCOzs7WUF4QkMsV0FBVztZQUNYLGdCQUFnQjtZQUNoQix3QkFBd0I7WUFWeEIsU0FBUztZQUlULE1BQU07WUEyS3FDLE1BQU0sdUJBQTlDLE1BQU0sU0FBQyxXQUFXOzs7cUJBOUZwQixLQUFLLFNBQUMsZ0JBQWdCO3dCQU90QixLQUFLLFNBQUMseUJBQXlCOzZCQVEvQixLQUFLLFNBQUMsOEJBQThCOzhCQVVwQyxLQUFLLFNBQUMsK0JBQStCOzhCQU1yQyxLQUFLLFNBQUMsK0JBQStCO3FCQVFyQyxNQUFNLFNBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBSZW5kZXJlcjIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIEluamVjdCxcbiAgUExBVEZPUk1fSUQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXIgYXMgUmVzaXplT2JzZXJ2ZXJQb255ZmlsbCB9IGZyb20gJ0BqdWdnbGUvcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5lc3RlZEVsbGlwc2lzQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbmVzdGVkLWVsbGlwc2lzLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uRW51bSB9IGZyb20gJy4uL2VudW1zL2VsbGlwc2lzLXJlc2l6ZS1kZXRlY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBSZXNpemVPYnNlcnZlciA9ICg8YW55PiB3aW5kb3cpLlJlc2l6ZU9ic2VydmVyIHx8IFJlc2l6ZU9ic2VydmVyUG9ueWZpbGw7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRvIHRydW5jYXRlIHRoZSBjb250YWluZWQgdGV4dCwgaWYgaXQgZXhjZWVkcyB0aGUgZWxlbWVudCdzIGJvdW5kYXJpZXNcbiAqIGFuZCBhcHBlbmQgY2hhcmFjdGVycyAoY29uZmlndXJhYmxlLCBkZWZhdWx0ICcuLi4nKSBpZiBzby5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25lc3RlZEVsbGlwc2lzXScsXG4gIGV4cG9ydEFzOiAnbmd4TmVzdGVkRWxsaXBzaXMnXG59KVxuZXhwb3J0IGNsYXNzIE5lc3RlZEVsbGlwc2lzRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZWQgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBlbGVtOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogQ29tcG9uZW50IGZhY3RvcnkgcmVxdWlyZWQgZm9yIHJlbmRlcmluZyBFbGxpcHNpc0NvbnRlbnQgY29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGNvbXBGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PE5lc3RlZEVsbGlwc2lzQ29udGVudENvbXBvbmVudD47XG5cbiAgLyoqXG4gICAqIFZpZXdSZWYgb2YgdGhlIG1haW4gdGVtcGxhdGUgKHRoZSBvbmUgdG8gYmUgdHJ1bmNhdGVkKVxuICAgKi9cbiAgcHJpdmF0ZSB0ZW1wbGF0ZVZpZXc6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogVmlld1JlZiBvZiB0aGUgaW5kaWNhdG9yIHRlbXBsYXRlXG4gICAqL1xuICBwcml2YXRlIGluZGljYXRvclZpZXc6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogQ29uY2F0ZW5hdGVkIHRlbXBsYXRlIGh0bWwgYXQgdGhlIHRpbWUgb2YgdGhlIGxhc3QgdGltZSB0aGUgZWxsaXBzaXMgaGFzIGJlZW4gYXBwbGllZFxuICAgKi9cbiAgcHJpdmF0ZSBwcmV2aW91c1RlbXBsYXRlSHRtbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUZXh0IGxlbmd0aCBiZWZvcmUgdHJ1bmNhdGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsVGV4dExlbmd0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdWJqZWN0IHRyaWdnZXJlZCB3aGVuIHJlc2l6ZSBsaXN0ZW5lcnMgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlUmVzaXplTGlzdGVuZXJzJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBwcmV2aW91c0RpbWVuc2lvbnM6IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHNjcm9sbFdpZHRoOiBudW1iZXIsXG4gICAgc2Nyb2xsSGVpZ2h0OiBudW1iZXJcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG5neE5lc3RlZEVsbGlwc2lzIGh0bWwgYXR0cmlidXRlXG4gICAqIFBhc3NpbmcgdHJ1ZSAoZGVmYXVsdCkgd2lsbCBwZXJmb3JtIHRoZSBkaXJlY3RpdmUncyB0YXNrLFxuICAgKiBvdGhlcndpc2UgdGhlIHRlbXBsYXRlIHdpbGwgYmUgcmVuZGVyZWQgd2l0aG91dCB0cnVuY2F0aW5nIGl0cyBjb250ZW50cy5cbiAgICovXG4gIEBJbnB1dCgnbmVzdGVkRWxsaXBzaXMnKSBhY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBlbGxpcHNpc0luZGljYXRvciBodG1sIGF0dHJpYnV0ZVxuICAgKiBQYXNzaW5nIGEgc3RyaW5nIChkZWZhdWx0OiAnLi4uJykgd2lsbCBhcHBlbmQgaXQgd2hlbiB0aGUgcGFzc2VkIHRlbXBsYXRlIGhhcyBiZWVuIHRydW5jYXRlZFxuICAgKiBQYXNzaW5nIGEgdGVtcGxhdGUgd2lsbCBhcHBlbmQgdGhhdCB0ZW1wbGF0ZSBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoJ25lc3RlZEVsbGlwc2lzSW5kaWNhdG9yJykgaW5kaWNhdG9yOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogVGhlIGVsbGlwc2lzV29yZEJvdW5kYXJpZXMgaHRtbCBhdHRyaWJ1dGVcbiAgICogRWFjaCBjaGFyYWN0ZXIgcGFzc2VkIHRvIHRoaXMgaW5wdXQgd2lsbCBiZSBpbnRlcnByZXRlZFxuICAgKiBhcyBhIHdvcmQgYm91bmRhcnkgYXQgd2hpY2ggdGhlIHRleHQgbWF5IGJlIHRydW5jYXRlZC5cbiAgICogRWxzZSB0aGUgdGV4dCBtYXkgYmUgdHJ1bmNhdGVkIGF0IGFueSBjaGFyYWN0ZXIuXG4gICAqL1xuICBASW5wdXQoJ25lc3RlZEVsbGlwc2lzV29yZEJvdW5kYXJpZXMnKSB3b3JkQm91bmRhcmllczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxsaXBzaXNNYXlUcnVuY2F0ZUF0Rm4gaHRtbCBhdHRyaWJ1dGVcbiAgICogRnVuY3Rpb24gdGhhdCBsZXRzIHlvdSBzcGVjaWZ5IHdoZXRoZXIgdGhlIGNvbnRlbnRzIG1heSBiZSB0cnVuY2F0ZWQgYXQgYSBzcGVjaWZpYyBwb2ludCBvciBub3Q6XG4gICAqIGAobm9kZTogQ2hhcmFjdGVyRGF0YSwgcG9zaXRpb246IG51bWJlcikgPT4gYm9vbGVhbmBcbiAgICogYG5vZGVgIFRleHQgbm9kZSB0aGF0IGlzIGJlaW5nIHRydW5jYXRlZFxuICAgKiBgcG9zaXRpb25gIFN0cmluZyBwb3NpdGlvbiB0aGUgdGV4dCB3b3VsZCBiZSB0cnVuY2F0ZWQgYXRcbiAgICogU2hvdWxkIHJldHVybiB0cnVlLCBpZiB0aGUgdGV4dCBtYXkgYmUgdHJ1bmNhdGVkIGhlcmUsIGVsc2UgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgnbmVzdGVkRWxsaXBzaXNNYXlUcnVuY2F0ZUF0Rm4nKSBtYXlUcnVuY2F0ZUF0Rm46IChub2RlOiBDaGFyYWN0ZXJEYXRhLCBwb3NpdGlvbjogbnVtYmVyKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxsaXBzaXNSZXNpemVEZXRlY3Rpb24gaHRtbCBhdHRyaWJ1dGVcbiAgICogQWxnb3JpdGhtIHRvIHVzZSB0byBkZXRlY3QgZWxlbWVudC93aW5kb3cgcmVzaXplIC0gYW55IHZhbHVlIG9mIGBFbGxpcHNpc1Jlc2l6ZURldGVjdGlvbkVudW1gXG4gICAqL1xuICBASW5wdXQoJ25lc3RlZEVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uJykgcmVzaXplRGV0ZWN0aW9uOiBFbGxpcHNpc1Jlc2l6ZURldGVjdGlvbkVudW07XG5cblxuICAvKipcbiAgICogVGhlIGVsbGlwc2lzQ2hhbmdlIGh0bWwgYXR0cmlidXRlXG4gICAqIFRoaXMgZW1pdHMgYWZ0ZXIgd2hpY2ggaW5kZXggdGhlIHRleHQgaGFzIGJlZW4gdHJ1bmNhdGVkLlxuICAgKiBJZiBpdCBoYXNuJ3QgYmVlbiB0cnVuY2F0ZWQsIG51bGwgaXMgZW1pdHRlZC5cbiAgICovXG4gIEBPdXRwdXQoJ25lc3RlZEVsbGlwc2lzQ2hhbmdlJykgcmVhZG9ubHkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVXRpbGl0eSBtZXRob2QgdG8gcXVpY2tseSBmaW5kIHRoZSBsYXJnZXN0IG51bWJlciBmb3JcbiAgICogd2hpY2ggYGNhbGxiYWNrKG51bWJlcilgIHN0aWxsIHJldHVybnMgdHJ1ZS5cbiAgICogQHBhcmFtICBtYXggICAgICBIaWdoZXN0IHBvc3NpYmxlIG51bWJlclxuICAgKiBAcGFyYW0gIGNhbGxiYWNrIFNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIHRoZSBwYXNzZWQgbnVtYmVyIGlzIHZhbGlkXG4gICAqIEByZXR1cm5zICAgICAgICAgTGFyZ2VzdCBwb3NzaWJsZSBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIG51bWVyaWNCaW5hcnlTZWFyY2gobWF4OiBudW1iZXIsIGNhbGxiYWNrOiAobjogbnVtYmVyKSA9PiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgbG93ID0gMDtcbiAgICBsZXQgaGlnaCA9IG1heDtcbiAgICBsZXQgYmVzdCA9IC0xO1xuICAgIGxldCBtaWQ6IG51bWJlcjtcblxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgICAgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKG1pZCk7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBoaWdoID0gbWlkIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlc3QgPSBtaWQ7XG4gICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlc3Q7XG4gIH1cblxuICBwcml2YXRlIGZsYXR0ZW5UZXh0QW5kRWxlbWVudE5vZGVzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogKENoYXJhY3RlckRhdGEgfCBIVE1MRWxlbWVudClbXSB7XG4gICAgY29uc3Qgbm9kZXM6IChDaGFyYWN0ZXJEYXRhIHwgSFRNTEVsZW1lbnQpW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQgPSBlbGVtZW50LmNoaWxkTm9kZXMuaXRlbShpKTtcbiAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IGNoaWxkIGluc3RhbmNlb2YgQ2hhcmFjdGVyRGF0YSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkKTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgIG5vZGVzLnB1c2goLi4udGhpcy5mbGF0dGVuVGV4dEFuZEVsZW1lbnROb2RlcyhjaGlsZCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSdzIGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4sXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdFxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBBbmd1bGFyJ3Mgb25Jbml0IGxpZmUgY3ljbGUgaG9vay5cbiAgICogSW5pdGlhbGl6ZXMgdGhlIGVsZW1lbnQgZm9yIGRpc3BsYXlpbmcgdGhlIGVsbGlwc2lzLlxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAvLyBpbiBhbmd1bGFyIHVuaXZlcnNhbCB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgdWdseVxuICAgICAgLy8gRE9NIG1hbmlwdWxhdGlvbiBwcm9wZXJ0aWVzIHdlIHNhZGx5IG5lZWQgdG8gYWNjZXNzIGhlcmUsXG4gICAgICAvLyBzbyB3YWl0IHVudGlsIHdlJ3JlIGluIHRoZSBicm93c2VyOlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YodGhpcy5hY3RpdmUpICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mKHRoaXMuaW5kaWNhdG9yKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuaW5kaWNhdG9yID0gJy4uLic7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiAodGhpcy5yZXNpemVEZXRlY3Rpb24pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5yZXNpemVEZXRlY3Rpb24gPSBFbGxpcHNpc1Jlc2l6ZURldGVjdGlvbkVudW0uUmVzaXplT2JzZXJ2ZXI7XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybSByZWdleCByZXBsYWNlIG9uIHdvcmQgYm91bmRhcmllczpcbiAgICBpZiAoIXRoaXMud29yZEJvdW5kYXJpZXMpIHtcbiAgICAgIHRoaXMud29yZEJvdW5kYXJpZXMgPSAnJztcbiAgICB9XG4gICAgdGhpcy53b3JkQm91bmRhcmllcyA9ICdbJyArIHRoaXMud29yZEJvdW5kYXJpZXMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJykgKyAnXSc7XG5cbiAgICAvLyBpbml0aWFsaXplIHZpZXc6XG4gICAgdGhpcy5jb21wRmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTmVzdGVkRWxsaXBzaXNDb250ZW50Q29tcG9uZW50KTtcbiAgICB0aGlzLnJlc3RvcmVWaWV3KCk7XG4gICAgdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMgPSB7XG4gICAgICB3aWR0aDogdGhpcy5lbGVtLmNsaWVudFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmVsZW0uY2xpZW50SGVpZ2h0LFxuICAgICAgc2Nyb2xsV2lkdGg6IHRoaXMuZWxlbS5zY3JvbGxXaWR0aCxcbiAgICAgIHNjcm9sbEhlaWdodDogdGhpcy5lbGVtLnNjcm9sbEhlaWdodFxuICAgIH07XG5cbiAgICB0aGlzLmFwcGx5RWxsaXBzaXMoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIncyBkZXN0cm95IGxpZmUgY3ljbGUgaG9vay5cbiAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVMaXN0ZW5lcnMkLm5leHQoKTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZUxpc3RlbmVycyQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmd1bGFyJ3MgYWZ0ZXJWaWV3Q2hlY2tlZCBsaWZlIGN5Y2xlIGhvb2suXG4gICAqIFJlYXBwbHkgZWxsaXBzaXMsIGlmIGFueSBvZiB0aGUgdGVtcGxhdGVzIGhhdmUgY2hhbmdlZFxuICAgKi9cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLnJlc2l6ZURldGVjdGlvbiAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIGlmICh0aGlzLnRlbXBsYXRlc0hhdmVDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuYXBwbHlFbGxpcHNpcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgbGlzdCBvZiBOb2RlcyB0byBodG1sXG4gICAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBjb252ZXJ0XG4gICAqIEByZXR1cm5zIGh0bWwgY29kZVxuICAgKi9cbiAgcHJpdmF0ZSBub2Rlc1RvSHRtbChub2RlczogTm9kZVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSA8SFRNTEVsZW1lbnQ+IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRpdiwgbm9kZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBwYXNzZWQgdGVtcGxhdGVzIHRvIGh0bWxcbiAgICogQHBhcmFtIHRlbXBsYXRlVmlldyB0aGUgbWFpbiB0ZW1wbGF0ZSB2aWV3IHJlZlxuICAgKiBAcGFyYW0gaW5kaWNhdG9yVmlldyB0aGUgaW5kaWNhdG9yIHRlbXBsYXRlIHZpZXcgcmVmXG4gICAqIEByZXR1cm5zIGNvbmNhdGVuYXRlZCB0ZW1wbGF0ZSBodG1sXG4gICAqL1xuICBwcml2YXRlIHRlbXBsYXRlc1RvSHRtbCh0ZW1wbGF0ZVZpZXc6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPiwgaW5kaWNhdG9yVmlldz86IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPik6IHN0cmluZyB7XG4gICAgbGV0IGh0bWwgPSB0aGlzLm5vZGVzVG9IdG1sKHRlbXBsYXRlVmlldy5yb290Tm9kZXMpO1xuICAgIGlmIChpbmRpY2F0b3JWaWV3KSB7XG4gICAgICBodG1sICs9IHRoaXMubm9kZXNUb0h0bWwoaW5kaWNhdG9yVmlldy5yb290Tm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sICs9IDxzdHJpbmc+IHRoaXMuaW5kaWNhdG9yO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW55IG9mIHRoZSBwYXNzZWQgdGVtcGxhdGVzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lXG4gICAqIHRoZSBlbGxpcHNpcyBoYXMgYmVlbiBhcHBsaWVkXG4gICAqL1xuICBwcml2YXRlIGdldCB0ZW1wbGF0ZXNIYXZlQ2hhbmdlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudGVtcGxhdGVWaWV3IHx8ICF0aGlzLnByZXZpb3VzVGVtcGxhdGVIdG1sKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVWaWV3ID0gdGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoe30pO1xuICAgIHRlbXBsYXRlVmlldy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBpbmRpY2F0b3JWaWV3ID0gKHR5cGVvZiB0aGlzLmluZGljYXRvciAhPT0gJ3N0cmluZycpID8gdGhpcy5pbmRpY2F0b3IuY3JlYXRlRW1iZWRkZWRWaWV3KHt9KSA6IG51bGw7XG4gICAgaWYgKGluZGljYXRvclZpZXcpIHtcbiAgICAgIGluZGljYXRvclZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlSHRtbCA9IHRoaXMudGVtcGxhdGVzVG9IdG1sKHRlbXBsYXRlVmlldywgaW5kaWNhdG9yVmlldyk7XG5cbiAgICByZXR1cm4gdGhpcy5wcmV2aW91c1RlbXBsYXRlSHRtbCAhPT0gdGVtcGxhdGVIdG1sO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgdGhlIHZpZXcgZnJvbSB0aGUgdGVtcGxhdGVzIChub24tdHJ1bmNhdGVkKVxuICAgKi9cbiAgcHJpdmF0ZSByZXN0b3JlVmlldygpIHtcbiAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlVmlldyA9IHRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHt9KTtcbiAgICB0aGlzLnRlbXBsYXRlVmlldy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgIHRoaXMuY29tcEZhY3RvcnksIG51bGwsIHRoaXMudmlld0NvbnRhaW5lci5pbmplY3RvciwgW3RoaXMudGVtcGxhdGVWaWV3LnJvb3ROb2Rlc11cbiAgICApO1xuICAgIHRoaXMuZWxlbSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5pbml0aWFsVGV4dExlbmd0aCA9IHRoaXMuY3VycmVudExlbmd0aDtcblxuICAgIHRoaXMuaW5kaWNhdG9yVmlldyA9ICh0eXBlb2YgdGhpcy5pbmRpY2F0b3IgIT09ICdzdHJpbmcnKSA/IHRoaXMuaW5kaWNhdG9yLmNyZWF0ZUVtYmVkZGVkVmlldyh7fSkgOiBudWxsO1xuICAgIGlmICh0aGlzLmluZGljYXRvclZpZXcpIHtcbiAgICAgIHRoaXMuaW5kaWNhdG9yVmlldy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogU2V0IHVwIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGNhbGwgYXBwbHlFbGxpcHNpcygpIHdoZW5ldmVyIGEgcmVzaXplIGhhcyBiZWVuIHJlZ2lzdGVyZWQuXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBsaXN0ZW5lciAod2luZG93L2VsZW1lbnQpIGRlcGVuZHMgb24gdGhlIGBlbGxpcHNpc1Jlc2l6ZURldGVjdGlvbmAuXG4gICAqL1xuICBwcml2YXRlIGFkZFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgIHN3aXRjaCAodGhpcy5yZXNpemVEZXRlY3Rpb24pIHtcbiAgICAgIGNhc2UgRWxsaXBzaXNSZXNpemVEZXRlY3Rpb25FbnVtLk1hbnVhbDpcbiAgICAgICAgLy8gVXNlcnMgd2lsbCB0cmlnZ2VyIGFwcGx5RWxsaXBzaXMgdmlhIHRoZSBwdWJsaWMgQVBJXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFbGxpcHNpc1Jlc2l6ZURldGVjdGlvbkVudW0uV2luZG93OlxuICAgICAgICB0aGlzLmFkZFdpbmRvd1Jlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHR5cGVvZiAoY29uc29sZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBcbiAgICAgICAgICAgIE5vIHN1Y2ggZWxsaXBzaXNSZXNpemVEZXRlY3Rpb24gc3RyYXRlZ3k6ICcke3RoaXMucmVzaXplRGV0ZWN0aW9ufScuXG4gICAgICAgICAgICBVc2luZyAnJHtFbGxpcHNpc1Jlc2l6ZURldGVjdGlvbkVudW0uUmVzaXplT2JzZXJ2ZXJ9JyBpbnN0ZWFkLlxuICAgICAgICAgIGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzaXplRGV0ZWN0aW9uID0gRWxsaXBzaXNSZXNpemVEZXRlY3Rpb25FbnVtLlJlc2l6ZU9ic2VydmVyO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlIEVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uRW51bS5SZXNpemVPYnNlcnZlcjpcbiAgICAgICAgdGhpcy5hZGRSZXNpemVPYnNlcnZlcigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGNhbGwgYXBwbHlFbGxpcHNpcygpIHdoZW5ldmVyIHRoZSB3aW5kb3cgZ2V0cyByZXNpemVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRXaW5kb3dSZXNpemVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCByZW1vdmVXaW5kb3dSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUVsbGlwc2lzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVtb3ZlUmVzaXplTGlzdGVuZXJzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiByZW1vdmVXaW5kb3dSZXNpemVMaXN0ZW5lcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYW4gZXZlbnQgbGlzdGVuZXIgdG8gY2FsbCBhcHBseUVsbGlwc2lzKCkgd2hlbmV2ZXIgUmVzaXplT2JzZXJ2ZXIgaXMgdHJpZ2dlcmVkIGZvciB0aGUgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgYWRkUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aCAhPT0gdGhpcy5lbGVtLmNsaWVudFdpZHRoXG4gICAgICAgICAgfHwgdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMuaGVpZ2h0ICE9PSB0aGlzLmVsZW0uY2xpZW50SGVpZ2h0XG4gICAgICAgICAgfHwgdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMuc2Nyb2xsV2lkdGggIT09IHRoaXMuZWxlbS5zY3JvbGxXaWR0aFxuICAgICAgICAgIHx8IHRoaXMucHJldmlvdXNEaW1lbnNpb25zLnNjcm9sbEhlaWdodCAhPT0gdGhpcy5lbGVtLnNjcm9sbEhlaWdodFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBseUVsbGlwc2lzKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aCA9IHRoaXMuZWxlbS5jbGllbnRXaWR0aDtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGltZW5zaW9ucy5oZWlnaHQgPSB0aGlzLmVsZW0uY2xpZW50SGVpZ2h0O1xuICAgICAgICAgIHRoaXMucHJldmlvdXNEaW1lbnNpb25zLnNjcm9sbFdpZHRoID0gdGhpcy5lbGVtLnNjcm9sbFdpZHRoO1xuICAgICAgICAgIHRoaXMucHJldmlvdXNEaW1lbnNpb25zLnNjcm9sbEhlaWdodCA9IHRoaXMuZWxlbS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtKTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZUxpc3RlbmVycyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4gcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3JpZ2luYWwgdGV4dCdzIHRydW5jYXRlZCB2ZXJzaW9uLiBJZiB0aGUgdGV4dCByZWFsbHkgbmVlZGVkIHRvXG4gICAqIGJlIHRydW5jYXRlZCwgdGhpcy5lbGxpcHNpc0NoYXJhY3RlcnMgd2lsbCBiZSBhcHBlbmRlZC5cbiAgICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSBsZW5ndGggdGhlIHRleHQgbWF5IGhhdmVcbiAgICogQHJldHVybnMgdGhlIHRleHQgbm9kZSB0aGF0IGhhcyBiZWVuIHRydW5jYXRlZCBvciBudWxsIGlmIHRydW5jYXRpbmcgd2Fzbid0IHJlcXVpcmVkXG4gICAqL1xuICBwcml2YXRlIHRydW5jYXRlQ29udGVudHMobWF4OiBudW1iZXIpOiBOb2RlIHtcbiAgICB0aGlzLnJlc3RvcmVWaWV3KCk7XG4gICAgY29uc3Qgbm9kZXMgPSA8KEhUTUxFbGVtZW50IHwgQ2hhcmFjdGVyRGF0YSlbXT50aGlzLmZsYXR0ZW5UZXh0QW5kRWxlbWVudE5vZGVzKHRoaXMuZWxlbSlcbiAgICAgIC5maWx0ZXIobm9kZSA9PiBbTm9kZS5URVhUX05PREUsIE5vZGUuRUxFTUVOVF9OT0RFXS5pbmNsdWRlcyhub2RlLm5vZGVUeXBlKSk7XG5cbiAgICBsZXQgZm91bmRJbmRleCA9IC0xO1xuICAgIGxldCBmb3VuZE5vZGU6IE5vZGU7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMuaW5pdGlhbFRleHRMZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IG5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG5cbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2hhcmFjdGVyRGF0YSkge1xuICAgICAgICBvZmZzZXQgLT0gbm9kZS5kYXRhLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldC0tO1xuICAgICAgfVxuXG4gICAgICBpZiAob2Zmc2V0IDw9IG1heCkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENoYXJhY3RlckRhdGEpIHtcbiAgICAgICAgICBpZiAodGhpcy53b3JkQm91bmRhcmllcyA9PT0gJ1tdJyAmJiAhdGhpcy5tYXlUcnVuY2F0ZUF0Rm4pIHtcbiAgICAgICAgICAgIG5vZGUuZGF0YSA9IG5vZGUuZGF0YS5zdWJzdHIoMCwgbWF4IC0gb2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1heCAtIG9mZnNldCAhPT0gbm9kZS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGogPSBtYXggLSBvZmZzZXQgLSAxO1xuICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICBqID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgKHRoaXMud29yZEJvdW5kYXJpZXMgIT09ICdbXScgJiYgIW5vZGUuZGF0YS5jaGFyQXQoaikubWF0Y2godGhpcy53b3JkQm91bmRhcmllcykpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMubWF5VHJ1bmNhdGVBdEZuICYmICF0aGlzLm1heVRydW5jYXRlQXRGbihub2RlLCBqKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwICYmIGogPT09IDApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmRhdGEgPSBub2RlLmRhdGEuc3Vic3RyKDAsIGopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3VuZEluZGV4ID0gaTtcbiAgICAgICAgZm91bmROb2RlID0gbm9kZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGZvdW5kSW5kZXggKyAxOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGlmIChub2RlLnRleHRDb250ZW50ICE9PSAnJyAmJiBub2RlLnBhcmVudE5vZGUgIT09IHRoaXMuZWxlbSAmJiBub2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChub2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZSwgbm9kZS5wYXJlbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQobm9kZS5wYXJlbnROb2RlLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuY3VycmVudExlbmd0aCAhPT0gdGhpcy5pbml0aWFsVGV4dExlbmd0aCkgPyBmb3VuZE5vZGUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZsYXR0ZW5UZXh0QW5kRWxlbWVudE5vZGVzKHRoaXMuZWxlbSlcbiAgICAgIC5maWx0ZXIobm9kZSA9PiBbTm9kZS5URVhUX05PREUsIE5vZGUuRUxFTUVOVF9OT0RFXS5pbmNsdWRlcyhub2RlLm5vZGVUeXBlKSlcbiAgICAgIC5tYXAobm9kZSA9PiAobm9kZSBpbnN0YW5jZW9mIENoYXJhY3RlckRhdGEpID8gbm9kZS5kYXRhLmxlbmd0aCA6IDEpXG4gICAgICAucmVkdWNlKChzdW0sIGxlbmd0aCkgPT4gc3VtICsgbGVuZ3RoLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRydW5jYXRlZCB0ZXh0IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaW5uZXIgZGl2XG4gICAqIEBwYXJhbSBtYXggdGhlIG1heGltdW0gbGVuZ3RoIHRoZSB0ZXh0IG1heSBoYXZlXG4gICAqIEBwYXJhbSBhZGRNb3JlTGlzdGVuZXI9ZmFsc2UgbGlzdGVuIGZvciBjbGljayBvbiB0aGUgZWxsaXBzaXNDaGFyYWN0ZXJzIGFuY2hvciB0YWcgaWYgdGhlIHRleHQgaGFzIGJlZW4gdHJ1bmNhdGVkXG4gICAqL1xuICBwcml2YXRlIHRydW5jYXRlVGV4dChtYXg6IG51bWJlcikge1xuICAgIGNvbnN0IHRydW5jYXRlZE5vZGUgPSB0aGlzLnRydW5jYXRlQ29udGVudHMobWF4KTtcblxuICAgIGlmICh0cnVuY2F0ZWROb2RlKSB7XG4gICAgICBpZiAoIXRoaXMuaW5kaWNhdG9yVmlldykge1xuICAgICAgICBpZiAodHJ1bmNhdGVkTm9kZSBpbnN0YW5jZW9mIENoYXJhY3RlckRhdGEpIHtcbiAgICAgICAgICB0cnVuY2F0ZWROb2RlLmRhdGEgKz0gPHN0cmluZz4gdGhpcy5pbmRpY2F0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsZW0sIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCg8c3RyaW5nPiB0aGlzLmluZGljYXRvcikpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5pbmRpY2F0b3JWaWV3LnJvb3ROb2Rlcykge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtLCBub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIERpc3BsYXkgZWxsaXBzaXMgaW4gdGhlIEVsbGlwc2lzQ29udGVudENvbXBvbmVudCBpZiB0aGUgdGV4dCB3b3VsZCBleGNlZWQgdGhlIGJvdW5kYXJpZXNcbiAgICovXG4gIHB1YmxpYyBhcHBseUVsbGlwc2lzKCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcmVzaXplIGxpc3RlbmVyIGFzIGNoYW5naW5nIHRoZSBjb250YWluZWQgdGV4dCB3b3VsZCB0cmlnZ2VyIGV2ZW50czpcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZUxpc3RlbmVycyQubmV4dCgpO1xuXG4gICAgLy8gdXBkYXRlIGZyb20gdGVtcGxhdGVzOlxuICAgIHRoaXMucmVzdG9yZVZpZXcoKTtcblxuICAgIC8vIHJlbWVtYmVyIHRlbXBsYXRlIHN0YXRlOlxuICAgIHRoaXMucHJldmlvdXNUZW1wbGF0ZUh0bWwgPSB0aGlzLnRlbXBsYXRlc1RvSHRtbCh0aGlzLnRlbXBsYXRlVmlldywgdGhpcy5pbmRpY2F0b3JWaWV3KTtcblxuICAgIC8vIGFib3J0IGlmIFtuZXN0ZWRFbGxpcHNpc109XCJmYWxzZVwiIGhhcyBiZWVuIHNldFxuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBiZXN0IGxlbmd0aCBieSB0cmlhbCBhbmQgZXJyb3I6XG4gICAgY29uc3QgbWF4TGVuZ3RoID0gTmVzdGVkRWxsaXBzaXNEaXJlY3RpdmUubnVtZXJpY0JpbmFyeVNlYXJjaCh0aGlzLmluaXRpYWxUZXh0TGVuZ3RoLCBjdXJMZW5ndGggPT4ge1xuICAgICAgdGhpcy50cnVuY2F0ZVRleHQoY3VyTGVuZ3RoKTtcbiAgICAgIHJldHVybiAhdGhpcy5pc092ZXJmbG93aW5nO1xuICAgIH0pO1xuXG4gICAgLy8gQXBwbHkgdGhlIGJlc3QgbGVuZ3RoOlxuICAgIHRoaXMudHJ1bmNhdGVUZXh0KG1heExlbmd0aCk7XG5cbiAgICAvLyBSZS1hdHRhY2ggdGhlIHJlc2l6ZSBsaXN0ZW5lcjpcbiAgICB0aGlzLmFkZFJlc2l6ZUxpc3RlbmVyKCk7XG5cbiAgICAvLyBFbWl0IGNoYW5nZSBldmVudDpcbiAgICBpZiAodGhpcy5jaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMZW5ndGggPSB0aGlzLmN1cnJlbnRMZW5ndGg7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KFxuICAgICAgICAoY3VycmVudExlbmd0aCA9PT0gdGhpcy5pbml0aWFsVGV4dExlbmd0aCkgPyBudWxsIDogY3VycmVudExlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0ZXh0IGlzIGV4Y2VlZGluZyB0aGUgZWxlbWVudCdzIGJvdW5kYXJpZXMgb3Igbm90XG4gICAqL1xuICBwcml2YXRlIGdldCBpc092ZXJmbG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIC8vIEVuZm9yY2UgaGlkZGVuIG92ZXJmbG93IChyZXF1aXJlZCB0byBjb21wYXJlIGNsaWVudCB3aWR0aC9oZWlnaHQgd2l0aCBzY3JvbGwgd2lkdGgvaGVpZ2h0KVxuICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvdyA9IHRoaXMuZWxlbS5zdHlsZS5vdmVyZmxvdztcbiAgICBpZiAoIWN1cnJlbnRPdmVyZmxvdyB8fCBjdXJyZW50T3ZlcmZsb3cgPT09ICd2aXNpYmxlJykge1xuICAgICAgdGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgfVxuXG4gICAgY29uc3QgaXNPdmVyZmxvd2luZyA9IHRoaXMuZWxlbS5jbGllbnRXaWR0aCA8IHRoaXMuZWxlbS5zY3JvbGxXaWR0aCAtIDEgfHwgdGhpcy5lbGVtLmNsaWVudEhlaWdodCA8IHRoaXMuZWxlbS5zY3JvbGxIZWlnaHQgLSAxO1xuXG4gICAgLy8gUmVzZXQgb3ZlcmZsb3cgdG8gdGhlIG9yaWdpbmFsIGNvbmZpZ3VyYXRpb246XG4gICAgdGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93ID0gY3VycmVudE92ZXJmbG93O1xuXG4gICAgcmV0dXJuIGlzT3ZlcmZsb3dpbmc7XG4gIH1cblxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWVsbGlwc2lzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1uZXN0ZWQtZWxsaXBzaXMvc3JjL2xpYi9kaXJlY3RpdmVzL25lc3RlZC1lbGxpcHNpcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUVOLE1BQU0sRUFDTixXQUFXLEVBQ1gsV0FBVyxFQUNYLGdCQUFnQixFQUNoQix3QkFBd0IsRUFLekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLElBQUksY0FBYyxHQUFHLHNCQUFzQixDQUFDO0FBRTVDOzs7R0FHRztBQUtILE1BQU0sT0FBTyx1QkFBdUI7SUFxSWxDOztPQUVHO0lBQ0gsWUFDbUIsV0FBaUMsRUFDakMsYUFBK0IsRUFDL0IsUUFBa0MsRUFDbEMsUUFBbUIsRUFDbkIsTUFBYyxFQUNGLFVBQWtCO1FBTDlCLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ0YsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQS9HakQ7O1dBRUc7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QUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFL0gsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7UUFFM0MsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs7O1lBM2ZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixRQUFRLEVBQUUsbUJBQW1CO2FBQzlCOzs7WUF4QkMsV0FBVztZQUNYLGdCQUFnQjtZQUNoQix3QkFBd0I7WUFWeEIsU0FBUztZQUlULE1BQU07WUEyS3FDLE1BQU0sdUJBQTlDLE1BQU0sU0FBQyxXQUFXOzs7cUJBOUZwQixLQUFLLFNBQUMsZ0JBQWdCO3dCQU90QixLQUFLLFNBQUMseUJBQXlCOzZCQVEvQixLQUFLLFNBQUMsOEJBQThCOzhCQVVwQyxLQUFLLFNBQUMsK0JBQStCOzhCQU1yQyxLQUFLLFNBQUMsK0JBQStCO3FCQVFyQyxNQUFNLFNBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBSZW5kZXJlcjIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIEluamVjdCxcbiAgUExBVEZPUk1fSUQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXIgYXMgUmVzaXplT2JzZXJ2ZXJQb255ZmlsbCB9IGZyb20gJ0BqdWdnbGUvcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5lc3RlZEVsbGlwc2lzQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbmVzdGVkLWVsbGlwc2lzLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uRW51bSB9IGZyb20gJy4uL2VudW1zL2VsbGlwc2lzLXJlc2l6ZS1kZXRlY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5sZXQgUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlclBvbnlmaWxsO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byB0cnVuY2F0ZSB0aGUgY29udGFpbmVkIHRleHQsIGlmIGl0IGV4Y2VlZHMgdGhlIGVsZW1lbnQncyBib3VuZGFyaWVzXG4gKiBhbmQgYXBwZW5kIGNoYXJhY3RlcnMgKGNvbmZpZ3VyYWJsZSwgZGVmYXVsdCAnLi4uJykgaWYgc28uXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZXN0ZWRFbGxpcHNpc10nLFxuICBleHBvcnRBczogJ25neE5lc3RlZEVsbGlwc2lzJ1xufSlcbmV4cG9ydCBjbGFzcyBOZXN0ZWRFbGxpcHNpc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2VkIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgZWxlbTogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBmYWN0b3J5IHJlcXVpcmVkIGZvciByZW5kZXJpbmcgRWxsaXBzaXNDb250ZW50IGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBjb21wRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxOZXN0ZWRFbGxpcHNpc0NvbnRlbnRDb21wb25lbnQ+O1xuXG4gIC8qKlxuICAgKiBWaWV3UmVmIG9mIHRoZSBtYWluIHRlbXBsYXRlICh0aGUgb25lIHRvIGJlIHRydW5jYXRlZClcbiAgICovXG4gIHByaXZhdGUgdGVtcGxhdGVWaWV3OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFZpZXdSZWYgb2YgdGhlIGluZGljYXRvciB0ZW1wbGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbmRpY2F0b3JWaWV3OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIENvbmNhdGVuYXRlZCB0ZW1wbGF0ZSBodG1sIGF0IHRoZSB0aW1lIG9mIHRoZSBsYXN0IHRpbWUgdGhlIGVsbGlwc2lzIGhhcyBiZWVuIGFwcGxpZWRcbiAgICovXG4gIHByaXZhdGUgcHJldmlvdXNUZW1wbGF0ZUh0bWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGV4dCBsZW5ndGggYmVmb3JlIHRydW5jYXRpbmdcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbFRleHRMZW5ndGg6IG51bWJlcjtcblxuICAvKipcbiAgICogU3ViamVjdCB0cmlnZ2VyZWQgd2hlbiByZXNpemUgbGlzdGVuZXJzIHNob3VsZCBiZSByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZVJlc2l6ZUxpc3RlbmVycyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcHJldmlvdXNEaW1lbnNpb25zOiB7XG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBzY3JvbGxXaWR0aDogbnVtYmVyLFxuICAgIHNjcm9sbEhlaWdodDogbnVtYmVyXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBuZ3hOZXN0ZWRFbGxpcHNpcyBodG1sIGF0dHJpYnV0ZVxuICAgKiBQYXNzaW5nIHRydWUgKGRlZmF1bHQpIHdpbGwgcGVyZm9ybSB0aGUgZGlyZWN0aXZlJ3MgdGFzayxcbiAgICogb3RoZXJ3aXNlIHRoZSB0ZW1wbGF0ZSB3aWxsIGJlIHJlbmRlcmVkIHdpdGhvdXQgdHJ1bmNhdGluZyBpdHMgY29udGVudHMuXG4gICAqL1xuICBASW5wdXQoJ25lc3RlZEVsbGlwc2lzJykgYWN0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxsaXBzaXNJbmRpY2F0b3IgaHRtbCBhdHRyaWJ1dGVcbiAgICogUGFzc2luZyBhIHN0cmluZyAoZGVmYXVsdDogJy4uLicpIHdpbGwgYXBwZW5kIGl0IHdoZW4gdGhlIHBhc3NlZCB0ZW1wbGF0ZSBoYXMgYmVlbiB0cnVuY2F0ZWRcbiAgICogUGFzc2luZyBhIHRlbXBsYXRlIHdpbGwgYXBwZW5kIHRoYXQgdGVtcGxhdGUgaW5zdGVhZFxuICAgKi9cbiAgQElucHV0KCduZXN0ZWRFbGxpcHNpc0luZGljYXRvcicpIGluZGljYXRvcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSBlbGxpcHNpc1dvcmRCb3VuZGFyaWVzIGh0bWwgYXR0cmlidXRlXG4gICAqIEVhY2ggY2hhcmFjdGVyIHBhc3NlZCB0byB0aGlzIGlucHV0IHdpbGwgYmUgaW50ZXJwcmV0ZWRcbiAgICogYXMgYSB3b3JkIGJvdW5kYXJ5IGF0IHdoaWNoIHRoZSB0ZXh0IG1heSBiZSB0cnVuY2F0ZWQuXG4gICAqIEVsc2UgdGhlIHRleHQgbWF5IGJlIHRydW5jYXRlZCBhdCBhbnkgY2hhcmFjdGVyLlxuICAgKi9cbiAgQElucHV0KCduZXN0ZWRFbGxpcHNpc1dvcmRCb3VuZGFyaWVzJykgd29yZEJvdW5kYXJpZXM6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVsbGlwc2lzTWF5VHJ1bmNhdGVBdEZuIGh0bWwgYXR0cmlidXRlXG4gICAqIEZ1bmN0aW9uIHRoYXQgbGV0cyB5b3Ugc3BlY2lmeSB3aGV0aGVyIHRoZSBjb250ZW50cyBtYXkgYmUgdHJ1bmNhdGVkIGF0IGEgc3BlY2lmaWMgcG9pbnQgb3Igbm90OlxuICAgKiBgKG5vZGU6IENoYXJhY3RlckRhdGEsIHBvc2l0aW9uOiBudW1iZXIpID0+IGJvb2xlYW5gXG4gICAqIGBub2RlYCBUZXh0IG5vZGUgdGhhdCBpcyBiZWluZyB0cnVuY2F0ZWRcbiAgICogYHBvc2l0aW9uYCBTdHJpbmcgcG9zaXRpb24gdGhlIHRleHQgd291bGQgYmUgdHJ1bmNhdGVkIGF0XG4gICAqIFNob3VsZCByZXR1cm4gdHJ1ZSwgaWYgdGhlIHRleHQgbWF5IGJlIHRydW5jYXRlZCBoZXJlLCBlbHNlIGZhbHNlXG4gICAqL1xuICBASW5wdXQoJ25lc3RlZEVsbGlwc2lzTWF5VHJ1bmNhdGVBdEZuJykgbWF5VHJ1bmNhdGVBdEZuOiAobm9kZTogQ2hhcmFjdGVyRGF0YSwgcG9zaXRpb246IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uIGh0bWwgYXR0cmlidXRlXG4gICAqIEFsZ29yaXRobSB0byB1c2UgdG8gZGV0ZWN0IGVsZW1lbnQvd2luZG93IHJlc2l6ZSAtIGFueSB2YWx1ZSBvZiBgRWxsaXBzaXNSZXNpemVEZXRlY3Rpb25FbnVtYFxuICAgKi9cbiAgQElucHV0KCduZXN0ZWRFbGxpcHNpc1Jlc2l6ZURldGVjdGlvbicpIHJlc2l6ZURldGVjdGlvbjogRWxsaXBzaXNSZXNpemVEZXRlY3Rpb25FbnVtO1xuXG5cbiAgLyoqXG4gICAqIFRoZSBlbGxpcHNpc0NoYW5nZSBodG1sIGF0dHJpYnV0ZVxuICAgKiBUaGlzIGVtaXRzIGFmdGVyIHdoaWNoIGluZGV4IHRoZSB0ZXh0IGhhcyBiZWVuIHRydW5jYXRlZC5cbiAgICogSWYgaXQgaGFzbid0IGJlZW4gdHJ1bmNhdGVkLCBudWxsIGlzIGVtaXR0ZWQuXG4gICAqL1xuICBAT3V0cHV0KCduZXN0ZWRFbGxpcHNpc0NoYW5nZScpIHJlYWRvbmx5IGNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFV0aWxpdHkgbWV0aG9kIHRvIHF1aWNrbHkgZmluZCB0aGUgbGFyZ2VzdCBudW1iZXIgZm9yXG4gICAqIHdoaWNoIGBjYWxsYmFjayhudW1iZXIpYCBzdGlsbCByZXR1cm5zIHRydWUuXG4gICAqIEBwYXJhbSAgbWF4ICAgICAgSGlnaGVzdCBwb3NzaWJsZSBudW1iZXJcbiAgICogQHBhcmFtICBjYWxsYmFjayBTaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyB0aGUgcGFzc2VkIG51bWJlciBpcyB2YWxpZFxuICAgKiBAcmV0dXJucyAgICAgICAgIExhcmdlc3QgcG9zc2libGUgbnVtYmVyXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBudW1lcmljQmluYXJ5U2VhcmNoKG1heDogbnVtYmVyLCBjYWxsYmFjazogKG46IG51bWJlcikgPT4gYm9vbGVhbik6IG51bWJlciB7XG4gICAgbGV0IGxvdyA9IDA7XG4gICAgbGV0IGhpZ2ggPSBtYXg7XG4gICAgbGV0IGJlc3QgPSAtMTtcbiAgICBsZXQgbWlkOiBudW1iZXI7XG5cbiAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICAgIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxsYmFjayhtaWQpO1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgaGlnaCA9IG1pZCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZXN0ID0gbWlkO1xuICAgICAgICBsb3cgPSBtaWQgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBmbGF0dGVuVGV4dEFuZEVsZW1lbnROb2RlcyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IChDaGFyYWN0ZXJEYXRhIHwgSFRNTEVsZW1lbnQpW10ge1xuICAgIGNvbnN0IG5vZGVzOiAoQ2hhcmFjdGVyRGF0YSB8IEhUTUxFbGVtZW50KVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gZWxlbWVudC5jaGlsZE5vZGVzLml0ZW0oaSk7XG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBjaGlsZCBpbnN0YW5jZW9mIENoYXJhY3RlckRhdGEpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCk7XG5cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnRoaXMuZmxhdHRlblRleHRBbmRFbGVtZW50Tm9kZXMoY2hpbGQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RpdmUncyBjb25zdHJ1Y3RvclxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcbiAgKSB7IH1cblxuICAvKipcbiAgICogQW5ndWxhcidzIG9uSW5pdCBsaWZlIGN5Y2xlIGhvb2suXG4gICAqIEluaXRpYWxpemVzIHRoZSBlbGVtZW50IGZvciBkaXNwbGF5aW5nIHRoZSBlbGxpcHNpcy5cbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgLy8gaW4gYW5ndWxhciB1bml2ZXJzYWwgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHVnbHlcbiAgICAgIC8vIERPTSBtYW5pcHVsYXRpb24gcHJvcGVydGllcyB3ZSBzYWRseSBuZWVkIHRvIGFjY2VzcyBoZXJlLFxuICAgICAgLy8gc28gd2FpdCB1bnRpbCB3ZSdyZSBpbiB0aGUgYnJvd3NlcjpcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgbmF0aXZlIFJlc2l6ZU9ic2VydmVyIG92ZXIgcG9ueWZpbGwsIGlmIGF2YWlsYWJsZTpcbiAgICBpZiAoKDxhbnk+IHdpbmRvdykuUmVzaXplT2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgUmVzaXplT2JzZXJ2ZXIgPSAoPGFueT4gd2luZG93KS5SZXNpemVPYnNlcnZlcjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mKHRoaXMuYWN0aXZlKSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZih0aGlzLmluZGljYXRvcikgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmluZGljYXRvciA9ICcuLi4nO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgKHRoaXMucmVzaXplRGV0ZWN0aW9uKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMucmVzaXplRGV0ZWN0aW9uID0gRWxsaXBzaXNSZXNpemVEZXRlY3Rpb25FbnVtLlJlc2l6ZU9ic2VydmVyO1xuICAgIH1cblxuICAgIC8vIHBlcmZvcm0gcmVnZXggcmVwbGFjZSBvbiB3b3JkIGJvdW5kYXJpZXM6XG4gICAgaWYgKCF0aGlzLndvcmRCb3VuZGFyaWVzKSB7XG4gICAgICB0aGlzLndvcmRCb3VuZGFyaWVzID0gJyc7XG4gICAgfVxuICAgIHRoaXMud29yZEJvdW5kYXJpZXMgPSAnWycgKyB0aGlzLndvcmRCb3VuZGFyaWVzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpICsgJ10nO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB2aWV3OlxuICAgIHRoaXMuY29tcEZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE5lc3RlZEVsbGlwc2lzQ29udGVudENvbXBvbmVudCk7XG4gICAgdGhpcy5yZXN0b3JlVmlldygpO1xuICAgIHRoaXMucHJldmlvdXNEaW1lbnNpb25zID0ge1xuICAgICAgd2lkdGg6IHRoaXMuZWxlbS5jbGllbnRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5lbGVtLmNsaWVudEhlaWdodCxcbiAgICAgIHNjcm9sbFdpZHRoOiB0aGlzLmVsZW0uc2Nyb2xsV2lkdGgsXG4gICAgICBzY3JvbGxIZWlnaHQ6IHRoaXMuZWxlbS5zY3JvbGxIZWlnaHRcbiAgICB9O1xuXG4gICAgdGhpcy5hcHBseUVsbGlwc2lzKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBbmd1bGFyJ3MgZGVzdHJveSBsaWZlIGN5Y2xlIGhvb2suXG4gICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlUmVzaXplTGlzdGVuZXJzJC5uZXh0KCk7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVMaXN0ZW5lcnMkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQW5ndWxhcidzIGFmdGVyVmlld0NoZWNrZWQgbGlmZSBjeWNsZSBob29rLlxuICAgKiBSZWFwcGx5IGVsbGlwc2lzLCBpZiBhbnkgb2YgdGhlIHRlbXBsYXRlcyBoYXZlIGNoYW5nZWRcbiAgICovXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5yZXNpemVEZXRlY3Rpb24gIT09ICdtYW51YWwnKSB7XG4gICAgICBpZiAodGhpcy50ZW1wbGF0ZXNIYXZlQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLmFwcGx5RWxsaXBzaXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIGxpc3Qgb2YgTm9kZXMgdG8gaHRtbFxuICAgKiBAcGFyYW0gbm9kZXMgTm9kZXMgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyBodG1sIGNvZGVcbiAgICovXG4gIHByaXZhdGUgbm9kZXNUb0h0bWwobm9kZXM6IE5vZGVbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGl2ID0gPEhUTUxFbGVtZW50PiB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkaXYsIG5vZGUuY2xvbmVOb2RlKHRydWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgcGFzc2VkIHRlbXBsYXRlcyB0byBodG1sXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZVZpZXcgdGhlIG1haW4gdGVtcGxhdGUgdmlldyByZWZcbiAgICogQHBhcmFtIGluZGljYXRvclZpZXcgdGhlIGluZGljYXRvciB0ZW1wbGF0ZSB2aWV3IHJlZlxuICAgKiBAcmV0dXJucyBjb25jYXRlbmF0ZWQgdGVtcGxhdGUgaHRtbFxuICAgKi9cbiAgcHJpdmF0ZSB0ZW1wbGF0ZXNUb0h0bWwodGVtcGxhdGVWaWV3OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj4sIGluZGljYXRvclZpZXc/OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj4pOiBzdHJpbmcge1xuICAgIGxldCBodG1sID0gdGhpcy5ub2Rlc1RvSHRtbCh0ZW1wbGF0ZVZpZXcucm9vdE5vZGVzKTtcbiAgICBpZiAoaW5kaWNhdG9yVmlldykge1xuICAgICAgaHRtbCArPSB0aGlzLm5vZGVzVG9IdG1sKGluZGljYXRvclZpZXcucm9vdE5vZGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbCArPSA8c3RyaW5nPiB0aGlzLmluZGljYXRvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFueSBvZiB0aGUgcGFzc2VkIHRlbXBsYXRlcyBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgKiB0aGUgZWxsaXBzaXMgaGFzIGJlZW4gYXBwbGllZFxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgdGVtcGxhdGVzSGF2ZUNoYW5nZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlVmlldyB8fCAhdGhpcy5wcmV2aW91c1RlbXBsYXRlSHRtbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlVmlldyA9IHRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHt9KTtcbiAgICB0ZW1wbGF0ZVZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgaW5kaWNhdG9yVmlldyA9ICh0eXBlb2YgdGhpcy5pbmRpY2F0b3IgIT09ICdzdHJpbmcnKSA/IHRoaXMuaW5kaWNhdG9yLmNyZWF0ZUVtYmVkZGVkVmlldyh7fSkgOiBudWxsO1xuICAgIGlmIChpbmRpY2F0b3JWaWV3KSB7XG4gICAgICBpbmRpY2F0b3JWaWV3LmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wbGF0ZUh0bWwgPSB0aGlzLnRlbXBsYXRlc1RvSHRtbCh0ZW1wbGF0ZVZpZXcsIGluZGljYXRvclZpZXcpO1xuXG4gICAgcmV0dXJuIHRoaXMucHJldmlvdXNUZW1wbGF0ZUh0bWwgIT09IHRlbXBsYXRlSHRtbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSB2aWV3IGZyb20gdGhlIHRlbXBsYXRlcyAobm9uLXRydW5jYXRlZClcbiAgICovXG4gIHByaXZhdGUgcmVzdG9yZVZpZXcoKSB7XG4gICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgdGhpcy50ZW1wbGF0ZVZpZXcgPSB0aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh7fSk7XG4gICAgdGhpcy50ZW1wbGF0ZVZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoXG4gICAgICB0aGlzLmNvbXBGYWN0b3J5LCBudWxsLCB0aGlzLnZpZXdDb250YWluZXIuaW5qZWN0b3IsIFt0aGlzLnRlbXBsYXRlVmlldy5yb290Tm9kZXNdXG4gICAgKTtcbiAgICB0aGlzLmVsZW0gPSBjb21wb25lbnRSZWYuaW5zdGFuY2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuaW5pdGlhbFRleHRMZW5ndGggPSB0aGlzLmN1cnJlbnRMZW5ndGg7XG5cbiAgICB0aGlzLmluZGljYXRvclZpZXcgPSAodHlwZW9mIHRoaXMuaW5kaWNhdG9yICE9PSAnc3RyaW5nJykgPyB0aGlzLmluZGljYXRvci5jcmVhdGVFbWJlZGRlZFZpZXcoe30pIDogbnVsbDtcbiAgICBpZiAodGhpcy5pbmRpY2F0b3JWaWV3KSB7XG4gICAgICB0aGlzLmluZGljYXRvclZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbiBldmVudCBsaXN0ZW5lciB0byBjYWxsIGFwcGx5RWxsaXBzaXMoKSB3aGVuZXZlciBhIHJlc2l6ZSBoYXMgYmVlbiByZWdpc3RlcmVkLlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgbGlzdGVuZXIgKHdpbmRvdy9lbGVtZW50KSBkZXBlbmRzIG9uIHRoZSBgZWxsaXBzaXNSZXNpemVEZXRlY3Rpb25gLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRSZXNpemVMaXN0ZW5lcigpIHtcbiAgICBzd2l0Y2ggKHRoaXMucmVzaXplRGV0ZWN0aW9uKSB7XG4gICAgICBjYXNlIEVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uRW51bS5NYW51YWw6XG4gICAgICAgIC8vIFVzZXJzIHdpbGwgdHJpZ2dlciBhcHBseUVsbGlwc2lzIHZpYSB0aGUgcHVibGljIEFQSVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRWxsaXBzaXNSZXNpemVEZXRlY3Rpb25FbnVtLldpbmRvdzpcbiAgICAgICAgdGhpcy5hZGRXaW5kb3dSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0eXBlb2YgKGNvbnNvbGUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgXG4gICAgICAgICAgICBObyBzdWNoIGVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uIHN0cmF0ZWd5OiAnJHt0aGlzLnJlc2l6ZURldGVjdGlvbn0nLlxuICAgICAgICAgICAgVXNpbmcgJyR7RWxsaXBzaXNSZXNpemVEZXRlY3Rpb25FbnVtLlJlc2l6ZU9ic2VydmVyfScgaW5zdGVhZC5cbiAgICAgICAgICBgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2l6ZURldGVjdGlvbiA9IEVsbGlwc2lzUmVzaXplRGV0ZWN0aW9uRW51bS5SZXNpemVPYnNlcnZlcjtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSBFbGxpcHNpc1Jlc2l6ZURldGVjdGlvbkVudW0uUmVzaXplT2JzZXJ2ZXI6XG4gICAgICAgIHRoaXMuYWRkUmVzaXplT2JzZXJ2ZXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbiBldmVudCBsaXN0ZW5lciB0byBjYWxsIGFwcGx5RWxsaXBzaXMoKSB3aGVuZXZlciB0aGUgd2luZG93IGdldHMgcmVzaXplZC5cbiAgICovXG4gIHByaXZhdGUgYWRkV2luZG93UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgY29uc3QgcmVtb3ZlV2luZG93UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwbHlFbGxpcHNpcygpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbW92ZVJlc2l6ZUxpc3RlbmVycyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4gcmVtb3ZlV2luZG93UmVzaXplTGlzdGVuZXIoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGNhbGwgYXBwbHlFbGxpcHNpcygpIHdoZW5ldmVyIFJlc2l6ZU9ic2VydmVyIGlzIHRyaWdnZXJlZCBmb3IgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGFkZFJlc2l6ZU9ic2VydmVyKCkge1xuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMud2lkdGggIT09IHRoaXMuZWxlbS5jbGllbnRXaWR0aFxuICAgICAgICAgIHx8IHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCAhPT0gdGhpcy5lbGVtLmNsaWVudEhlaWdodFxuICAgICAgICAgIHx8IHRoaXMucHJldmlvdXNEaW1lbnNpb25zLnNjcm9sbFdpZHRoICE9PSB0aGlzLmVsZW0uc2Nyb2xsV2lkdGhcbiAgICAgICAgICB8fCB0aGlzLnByZXZpb3VzRGltZW5zaW9ucy5zY3JvbGxIZWlnaHQgIT09IHRoaXMuZWxlbS5zY3JvbGxIZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFbGxpcHNpcygpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMud2lkdGggPSB0aGlzLmVsZW0uY2xpZW50V2lkdGg7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMuaGVpZ2h0ID0gdGhpcy5lbGVtLmNsaWVudEhlaWdodDtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGltZW5zaW9ucy5zY3JvbGxXaWR0aCA9IHRoaXMuZWxlbS5zY3JvbGxXaWR0aDtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGltZW5zaW9ucy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVsZW0uc2Nyb2xsSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbSk7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVMaXN0ZW5lcnMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yaWdpbmFsIHRleHQncyB0cnVuY2F0ZWQgdmVyc2lvbi4gSWYgdGhlIHRleHQgcmVhbGx5IG5lZWRlZCB0b1xuICAgKiBiZSB0cnVuY2F0ZWQsIHRoaXMuZWxsaXBzaXNDaGFyYWN0ZXJzIHdpbGwgYmUgYXBwZW5kZWQuXG4gICAqIEBwYXJhbSBtYXggdGhlIG1heGltdW0gbGVuZ3RoIHRoZSB0ZXh0IG1heSBoYXZlXG4gICAqIEByZXR1cm5zIHRoZSB0ZXh0IG5vZGUgdGhhdCBoYXMgYmVlbiB0cnVuY2F0ZWQgb3IgbnVsbCBpZiB0cnVuY2F0aW5nIHdhc24ndCByZXF1aXJlZFxuICAgKi9cbiAgcHJpdmF0ZSB0cnVuY2F0ZUNvbnRlbnRzKG1heDogbnVtYmVyKTogTm9kZSB7XG4gICAgdGhpcy5yZXN0b3JlVmlldygpO1xuICAgIGNvbnN0IG5vZGVzID0gPChIVE1MRWxlbWVudCB8IENoYXJhY3RlckRhdGEpW10+dGhpcy5mbGF0dGVuVGV4dEFuZEVsZW1lbnROb2Rlcyh0aGlzLmVsZW0pXG4gICAgICAuZmlsdGVyKG5vZGUgPT4gW05vZGUuVEVYVF9OT0RFLCBOb2RlLkVMRU1FTlRfTk9ERV0uaW5jbHVkZXMobm9kZS5ub2RlVHlwZSkpO1xuXG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBsZXQgZm91bmROb2RlOiBOb2RlO1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLmluaXRpYWxUZXh0TGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENoYXJhY3RlckRhdGEpIHtcbiAgICAgICAgb2Zmc2V0IC09IG5vZGUuZGF0YS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvZmZzZXQtLTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9mZnNldCA8PSBtYXgpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDaGFyYWN0ZXJEYXRhKSB7XG4gICAgICAgICAgaWYgKHRoaXMud29yZEJvdW5kYXJpZXMgPT09ICdbXScgJiYgIXRoaXMubWF5VHJ1bmNhdGVBdEZuKSB7XG4gICAgICAgICAgICBub2RlLmRhdGEgPSBub2RlLmRhdGEuc3Vic3RyKDAsIG1heCAtIG9mZnNldCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtYXggLSBvZmZzZXQgIT09IG5vZGUuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBqID0gbWF4IC0gb2Zmc2V0IC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICAgaiA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICh0aGlzLndvcmRCb3VuZGFyaWVzICE9PSAnW10nICYmICFub2RlLmRhdGEuY2hhckF0KGopLm1hdGNoKHRoaXMud29yZEJvdW5kYXJpZXMpKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLm1heVRydW5jYXRlQXRGbiAmJiAhdGhpcy5tYXlUcnVuY2F0ZUF0Rm4obm9kZSwgaikpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBqID09PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5kYXRhID0gbm9kZS5kYXRhLnN1YnN0cigwLCBqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm91bmRJbmRleCA9IGk7XG4gICAgICAgIGZvdW5kTm9kZSA9IG5vZGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBmb3VuZEluZGV4ICsgMTsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICBpZiAobm9kZS50ZXh0Q29udGVudCAhPT0gJycgJiYgbm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW0gJiYgbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQobm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUsIG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKG5vZGUucGFyZW50Tm9kZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLmN1cnJlbnRMZW5ndGggIT09IHRoaXMuaW5pdGlhbFRleHRMZW5ndGgpID8gZm91bmROb2RlIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbGF0dGVuVGV4dEFuZEVsZW1lbnROb2Rlcyh0aGlzLmVsZW0pXG4gICAgICAuZmlsdGVyKG5vZGUgPT4gW05vZGUuVEVYVF9OT0RFLCBOb2RlLkVMRU1FTlRfTk9ERV0uaW5jbHVkZXMobm9kZS5ub2RlVHlwZSkpXG4gICAgICAubWFwKG5vZGUgPT4gKG5vZGUgaW5zdGFuY2VvZiBDaGFyYWN0ZXJEYXRhKSA/IG5vZGUuZGF0YS5sZW5ndGggOiAxKVxuICAgICAgLnJlZHVjZSgoc3VtLCBsZW5ndGgpID0+IHN1bSArIGxlbmd0aCwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cnVuY2F0ZWQgdGV4dCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGlubmVyIGRpdlxuICAgKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIGxlbmd0aCB0aGUgdGV4dCBtYXkgaGF2ZVxuICAgKiBAcGFyYW0gYWRkTW9yZUxpc3RlbmVyPWZhbHNlIGxpc3RlbiBmb3IgY2xpY2sgb24gdGhlIGVsbGlwc2lzQ2hhcmFjdGVycyBhbmNob3IgdGFnIGlmIHRoZSB0ZXh0IGhhcyBiZWVuIHRydW5jYXRlZFxuICAgKi9cbiAgcHJpdmF0ZSB0cnVuY2F0ZVRleHQobWF4OiBudW1iZXIpIHtcbiAgICBjb25zdCB0cnVuY2F0ZWROb2RlID0gdGhpcy50cnVuY2F0ZUNvbnRlbnRzKG1heCk7XG5cbiAgICBpZiAodHJ1bmNhdGVkTm9kZSkge1xuICAgICAgaWYgKCF0aGlzLmluZGljYXRvclZpZXcpIHtcbiAgICAgICAgaWYgKHRydW5jYXRlZE5vZGUgaW5zdGFuY2VvZiBDaGFyYWN0ZXJEYXRhKSB7XG4gICAgICAgICAgdHJ1bmNhdGVkTm9kZS5kYXRhICs9IDxzdHJpbmc+IHRoaXMuaW5kaWNhdG9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtLCB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQoPHN0cmluZz4gdGhpcy5pbmRpY2F0b3IpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMuaW5kaWNhdG9yVmlldy5yb290Tm9kZXMpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGVsbGlwc2lzIGluIHRoZSBFbGxpcHNpc0NvbnRlbnRDb21wb25lbnQgaWYgdGhlIHRleHQgd291bGQgZXhjZWVkIHRoZSBib3VuZGFyaWVzXG4gICAqL1xuICBwdWJsaWMgYXBwbHlFbGxpcHNpcygpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHJlc2l6ZSBsaXN0ZW5lciBhcyBjaGFuZ2luZyB0aGUgY29udGFpbmVkIHRleHQgd291bGQgdHJpZ2dlciBldmVudHM6XG4gICAgdGhpcy5yZW1vdmVSZXNpemVMaXN0ZW5lcnMkLm5leHQoKTtcblxuICAgIC8vIHVwZGF0ZSBmcm9tIHRlbXBsYXRlczpcbiAgICB0aGlzLnJlc3RvcmVWaWV3KCk7XG5cbiAgICAvLyByZW1lbWJlciB0ZW1wbGF0ZSBzdGF0ZTpcbiAgICB0aGlzLnByZXZpb3VzVGVtcGxhdGVIdG1sID0gdGhpcy50ZW1wbGF0ZXNUb0h0bWwodGhpcy50ZW1wbGF0ZVZpZXcsIHRoaXMuaW5kaWNhdG9yVmlldyk7XG5cbiAgICAvLyBhYm9ydCBpZiBbbmVzdGVkRWxsaXBzaXNdPVwiZmFsc2VcIiBoYXMgYmVlbiBzZXRcbiAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgYmVzdCBsZW5ndGggYnkgdHJpYWwgYW5kIGVycm9yOlxuICAgIGNvbnN0IG1heExlbmd0aCA9IE5lc3RlZEVsbGlwc2lzRGlyZWN0aXZlLm51bWVyaWNCaW5hcnlTZWFyY2godGhpcy5pbml0aWFsVGV4dExlbmd0aCwgY3VyTGVuZ3RoID0+IHtcbiAgICAgIHRoaXMudHJ1bmNhdGVUZXh0KGN1ckxlbmd0aCk7XG4gICAgICByZXR1cm4gIXRoaXMuaXNPdmVyZmxvd2luZztcbiAgICB9KTtcblxuICAgIC8vIEFwcGx5IHRoZSBiZXN0IGxlbmd0aDpcbiAgICB0aGlzLnRydW5jYXRlVGV4dChtYXhMZW5ndGgpO1xuXG4gICAgLy8gUmUtYXR0YWNoIHRoZSByZXNpemUgbGlzdGVuZXI6XG4gICAgdGhpcy5hZGRSZXNpemVMaXN0ZW5lcigpO1xuXG4gICAgLy8gRW1pdCBjaGFuZ2UgZXZlbnQ6XG4gICAgaWYgKHRoaXMuY2hhbmdlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gdGhpcy5jdXJyZW50TGVuZ3RoO1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdChcbiAgICAgICAgKGN1cnJlbnRMZW5ndGggPT09IHRoaXMuaW5pdGlhbFRleHRMZW5ndGgpID8gbnVsbCA6IGN1cnJlbnRMZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGV4dCBpcyBleGNlZWRpbmcgdGhlIGVsZW1lbnQncyBib3VuZGFyaWVzIG9yIG5vdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgaXNPdmVyZmxvd2luZygpOiBib29sZWFuIHtcbiAgICAvLyBFbmZvcmNlIGhpZGRlbiBvdmVyZmxvdyAocmVxdWlyZWQgdG8gY29tcGFyZSBjbGllbnQgd2lkdGgvaGVpZ2h0IHdpdGggc2Nyb2xsIHdpZHRoL2hlaWdodClcbiAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3cgPSB0aGlzLmVsZW0uc3R5bGUub3ZlcmZsb3c7XG4gICAgaWYgKCFjdXJyZW50T3ZlcmZsb3cgfHwgY3VycmVudE92ZXJmbG93ID09PSAndmlzaWJsZScpIHtcbiAgICAgIHRoaXMuZWxlbS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIH1cblxuICAgIGNvbnN0IGlzT3ZlcmZsb3dpbmcgPSB0aGlzLmVsZW0uY2xpZW50V2lkdGggPCB0aGlzLmVsZW0uc2Nyb2xsV2lkdGggLSAxIHx8IHRoaXMuZWxlbS5jbGllbnRIZWlnaHQgPCB0aGlzLmVsZW0uc2Nyb2xsSGVpZ2h0IC0gMTtcblxuICAgIC8vIFJlc2V0IG92ZXJmbG93IHRvIHRoZSBvcmlnaW5hbCBjb25maWd1cmF0aW9uOlxuICAgIHRoaXMuZWxlbS5zdHlsZS5vdmVyZmxvdyA9IGN1cnJlbnRPdmVyZmxvdztcblxuICAgIHJldHVybiBpc092ZXJmbG93aW5nO1xuICB9XG5cbn1cbiJdfQ==

@@ -32,3 +32,3 @@ import { Component, ElementRef, EventEmitter, Directive, TemplateRef, ViewContainerRef, ComponentFactoryResolver, Renderer2, NgZone, Inject, PLATFORM_ID, Input, Output, NgModule } from '@angular/core';

const ResizeObserver = window.ResizeObserver || ResizeObserver$1;
let ResizeObserver = ResizeObserver$1;
/**

@@ -109,2 +109,6 @@ * Directive to truncate the contained text, if it exceeds the element's boundaries

}
// Prefer native ResizeObserver over ponyfill, if available:
if (window.ResizeObserver != null) {
ResizeObserver = window.ResizeObserver;
}
if (typeof (this.active) !== 'boolean') {

@@ -111,0 +115,0 @@ this.active = true;

{
"name": "ngx-nested-ellipsis",
"version": "1.1.3",
"version": "1.1.4",
"description": "Nested multiline html with ellipsis for angular 9+",

@@ -5,0 +5,0 @@ "author": "Florian Lentsch",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet