UNPKG

tauro-directives

Version:

This is an Angular library composed of several useful directives developed by the team of developers of [3Tecnos Tecnologia](http://www.3tecnos.com.br/).

426 lines (414 loc) 40.6 kB
import { Injectable, Component, NgModule, Directive, HostListener, ElementRef, Input, defineInjectable } from '@angular/core'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var TauroDirectivesService = /** @class */ (function () { function TauroDirectivesService() { } TauroDirectivesService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] }, ]; /** @nocollapse */ TauroDirectivesService.ctorParameters = function () { return []; }; /** @nocollapse */ TauroDirectivesService.ngInjectableDef = defineInjectable({ factory: function TauroDirectivesService_Factory() { return new TauroDirectivesService(); }, token: TauroDirectivesService, providedIn: "root" }); return TauroDirectivesService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var TauroDirectivesComponent = /** @class */ (function () { function TauroDirectivesComponent() { } /** * @return {?} */ TauroDirectivesComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; TauroDirectivesComponent.decorators = [ { type: Component, args: [{ selector: 'ta-tauro-directives', template: "\n <p>\n tauro-directives works!\n </p>\n ", styles: [] },] }, ]; /** @nocollapse */ TauroDirectivesComponent.ctorParameters = function () { return []; }; return TauroDirectivesComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var CpfDirective = /** @class */ (function () { function CpfDirective() { } /** * @param {?} $event * @return {?} */ CpfDirective.prototype.onKeyup = /** * @param {?} $event * @return {?} */ function ($event) { /** @type {?} */ var valor; valor = $event.target.value.replace(/\D/g, ''); $event.target.value = valor.MaskCpfCnpj("cpf"); }; CpfDirective.decorators = [ { type: Directive, args: [{ selector: '[ta-cpf]' },] }, ]; /** @nocollapse */ CpfDirective.ctorParameters = function () { return []; }; CpfDirective.propDecorators = { onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }] }; return CpfDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var CnpjDirective = /** @class */ (function () { function CnpjDirective() { } /** * @param {?} $event * @return {?} */ CnpjDirective.prototype.onKeyup = /** * @param {?} $event * @return {?} */ function ($event) { /** @type {?} */ var valor; valor = $event.target.value.replace(/\D/g, ''); $event.target.value = valor.MaskCpfCnpj("cnpj"); }; CnpjDirective.decorators = [ { type: Directive, args: [{ selector: '[ta-cnpj]' },] }, ]; /** @nocollapse */ CnpjDirective.ctorParameters = function () { return []; }; CnpjDirective.propDecorators = { onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }] }; return CnpjDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var CountToDirective = /** @class */ (function () { function CountToDirective(element) { this.element = element; } /** * @return {?} */ CountToDirective.prototype.ngAfterViewInit = /** * @return {?} */ function () { /** @type {?} */ var time = Number(this.duration || 1500); /** @type {?} */ var end = parseInt(this.element.nativeElement.innerHTML); /** @type {?} */ var stepTime = Math.abs(Math.floor(time / end)); stepTime = Math.max(stepTime, 50); /** @type {?} */ var obj = this.element.nativeElement; /** @type {?} */ var startTime = new Date().getTime(); /** @type {?} */ var endTime = startTime + time; /** * @return {?} */ function run() { /** @type {?} */ var now = new Date().getTime(); /** @type {?} */ var remaining = Math.max((endTime - now) / time, 0); /** @type {?} */ var value = Math.round(end - (remaining * end)); obj.innerHTML = value; if (value == end) { clearInterval(timer); } } /** @type {?} */ var timer = setInterval(run, stepTime); }; CountToDirective.decorators = [ { type: Directive, args: [{ selector: '[ta-countTo]' },] }, ]; /** @nocollapse */ CountToDirective.ctorParameters = function () { return [ { type: ElementRef } ]; }; CountToDirective.propDecorators = { duration: [{ type: Input }] }; return CountToDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var TelDirective = /** @class */ (function () { function TelDirective() { } /** * @param {?} $event * @return {?} */ TelDirective.prototype.onKeyup = /** * @param {?} $event * @return {?} */ function ($event) { /** @type {?} */ var valor; valor = $event.target.value.replace(/\D/g, ''); $event.target.value = valor.MaskTel(); }; TelDirective.decorators = [ { type: Directive, args: [{ selector: '[ta-tel]' },] }, ]; /** @nocollapse */ TelDirective.ctorParameters = function () { return []; }; TelDirective.propDecorators = { onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }] }; return TelDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ Array.prototype.difference = function (b, field) { /** @type {?} */ var a = this; /** @type {?} */ var diffBy = function (pred) { return function (a, b) { return a.filter(function (x) { return !b.some(function (y) { return pred(x, y); }); }); }; }; /** @type {?} */ var makeSymmDiffFunc = function (pred) { return function (a, b) { return diffBy(pred)(a, b).concat(diffBy(pred)(b, a)); }; }; /** @type {?} */ var myDiff = makeSymmDiffFunc(function (x, y) { return x[field] === y[field]; }); return myDiff(a, b); }; String.prototype.removeMask = function () { return this.replace(/[^0-9]+/g, ""); }; String.prototype.MaskTel = function () { /** @type {?} */ var tel = this; if (tel) { tel = tel.replace(/[^0-9]+/g, ""); if (tel.length > 0) { tel = "(" + tel.substring(0); } if (tel.length > 3) { tel = tel.substring(0, 3) + ")" + tel.substring(3); } if (tel.length > 8) { tel = tel.substring(0, 8) + "-" + tel.substring(8, 13); } if (tel.length > 13) { tel = tel.replace('-', ""); tel = tel.substring(0, 9) + "-" + tel.substring(9, 14); } } return tel; }; String.prototype.MaskCpfCnpj = function (option) { /** @type {?} */ var value = this; if (this) { value = this.replace(/[^0-9]+/g, ""); if (option == "cnpj") { if (value.length > 2) { value = value.substring(0, 2) + "." + value.substring(2); } if (value.length > 6) { value = value.substring(0, 6) + "." + value.substring(6); } if (value.length > 10) { value = value.substring(0, 10) + "/" + value.substring(10); } if (value.length > 15) { value = value.substring(0, 15) + "-" + value.substring(15, 17); } } else { if (value.length > 3) { value = value.substring(0, 3) + "." + value.substring(3); } if (value.length > 7) { value = value.substring(0, 7) + "." + value.substring(7); } if (value.length > 11) { /** @type {?} */ var max = 16; if (option == "cpf") { max = 13; } value = value.substring(0, 11) + "-" + value.substring(11, max); } if (value.length > 14) { value = value.replace('.', ""); value = value.replace('.', ""); value = value.replace('-', ""); value = value.substring(0, 2) + "." + value.substring(2, 5) + "." + value.substring(5, 8) + "/" + value.substring(8, 12) + "-" + value.substring(12, 14); } } } return value; }; String.prototype.validaCPF = function () { /** @type {?} */ var cpf = this; if (cpf) { cpf = cpf.replace(/\D/g, ''); /** @type {?} */ var Soma = void 0; /** @type {?} */ var Resto = void 0; Soma = 0; if (cpf == "00000000000" || cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999") return false; for (var i = 1; i <= 9; i++) Soma = Soma + parseInt(cpf.substring(i - 1, i)) * (11 - i); Resto = (Soma * 10) % 11; if ((Resto == 10) || (Resto == 11)) Resto = 0; if (Resto != parseInt(cpf.substring(9, 10))) return false; Soma = 0; for (var i = 1; i <= 10; i++) Soma = Soma + parseInt(cpf.substring(i - 1, i)) * (12 - i); Resto = (Soma * 10) % 11; if ((Resto == 10) || (Resto == 11)) Resto = 0; if (Resto != parseInt(cpf.substring(10, 11))) return false; return true; } else { return false; } }; String.prototype.validaCNPJ = function () { /** @type {?} */ var b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]; if (/0{14}/.test(this)) return false; for (var i = 0, n = 0; i < 12; n += this[i] * b[++i]) ; if (this[12] != (((n %= 11) < 2) ? 0 : 11 - n)) return false; for (var i = 0, n = 0; i <= 12; n += this[i] * b[i++]) ; if (this[13] != (((n %= 11) < 2) ? 0 : 11 - n)) return false; return true; }; String.prototype.ToCpfCnpj = function () { /** @type {?} */ var num = this; if (num) { num = num.toString(); num = num.replace(/\D/g, ""); switch (num.length) { case 4: num = num.replace(/(\d+)(\d{3})/, " $1.$2"); break; case 5: num = num.replace(/(\d+)(\d{3})/, " $1.$2"); break; case 6: num = num.replace(/(\d+)(\d{3})/, " $1.$2"); break; case 7: num = num.replace(/(\d+)(\d{3})(\d{3})/, " $1.$2.$3"); break; case 8: num = num.replace(/(\d+)(\d{3})(\d{3})/, " $1.$2.$3"); break; case 9: num = num.replace(/(\d+)(\d{3})(\d{3})/, " $1.$2.$3"); break; case 10: num = num.replace(/(\d+)(\d{3})(\d{3})(\d{1})/, " $1.$2.$3-$4"); break; case 11: num = num.replace(/(\d+)(\d{3})(\d{3})(\d{2})/, " $1.$2.$3-$4"); break; case 12: num = num.replace(/(\d+)(\d{3})(\d{3})(\d{4})/, " $1.$2.$3/$4"); break; case 13: num = num.replace(/(\d+)(\d{3})(\d{3})(\d{4})(\d{2})/, " $1.$2.$3/$4-$5"); break; case 14: num = num.replace(/(\d{2})(\d{3})(\d{3})(\d{4})(\d+)/, " $1.$2.$3/$4-$5"); break; } } return num; }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var TauroDirectivesModule = /** @class */ (function () { function TauroDirectivesModule() { } TauroDirectivesModule.decorators = [ { type: NgModule, args: [{ imports: [], declarations: [TauroDirectivesComponent, CpfDirective, CnpjDirective, CountToDirective, TelDirective], exports: [TauroDirectivesComponent, CpfDirective, CnpjDirective, CountToDirective, TelDirective] },] }, ]; return TauroDirectivesModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ export { TauroDirectivesService, TauroDirectivesComponent, TauroDirectivesModule, CnpjDirective, CountToDirective, CpfDirective, TelDirective }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF1cm8tZGlyZWN0aXZlcy5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vdGF1cm8tZGlyZWN0aXZlcy9saWIvdGF1cm8tZGlyZWN0aXZlcy5zZXJ2aWNlLnRzIiwibmc6Ly90YXVyby1kaXJlY3RpdmVzL2xpYi90YXVyby1kaXJlY3RpdmVzLmNvbXBvbmVudC50cyIsIm5nOi8vdGF1cm8tZGlyZWN0aXZlcy9saWIvY3BmL2NwZi5kaXJlY3RpdmUudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL2NucGovY25wai5kaXJlY3RpdmUudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL2NvdW50LXRvL2NvdW50LXRvLmRpcmVjdGl2ZS50cyIsIm5nOi8vdGF1cm8tZGlyZWN0aXZlcy9saWIvdGVsL3RlbC5kaXJlY3RpdmUudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL3V0aWxzL2V4dGVuZGVkLm1ldGhvZHMudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL3RhdXJvLWRpcmVjdGl2ZXMubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGF1cm9EaXJlY3RpdmVzU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RhLXRhdXJvLWRpcmVjdGl2ZXMnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxwPlxuICAgICAgdGF1cm8tZGlyZWN0aXZlcyB3b3JrcyFcbiAgICA8L3A+XG4gIGAsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgVGF1cm9EaXJlY3RpdmVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0YS1jcGZdJ1xufSlcbmV4cG9ydCBjbGFzcyBDcGZEaXJlY3RpdmUge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleXVwKCRldmVudDogYW55KSB7XG4gICAgbGV0IHZhbG9yOiBzdHJpbmc7XG4gICAgdmFsb3IgPSAkZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbG9yLk1hc2tDcGZDbnBqKFwiY3BmXCIpO1xuICB9XG5cbiAgIFxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RhLWNucGpdJ1xufSlcbmV4cG9ydCBjbGFzcyBDbnBqRGlyZWN0aXZlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgb25LZXl1cCgkZXZlbnQ6IGFueSkge1xuICAgIGxldCB2YWxvcjogc3RyaW5nO1xuICAgIHZhbG9yID0gJGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICRldmVudC50YXJnZXQudmFsdWUgPSB2YWxvci5NYXNrQ3BmQ25waihcImNucGpcIik7XG4gIH0gICBcblxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGEtY291bnRUb10nXG59KVxuZXhwb3J0IGNsYXNzIENvdW50VG9EaXJlY3RpdmUge1xuXG4gIEBJbnB1dCgpIGR1cmF0aW9uOiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDpFbGVtZW50UmVmKXt9IFxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBsZXQgdGltZSAgICAgID0gTnVtYmVyKHRoaXMuZHVyYXRpb24gfHwgMTUwMCk7ICBcbiAgICBsZXQgZW5kICAgICAgID0gcGFyc2VJbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICBsZXQgc3RlcFRpbWUgID0gTWF0aC5hYnMoTWF0aC5mbG9vcih0aW1lIC8gZW5kKSk7XG4gICAgc3RlcFRpbWUgICAgICA9IE1hdGgubWF4KHN0ZXBUaW1lLCA1MCk7XG4gICAgbGV0IG9iaiAgICAgICA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBlbmRUaW1lICAgPSBzdGFydFRpbWUgKyB0aW1lO1xuICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgICAgbGV0IG5vdyAgICAgICA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBsZXQgcmVtYWluaW5nID0gTWF0aC5tYXgoKGVuZFRpbWUgLSBub3cpIC8gdGltZSwgMCk7XG4gICAgICAgIGxldCB2YWx1ZSAgICAgPSBNYXRoLnJvdW5kKGVuZCAtIChyZW1haW5pbmcgKiBlbmQpKTtcbiAgICAgICAgb2JqLmlubmVySFRNTCA9IHZhbHVlOyAgXG5cbiAgICAgICAgaWYgKHZhbHVlID09IGVuZCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwocnVuLCBzdGVwVGltZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0YS10ZWxdJ1xufSlcbmV4cG9ydCBjbGFzcyBUZWxEaXJlY3RpdmUge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleXVwKCRldmVudDogYW55KSB7XG4gICAgbGV0IHZhbG9yOiBzdHJpbmc7XG4gICAgdmFsb3IgPSAkZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbG9yLk1hc2tUZWwoKTtcbiAgfVxuXG59XG4iLCJpbnRlcmZhY2UgU3RyaW5nIHtcclxuICAgIHJlbW92ZU1hc2soKTogc3RyaW5nO1xyXG4gICAgTWFza0NwZkNucGoob3B0aW9uOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBNYXNrVGVsKCk6IHN0cmluZztcclxuICAgIFRvQ3BmQ25waigpOiBzdHJpbmc7XHJcbiAgICB2YWxpZGFDUEYoKTogYm9vbGVhbjtcclxuICAgIHZhbGlkYUNOUEooKTogYm9vbGVhbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEFycmF5PFQ+IHtcclxuICAgIGRpZmZlcmVuY2UoYjogQXJyYXk8VD4sIGZpZWxkOiBzdHJpbmcpOiBBcnJheTxUPjtcclxufVxyXG5cclxuQXJyYXkucHJvdG90eXBlLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiAoYiwgZmllbGQpOiBhbnlbXSB7XHJcbiAgICBsZXQgYSA9IHRoaXM7XHJcbiAgICBjb25zdCBkaWZmQnkgPSAocHJlZCkgPT4gKGEsIGIpID0+IGEuZmlsdGVyKHggPT4gIWIuc29tZSh5ID0+IHByZWQoeCwgeSkpKTtcclxuICAgIGNvbnN0IG1ha2VTeW1tRGlmZkZ1bmMgPSAocHJlZCkgPT4gKGEsIGIpID0+IGRpZmZCeShwcmVkKShhLCBiKS5jb25jYXQoZGlmZkJ5KHByZWQpKGIsIGEpKTtcclxuICAgIGNvbnN0IG15RGlmZiA9IG1ha2VTeW1tRGlmZkZ1bmMoKHgsIHkpID0+IHhbZmllbGRdID09PSB5W2ZpZWxkXSk7XHJcbiAgICByZXR1cm4gbXlEaWZmKGEsIGIpO1xyXG59XHJcblxyXG5TdHJpbmcucHJvdG90eXBlLnJlbW92ZU1hc2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpO1xyXG59XHJcblxyXG5TdHJpbmcucHJvdG90eXBlLk1hc2tUZWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgdGVsID0gdGhpcztcclxuICAgIGlmICh0ZWwpIHtcclxuICAgICAgICB0ZWwgPSB0ZWwucmVwbGFjZSgvW14wLTldKy9nLCBcIlwiKTtcclxuICAgICAgICBpZiAodGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGVsID0gXCIoXCIgKyB0ZWwuc3Vic3RyaW5nKDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGVsLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICAgICAgdGVsID0gdGVsLnN1YnN0cmluZygwLCAzKSArIFwiKVwiICsgdGVsLnN1YnN0cmluZygzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRlbC5sZW5ndGggPiA4KSB7XHJcbiAgICAgICAgICAgIHRlbCA9IHRlbC5zdWJzdHJpbmcoMCwgOCkgKyBcIi1cIiArIHRlbC5zdWJzdHJpbmcoOCwgMTMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGVsLmxlbmd0aCA+IDEzKSB7XHJcbiAgICAgICAgICAgIHRlbCA9IHRlbC5yZXBsYWNlKCctJywgXCJcIik7XHJcbiAgICAgICAgICAgIHRlbCA9IHRlbC5zdWJzdHJpbmcoMCwgOSkgKyBcIi1cIiArIHRlbC5zdWJzdHJpbmcoOSwgMTQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0ZWxcclxufVxyXG5cclxuU3RyaW5nLnByb3RvdHlwZS5NYXNrQ3BmQ25waiA9IGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgIGxldCB2YWx1ZSA9IHRoaXM7XHJcbiAgICBpZiAodGhpcykge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpO1xyXG4gICAgICAgIGlmIChvcHRpb24gPT0gXCJjbnBqXCIpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIDIpICsgXCIuXCIgKyB2YWx1ZS5zdWJzdHJpbmcoMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIDYpICsgXCIuXCIgKyB2YWx1ZS5zdWJzdHJpbmcoNik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDEwKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCAxMCkgKyBcIi9cIiArIHZhbHVlLnN1YnN0cmluZygxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCAxNSkgKyBcIi1cIiArIHZhbHVlLnN1YnN0cmluZygxNSwgMTcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMykgKyBcIi5cIiArIHZhbHVlLnN1YnN0cmluZygzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gNykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgNykgKyBcIi5cIiArIHZhbHVlLnN1YnN0cmluZyg3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXggPSAxNjtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24gPT0gXCJjcGZcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IDEzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMTEpICsgXCItXCIgKyB2YWx1ZS5zdWJzdHJpbmcoMTEsIG1heCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDE0KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJy4nLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnLicsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCctJywgXCJcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMikgKyBcIi5cIiArIHZhbHVlLnN1YnN0cmluZygyLCA1KSArIFwiLlwiICsgdmFsdWUuc3Vic3RyaW5nKDUsIDgpICsgXCIvXCIgKyB2YWx1ZS5zdWJzdHJpbmcoOCwgMTIpICsgXCItXCIgKyB2YWx1ZS5zdWJzdHJpbmcoMTIsIDE0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuU3RyaW5nLnByb3RvdHlwZS52YWxpZGFDUEYgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgY3BmID0gdGhpcztcclxuICAgIGlmIChjcGYpIHtcclxuICAgICAgICBjcGYgPSBjcGYucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgICAgICBsZXQgU29tYTtcclxuICAgICAgICBsZXQgUmVzdG87XHJcbiAgICAgICAgU29tYSA9IDA7XHJcbiAgICAgICAgaWYgKGNwZiA9PSBcIjAwMDAwMDAwMDAwXCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiMDAwMDAwMDAwMDBcIiB8fFxyXG4gICAgICAgICAgICBjcGYgPT0gXCIxMTExMTExMTExMVwiIHx8XHJcbiAgICAgICAgICAgIGNwZiA9PSBcIjIyMjIyMjIyMjIyXCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiMzMzMzMzMzMzMzNcIiB8fFxyXG4gICAgICAgICAgICBjcGYgPT0gXCI0NDQ0NDQ0NDQ0NFwiIHx8XHJcbiAgICAgICAgICAgIGNwZiA9PSBcIjU1NTU1NTU1NTU1XCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiNjY2NjY2NjY2NjZcIiB8fFxyXG4gICAgICAgICAgICBjcGYgPT0gXCI3Nzc3Nzc3Nzc3N1wiIHx8XHJcbiAgICAgICAgICAgIGNwZiA9PSBcIjg4ODg4ODg4ODg4XCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiOTk5OTk5OTk5OTlcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA5OyBpKyspIFNvbWEgPSBTb21hICsgcGFyc2VJbnQoY3BmLnN1YnN0cmluZyhpIC0gMSwgaSkpICogKDExIC0gaSk7XHJcbiAgICAgICAgUmVzdG8gPSAoU29tYSAqIDEwKSAlIDExO1xyXG5cclxuICAgICAgICBpZiAoKFJlc3RvID09IDEwKSB8fCAoUmVzdG8gPT0gMTEpKSBSZXN0byA9IDA7XHJcbiAgICAgICAgaWYgKFJlc3RvICE9IHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoOSwgMTApKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBTb21hID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKSBTb21hID0gU29tYSArIHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoaSAtIDEsIGkpKSAqICgxMiAtIGkpO1xyXG4gICAgICAgIFJlc3RvID0gKFNvbWEgKiAxMCkgJSAxMTtcclxuXHJcbiAgICAgICAgaWYgKChSZXN0byA9PSAxMCkgfHwgKFJlc3RvID09IDExKSkgUmVzdG8gPSAwO1xyXG4gICAgICAgIGlmIChSZXN0byAhPSBwYXJzZUludChjcGYuc3Vic3RyaW5nKDEwLCAxMSkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcblN0cmluZy5wcm90b3R5cGUudmFsaWRhQ05QSiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBiID0gWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG5cclxuICAgIGlmICgvMHsxNH0vLnRlc3QodGhpcykpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gMDsgaSA8IDEyOyBuICs9IHRoaXNbaV0gKiBiWysraV0pO1xyXG4gICAgaWYgKHRoaXNbMTJdICE9ICgoKG4gJT0gMTEpIDwgMikgPyAwIDogMTEgLSBuKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDEyOyBuICs9IHRoaXNbaV0gKiBiW2krK10pO1xyXG4gICAgaWYgKHRoaXNbMTNdICE9ICgoKG4gJT0gMTEpIDwgMikgPyAwIDogMTEgLSBuKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcblN0cmluZy5wcm90b3R5cGUuVG9DcGZDbnBqID0gZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG51bSA9IHRoaXM7XHJcbiAgICBpZiAobnVtKSB7XHJcbiAgICAgICAgbnVtID0gbnVtLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChudW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KS8sIFwiICQxLiQyXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KS8sIFwiICQxLiQyXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KS8sIFwiICQxLiQyXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KShcXGR7M30pLywgXCIgJDEuJDIuJDNcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoLyhcXGQrKShcXGR7M30pKFxcZHszfSkvLCBcIiAkMS4kMi4kM1wiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgICAgICBudW0gPSBudW0ucmVwbGFjZSgvKFxcZCspKFxcZHszfSkoXFxkezN9KS8sIFwiICQxLiQyLiQzXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgICAgICBudW0gPSBudW0ucmVwbGFjZSgvKFxcZCspKFxcZHszfSkoXFxkezN9KShcXGR7MX0pLywgXCIgJDEuJDIuJDMtJDRcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxMTpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KShcXGR7M30pKFxcZHsyfSkvLCBcIiAkMS4kMi4kMy0kNFwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoLyhcXGQrKShcXGR7M30pKFxcZHszfSkoXFxkezR9KS8sIFwiICQxLiQyLiQzLyQ0XCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICBudW0gPSBudW0ucmVwbGFjZSgvKFxcZCspKFxcZHszfSkoXFxkezN9KShcXGR7NH0pKFxcZHsyfSkvLCBcIiAkMS4kMi4kMy8kNC0kNVwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoLyhcXGR7Mn0pKFxcZHszfSkoXFxkezN9KShcXGR7NH0pKFxcZCspLywgXCIgJDEuJDIuJDMvJDQtJDVcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtO1xyXG59XHJcblxyXG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGF1cm9EaXJlY3RpdmVzQ29tcG9uZW50IH0gZnJvbSAnLi90YXVyby1kaXJlY3RpdmVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcGZEaXJlY3RpdmUgfSBmcm9tICcuL2NwZi9jcGYuZGlyZWN0aXZlJztcbmltcG9ydCB7IENucGpEaXJlY3RpdmUgfSBmcm9tICcuL2NucGovY25wai5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ291bnRUb0RpcmVjdGl2ZSB9IGZyb20gJy4vY291bnQtdG8vY291bnQtdG8uZGlyZWN0aXZlJztcbmltcG9ydCB7IFRlbERpcmVjdGl2ZSB9IGZyb20gJy4vdGVsL3RlbC5kaXJlY3RpdmUnO1xuaW1wb3J0ICcuL3V0aWxzL2V4dGVuZGVkLm1ldGhvZHMnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1RhdXJvRGlyZWN0aXZlc0NvbXBvbmVudCwgQ3BmRGlyZWN0aXZlLCBDbnBqRGlyZWN0aXZlLCBDb3VudFRvRGlyZWN0aXZlLCBUZWxEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbVGF1cm9EaXJlY3RpdmVzQ29tcG9uZW50LCBDcGZEaXJlY3RpdmUsIENucGpEaXJlY3RpdmUsIENvdW50VG9EaXJlY3RpdmUsIFRlbERpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgVGF1cm9EaXJlY3RpdmVzTW9kdWxlIHsgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0lBT0U7S0FBaUI7O2dCQUxsQixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7OztpQ0FKRDs7Ozs7OztBQ0FBO0lBYUU7S0FBaUI7Ozs7SUFFakIsMkNBQVE7OztJQUFSO0tBQ0M7O2dCQWRGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUUsd0RBSVQ7b0JBQ0QsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7Ozs7bUNBVkQ7Ozs7Ozs7QUNBQTtJQU9FO0tBQWlCOzs7OztJQUdqQiw4QkFBTzs7OztJQURQLFVBQ1EsTUFBVzs7UUFDakIsSUFBSSxLQUFLLENBQVM7UUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoRDs7Z0JBWkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO2lCQUNyQjs7Ozs7MEJBS0UsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7dUJBVG5DOzs7Ozs7O0FDQUE7SUFPRTtLQUFpQjs7Ozs7SUFHakIsK0JBQU87Ozs7SUFEUCxVQUNRLE1BQVc7O1FBQ2pCLElBQUksS0FBSyxDQUFTO1FBQ2xCLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDakQ7O2dCQVpGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztpQkFDdEI7Ozs7OzBCQUtFLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3dCQVRuQzs7Ozs7OztBQ0FBO0lBUUUsMEJBQW9CLE9BQWtCO1FBQWxCLFlBQU8sR0FBUCxPQUFPLENBQVc7S0FBRzs7OztJQUV6QywwQ0FBZTs7O0lBQWY7O1FBQ0UsSUFBSSxJQUFJLEdBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUM7O1FBQzlDLElBQUksR0FBRyxHQUFTLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQzs7UUFDL0QsSUFBSSxRQUFRLEdBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pELFFBQVEsR0FBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQzs7UUFDdkMsSUFBSSxHQUFHLEdBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7O1FBRTNDLElBQUksU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7O1FBQ3JDLElBQUksT0FBTyxHQUFLLFNBQVMsR0FBRyxJQUFJLENBQUM7Ozs7UUFDakM7O1lBQ0ksSUFBSSxHQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7WUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUNwRCxJQUFJLEtBQUssR0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRCxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUV0QixJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7Z0JBQ2QsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1NBQ0o7O1FBQ0QsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN4Qzs7Z0JBNUJGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztpQkFDekI7Ozs7Z0JBSm1CLFVBQVU7OzsyQkFPM0IsS0FBSzs7MkJBUFI7Ozs7Ozs7QUNBQTtJQU9FO0tBQWlCOzs7OztJQUdqQiw4QkFBTzs7OztJQURQLFVBQ1EsTUFBVzs7UUFDakIsSUFBSSxLQUFLLENBQVM7UUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3ZDOztnQkFaRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCOzs7OzswQkFLRSxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzt1QkFUbkM7Ozs7Ozs7QUNhQSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsRUFBRSxLQUFLOztJQUMzQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7O0lBQ2IsSUFBTSxNQUFNLEdBQUcsVUFBQyxJQUFJLElBQUssT0FBQSxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQSxDQUFDLEdBQUEsQ0FBQyxHQUFBLEdBQUEsQ0FBQzs7SUFDM0UsSUFBTSxnQkFBZ0IsR0FBRyxVQUFDLElBQUksSUFBSyxPQUFBLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBQSxHQUFBLENBQUM7O0lBQzNGLElBQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUEsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN2QixDQUFBO0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUc7SUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztDQUN2QyxDQUFBO0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUc7O0lBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztJQUNmLElBQUksR0FBRyxFQUFFO1FBQ0wsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoQixHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQixHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzFEO0tBQ0o7SUFDRCxPQUFPLEdBQUcsQ0FBQTtDQUNiLENBQUE7QUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxVQUFVLE1BQU07O0lBQzNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztJQUNqQixJQUFJLElBQUksRUFBRTtRQUNOLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUU7WUFDbEIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNsRTtTQUNKO2FBQ0k7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUQ7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUQ7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFOztnQkFDbkIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtvQkFDakIsR0FBRyxHQUFHLEVBQUUsQ0FBQztpQkFDWjtnQkFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ25FO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9CLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFL0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM1SjtTQUNKO0tBQ0o7SUFDRCxPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFBO0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUc7O0lBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztJQUNmLElBQUksR0FBRyxFQUFFO1FBQ0wsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOztRQUM3QixJQUFJLElBQUksVUFBQzs7UUFDVCxJQUFJLEtBQUssVUFBQztRQUNWLElBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxJQUFJLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQ3BCLEdBQUcsSUFBSSxhQUFhO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEYsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFMUQsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNULEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDO0tBQ2Y7U0FDSTtRQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0NBQ0osQ0FBQTtBQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHOztJQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWhELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFFakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQUMsQ0FBQztJQUN0RCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUM7SUFFakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsQ0FBQztJQUN2RCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUM7SUFFakIsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFBO0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUc7O0lBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztJQUNmLElBQUksR0FBRyxFQUFFO1FBQ0wsR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0IsUUFBUSxHQUFHLENBQUMsTUFBTTtZQUNkLEtBQUssQ0FBQztnQkFDRixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDVixLQUFLLENBQUM7Z0JBQ0YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDNUMsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssRUFBRTtnQkFDSCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDaEUsTUFBTTtZQUNWLEtBQUssRUFBRTtnQkFDSCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDaEUsTUFBTTtZQUNWLEtBQUssRUFBRTtnQkFDSCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDaEUsTUFBTTtZQUNWLEtBQUssRUFBRTtnQkFDSCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNO1lBQ1YsS0FBSyxFQUFFO2dCQUNILEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7Z0JBQzFFLE1BQU07U0FDYjtLQUNKO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFBOzs7Ozs7QUM1TEQ7Ozs7Z0JBUUMsUUFBUSxTQUFDO29CQUNSLE9BQU8sRUFBRSxFQUNSO29CQUNELFlBQVksRUFBRSxDQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO29CQUNyRyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQztpQkFDakc7O2dDQWJEOzs7Ozs7Ozs7Ozs7Ozs7In0=