UNPKG

@nicky-lenaers/ngx-scroll-to

Version:

A simple Angular 4+ plugin enabling you to smooth scroll to any element on your page and enhance scroll-based features in your app.

123 lines 12.8 kB
import { ElementRef } from '@angular/core'; /** Default values for Component Input */ export const DEFAULTS = { target: null, action: 'click', duration: 650, easing: 'easeInOutQuad', offset: 0, offsetMap: new Map() }; /** Easing Colleciton */ export const EASING = { easeInQuad: (time) => { return time * time; }, easeOutQuad: (time) => { return time * (2 - time); }, easeInOutQuad: (time) => { return time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; }, easeInCubic: (time) => { return time * time * time; }, easeOutCubic: (time) => { return (--time) * time * time + 1; }, easeInOutCubic: (time) => { return time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; }, easeInQuart: (time) => { return time * time * time * time; }, easeOutQuart: (time) => { return 1 - (--time) * time * time * time; }, easeInOutQuart: (time) => { return time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; }, easeInQuint: (time) => { return time * time * time * time * time; }, easeOutQuint: (time) => { return 1 + (--time) * time * time * time * time; }, easeInOutQuint: (time) => { return time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; }, easeOutElastic: (time) => { return Math.pow(2, -10 * time) * Math.sin((time - 1 / 4) * (2 * Math.PI) / 1) + 1; } }; /** * Set of allowed events as triggers * for the Animation to start. */ export const EVENTS = [ 'click', 'mouseenter', 'mouseover', 'mousedown', 'mouseup', 'dblclick', 'contextmenu', 'wheel', 'mouseleave', 'mouseout' ]; /** * Strip hash (#) from value. * * @param value The given string value * @returns The stripped string value */ export function stripHash(value) { return value.substring(0, 1) === '#' ? value.substring(1) : value; } /** * Test if a given value is a string. * * @param value The given value * @returns Whether the given value is a string */ export function isString(value) { return typeof value === 'string' || value instanceof String; } /** * Test if a given Element is the Window. * * @param container The given Element * @returns Whether the given Element is Window */ export function isWindow(container) { return container === window; } /** * Test if a given value is of type ElementRef. * * @param value The given value * @returns Whether the given value is a number */ export function isElementRef(value) { return value instanceof ElementRef; } /** * Whether or not the given value is a Native Element. * * @param value The given value * @returns Whether or not the value is a Native Element */ export function isNativeElement(value) { return value instanceof HTMLElement; } /** * Test if a given value is type number. * * @param value The given value * @returns Whether the given value is a number */ export function isNumber(value) { return !isNaN(parseFloat(value)) && isFinite(value); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXRvLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2Nyb2xsLXRvL3NyYy9saWIvc2Nyb2xsLXRvLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUszQyx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFpQztJQUNwRCxNQUFNLEVBQUUsSUFBSTtJQUNaLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLEdBQUc7SUFDYixNQUFNLEVBQUUsZUFBZTtJQUN2QixNQUFNLEVBQUUsQ0FBQztJQUNULFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRTtDQUNyQixDQUFDO0FBRUYsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBc0M7SUFDdkQsVUFBVSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDM0IsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxXQUFXLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUM1QixPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsYUFBYSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDOUIsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNuRSxDQUFDO0lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDNUIsT0FBTyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBQ0QsWUFBWSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDN0IsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELGNBQWMsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQy9CLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDNUIsT0FBTyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUNELFlBQVksRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMzQyxDQUFDO0lBQ0QsY0FBYyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDL0IsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM1RixDQUFDO0lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDNUIsT0FBTyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFDRCxZQUFZLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFDRCxjQUFjLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUMvQixPQUFPLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDNUcsQ0FBQztJQUNELGNBQWMsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRixDQUFDO0NBQ0YsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBYTtJQUM5QixPQUFPO0lBQ1AsWUFBWTtJQUNaLFdBQVc7SUFDWCxXQUFXO0lBQ1gsU0FBUztJQUNULFVBQVU7SUFDVixhQUFhO0lBQ2IsT0FBTztJQUNQLFlBQVk7SUFDWixVQUFVO0NBQ1gsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxTQUFjO0lBQ3JDLE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVU7SUFDckMsT0FBTyxLQUFLLFlBQVksVUFBVSxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBVTtJQUN4QyxPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7QUFDdEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNjcm9sbFRvQW5pbWF0aW9uRWFzaW5nQ29sbGVjdGlvbiB9IGZyb20gJy4vc2Nyb2xsLXRvLWVhc2luZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2Nyb2xsVG9EZWZhdWx0Q29uZmlnT3B0aW9ucyB9IGZyb20gJy4vc2Nyb2xsLXRvLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG4vKiogRGVmYXVsdCB2YWx1ZXMgZm9yIENvbXBvbmVudCBJbnB1dCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRTOiBTY3JvbGxUb0RlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICB0YXJnZXQ6IG51bGwsXG4gIGFjdGlvbjogJ2NsaWNrJyxcbiAgZHVyYXRpb246IDY1MCxcbiAgZWFzaW5nOiAnZWFzZUluT3V0UXVhZCcsXG4gIG9mZnNldDogMCxcbiAgb2Zmc2V0TWFwOiBuZXcgTWFwKClcbn07XG5cbi8qKiBFYXNpbmcgQ29sbGVjaXRvbiAqL1xuZXhwb3J0IGNvbnN0IEVBU0lORzogU2Nyb2xsVG9BbmltYXRpb25FYXNpbmdDb2xsZWN0aW9uID0ge1xuICBlYXNlSW5RdWFkOiAodGltZTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIHRpbWUgKiB0aW1lO1xuICB9LFxuICBlYXNlT3V0UXVhZDogKHRpbWU6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiB0aW1lICogKDIgLSB0aW1lKTtcbiAgfSxcbiAgZWFzZUluT3V0UXVhZDogKHRpbWU6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiB0aW1lIDwgMC41ID8gMiAqIHRpbWUgKiB0aW1lIDogLTEgKyAoNCAtIDIgKiB0aW1lKSAqIHRpbWU7XG4gIH0sXG4gIGVhc2VJbkN1YmljOiAodGltZTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIHRpbWUgKiB0aW1lICogdGltZTtcbiAgfSxcbiAgZWFzZU91dEN1YmljOiAodGltZTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuICgtLXRpbWUpICogdGltZSAqIHRpbWUgKyAxO1xuICB9LFxuICBlYXNlSW5PdXRDdWJpYzogKHRpbWU6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiB0aW1lIDwgMC41ID8gNCAqIHRpbWUgKiB0aW1lICogdGltZSA6ICh0aW1lIC0gMSkgKiAoMiAqIHRpbWUgLSAyKSAqICgyICogdGltZSAtIDIpICsgMTtcbiAgfSxcbiAgZWFzZUluUXVhcnQ6ICh0aW1lOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gdGltZSAqIHRpbWUgKiB0aW1lICogdGltZTtcbiAgfSxcbiAgZWFzZU91dFF1YXJ0OiAodGltZTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDEgLSAoLS10aW1lKSAqIHRpbWUgKiB0aW1lICogdGltZTtcbiAgfSxcbiAgZWFzZUluT3V0UXVhcnQ6ICh0aW1lOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gdGltZSA8IDAuNSA/IDggKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lIDogMSAtIDggKiAoLS10aW1lKSAqIHRpbWUgKiB0aW1lICogdGltZTtcbiAgfSxcbiAgZWFzZUluUXVpbnQ6ICh0aW1lOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWU7XG4gIH0sXG4gIGVhc2VPdXRRdWludDogKHRpbWU6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAxICsgKC0tdGltZSkgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lO1xuICB9LFxuICBlYXNlSW5PdXRRdWludDogKHRpbWU6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiB0aW1lIDwgMC41ID8gMTYgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSA6IDEgKyAxNiAqICgtLXRpbWUpICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZTtcbiAgfSxcbiAgZWFzZU91dEVsYXN0aWM6ICh0aW1lOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwICogdGltZSkgKiBNYXRoLnNpbigodGltZSAtIDEgLyA0KSAqICgyICogTWF0aC5QSSkgLyAxKSArIDE7XG4gIH1cbn07XG5cbi8qKlxuICogU2V0IG9mIGFsbG93ZWQgZXZlbnRzIGFzIHRyaWdnZXJzXG4gKiBmb3IgdGhlIEFuaW1hdGlvbiB0byBzdGFydC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVWRU5UUzogc3RyaW5nW10gPSBbXG4gICdjbGljaycsXG4gICdtb3VzZWVudGVyJyxcbiAgJ21vdXNlb3ZlcicsXG4gICdtb3VzZWRvd24nLFxuICAnbW91c2V1cCcsXG4gICdkYmxjbGljaycsXG4gICdjb250ZXh0bWVudScsXG4gICd3aGVlbCcsXG4gICdtb3VzZWxlYXZlJyxcbiAgJ21vdXNlb3V0J1xuXTtcblxuLyoqXG4gKiBTdHJpcCBoYXNoICgjKSBmcm9tIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBcdFx0XHRcdFRoZSBnaXZlbiBzdHJpbmcgdmFsdWVcbiAqIEByZXR1cm5zIFx0XHRcdFx0XHRUaGUgc3RyaXBwZWQgc3RyaW5nIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEhhc2godmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgMSkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xufVxuXG4vKipcbiAqIFRlc3QgaWYgYSBnaXZlbiB2YWx1ZSBpcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgXHRcdFx0XHRcdFRoZSBnaXZlbiB2YWx1ZVxuICogQHJldHVybnMgXHRcdFx0XHRcdFx0V2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn1cblxuLyoqXG4gKiBUZXN0IGlmIGEgZ2l2ZW4gRWxlbWVudCBpcyB0aGUgV2luZG93LlxuICpcbiAqIEBwYXJhbSBjb250YWluZXIgXHRcdFx0XHRUaGUgZ2l2ZW4gRWxlbWVudFxuICogQHJldHVybnMgXHRcdFx0XHRcdFx0V2hldGhlciB0aGUgZ2l2ZW4gRWxlbWVudCBpcyBXaW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93KGNvbnRhaW5lcjogYW55KTogY29udGFpbmVyIGlzIFdpbmRvdyB7XG4gIHJldHVybiBjb250YWluZXIgPT09IHdpbmRvdztcbn1cblxuLyoqXG4gKiBUZXN0IGlmIGEgZ2l2ZW4gdmFsdWUgaXMgb2YgdHlwZSBFbGVtZW50UmVmLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBcdFx0XHRcdFx0VGhlIGdpdmVuIHZhbHVlXG4gKiBAcmV0dXJucyAgICAgICAgICAgICAgIFdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnRSZWYodmFsdWU6IGFueSk6IHZhbHVlIGlzIEVsZW1lbnRSZWYge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50UmVmO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiB2YWx1ZSBpcyBhIE5hdGl2ZSBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAgICAgICAgICAgVGhlIGdpdmVuIHZhbHVlXG4gKiBAcmV0dXJucyAgICAgICAgICAgICAgIFdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBhIE5hdGl2ZSBFbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hdGl2ZUVsZW1lbnQodmFsdWU6IGFueSk6IHZhbHVlIGlzIEhUTUxFbGVtZW50IHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGVzdCBpZiBhIGdpdmVuIHZhbHVlIGlzIHR5cGUgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBcdFx0XHRcdFx0VGhlIGdpdmVuIHZhbHVlXG4gKiBAcmV0dXJucyBcdFx0XHRcdFx0XHRXaGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciB7XG4gIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKTtcbn1cbiJdfQ==