UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

152 lines 20.2 kB
/** * Convert a single dimension array to a double dimension array * @param items the single dimension array to convert * @param columns the number of items each array should have */ export function gridify(items, columns) { // create a copy of array so not to effect the original items = items.slice(0); const grid = []; while (items.length) { grid.push(items.splice(0, columns)); } return grid; } /** * Create an array of numbers between two limits * @param start the lower limit * @param end the upper limit */ export function range(start, end) { const list = []; for (let idx = start; idx <= end; idx++) { list.push(idx); } return list; } /** * Create an array of dates between two points * @param start the date to start the array * @param end the date to end the array */ export function dateRange(start, end) { // don't alter the start date object start = new Date(start); const dates = []; // loop through all the days between the date range while (start <= end) { // add the date to the array dates.push(new Date(start)); // move to the next day start.setDate(start.getDate() + 1); } return dates; } /** * Compare two dates to see if they are on the same day * @param day1 the first date to compare * @param day2 the second date to compare */ export function compareDays(day1, day2) { return day1.getDate() === day2.getDate() && day1.getMonth() === day2.getMonth() && day1.getFullYear() === day2.getFullYear(); } /** * Date comparison for use primarily with distinctUntilChanged */ export function dateComparator(dateOne, dateTwo) { if (!dateOne && dateTwo || dateOne && !dateTwo) { return false; } if (!dateOne && !dateTwo) { return true; } return dateOne.getTime() === dateTwo.getTime(); } /** * Calculate the number of days between two dates * @param start The start date * @param end The end date * @param fullDay Whether or not we should take from 00:00 on the start date and 23:59 on the end date */ export function differenceBetweenDates(start, end, fullDay = true) { if (!start || !end) { return null; } const millisecondsInDay = 86400000; const startDay = new Date(start.getTime() < end.getTime() ? start : end); const endDay = new Date(start.getTime() > end.getTime() ? start : end); // get the start of day if (fullDay) { startDay.setHours(0, 0, 0, 0); endDay.setHours(23, 59, 59, 0); } return Math.round((endDay.getTime() - startDay.getTime()) / millisecondsInDay); } /** * Timezone comparison for use primarily with distinctUntilChanged */ export function timezoneComparator(zoneOne, zoneTwo) { return zoneOne.name === zoneTwo.name && zoneOne.offset === zoneTwo.offset; } /** * Get a date object with the time of the start of the given day * @param date The date to get the start of day */ export function getStartOfDay(date) { const startOfDay = new Date(date); startOfDay.setHours(0, 0, 0, 0); return startOfDay; } export function isDateAfter(date, after, isEqual = false) { return isEqual ? getStartOfDay(date).getTime() >= getStartOfDay(after).getTime() : getStartOfDay(date).getTime() > getStartOfDay(after).getTime(); } export function isDateBefore(date, before, isEqual = false) { return isEqual ? getStartOfDay(date).getTime() <= getStartOfDay(before).getTime() : getStartOfDay(date).getTime() < getStartOfDay(before).getTime(); } /** * Export an array of all the available months */ export const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; export const monthsShort = getShortMonthNames(); function getShortMonthNames() { return months.map(month => month.substring(0, 3)); } /** * Export an array of all the available days of the week */ export const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; export const weekdaysShort = getShortWeekdayNames(); export const meridians = ['AM', 'PM']; function getShortWeekdayNames() { return weekdays.map(weekday => weekday.substring(0, 3)); } /** Export the default set of time zone */ export const timezones = [ { name: 'GMT-11', offset: 660 }, { name: 'GMT-10', offset: 600 }, { name: 'GMT-9', offset: 540 }, { name: 'GMT-8', offset: 480 }, { name: 'GMT-7', offset: 420 }, { name: 'GMT-6', offset: 360 }, { name: 'GMT-5', offset: 300 }, { name: 'GMT-4', offset: 240 }, { name: 'GMT-3', offset: 180 }, { name: 'GMT-2', offset: 120 }, { name: 'GMT-1', offset: 60 }, { name: 'GMT', offset: 0 }, { name: 'GMT+1', offset: -60 }, { name: 'GMT+2', offset: -120 }, { name: 'GMT+3', offset: -180 }, { name: 'GMT+4', offset: -240 }, { name: 'GMT+5', offset: -300 }, { name: 'GMT+6', offset: -360 }, { name: 'GMT+7', offset: -420 }, { name: 'GMT+8', offset: -480 }, { name: 'GMT+9', offset: -540 }, { name: 'GMT+10', offset: -600 }, { name: 'GMT+11', offset: -660 }, { name: 'GMT+12', offset: -720 } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBSSxLQUFVLEVBQUUsT0FBZTtJQUVsRCx1REFBdUQ7SUFDdkQsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkIsTUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFDO0lBRXZCLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLEtBQWEsRUFBRSxHQUFXO0lBQzVDLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUUxQixLQUFLLElBQUksR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVcsRUFBRSxHQUFTO0lBRTVDLG9DQUFvQztJQUNwQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEIsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBRXpCLG1EQUFtRDtJQUNuRCxPQUFPLEtBQUssSUFBSSxHQUFH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RUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUM5QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtJQUM3QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtJQUMxQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzlCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUU7SUFDL0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtJQUMvQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFO0lBQy9CLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUU7SUFDL0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtJQUMvQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFO0lBQy9CLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUU7SUFDL0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtJQUMvQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFO0lBQ2hDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUU7SUFDaEMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtDQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJ0IGEgc2luZ2xlIGRpbWVuc2lvbiBhcnJheSB0byBhIGRvdWJsZSBkaW1lbnNpb24gYXJyYXlcbiAqIEBwYXJhbSBpdGVtcyB0aGUgc2luZ2xlIGRpbWVuc2lvbiBhcnJheSB0byBjb252ZXJ0XG4gKiBAcGFyYW0gY29sdW1ucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGVhY2ggYXJyYXkgc2hvdWxkIGhhdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyaWRpZnk8VD4oaXRlbXM6IFRbXSwgY29sdW1uczogbnVtYmVyKTogVFtdW10ge1xuXG4gICAgLy8gY3JlYXRlIGEgY29weSBvZiBhcnJheSBzbyBub3QgdG8gZWZmZWN0IHRoZSBvcmlnaW5hbFxuICAgIGl0ZW1zID0gaXRlbXMuc2xpY2UoMCk7XG5cbiAgICBjb25zdCBncmlkOiBUW11bXSA9IFtdO1xuXG4gICAgd2hpbGUgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBncmlkLnB1c2goaXRlbXMuc3BsaWNlKDAsIGNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JpZDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYXJyYXkgb2YgbnVtYmVycyBiZXR3ZWVuIHR3byBsaW1pdHNcbiAqIEBwYXJhbSBzdGFydCB0aGUgbG93ZXIgbGltaXRcbiAqIEBwYXJhbSBlbmQgdGhlIHVwcGVyIGxpbWl0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5nZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBjb25zdCBsaXN0OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaWR4ID0gc3RhcnQ7IGlkeCA8PSBlbmQ7IGlkeCsrKSB7XG4gICAgICAgIGxpc3QucHVzaChpZHgpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBhcnJheSBvZiBkYXRlcyBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSBzdGFydCB0aGUgZGF0ZSB0byBzdGFydCB0aGUgYXJyYXlcbiAqIEBwYXJhbSBlbmQgdGhlIGRhdGUgdG8gZW5kIHRoZSBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVJhbmdlKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpOiBEYXRlW10ge1xuXG4gICAgLy8gZG9uJ3QgYWx0ZXIgdGhlIHN0YXJ0IGRhdGUgb2JqZWN0XG4gICAgc3RhcnQgPSBuZXcgRGF0ZShzdGFydCk7XG5cbiAgICBjb25zdCBkYXRlczogRGF0ZVtdID0gW107XG5cbiAgICAvLyBsb29wIHRocm91Z2ggYWxsIHRoZSBkYXlzIGJldHdlZW4gdGhlIGRhdGUgcmFuZ2VcbiAgICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG5cbiAgICAgICAgLy8gYWRkIHRoZSBkYXRlIHRvIHRoZSBhcnJheVxuICAgICAgICBkYXRlcy5wdXNoKG5ldyBEYXRlKHN0YXJ0KSk7XG5cbiAgICAgICAgLy8gbW92ZSB0byB0aGUgbmV4dCBkYXlcbiAgICAgICAgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZXM7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gZGF0ZXMgdG8gc2VlIGlmIHRoZXkgYXJlIG9uIHRoZSBzYW1lIGRheVxuICogQHBhcmFtIGRheTEgdGhlIGZpcnN0IGRhdGUgdG8gY29tcGFyZVxuICogQHBhcmFtIGRheTIgdGhlIHNlY29uZCBkYXRlIHRvIGNvbXBhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEYXlzKGRheTE6IERhdGUsIGRheTI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF5MS5nZXREYXRlKCkgPT09IGRheTIuZ2V0RGF0ZSgpICYmXG4gICAgICAgIGRheTEuZ2V0TW9udGgoKSA9PT0gZGF5Mi5nZXRNb250aCgpICYmXG4gICAgICAgIGRheTEuZ2V0RnVsbFllYXIoKSA9PT0gZGF5Mi5nZXRGdWxsWWVhcigpO1xufVxuXG4vKipcbiAqIERhdGUgY29tcGFyaXNvbiBmb3IgdXNlIHByaW1hcmlseSB3aXRoIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRlQ29tcGFyYXRvcihkYXRlT25lOiBEYXRlLCBkYXRlVHdvOiBEYXRlKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIWRhdGVPbmUgJiYgZGF0ZVR3byB8fCBkYXRlT25lICYmICFkYXRlVHdvKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGVPbmUgJiYgIWRhdGVUd28pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVPbmUuZ2V0VGltZSgpID09PSBkYXRlVHdvLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdHdvIGRhdGVzXG4gKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGRhdGVcbiAqIEBwYXJhbSBlbmQgVGhlIGVuZCBkYXRlXG4gKiBAcGFyYW0gZnVsbERheSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdGFrZSBmcm9tIDAwOjAwIG9uIHRoZSBzdGFydCBkYXRlIGFuZCAyMzo1OSBvbiB0aGUgZW5kIGRhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VCZXR3ZWVuRGF0ZXMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSwgZnVsbERheTogYm9vbGVhbiA9IHRydWUpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWlsbGlzZWNvbmRzSW5EYXkgPSA4NjQwMDAwMDtcbiAgICBjb25zdCBzdGFydERheSA9IG5ldyBEYXRlKHN0YXJ0LmdldFRpbWUoKSA8IGVuZC5nZXRUaW1lKCkgPyBzdGFydCA6IGVuZCk7XG4gICAgY29uc3QgZW5kRGF5ID0gbmV3IERhdGUoc3RhcnQuZ2V0VGltZSgpID4gZW5kLmdldFRpbWUoKSA/IHN0YXJ0IDogZW5kKTtcblxuICAgIC8vIGdldCB0aGUgc3RhcnQgb2YgZGF5XG4gICAgaWYgKGZ1bGxEYXkpIHtcbiAgICAgICAgc3RhcnREYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIGVuZERheS5zZXRIb3VycygyMywgNTksIDU5LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZW5kRGF5LmdldFRpbWUoKSAtIHN0YXJ0RGF5LmdldFRpbWUoKSkgLyBtaWxsaXNlY29uZHNJbkRheSk7XG59XG5cbi8qKlxuICogVGltZXpvbmUgY29tcGFyaXNvbiBmb3IgdXNlIHByaW1hcmlseSB3aXRoIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lem9uZUNvbXBhcmF0b3Ioem9uZU9uZTogRGF0ZVRpbWVQaWNrZXJUaW1lem9uZSwgem9uZVR3bzogRGF0ZVRpbWVQaWNrZXJUaW1lem9uZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB6b25lT25lLm5hbWUgPT09IHpvbmVUd28ubmFtZSAmJiB6b25lT25lLm9mZnNldCA9PT0gem9uZVR3by5vZmZzZXQ7XG59XG5cbi8qKlxuICogR2V0IGEgZGF0ZSBvYmplY3Qgd2l0aCB0aGUgdGltZSBvZiB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIGRheVxuICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gZ2V0IHRoZSBzdGFydCBvZiBkYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXJ0T2ZEYXkoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIGNvbnN0IHN0YXJ0T2ZEYXkgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICBzdGFydE9mRGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBzdGFydE9mRGF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlQWZ0ZXIoZGF0ZTogRGF0ZSwgYWZ0ZXI6IERhdGUsIGlzRXF1YWw6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0VxdWFsID8gZ2V0U3RhcnRPZkRheShkYXRlKS5nZXRUaW1lKCkgPj0gZ2V0U3RhcnRPZkRheShhZnRlcikuZ2V0VGltZSgpIDogZ2V0U3RhcnRPZkRheShkYXRlKS5nZXRUaW1lKCkgPiBnZXRTdGFydE9mRGF5KGFmdGVyKS5nZXRUaW1lKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVCZWZvcmUoZGF0ZTogRGF0ZSwgYmVmb3JlOiBEYXRlLCBpc0VxdWFsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNFcXVhbCA/IGdldFN0YXJ0T2ZEYXkoZGF0ZSkuZ2V0VGltZSgpIDw9IGdldFN0YXJ0T2ZEYXkoYmVmb3JlKS5nZXRUaW1lKCkgOiBnZXRTdGFydE9mRGF5KGRhdGUpLmdldFRpbWUoKSA8IGdldFN0YXJ0T2ZEYXkoYmVmb3JlKS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogRXhwb3J0IGFuIGFycmF5IG9mIGFsbCB0aGUgYXZhaWxhYmxlIG1vbnRoc1xuICovXG5leHBvcnQgY29uc3QgbW9udGhzID0gWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ107XG5leHBvcnQgY29uc3QgbW9udGhzU2hvcnQgPSBnZXRTaG9ydE1vbnRoTmFtZXMoKTtcblxuZnVuY3Rpb24gZ2V0U2hvcnRNb250aE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gbW9udGhzLm1hcChtb250aCA9PiBtb250aC5zdWJzdHJpbmcoMCwgMykpO1xufVxuXG4vKipcbiAqIEV4cG9ydCBhbiBhcnJheSBvZiBhbGwgdGhlIGF2YWlsYWJsZSBkYXlzIG9mIHRoZSB3ZWVrXG4gKi9cbmV4cG9ydCBjb25zdCB3ZWVrZGF5cyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbmV4cG9ydCBjb25zdCB3ZWVrZGF5c1Nob3J0ID0gZ2V0U2hvcnRXZWVrZGF5TmFtZXMoKTtcbmV4cG9ydCBjb25zdCBtZXJpZGlhbnMgPSBbJ0FNJywgJ1BNJ107XG5cbmZ1bmN0aW9uIGdldFNob3J0V2Vla2RheU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gd2Vla2RheXMubWFwKHdlZWtkYXkgPT4gd2Vla2RheS5zdWJzdHJpbmcoMCwgMykpO1xufVxuXG4vKiogRXhwb3J0IHRoZSBkZWZhdWx0IHNldCBvZiB0aW1lIHpvbmUgKi9cbmV4cG9ydCBjb25zdCB0aW1lem9uZXM6IERhdGVUaW1lUGlja2VyVGltZXpvbmVbXSA9IFtcbiAgICB7IG5hbWU6ICdHTVQtMTEnLCBvZmZzZXQ6IDY2MCB9LFxuICAgIHsgbmFtZTogJ0dNVC0xMCcsIG9mZnNldDogNjAwIH0sXG4gICAgeyBuYW1lOiAnR01ULTknLCBvZmZzZXQ6IDU0MCB9LFxuICAgIHsgbmFtZTogJ0dNVC04Jywgb2Zmc2V0OiA0ODAgfSxcbiAgICB7IG5hbWU6ICdHTVQtNycsIG9mZnNldDogNDIwIH0sXG4gICAgeyBuYW1lOiAnR01ULTYnLCBvZmZzZXQ6IDM2MCB9LFxuICAgIHsgbmFtZTogJ0dNVC01Jywgb2Zmc2V0OiAzMDAgfSxcbiAgICB7IG5hbWU6ICdHTVQtNCcsIG9mZnNldDogMjQwIH0sXG4gICAgeyBuYW1lOiAnR01ULTMnLCBvZmZzZXQ6IDE4MCB9LFxuICAgIHsgbmFtZTogJ0dNVC0yJywgb2Zmc2V0OiAxMjAgfSxcbiAgICB7IG5hbWU6ICdHTVQtMScsIG9mZnNldDogNjAgfSxcbiAgICB7IG5hbWU6ICdHTVQnLCBvZmZzZXQ6IDAgfSxcbiAgICB7IG5hbWU6ICdHTVQrMScsIG9mZnNldDogLTYwIH0sXG4gICAgeyBuYW1lOiAnR01UKzInLCBvZmZzZXQ6IC0xMjAgfSxcbiAgICB7IG5hbWU6ICdHTVQrMycsIG9mZnNldDogLTE4MCB9LFxuICAgIHsgbmFtZTogJ0dNVCs0Jywgb2Zmc2V0OiAtMjQwIH0sXG4gICAgeyBuYW1lOiAnR01UKzUnLCBvZmZzZXQ6IC0zMDAgfSxcbiAgICB7IG5hbWU6ICdHTVQrNicsIG9mZnNldDogLTM2MCB9LFxuICAgIHsgbmFtZTogJ0dNVCs3Jywgb2Zmc2V0OiAtNDIwIH0sXG4gICAgeyBuYW1lOiAnR01UKzgnLCBvZmZzZXQ6IC00ODAgfSxcbiAgICB7IG5hbWU6ICdHTVQrOScsIG9mZnNldDogLTU0MCB9LFxuICAgIHsgbmFtZTogJ0dNVCsxMCcsIG9mZnNldDogLTYwMCB9LFxuICAgIHsgbmFtZTogJ0dNVCsxMScsIG9mZnNldDogLTY2MCB9LFxuICAgIHsgbmFtZTogJ0dNVCsxMicsIG9mZnNldDogLTcyMCB9XG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVUaW1lUGlja2VyVGltZXpvbmUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvZmZzZXQ6IG51bWJlcjtcbn1cbiJdfQ==