UNPKG

ng4x-auto-complete

Version:

Remote autocomple for andular 4, 5, 6. Setup the url and field names of database which value will show in list, Multiple fiels can be set by comma separator. The data format of return value of remote url should be JSON. After start typing i

163 lines (155 loc) 17.2 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common/http'), require('@angular/common')) : typeof define === 'function' && define.amd ? define('ng4x-auto-complete', ['exports', '@angular/core', '@angular/common/http', '@angular/common'], factory) : (factory((global['ng4x-auto-complete'] = {}),global.ng.core,global.ng.common.http,global.ng.common)); }(this, (function (exports,core,http,common) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var Ng4xAutoCompleteComponent = (function () { function Ng4xAutoCompleteComponent(http$$1, renderer) { this.http = http$$1; this.renderer = renderer; this.all_list_child = []; this.selected_row = ""; this._loading = "hidden"; } /** * @param {?} setting_obj * @return {?} */ Ng4xAutoCompleteComponent.prototype.setting = /** * @param {?} setting_obj * @return {?} */ function (setting_obj) { this.data_url = setting_obj.data_url; this.db_fields = setting_obj.db_fields; //console.log(this.data_url) }; /** * @return {?} */ Ng4xAutoCompleteComponent.prototype.clickout = /** * @return {?} */ function () { this._clearList(); }; /** * @param {?} event * @return {?} */ Ng4xAutoCompleteComponent.prototype.getData = /** * @param {?} event * @return {?} */ function (event) { var _this = this; var /** @type {?} */ input_val = event.target.value; if (input_val.length == 0) { this._clearList(); return; } var /** @type {?} */ final_url = this.data_url + '?q=' + input_val; this._loading = "visible"; this.http.get(final_url).subscribe(function (todo) { _this._clearList(); for (var /** @type {?} */ k in todo) { var /** @type {?} */ new_div = _this.renderer.createElement('div'); var /** @type {?} */ field_array = _this.db_fields.split(","); var /** @type {?} */ display_text = ""; for (var /** @type {?} */ i = 0; i < field_array.length; i++) { display_text += todo[k][field_array[i]] + " "; } display_text = display_text.trim(); _this.renderer.appendChild(new_div, _this.renderer.createText(display_text)); _this.all_list_child.push(new_div); _this.renderer.listen(new_div, 'click', function (event) { _this.text_fld.nativeElement.value = event.target.innerHTML; var /** @type {?} */ tindex = Array.from(event.target.parentNode.children).indexOf(event.target); _this.selected_row = todo[tindex]; }); _this.renderer.appendChild(_this.list.nativeElement, new_div); var /** @type {?} */ theight = _this.text_fld.nativeElement.offsetHeight; _this.renderer.setStyle(_this.list.nativeElement, "top", theight + "px"); _this.renderer.setStyle(_this.list.nativeElement, "display", "block"); _this.renderer.addClass(new_div, "ngxautocomp_list_el"); } _this._loading = "hidden"; }); }; /** * @return {?} */ Ng4xAutoCompleteComponent.prototype._clearList = /** * @return {?} */ function () { for (var /** @type {?} */ i = 0; i < this.all_list_child.length; i++) this.renderer.removeChild(this.list.nativeElement, this.all_list_child[i]); this.all_list_child = []; this.renderer.setStyle(this.list.nativeElement, "display", "none"); }; /** * @return {?} */ Ng4xAutoCompleteComponent.prototype.getSelectedRow = /** * @return {?} */ function () { return this.selected_row; }; Ng4xAutoCompleteComponent.decorators = [ { type: core.Component, args: [{ selector: 'ng4x-auto-complete', template: "<div class=\"ngxautocomplete\">\n <input type=\"text\" value=\"\" name=\"ngx-autocomplete_field\" (keyup)=\"getData($event)\" #_ng_autocomp_txt>\n <div #_ng_autocom_list class=\"ngx-auto-list\"></div>\n <i class=\"fa fa-cog fa-spin\" [style.visibility]=\"_loading\" ></i>\n</div>\n", styles: [":focus{outline:0}.ngxautocomplete{position:relative;width:100%;border:1px solid #ccc}.ngxautocomplete input{border:0;width:90%}.ngx-auto-list{display:none;position:absolute;width:100%;min-height:300px;overflow-y:scroll;border-left:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc;top:0;z-index:9;background:#fff}.ngxautocomp_list_el{text-align:left;cursor:pointer;padding:5px}.ngxautocomp_list_el:hover{background-color:#ccc}"] },] }, ]; /** @nocollapse */ Ng4xAutoCompleteComponent.ctorParameters = function () { return [ { type: http.HttpClient }, { type: core.Renderer2 } ]; }; Ng4xAutoCompleteComponent.propDecorators = { list: [{ type: core.ViewChild, args: ['_ng_autocom_list',] }], text_fld: [{ type: core.ViewChild, args: ['_ng_autocomp_txt',] }], clickout: [{ type: core.HostListener, args: ['document:click',] }] }; return Ng4xAutoCompleteComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var Ng4xAutoCompleteModule = (function () { function Ng4xAutoCompleteModule() { } Ng4xAutoCompleteModule.decorators = [ { type: core.NgModule, args: [{ imports: [ common.CommonModule ], declarations: [Ng4xAutoCompleteComponent], exports: [Ng4xAutoCompleteComponent] },] }, ]; return Ng4xAutoCompleteModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ exports.Ng4xAutoCompleteModule = Ng4xAutoCompleteModule; exports.ɵa = Ng4xAutoCompleteComponent; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmc0eC1hdXRvLWNvbXBsZXRlLnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbmc0eC1hdXRvLWNvbXBsZXRlL3NyYy9hcHAvbW9kdWxlcy9uZzR4LWF1dG8tY29tcGxldGUvbmc0eC1hdXRvLWNvbXBsZXRlL25nNHgtYXV0by1jb21wbGV0ZS5jb21wb25lbnQudHMiLCJuZzovL25nNHgtYXV0by1jb21wbGV0ZS9zcmMvYXBwL21vZHVsZXMvbmc0eC1hdXRvLWNvbXBsZXRlL25nNHgtYXV0by1jb21wbGV0ZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmc0eC1hdXRvLWNvbXBsZXRlJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwibmd4YXV0b2NvbXBsZXRlXCI+XG4gIDxpbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgbmFtZT1cIm5neC1hdXRvY29tcGxldGVfZmllbGRcIiAoa2V5dXApPVwiZ2V0RGF0YSgkZXZlbnQpXCIgI19uZ19hdXRvY29tcF90eHQ+XG4gIDxkaXYgI19uZ19hdXRvY29tX2xpc3QgY2xhc3M9XCJuZ3gtYXV0by1saXN0XCI+PC9kaXY+XG4gIDxpIGNsYXNzPVwiZmEgZmEtY29nIGZhLXNwaW5cIiBbc3R5bGUudmlzaWJpbGl0eV09XCJfbG9hZGluZ1wiID48L2k+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2A6Zm9jdXN7b3V0bGluZTowfS5uZ3hhdXRvY29tcGxldGV7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNjY2N9Lm5neGF1dG9jb21wbGV0ZSBpbnB1dHtib3JkZXI6MDt3aWR0aDo5MCV9Lm5neC1hdXRvLWxpc3R7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMDBweDtvdmVyZmxvdy15OnNjcm9sbDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzt0b3A6MDt6LWluZGV4Ojk7YmFja2dyb3VuZDojZmZmfS5uZ3hhdXRvY29tcF9saXN0X2Vse3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjVweH0ubmd4YXV0b2NvbXBfbGlzdF9lbDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjY2N9YF1cbn0pXG5leHBvcnQgY2xhc3MgTmc0eEF1dG9Db21wbGV0ZUNvbXBvbmVudCB7XG4gIFxuICBkYXRhX3VybDphbnk7XG4gIGRiX2ZpZWxkczphbnk7XG4gIGFsbF9saXN0X2NoaWxkPVtdO1xuICBzZWxlY3RlZF9yb3c6c3RyaW5nPVwiXCJcbiAgX2xvYWRpbmc6c3RyaW5nPVwiaGlkZGVuXCI7XG4gIEBWaWV3Q2hpbGQoJ19uZ19hdXRvY29tX2xpc3QnKSBsaXN0OkVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ19uZ19hdXRvY29tcF90eHQnKSB0ZXh0X2ZsZDpFbGVtZW50UmVmO1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDpIdHRwQ2xpZW50LHByb3RlY3RlZCByZW5kZXJlcjpSZW5kZXJlcjIpIHsgfVxuICBzZXR0aW5nKHNldHRpbmdfb2JqKXtcbiAgICB0aGlzLmRhdGFfdXJsPXNldHRpbmdfb2JqLmRhdGFfdXJsO1xuICAgIHRoaXMuZGJfZmllbGRzPSBzZXR0aW5nX29iai5kYl9maWVsZHM7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGFfdXJsKVxuICB9XG4gIFxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgY2xpY2tvdXQoKSB7XG4gICAgXG4gICAgIHRoaXMuX2NsZWFyTGlzdCgpXG4gIH1cbiAgZ2V0RGF0YShldmVudCl7XG4gICAgICAgIGxldCBpbnB1dF92YWw9IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICBcbiAgICAgICAgaWYoaW5wdXRfdmFsLmxlbmd0aD09MCl7XG4gICAgICAgICAgdGhpcy5fY2xlYXJMaXN0KCk7XG4gICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGxldCBmaW5hbF91cmw9dGhpcy5kYXRhX3VybCsnP3E9JytpbnB1dF92YWxcbiAgICAgICAgdGhpcy5fbG9hZGluZz1cInZpc2libGVcIlxuICAgICAgICB0aGlzLmh0dHAuZ2V0KGZpbmFsX3VybCkuc3Vic2NyaWJlKHRvZG89PntcbiAgICAgICAgICAgICAgdGhpcy5fY2xlYXJMaXN0KClcbiAgICAgICAgICAgICAgZm9yKGxldCBrIGluIHRvZG8pe1xuICAgICAgICAgICAgICAgIGxldCBuZXdfZGl2PXRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkX2FycmF5PXRoaXMuZGJfZmllbGRzLnNwbGl0KFwiLFwiKVxuICAgICAgICAgICAgICAgIGxldCBkaXNwbGF5X3RleHQ9XCJcIlxuICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8ZmllbGRfYXJyYXkubGVuZ3RoO2krKyl7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5X3RleHQrPXRvZG9ba11bZmllbGRfYXJyYXlbaV1dK1wiIFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaXNwbGF5X3RleHQ9ZGlzcGxheV90ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKG5ld19kaXYsdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KGRpc3BsYXlfdGV4dCkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsX2xpc3RfY2hpbGQucHVzaChuZXdfZGl2KVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKG5ld19kaXYsJ2NsaWNrJywoZXZlbnQpPT57XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dF9mbGQubmF0aXZlRWxlbWVudC52YWx1ZT1ldmVudC50YXJnZXQuaW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICBsZXQgdGluZGV4PUFycmF5LmZyb20oZXZlbnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRyZW4pLmluZGV4T2YoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkX3Jvdz10b2RvW3RpbmRleF1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQsbmV3X2RpdilcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgdGhlaWdodD10aGlzLnRleHRfZmxkLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxpc3QubmF0aXZlRWxlbWVudCxcInRvcFwiLHRoZWlnaHQrXCJweFwiKVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQsXCJkaXNwbGF5XCIsXCJibG9ja1wiKVxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhuZXdfZGl2LFwibmd4YXV0b2NvbXBfbGlzdF9lbFwiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmc9XCJoaWRkZW5cIlxuICAgICAgICB9KVxuXG4gIH0gXG5cbiAgcHJpdmF0ZSBfY2xlYXJMaXN0KCl7XG4gICAgZm9yKGxldCBpPTA7aTx0aGlzLmFsbF9saXN0X2NoaWxkLmxlbmd0aDtpKyspXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQsdGhpcy5hbGxfbGlzdF9jaGlsZFtpXSlcbiAgICB0aGlzLmFsbF9saXN0X2NoaWxkPVtdOyAgICAgXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxpc3QubmF0aXZlRWxlbWVudCxcImRpc3BsYXlcIixcIm5vbmVcIilcbiAgfVxuXG4gIGdldFNlbGVjdGVkUm93KCk6c3RyaW5ne1xuICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZF9yb3c7XG4gIH1cblxuIFxuXG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nNHhBdXRvQ29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL25nNHgtYXV0by1jb21wbGV0ZS9uZzR4LWF1dG8tY29tcGxldGUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtOZzR4QXV0b0NvbXBsZXRlQ29tcG9uZW50XSxcbiAgZXhwb3J0czpbTmc0eEF1dG9Db21wbGV0ZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmc0eEF1dG9Db21wbGV0ZU1vZHVsZSB7IH1cbiJdLCJuYW1lcyI6WyJodHRwIiwiQ29tcG9uZW50IiwiSHR0cENsaWVudCIsIlJlbmRlcmVyMiIsIlZpZXdDaGlsZCIsIkhvc3RMaXN0ZW5lciIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7UUFzQkUsbUNBQXNCQSxPQUFlLEVBQVcsUUFBa0I7WUFBNUMsU0FBSSxHQUFKQSxPQUFJLENBQVc7WUFBVyxhQUFRLEdBQVIsUUFBUSxDQUFVO2tDQUxuRCxFQUFFO2dDQUNHLEVBQUU7NEJBQ04sUUFBUTtTQUcrQzs7Ozs7UUFDdkUsMkNBQU87Ozs7WUFBUCxVQUFRLFdBQVc7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRSxXQUFXLENBQUMsU0FBUyxDQUFDOzthQUV2Qzs7OztRQUlELDRDQUFROzs7WUFEUjtnQkFHRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7YUFDbkI7Ozs7O1FBQ0QsMkNBQU87Ozs7WUFBUCxVQUFRLEtBQUs7Z0JBQWIsaUJBeUNDO2dCQXhDSyxxQkFBSSxTQUFTLEdBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUE7Z0JBRWpDLElBQUcsU0FBUyxDQUFDLE1BQU0sSUFBRSxDQUFDLEVBQUM7b0JBQ3JCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDakIsT0FBTTtpQkFDUjtnQkFDRCxxQkFBSSxTQUFTLEdBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxLQUFLLEdBQUMsU0FBUyxDQUFBO2dCQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFDLFNBQVMsQ0FBQTtnQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUEsSUFBSTtvQkFDakMsS0FBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO29CQUNqQixLQUFJLHFCQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7d0JBQ2hCLHFCQUFJLE9BQU8sR0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDL0MscUJBQUksV0FBVyxHQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO3dCQUN6QyxxQkFBSSxZQUFZLEdBQUMsRUFBRSxDQUFBO3dCQUNuQixLQUFJLHFCQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUM7NEJBQ25DLFlBQVksSUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxDQUFDO3lCQUMzQzt3QkFDRCxZQUFZLEdBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUVqQyxLQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt3QkFFMUUsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7d0JBQ2pDLEtBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsVUFBQyxLQUFLOzRCQUN2QyxLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUE7NEJBQzFELHFCQUFJLE1BQU0sR0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7NEJBQzNFLEtBQUksQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO3lCQUNqQyxDQUFDLENBQUE7d0JBQ0YsS0FBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUMsT0FBTyxDQUFDLENBQUE7d0JBRzFELHFCQUFJLE9BQU8sR0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUE7d0JBRXBELEtBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFDLEtBQUssRUFBQyxPQUFPLEdBQUMsSUFBSSxDQUFDLENBQUE7d0JBQ2xFLEtBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFDLFNBQVMsRUFBQyxPQUFPLENBQUMsQ0FBQTt3QkFFakUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLHFCQUFxQixDQUFDLENBQUE7cUJBQ3REO29CQUNELEtBQUksQ0FBQyxRQUFRLEdBQUMsUUFBUSxDQUFBO2lCQUMzQixDQUFDLENBQUE7YUFFUDs7OztRQUVPLDhDQUFVOzs7O2dCQUNoQixLQUFJLHFCQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFDLENBQUMsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUM3RSxJQUFJLENBQUMsY0FBYyxHQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUMsU0FBUyxFQUFDLE1BQU0sQ0FBQyxDQUFBOzs7OztRQUdsRSxrREFBYzs7O1lBQWQ7Z0JBQ0csT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO2FBQzNCOztvQkFwRkZDLGNBQVMsU0FBQzt3QkFDVCxRQUFRLEVBQUUsb0JBQW9CO3dCQUM5QixRQUFRLEVBQUUsOFJBS1g7d0JBQ0MsTUFBTSxFQUFFLENBQUMsa2NBQWtjLENBQUM7cUJBQzdjOzs7Ozt3QkFYT0MsZUFBVTt3QkFERUMsY0FBUzs7OzsyQkFvQjFCQyxjQUFTLFNBQUMsa0JBQWtCOytCQUM1QkEsY0FBUyxTQUFDLGtCQUFrQjsrQkFTNUJDLGlCQUFZLFNBQUMsZ0JBQWdCOzt3Q0E5QmhDOzs7Ozs7O0FDQUE7Ozs7b0JBSUNDLGFBQVEsU0FBQzt3QkFDUixPQUFPLEVBQUU7NEJBQ1BDLG1CQUFZO3lCQUNiO3dCQUNELFlBQVksRUFBRSxDQUFDLHlCQUF5QixDQUFDO3dCQUN6QyxPQUFPLEVBQUMsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDcEM7O3FDQVZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=