@kre-form/ant
Version:
317 lines • 31 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, forwardRef, Input } from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
import * as differenceInCalendarDays_ from "date-fns/difference_in_calendar_days";
import * as moment_ from "moment";
/** @type {?} */
var moment = moment_;
/** @type {?} */
var differenceInCalendarDays = differenceInCalendarDays_;
/** @type {?} */
var FORM_POSITION_PICKER_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return DatetimeComponent; })),
multi: true,
};
var DatetimeComponent = /** @class */ (function () {
function DatetimeComponent() {
var _this = this;
this._value = "";
this._index = 0;
this.disabled = false;
this.type = "datetime";
this.maxDate = "";
this.minDate = "";
this._onTouched = (/**
* @return {?}
*/
function () { });
this._valueChange = (/**
* @return {?}
*/
function () { });
this.disabledDate = (/**
* @param {?} current
* @return {?}
*/
function (current) {
if (!!_this.maxDate && !!_this.minDate) {
return (differenceInCalendarDays(current, new Date(_this.maxDate)) > 0 ||
differenceInCalendarDays(current, new Date((/** @type {?} */ (_this.minDate)))) < 0);
}
else if (!!_this.maxDate && !_this.minDate) {
return differenceInCalendarDays(current, new Date(_this.maxDate)) > 0;
}
else if (!_this.maxDate && !!_this.minDate) {
return differenceInCalendarDays(current, new Date(_this.minDate)) < 0;
}
else {
return false;
}
});
this.disabledDateTime = (/**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var nzDisabledHours = [];
/** @type {?} */
var nzDisabledMinutes = [];
if (!!_this.maxDate && !!_this.minDate) {
if (differenceInCalendarDays(e, new Date(_this.minDate)) === 0) {
nzDisabledHours = _this.range(-1, new Date(_this.minDate).getHours());
if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes());
}
}
if (differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) {
nzDisabledHours = tslib_1.__spread(nzDisabledHours, _this.range(new Date(_this.maxDate).getHours() + 1, 24));
if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = tslib_1.__spread(nzDisabledMinutes, _this.range(new Date(_this.maxDate).getMinutes(), 60));
}
}
}
else if (!!_this.maxDate && !_this.minDate) {
if (!!e && differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) {
nzDisabledHours = _this.range(new Date(_this.maxDate).getHours() + 1, 24);
if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = _this.range(new Date(_this.maxDate).getMinutes(), 60);
}
}
}
else if (!_this.maxDate && !!_this.minDate) {
if (!!e && differenceInCalendarDays(e, new Date(_this.minDate)) === 0) {
nzDisabledHours = _this.range(0, new Date(_this.minDate).getHours());
if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes());
}
}
}
return {
nzDisabledHours: (/**
* @return {?}
*/
function () { return nzDisabledHours; }),
nzDisabledMinutes: (/**
* @return {?}
*/
function () { return nzDisabledMinutes; }),
nzDisabledSeconds: (/**
* @return {?}
*/
function () { return []; }),
};
});
this.disabledHours = (/**
* @return {?}
*/
function () {
/** @type {?} */
var nzDisabledHours = [];
if (!!_this.maxDate && !!_this.minDate) {
nzDisabledHours = _this.range(-1, new Date(_this.minDate).getHours());
nzDisabledHours = nzDisabledHours.concat(_this.range(new Date(_this.maxDate).getHours() + 1, 24));
}
else if (!!_this.maxDate && !_this.minDate) {
nzDisabledHours = _this.range(new Date(_this.maxDate).getHours() + 1, 24);
}
else if (!_this.maxDate && !!_this.minDate) {
nzDisabledHours = _this.range(0, new Date(_this.minDate).getHours());
}
return nzDisabledHours;
});
this.disabledMinutes = (/**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var nzDisabledMinutes = [];
if (!!_this.maxDate && !!_this.minDate) {
if (differenceInCalendarDays(e, new Date(_this.minDate)) === 0) {
if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes());
}
}
if (differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) {
if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = _this.range(new Date(_this.maxDate).getMinutes(), 60);
}
}
}
else if (!!_this.maxDate && !_this.minDate) {
if (!!e && differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) {
if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = _this.range(new Date(_this.maxDate).getMinutes(), 60);
}
}
}
else if (!_this.maxDate && !!_this.minDate) {
if (!!e && differenceInCalendarDays(e, new Date(_this.minDate)) === 0) {
if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) {
nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes());
}
}
}
return nzDisabledMinutes;
});
}
/**
* @param {?} value
* @return {?}
*/
DatetimeComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
this._value = value;
};
/**
* @param {?} fn
* @return {?}
*/
DatetimeComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._valueChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
DatetimeComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._onTouched = fn;
};
/**
* @param {?} isDisabled
* @return {?}
*/
DatetimeComponent.prototype.setDisabledState = /**
* @param {?} isDisabled
* @return {?}
*/
function (isDisabled) {
this.disabled = isDisabled;
};
/**
* @param {?} color
* @return {?}
*/
DatetimeComponent.prototype.select = /**
* @param {?} color
* @return {?}
*/
function (color) {
if (this.disabled) {
return;
}
this._value = color;
this._valueChange(color);
};
/**
* @return {?}
*/
DatetimeComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () { };
// differenceInCalendarDays(e: Date | null, date: Date): number {
// if (!!e) {
// return e.getDate() - date.getDate();
// } else {
// return 0;
// }
// }
// differenceInCalendarDays(e: Date | null, date: Date): number {
// if (!!e) {
// return e.getDate() - date.getDate();
// } else {
// return 0;
// }
// }
/**
* @param {?} start
* @param {?} end
* @return {?}
*/
DatetimeComponent.prototype.range =
// differenceInCalendarDays(e: Date | null, date: Date): number {
// if (!!e) {
// return e.getDate() - date.getDate();
// } else {
// return 0;
// }
// }
/**
* @param {?} start
* @param {?} end
* @return {?}
*/
function (start, end) {
/** @type {?} */
var result = [];
for (var i = start; i < end; i++) {
result.push(i);
}
return result;
};
DatetimeComponent.decorators = [
{ type: Component, args: [{
selector: "demo-datetime",
template: "<ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'date'\">\n <nz-date-picker\n nzFormat=\"yyyy/MM/dd\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <nz-year-picker\n nzFormat=\"yyyy\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-year-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'month'\">\n <nz-month-picker\n nzFormat=\"yyyy/MM\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'time'\">\n <nz-time-picker\n nzFormat=\"HH:mm\"\n [(ngModel)]=\"_value\"\n nzClearText=\"\"\n [nzDisabledHours]=\"disabledHours\"\n [nzDisabledMinutes]=\"disabledMinutes\"\n ></nz-time-picker>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <nz-date-picker\n nzShowTime\n [nzShowTime]=\"{ nzFormat: 'HH:mm' }\"\n nzFormat=\"yyyy/MM/dd HH:mm\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n [nzDisabledTime]=\"disabledDateTime\"\n ></nz-date-picker>\n </ng-container>\n</ng-container>\n",
providers: [FORM_POSITION_PICKER_VALUE_ACCESSOR],
styles: [""]
}] }
];
/** @nocollapse */
DatetimeComponent.ctorParameters = function () { return []; };
DatetimeComponent.propDecorators = {
type: [{ type: Input }],
maxDate: [{ type: Input }],
minDate: [{ type: Input }]
};
return DatetimeComponent;
}());
export { DatetimeComponent };
if (false) {
/** @type {?} */
DatetimeComponent.prototype._value;
/** @type {?} */
DatetimeComponent.prototype._index;
/** @type {?} */
DatetimeComponent.prototype.disabled;
/** @type {?} */
DatetimeComponent.prototype.type;
/** @type {?} */
DatetimeComponent.prototype.maxDate;
/** @type {?} */
DatetimeComponent.prototype.minDate;
/** @type {?} */
DatetimeComponent.prototype._onTouched;
/** @type {?} */
DatetimeComponent.prototype._valueChange;
/** @type {?} */
DatetimeComponent.prototype.disabledDate;
/** @type {?} */
DatetimeComponent.prototype.disabledDateTime;
/** @type {?} */
DatetimeComponent.prototype.disabledHours;
/** @type {?} */
DatetimeComponent.prototype.disabledMinutes;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FudC8iLCJzb3VyY2VzIjpbImxpYi9kZXNpZ24vZXZlbnQvZGF0ZXRpbWUvZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEtBQUsseUJBQXlCLE1BQU0sc0NBQXNDLENBQUM7QUFFbEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7O0lBQzVCLE1BQU0sR0FBRyxPQUFPOztJQUNoQix3QkFBd0IsR0FBRyx5QkFBeUI7O0lBRXBELG1DQUFtQyxHQUFRO0lBQy9DLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxpQkFBaUIsRUFBakIsQ0FBaUIsRUFBQztJQUNoRCxLQUFLLEVBQUUsSUFBSTtDQUNaO0FBQ0Q7SUFlRTtRQUFBLGlCQUFnQjtRQVJoQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFFbkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNqQixTQUFJLEdBQVcsVUFBVSxDQUFDO1FBQzFCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQU85QixlQUFVOzs7UUFBUSxjQUFPLENBQUMsRUFBQztRQUMzQixpQkFBWTs7O1FBQVEsY0FBTyxDQUFDLEVBQUM7UUFtQjdCLGlCQUFZOzs7O1FBQUcsVUFBQyxPQUFhO1lBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BDLE9BQU8sQ0FDTCx3QkFBd0Is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Q0FBbUMsQ0FBQzs7aUJBQ2pEOzs7Ozt1QkFNRSxLQUFLOzBCQUNMLEtBQUs7MEJBQ0wsS0FBSzs7SUEwS1Isd0JBQUM7Q0FBQSxBQXZMRCxJQXVMQztTQWpMWSxpQkFBaUI7OztJQUM1QixtQ0FBb0I7O0lBQ3BCLG1DQUFtQjs7SUFFbkIscUNBQTBCOztJQUMxQixpQ0FBbUM7O0lBQ25DLG9DQUE4Qjs7SUFDOUIsb0NBQThCOztJQU85Qix1Q0FBMkI7O0lBQzNCLHlDQUE2Qjs7SUFtQjdCLHlDQWFFOztJQUVGLDZDQXNERTs7SUFFRiwwQ0FjRTs7SUFFRiw0Q0F3Q0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgKiBhcyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfIGZyb20gXCJkYXRlLWZucy9kaWZmZXJlbmNlX2luX2NhbGVuZGFyX2RheXNcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgS3JlRm9ybUNvbW1vblNlcnZpY2UgfSBmcm9tIFwiQGtyZS1mb3JtL2NvcmVcIjtcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSBcIm1vbWVudFwiO1xuY29uc3QgbW9tZW50ID0gbW9tZW50XztcbmNvbnN0IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c187XG5cbmNvbnN0IEZPUk1fUE9TSVRJT05fUElDS0VSX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZUNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkZW1vLWRhdGV0aW1lXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZGF0ZXRpbWUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RhdGV0aW1lLmNvbXBvbmVudC5zY3NzXCJdLFxuICBwcm92aWRlcnM6IFtGT1JNX1BPU0lUSU9OX1BJQ0tFUl9WQUxVRV9BQ0NFU1NPUl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIF92YWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgX2luZGV4OiBudW1iZXIgPSAwO1xuXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9IFwiZGF0ZXRpbWVcIjtcbiAgQElucHV0KCkgbWF4RGF0ZTogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgbWluRGF0ZTogc3RyaW5nID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBfb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcbiAgX3ZhbHVlQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5fdmFsdWVDaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbiAgc2VsZWN0KGNvbG9yOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IGNvbG9yO1xuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlKGNvbG9yKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge31cbiAgZGlzYWJsZWREYXRlID0gKGN1cnJlbnQ6IERhdGUpOiBib29sZWFuID0+IHtcbiAgICBpZiAoISF0aGlzLm1heERhdGUgJiYgISF0aGlzLm1pbkRhdGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhjdXJyZW50LCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA+IDAgfHxcbiAgICAgICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGN1cnJlbnQsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSEpKSA8IDBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhdGhpcy5taW5EYXRlKSB7XG4gICAgICByZXR1cm4gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGN1cnJlbnQsIG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkpID4gMDtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm1heERhdGUgJiYgISF0aGlzLm1pbkRhdGUpIHtcbiAgICAgIHJldHVybiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoY3VycmVudCwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGRpc2FibGVkRGF0ZVRpbWUgPSAoZTogRGF0ZSkgPT4ge1xuICAgIGxldCBuekRpc2FibGVkSG91cnM6IG51bWJlcltdID0gW107XG4gICAgbGV0IG56RGlzYWJsZWRNaW51dGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKCEhdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpID09PSAwKSB7XG4gICAgICAgIG56RGlzYWJsZWRIb3VycyA9IHRoaXMucmFuZ2UoLTEsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSk7XG5cbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0TWludXRlcygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA9PT0gMCkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSBbXG4gICAgICAgICAgLi4ubnpEaXNhYmxlZEhvdXJzLFxuICAgICAgICAgIC4uLnRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpICsgMSwgMjQpLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSBbXG4gICAgICAgICAgICAuLi5uekRpc2FibGVkTWludXRlcyxcbiAgICAgICAgICAgIC4uLnRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRNaW51dGVzKCksIDYwKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoISFlICYmIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA9PT0gMCkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkuZ2V0SG91cnMoKSArIDEsIDI0KTtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPT09IDApIHtcbiAgICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgwLCBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkpO1xuICAgICAgICBpZiAoISFlICYmIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSAtIGUuZ2V0SG91cnMoKSA9PT0gMCkge1xuICAgICAgICAgIG56RGlzYWJsZWRNaW51dGVzID0gdGhpcy5yYW5nZShcbiAgICAgICAgICAgIC0xLFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRNaW51dGVzKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuekRpc2FibGVkSG91cnM6ICgpID0+IG56RGlzYWJsZWRIb3VycyxcbiAgICAgIG56RGlzYWJsZWRNaW51dGVzOiAoKSA9PiBuekRpc2FibGVkTWludXRlcyxcbiAgICAgIG56RGlzYWJsZWRTZWNvbmRzOiAoKSA9PiBbXSxcbiAgICB9O1xuICB9O1xuXG4gIGRpc2FibGVkSG91cnMgPSAoKSA9PiB7XG4gICAgbGV0IG56RGlzYWJsZWRIb3VyczogbnVtYmVyW10gPSBbXTtcblxuICAgIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgtMSwgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRIb3VycygpKTtcbiAgICAgIG56RGlzYWJsZWRIb3VycyA9IG56RGlzYWJsZWRIb3Vycy5jb25jYXQoXG4gICAgICAgIHRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpICsgMSwgMjQpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoISF0aGlzLm1heERhdGUgJiYgIXRoaXMubWluRGF0ZSkge1xuICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZShuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgKyAxLCAyNCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKDAsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSk7XG4gICAgfVxuICAgIHJldHVybiBuekRpc2FibGVkSG91cnM7XG4gIH07XG5cbiAgZGlzYWJsZWRNaW51dGVzID0gKGU6IERhdGUpID0+IHtcbiAgICBsZXQgbnpEaXNhYmxlZE1pbnV0ZXM6IG51bWJlcltdID0gW107XG4gICAgaWYgKCEhdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpID09PSAwKSB7XG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSB0aGlzLnJhbmdlKFxuICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5tYXhEYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoISF0aGlzLm1heERhdGUgJiYgIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5tYXhEYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0TWludXRlcygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuekRpc2FibGVkTWludXRlcztcbiAgfTtcbiAgLy8gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGU6IERhdGUgfCBudWxsLCBkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgLy8gICBpZiAoISFlKSB7XG4gIC8vICAgICByZXR1cm4gZS5nZXREYXRlKCkgLSBkYXRlLmdldERhdGUoKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgcmV0dXJuIDA7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19