UNPKG

@nomadreservations/ngx-codemirror

Version:

`@nomadreservations/ngx-codemirror` [CodeMirror (5.x)](http://codemirror.net/) code editor in your Angular application. Server Side Rendering(SSR) compliant and @angular 6+ Ready.

311 lines (301 loc) 22.8 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('@angular/forms')) : typeof define === 'function' && define.amd ? define('@nomadreservations/ngx-codemirror', ['exports', '@angular/core', 'rxjs', '@angular/forms'], factory) : (factory((global.nomadreservations = global.nomadreservations || {}, global.nomadreservations['ngx-codemirror'] = {}),global.ng.core,global.rxjs,global.ng.forms)); }(this, (function (exports,core,rxjs,forms) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * Main Codemirror import, utilizing window's existence to determine if we're server side or not. */ var /** @type {?} */ CodeMirror = typeof window !== 'undefined' && typeof window.navigator !== 'undefined' ? require('codemirror') : undefined; /** * Initialize Event for CodeMirror.Editor instance * * Holds a referencable pointer to the code mirror instance for users. */ var CodemirrorService = (function () { function CodemirrorService() { /** * Codemirror instance subject * * Emits a refrence to the initialized CodeMirror.Editor once it's insantiated. */ this.instance$ = new rxjs.ReplaySubject(); } CodemirrorService.decorators = [ { type: core.Injectable }, ]; return CodemirrorService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * Main Codemirror import, utilizing window's existence to determine if we're server side or not. */ var /** @type {?} */ CodeMirror$1 = typeof window !== 'undefined' && typeof window.navigator !== 'undefined' ? require('codemirror') : undefined; /** * CodeMirror component * * **Usage** : * ```html * <ngx-codemirror [(ngModel)]="data" [config]="{...}" (init)="onInit" (blur)="onBlur" (focus)="onFocus" ...></ngx-codemirror> * ``` */ var CodemirrorComponent = (function () { /** * Constructor * * @param _zone NgZone injected for Initialization */ function CodemirrorComponent(_codeMirror, _zone) { this._codeMirror = _codeMirror; this._zone = _zone; /** * change output event, pass through from codemirror */ this.change = new core.EventEmitter(); /** * focus output event, pass through from codemirror */ this.focus = new core.EventEmitter(); /** * blur output event, pass through from codemirror */ this.blur = new core.EventEmitter(); /** * cursorActivity output event, pass through from codemirror */ this.cursorActivity = new core.EventEmitter(); /** * Value storage */ this._value = ''; } Object.defineProperty(CodemirrorComponent.prototype, "value", { /** Implements ControlValueAccessor.value */ get: /** * Implements ControlValueAccessor.value * @return {?} */ function () { return this._value; }, set: /** * Implements ControlValueAccessor.value * @param {?} v * @return {?} */ function (v) { if (v !== this._value) { this._value = v; this.onChange(v); } }, enumerable: true, configurable: true }); /** * On component destroy * @return {?} */ CodemirrorComponent.prototype.ngOnDestroy = /** * On component destroy * @return {?} */ function () { }; /** * On component view init * @return {?} */ CodemirrorComponent.prototype.ngAfterViewInit = /** * On component view init * @return {?} */ function () { this.config = this.config || {}; this.codemirrorInit(this.config); }; /** * Value update process * @param {?} value * @return {?} */ CodemirrorComponent.prototype.updateValue = /** * Value update process * @param {?} value * @return {?} */ function (value) { this.value = value; this.onTouched(); this.change.emit(value); }; /** * Implements ControlValueAccessor * @param {?} value * @return {?} */ CodemirrorComponent.prototype.writeValue = /** * Implements ControlValueAccessor * @param {?} value * @return {?} */ function (value) { this._value = value || ''; if (this._instance) { this._instance.setValue(this._value); } }; /** * Change event trigger * @param {?} _ * @return {?} */ CodemirrorComponent.prototype.onChange = /** * Change event trigger * @param {?} _ * @return {?} */ function (_) { }; /** * Dirty/touched event trigger * @return {?} */ CodemirrorComponent.prototype.onTouched = /** * Dirty/touched event trigger * @return {?} */ function () { }; /** * Implements ControlValueAccessor.registerOnChange * @param {?} fn * @return {?} */ CodemirrorComponent.prototype.registerOnChange = /** * Implements ControlValueAccessor.registerOnChange * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; }; /** * Implements ControlValueAccessor.registerOnTouched * @param {?} fn * @return {?} */ CodemirrorComponent.prototype.registerOnTouched = /** * Implements ControlValueAccessor.registerOnTouched * @param {?} fn * @return {?} */ function (fn) { this.onTouched = fn; }; /** * Initialize codemirror * @param {?} config * @return {?} */ CodemirrorComponent.prototype.codemirrorInit = /** * Initialize codemirror * @param {?} config * @return {?} */ function (config) { var _this = this; if (CodeMirror$1) { this._zone.runOutsideAngular(function () { _this._instance = CodeMirror$1.fromTextArea(_this.host.nativeElement, config); _this._instance.setValue(_this._value); }); this._instance.on('change', function () { _this.updateValue(_this._instance.getValue()); }); this._instance.on('focus', function (instance, event) { _this.focus.emit({ instance: instance, event: event }); }); this._instance.on('cursorActivity', function (instance) { _this.cursorActivity.emit({ instance: instance }); }); this._instance.on('blur', function (instance, event) { _this.blur.emit({ instance: instance, event: event }); }); this._codeMirror.instance$.next(this._instance); } }; CodemirrorComponent.decorators = [ { type: core.Component, args: [{ // tslint:disable-next-line:component-selector selector: 'ngx-codemirror', providers: [ { provide: forms.NG_VALUE_ACCESSOR, // tslint:disable-next-line:no-forward-ref useExisting: core.forwardRef(function () { return CodemirrorComponent; }), multi: true } ], template: '<textarea #host></textarea>', },] }, ]; /** @nocollapse */ CodemirrorComponent.ctorParameters = function () { return [ { type: CodemirrorService, }, { type: core.NgZone, }, ]; }; CodemirrorComponent.propDecorators = { "config": [{ type: core.Input },], "change": [{ type: core.Output },], "focus": [{ type: core.Output },], "blur": [{ type: core.Output },], "cursorActivity": [{ type: core.Output },], "host": [{ type: core.ViewChild, args: ['host',] },], "value": [{ type: core.Input },], }; return CodemirrorComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * \@angular 5.x+ SSR ready CodeMirror wrapping module. */ var CodemirrorModule = (function () { function CodemirrorModule() { } CodemirrorModule.decorators = [ { type: core.NgModule, args: [{ providers: [ CodemirrorService ], declarations: [CodemirrorComponent], exports: [CodemirrorComponent], entryComponents: [CodemirrorComponent] },] }, ]; return CodemirrorModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ exports.CodemirrorComponent = CodemirrorComponent; exports.CodemirrorModule = CodemirrorModule; exports.CodemirrorService = CodemirrorService; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9tYWRyZXNlcnZhdGlvbnMtbmd4LWNvZGVtaXJyb3IudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9Abm9tYWRyZXNlcnZhdGlvbnMvbmd4LWNvZGVtaXJyb3Ivbmd4LWNvZGVtaXJyb3IvY29kZW1pcnJvci5zZXJ2aWNlLnRzIiwibmc6Ly9Abm9tYWRyZXNlcnZhdGlvbnMvbmd4LWNvZGVtaXJyb3Ivbmd4LWNvZGVtaXJyb3IvY29kZW1pcnJvci5jb21wb25lbnQudHMiLCJuZzovL0Bub21hZHJlc2VydmF0aW9ucy9uZ3gtY29kZW1pcnJvci9uZ3gtY29kZW1pcnJvci9jb2RlbWlycm9yLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ2NvZGVtaXJyb3InO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIE1haW4gQ29kZW1pcnJvciBpbXBvcnQsIHV0aWxpemluZyB3aW5kb3cncyBleGlzdGVuY2UgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHNlcnZlciBzaWRlIG9yIG5vdC5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbmNvbnN0IENvZGVNaXJyb3I6IGFueSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJ1xuICA/IHJlcXVpcmUoJ2NvZGVtaXJyb3InKVxuICA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBJbml0aWFsaXplIEV2ZW50IGZvciBDb2RlTWlycm9yLkVkaXRvciBpbnN0YW5jZVxuICpcbiAqIEhvbGRzIGEgcmVmZXJlbmNhYmxlIHBvaW50ZXIgdG8gdGhlIGNvZGUgbWlycm9yIGluc3RhbmNlIGZvciB1c2Vycy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvZGVtaXJyb3JTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIENvZGVtaXJyb3IgaW5zdGFuY2Ugc3ViamVjdFxuICAgKlxuICAgKiBFbWl0cyBhIHJlZnJlbmNlIHRvIHRoZSBpbml0aWFsaXplZCBDb2RlTWlycm9yLkVkaXRvciBvbmNlIGl0J3MgaW5zYW50aWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgaW5zdGFuY2UkOiBSZXBsYXlTdWJqZWN0PEVkaXRvcj4gPSBuZXcgUmVwbGF5U3ViamVjdDxFZGl0b3I+KCk7XG59XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkRlc3Ryb3ksXG4gIE5nWm9uZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnY29kZW1pcnJvcic7XG5pbXBvcnQgeyBDb2RlbWlycm9yU2VydmljZSB9IGZyb20gJy4vY29kZW1pcnJvci5zZXJ2aWNlJztcblxuLyoqXG4gKiBNYWluIENvZGVtaXJyb3IgaW1wb3J0LCB1dGlsaXppbmcgd2luZG93J3MgZXhpc3RlbmNlIHRvIGRldGVybWluZSBpZiB3ZSdyZSBzZXJ2ZXIgc2lkZSBvciBub3QuXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG5jb25zdCBDb2RlTWlycm9yOiBhbnkgPVxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCdcbiAgPyByZXF1aXJlKCdjb2RlbWlycm9yJylcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ29kZU1pcnJvciBjb21wb25lbnRcbiAqXG4gKiAqKlVzYWdlKiogOlxuICogYGBgaHRtbFxuICogICA8bmd4LWNvZGVtaXJyb3IgWyhuZ01vZGVsKV09XCJkYXRhXCIgW2NvbmZpZ109XCJ7Li4ufVwiIChpbml0KT1cIm9uSW5pdFwiIChibHVyKT1cIm9uQmx1clwiIChmb2N1cyk9XCJvbkZvY3VzXCIgLi4uPjwvbmd4LWNvZGVtaXJyb3I+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICduZ3gtY29kZW1pcnJvcicsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb2RlbWlycm9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogJzx0ZXh0YXJlYSAjaG9zdD48L3RleHRhcmVhPicsXG59KVxuZXhwb3J0IGNsYXNzIENvZGVtaXJyb3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKiBDb2RlbWlycm9yIGNvbmZpZyBvYmplY3QgKHNlZSBbZGV0YWlsc10oaHR0cDovL2NvZGVtaXJyb3IubmV0L2RvYy9tYW51YWwuaHRtbCNjb25maWcpKSAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBhbnk7XG4gIC8qKiBjaGFuZ2Ugb3V0cHV0IGV2ZW50LCBwYXNzIHRocm91Z2ggZnJvbSBjb2RlbWlycm9yICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiogZm9jdXMgb3V0cHV0IGV2ZW50LCBwYXNzIHRocm91Z2ggZnJvbSBjb2RlbWlycm9yICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKiBibHVyIG91dHB1dCBldmVudCwgcGFzcyB0aHJvdWdoIGZyb20gY29kZW1pcnJvciAqL1xuICBAT3V0cHV0KCkgcHVibGljIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKiBjdXJzb3JBY3Rpdml0eSBvdXRwdXQgZXZlbnQsIHBhc3MgdGhyb3VnaCBmcm9tIGNvZGVtaXJyb3IgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBjdXJzb3JBY3Rpdml0eSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqIEhvc3QgZWxlbWVudCBmb3IgY29kZW1pcnJvciB0byBhdHRhY2ggdG8gKi9cbiAgQFZpZXdDaGlsZCgnaG9zdCcpIHB1YmxpYyBob3N0OiBFbGVtZW50UmVmO1xuXG4gIC8qKiBDdXJyZW50IGVkaXRvciBpbnN0YW5jZSAqL1xuICBwcml2YXRlIF9pbnN0YW5jZTogYW55O1xuXG4gIC8qKiBWYWx1ZSBzdG9yYWdlICovXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSBfem9uZSBOZ1pvbmUgaW5qZWN0ZWQgZm9yIEluaXRpYWxpemF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jb2RlTWlycm9yOiBDb2RlbWlycm9yU2VydmljZSxcbiAgICBwcml2YXRlIF96b25lOiBOZ1pvbmVcbiAgKSB7fVxuXG4gIC8qKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLnZhbHVlICovXG4gIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9XG5cbiAgLyoqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IudmFsdWUgKi9cbiAgQElucHV0KCkgc2V0IHZhbHVlKHYpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgIHRoaXMub25DaGFuZ2Uodik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIGNvbXBvbmVudCBkZXN0cm95XG4gICAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBjb21wb25lbnQgdmlldyBpbml0XG4gICAqL1xuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWcgfHwge307XG4gICAgdGhpcy5jb2RlbWlycm9ySW5pdCh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsdWUgdXBkYXRlIHByb2Nlc3NcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAgKi9cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgfHwgJyc7XG4gICAgaWYgKHRoaXMuX2luc3RhbmNlKSB7XG4gICAgICB0aGlzLl9pbnN0YW5jZS5zZXRWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENoYW5nZSBldmVudCB0cmlnZ2VyICovXG4gIHB1YmxpYyAgb25DaGFuZ2UoXzogYW55KSB7fVxuICAvKiogRGlydHkvdG91Y2hlZCBldmVudCB0cmlnZ2VyICovXG4gIHB1YmxpYyBvblRvdWNoZWQoKSB7fVxuICAvKiogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlICovXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIC8qKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBjb2RlbWlycm9yXG4gICAqL1xuICBwcml2YXRlIGNvZGVtaXJyb3JJbml0KGNvbmZpZzogYW55KSB7XG4gICAgaWYgKENvZGVNaXJyb3IpIHtcbiAgICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCBjb25maWcpO1xuICAgICAgICB0aGlzLl9pbnN0YW5jZS5zZXRWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5faW5zdGFuY2Uub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLl9pbnN0YW5jZS5nZXRWYWx1ZSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9pbnN0YW5jZS5vbignZm9jdXMnLCAoaW5zdGFuY2U6IGFueSwgZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZvY3VzLmVtaXQoe2luc3RhbmNlLCBldmVudH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2luc3RhbmNlLm9uKCdjdXJzb3JBY3Rpdml0eScsIChpbnN0YW5jZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY3Vyc29yQWN0aXZpdHkuZW1pdCh7aW5zdGFuY2V9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9pbnN0YW5jZS5vbignYmx1cicsIChpbnN0YW5jZTogYW55LCBldmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYmx1ci5lbWl0KHtpbnN0YW5jZSwgZXZlbnR9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9jb2RlTWlycm9yLmluc3RhbmNlJC5uZXh0KHRoaXMuX2luc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvZGVtaXJyb3JDb21wb25lbnQgfSBmcm9tICcuL2NvZGVtaXJyb3IuY29tcG9uZW50JztcbmltcG9ydCB7IENvZGVtaXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi9jb2RlbWlycm9yLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBhbmd1bGFyIDUueCsgU1NSIHJlYWR5IENvZGVNaXJyb3Igd3JhcHBpbmcgbW9kdWxlLlxuICovXG5ATmdNb2R1bGUoe1xuICBwcm92aWRlcnM6IFtcbiAgICBDb2RlbWlycm9yU2VydmljZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtDb2RlbWlycm9yQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0NvZGVtaXJyb3JDb21wb25lbnRdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtDb2RlbWlycm9yQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBDb2RlbWlycm9yTW9kdWxlIHt9XG4iXSwibmFtZXMiOlsiUmVwbGF5U3ViamVjdCIsIkluamVjdGFibGUiLCJDb2RlTWlycm9yIiwiRXZlbnRFbWl0dGVyIiwiQ29tcG9uZW50IiwiTkdfVkFMVUVfQUNDRVNTT1IiLCJmb3J3YXJkUmVmIiwiTmdab25lIiwiSW5wdXQiLCJPdXRwdXQiLCJWaWV3Q2hpbGQiLCJOZ01vZHVsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVBOzs7SUFPQSxxQkFBTSxVQUFVLEdBQ2QsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxXQUFXO1VBQ3RFLE9BQU8sQ0FBQyxZQUFZLENBQUM7VUFDckIsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7OzZCQWM4QixJ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