UNPKG

ng-materialgrammi

Version:

An Angular framework which follows

179 lines 25.2 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; export class DaterService { constructor() { this.now = new Date(); this.months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; this.weekDays = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]; } assign(dateString) { return new Date(dateString); } dater(dd = false) { return !dd ? new Date() : new Date(dd); } getMonth(date = this.dater()) { return date.getMonth(); } getDate(date = this.dater()) { return date.getDate(); } getYear(date = this.dater()) { return date.getFullYear(); } getDay(date = this.dater()) { return date.getDay(); } getWeekDay(date = this.dater()) { return this.weekDays[date.getDay()]; } getHour(date = this.dater()) { return date.getHours(); } getMinute(date = this.dater()) { return date.getMinutes(); } getSeconds(date = this.dater()) { return date.getSeconds(); } format(date, formatString) { let splitter = this.splitDate(date); if (splitter && splitter.date !== undefined && splitter.day !== undefined && splitter.hour !== undefined && splitter.minute !== undefined && splitter.month !== undefined && splitter.second !== undefined && splitter.year !== undefined) { formatString = formatString.split("dd").join(this.addZero(splitter.date, 1)); formatString = formatString.split("d").join(`${splitter.date}`); formatString = formatString.split("MMMM").join(this.months[splitter.month] ? this.months[splitter.month] : ""); formatString = formatString.split("MMM").join(this.firstDigits(this.months[splitter.month] ? this.months[splitter.month] : "")); formatString = formatString.split("MM").join(this.addZero(splitter.month + 1, 1)); formatString = formatString.split("M").join(`${splitter.month + 1}`); formatString = formatString.split("YYYY").join(`${splitter.year}`); formatString = formatString.split("YY").join(this.firstDigits(`${splitter.year}`, 2)); formatString = formatString.split("yyyy").join(`${splitter.year}`); formatString = formatString.split("yy").join(this.firstDigits(`${splitter.year}`, 2)); formatString = formatString.split("DD").join(`${splitter.day}`); formatString = formatString.split("D").join(this.firstDigits(`${splitter.day}`, 3)); formatString = formatString.split("HH").join(this.addZero(splitter.hour, 1)); formatString = formatString.split("H").join(`${splitter.hour}`); formatString = formatString.split("hh").join(`${this.twelveHour(splitter.hour, true)}`); formatString = formatString.split("h").join(`${this.twelveHour(splitter.hour, false)}`); formatString = formatString.split("mm").join(this.addZero(splitter.minute, 1)); formatString = formatString.split("m").join(`${splitter.minute}`); formatString = formatString.split("ss").join(this.addZero(splitter.second, 1)); formatString = formatString.split("s").join(`${splitter.second}`); formatString = formatString.split("AP").join(this.getAp(splitter.hour)); formatString = formatString.split("ap").join(this.getAp(splitter.hour, true)); return formatString; } return ``; } twelveHour(dd, addZ = false) { let d = dd > 12 ? (dd - 12) : dd; return addZ ? this.addZero(d, 1) : d; } getAp(dd, sm = false) { let ap = { a: sm ? "am" : "AM", p: sm ? "pm" : "PM" }; return dd > 12 ? ap.p : ap.a; } firstDigits(str, num = 3) { let mystring = str.split(""); let final = ""; for (let i = 0; i < num; i++) { final += `${mystring[i]}`; } return final; } addZero(d, numZ = 1) { let conc = ``; for (let i = 0; i < numZ; i++) { conc += `0`; } if (d < 10) { return conc + d; } return `${d}`; } initializeSplit() { return this.dateSplit = { date: 0, year: 0, month: 0, day: 0, hour: 0, minute: 0, second: 0 }; } splitDate(date) { this.dateSplit = this.initializeSplit(); this.dateSplit.date = date.getDate(); this.dateSplit.year = date.getFullYear(); this.dateSplit.month = date.getMonth(); this.dateSplit.day = date.getDay(); this.dateSplit.hour = date.getHours(); this.dateSplit.minute = date.getMinutes(); this.dateSplit.second = date.getSeconds(); return this.dateSplit; } getMonths(month = false) { if (month == false) { let mo = this.months.map(m => { return m.slice(0, 3); }); return mo; } else { return this.months[month].slice(0, 3); } } getMonthsLong(month = false) { return month ? this.months[month] : this.months; } daysInMonth(month, year = this.getYear(this.dater())) { let dd = this.splitDate(this.dater(`${this.months[month - 1]} 01, ${year}`)); return new Date(dd.year, dd.month + 1, 0).getDate(); } isGreater(date1, date2) { let d1 = new Date(date1); let d2 = new Date(date2); return d1.getTime() > d2.getTime(); } isLessThan(date1, date2) { let d1 = new Date(date1); let d2 = new Date(date2); return d1.getTime() < d2.getTime(); } } DaterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DaterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); DaterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DaterService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DaterService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsZ3JhbW1pL3NyYy9saWIvZGF0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWdCM0MsTUFBTSxPQUFPLFlBQVk7SUE4QnZCO1FBN0JBLFFBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWpCLFdBQU0sR0FBRztZQUNQLFNBQVM7WUFDVCxVQUFVO1lBQ1YsT0FBTztZQUNQLE9BQU87WUFDUCxLQUFLO1lBQ0wsTUFBTTtZQUNOLE1BQU07WUFDTixRQUFRO1lBQ1IsV0FBVztZQUNYLFNBQVM7WUFDVCxVQUFVO1lBQ1YsVUFBVTtTQUNYLENBQUM7UUFFRixhQUFRLEdBQUc7WUFDVCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1lBQ1gsVUFBVTtZQUNWLFFBQVE7WUFDUixVQUFVO1NBQ1gsQ0FBQztJQUljLENBQUM7SUFFakIsTUFBTSxDQUFDLFVBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFxQixLQUFLO1FBQzlCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNsQyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVUsRUFBRSxZQUFvQjtRQUNyQyxJQUFJLFFBQVEsR0FBZ0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLFNBQVM7ZUFDbkUsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxTQUFTO2VBQzVELFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFDO1lBQzlGLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRyxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEksWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRixZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkUsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RixZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEYsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxD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QUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUNyQyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7eUdBaE1VLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BsaXR0ZWREYXRlIHtcbiAgZGF0ZTogbnVtYmVyLFxuICB5ZWFyOiBudW1iZXIsXG4gIG1vbnRoOiBudW1iZXIsXG4gIGRheTogbnVtYmVyLFxuICBob3VyOiBudW1iZXIsXG4gIG1pbnV0ZTogbnVtYmVyLFxuICBzZWNvbmQ6IG51bWJlclxufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdGVyU2VydmljZSB7XG4gIG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgbW9udGhzID0gW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCJcbiAgXTtcblxuICB3ZWVrRGF5cyA9IFtcbiAgICBcIlN1bmRheVwiLFxuICAgIFwiTW9uZGF5XCIsXG4gICAgXCJUdWVzZGF5XCIsXG4gICAgXCJXZWRuZXNkYXlcIixcbiAgICBcIlRodXJzZGF5XCIsXG4gICAgXCJGcmlkYXlcIixcbiAgICBcIlNhdHVyZGF5XCJcbiAgXTtcblxuICBkYXRlU3BsaXQ/OiBTcGxpdHRlZERhdGU7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBhc3NpZ24oZGF0ZVN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICB9XG5cbiAgZGF0ZXIoZGQ6IHN0cmluZyB8IGZhbHNlID0gZmFsc2Upe1xuICAgIHJldHVybiAhZGQgPyBuZXcgRGF0ZSgpIDogbmV3IERhdGUoZGQpO1xuICB9XG5cbiAgZ2V0TW9udGgoZGF0ZTogRGF0ZSA9IHRoaXMuZGF0ZXIoKSl7XG4gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldERhdGUoZGF0ZTogRGF0ZSA9IHRoaXMuZGF0ZXIoKSl7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuICB9XG5cbiAgZ2V0WWVhcihkYXRlOiBEYXRlID0gdGhpcy5kYXRlcigpKXtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0RGF5KGRhdGU6IERhdGUgPSB0aGlzLmRhdGVyKCkpe1xuICAgIHJldHVybiBkYXRlLmdldERheSgpO1xuICB9XG5cbiAgZ2V0V2Vla0RheShkYXRlOiBEYXRlID0gdGhpcy5kYXRlcigpKXtcbiAgICByZXR1cm4gdGhpcy53ZWVrRGF5c1tkYXRlLmdldERheSgpXTtcbiAgfVxuXG4gIGdldEhvdXIoZGF0ZTogRGF0ZSA9IHRoaXMuZGF0ZXIoKSl7XG4gICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbiAgfVxuXG4gIGdldE1pbnV0ZShkYXRlOiBEYXRlID0gdGhpcy5kYXRlcigpKXtcbiAgICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG4gIH1cblxuICBnZXRTZWNvbmRzKGRhdGU6IERhdGUgPSB0aGlzLmRhdGVyKCkpe1xuICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIGZvcm1hdChkYXRlOiBEYXRlLCBmb3JtYXRTdHJpbmc6IHN0cmluZykge1xuICAgIGxldCBzcGxpdHRlcjpTcGxpdHRlZERhdGUgPSB0aGlzLnNwbGl0RGF0ZShkYXRlKTtcbiAgICBpZihzcGxpdHRlciAmJiBzcGxpdHRlci5kYXRlICE9PSB1bmRlZmluZWQgJiYgc3BsaXR0ZXIuZGF5ICE9PSB1bmRlZmluZWQgXG4gICAgICAmJiBzcGxpdHRlci5ob3VyICE9PSB1bmRlZmluZWQgJiYgc3BsaXR0ZXIubWludXRlICE9PSB1bmRlZmluZWQgXG4gICAgICAmJiBzcGxpdHRlci5tb250aCAhPT0gdW5kZWZpbmVkICYmIHNwbGl0dGVyLnNlY29uZCAhPT0gdW5kZWZpbmVkICYmIHNwbGl0dGVyLnllYXIgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcImRkXCIpLmpvaW4odGhpcy5hZGRaZXJvKHNwbGl0dGVyLmRhdGUsIDEpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiZFwiKS5qb2luKGAke3NwbGl0dGVyLmRhdGV9YCk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIk1NTU1cIikuam9pbih0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gPyB0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gOiBcIlwiKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiTU1NXCIpLmpvaW4odGhpcy5maXJzdERpZ2l0cyh0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gPyB0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gOiBcIlwiKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIk1NXCIpLmpvaW4odGhpcy5hZGRaZXJvKHNwbGl0dGVyLm1vbnRoKzEsIDEpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiTVwiKS5qb2luKGAke3NwbGl0dGVyLm1vbnRoKzF9YCk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIllZWVlcIikuam9pbihgJHtzcGxpdHRlci55ZWFyfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJZWVwiKS5qb2luKHRoaXMuZmlyc3REaWdpdHMoYCR7c3BsaXR0ZXIueWVhcn1gLCAyKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcInl5eXlcIikuam9pbihgJHtzcGxpdHRlci55ZWFyfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJ5eVwiKS5qb2luKHRoaXMuZmlyc3REaWdpdHMoYCR7c3BsaXR0ZXIueWVhcn1gLCAyKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIkREXCIpLmpvaW4oYCR7c3BsaXR0ZXIuZGF5fWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJEXCIpLmpvaW4odGhpcy5maXJzdERpZ2l0cyhgJHtzcGxpdHRlci5kYXl9YCwgMykpO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJISFwiKS5qb2luKHRoaXMuYWRkWmVybyhzcGxpdHRlci5ob3VyLCAxKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIkhcIikuam9pbihgJHtzcGxpdHRlci5ob3VyfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJoaFwiKS5qb2luKGAke3RoaXMudHdlbHZlSG91cihzcGxpdHRlci5ob3VyLCB0cnVlKX1gKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiaFwiKS5qb2luKGAke3RoaXMudHdlbHZlSG91cihzcGxpdHRlci5ob3VyLCBmYWxzZSl9YCk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIm1tXCIpLmpvaW4odGhpcy5hZGRaZXJvKHNwbGl0dGVyLm1pbnV0ZSwgMSkpO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJtXCIpLmpvaW4oYCR7c3BsaXR0ZXIubWludXRlfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJzc1wiKS5qb2luKHRoaXMuYWRkWmVybyhzcGxpdHRlci5zZWNvbmQsIDEpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwic1wiKS5qb2luKGAke3NwbGl0dGVyLnNlY29uZH1gKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiQVBcIikuam9pbih0aGlzLmdldEFwKHNwbGl0dGVyLmhvdXIpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiYXBcIikuam9pbih0aGlzLmdldEFwKHNwbGl0dGVyLmhvdXIsIHRydWUpKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFN0cmluZztcbiAgICAgIH1cbiAgICByZXR1cm4gYGA7XG4gIH1cblxuICB0d2VsdmVIb3VyKGRkOiBudW1iZXIsIGFkZFogPSBmYWxzZSkge1xuICAgIGxldCBkOiBudW1iZXIgPSBkZCA+IDEyID8gKGRkIC0gMTIpIDogZGQ7XG4gICAgcmV0dXJuIGFkZFogPyB0aGlzLmFkZFplcm8oZCwgMSkgOiBkO1xuICB9XG5cbiAgZ2V0QXAoZGQ6IG51bWJlciwgc20gPSBmYWxzZSkge1xuICAgIGxldCBhcCA9IHtcbiAgICAgIGE6IHNtID8gXCJhbVwiIDogXCJBTVwiLFxuICAgICAgcDogc20gPyBcInBtXCIgOiBcIlBNXCJcbiAgICB9O1xuICAgIHJldHVybiBkZCA+IDEyID8gYXAucCA6IGFwLmE7XG4gIH1cblxuICBwcml2YXRlIGZpcnN0RGlnaXRzKHN0cjogc3RyaW5nLCBudW0gPSAzKSB7XG4gICAgbGV0IG15c3RyaW5nID0gc3RyLnNwbGl0KFwiXCIpO1xuICAgIGxldCBmaW5hbCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgZmluYWwgKz0gYCR7bXlzdHJpbmdbaV19YDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRaZXJvKGQ6IG51bWJlciwgbnVtWiA9IDEpIHtcbiAgICBsZXQgY29uYyA9IGBgO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtWjsgaSsrKSB7XG4gICAgICBjb25jICs9IGAwYDtcbiAgICB9XG4gICAgaWYgKGQgPCAxMCkge1xuICAgICAgcmV0dXJuIGNvbmMgKyBkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZH1gO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNwbGl0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlU3BsaXQgPSB7XG4gICAgICBkYXRlOiAwLFxuICAgICAgeWVhcjogMCxcbiAgICAgIG1vbnRoOiAwLCBcbiAgICAgIGRheTogMCxcbiAgICAgIGhvdXI6IDAsXG4gICAgICBtaW51dGU6IDAsXG4gICAgICBzZWNvbmQ6IDBcbiAgICB9O1xuICB9XG5cbiAgc3BsaXREYXRlKGRhdGU6IERhdGUpIHtcbiAgICB0aGlzLmRhdGVTcGxpdCA9IHRoaXMuaW5pdGlhbGl6ZVNwbGl0KCk7XG4gICAgdGhpcy5kYXRlU3BsaXQuZGF0ZSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIHRoaXMuZGF0ZVNwbGl0LnllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgdGhpcy5kYXRlU3BsaXQubW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgdGhpcy5kYXRlU3BsaXQuZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICB0aGlzLmRhdGVTcGxpdC5ob3VyID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIHRoaXMuZGF0ZVNwbGl0Lm1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpO1xuICAgIHRoaXMuZGF0ZVNwbGl0LnNlY29uZCA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgIHJldHVybiB0aGlzLmRhdGVTcGxpdDtcbiAgfVxuXG4gIGdldE1vbnRocyhtb250aDogbnVtYmVyIHwgZmFsc2UgPSBmYWxzZSkge1xuICAgIGlmKG1vbnRoID09IGZhbHNlKSB7XG4gICAgICBsZXQgbW8gPSB0aGlzLm1vbnRocy5tYXAobSA9PiB7XG4gICAgICAgIHJldHVybiBtLnNsaWNlKDAsIDMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbW87XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubW9udGhzW21vbnRoXS5zbGljZSgwLCAzKTtcbiAgICB9XG4gICAgXG4gIH1cblxuICBnZXRNb250aHNMb25nKG1vbnRoOiBudW1iZXIgfCBmYWxzZSA9IGZhbHNlKSB7IFxuICAgIHJldHVybiBtb250aCA/IHRoaXMubW9udGhzW21vbnRoXSA6IHRoaXMubW9udGhzO1xuICB9XG5cbiAgZGF5c0luTW9udGgobW9udGg6IG51bWJlciwgeWVhcjpudW1iZXIgPSB0aGlzLmdldFllYXIodGhpcy5kYXRlcigpKSkge1xuICAgIGxldCBkZCA9IHRoaXMuc3BsaXREYXRlKHRoaXMuZGF0ZXIoYCR7dGhpcy5tb250aHNbbW9udGgtMV19IDAxLCAke3llYXJ9YCkpO1xuICAgIHJldHVybiBuZXcgRGF0ZShkZC55ZWFyLCBkZC5tb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgfVxuXG4gIGlzR3JlYXRlcihkYXRlMTogc3RyaW5nLCBkYXRlMjogc3RyaW5nKXtcbiAgICBsZXQgZDEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgbGV0IGQyID0gbmV3IERhdGUoZGF0ZTIpO1xuICAgIHJldHVybiBkMS5nZXRUaW1lKCkgPiBkMi5nZXRUaW1lKCk7IFxuICB9XG5cbiAgaXNMZXNzVGhhbihkYXRlMTogc3RyaW5nLCBkYXRlMjogc3RyaW5nKXtcbiAgICBsZXQgZDEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgbGV0IGQyID0gbmV3IERhdGUoZGF0ZTIpO1xuICAgIHJldHVybiBkMS5nZXRUaW1lKCkgPCBkMi5nZXRUaW1lKCk7IFxuICB9XG59XG4iXX0=