UNPKG

lisn.js

Version:

Simply handle user gestures and actions. Includes widgets.

169 lines 70.7 kB
/** * @module Utils */ import { ScrollDirection, ScrollTarget, TargetCoordinates, CoordinateOffset, ScrollPosition } from "../globals/types.cjs"; /** * @category Scrolling */ export type ScrollAction = { cancel: () => boolean; /** * Will reject if the scroll is cancelled. */ waitFor: () => Promise<ScrollPosition>; }; /** * @category Scrolling * @interface */ export type ScrollToOptions = { /** * The element that should be scrolled. * * @defaultValue If `document.body` is scrollable, will use that; otherwise `document.scrollingElement` */ scrollable?: Element; /** * Offset the target coordinates by the given amount(s). * * E.g. if the final target coordinates are computed to be * `{top: 100, left: 0}` and you specify offset as `{top: 10, left: 20}`, it * will scroll to `{top: 110, left: 20}`. * * @defaultValue undefined */ offset?: CoordinateOffset; /** * The duration of the scroll animation in milliseconds. If not given, it is * instant. * * @defaultValue 0 */ duration?: number; /** * Whether another request to us to scroll the same target can interrupt this * scroll before it finishes. * * @defaultValue false */ weCanInterrupt?: boolean; /** * Whether a user attempt to scroll the target can interrupt this before it * finishes. * * @defaultValue false */ userCanInterrupt?: boolean; /** * If the scrolling element is already at the given coordinates (or strictly * speaking we allow for 5 pixels difference), then if `altTarget` is given, * this will become the target to scroll to. * * @defaultValue undefined */ altTarget?: TargetCoordinates | Element | string; /** * Offset the target coordinates by the given amount(s) when `altTarget` is used. * * See {@link ScrollToOptions.offset}. * * @defaultValue undefined */ altOffset?: CoordinateOffset; }; /** * Returns true if the given element is scrollable in the given direction, or * in either direction (if `axis` is not given). * * It first checks whether the current scroll offset on the target along the * given axis is non-0, and if so returns true immediately. Otherwise it will * attempt to determine if it's scrollable using one of these methods * (controlled by `options.active`): * - passive check (default): Will examine `clientWidth/Height`, * `scrollWidth/Height` as well as the computed `overflow` CSS property to try * to determine if the target is scrollable. This is not 100% reliable but is * safer than the active check * - active check: Will attempt to scroll the target by 1px and examine if the * scroll offset had changed, then revert it back to 0. This is a more * reliable check, however it can cause issues in certain contexts. In * particular, if a scroll on the target had just been initiated (but it's * scroll offset was still 0), the scroll may be cancelled. Never use that * inside scroll-based handlers. * * **NOTE:** If the layout has been invalidated and not yet recalculated, this * will cause a forced layout, so always {@link waitForMeasureTime} before * calling this function when possible. * * @param [options.axis] One of "x" or "y" for horizontal or vertical scroll * respectively. If not given, it checks both. * @param [options.active] If true, then if the target's current scroll offset * is 0, it will attempt to scroll it rather than * looking at its overflow. * @param [options.noCache] By default the result of a check is cached for 1s * and if there's already a cached result for this * element, it is returned. Set this to true to disable * checking the cache and also saving the result into * the cache. * * @category Scrolling */ export declare const isScrollable: (element: Element, options?: { axis?: "x" | "y"; active?: boolean; noCache?: boolean; }) => boolean; /** * Returns the closest scrollable ancestor of the given element, _not including * it_. * * @param options See {@link isScrollable} * * @returns `null` if no scrollable ancestors are found. * * @category Scrolling */ export declare const getClosestScrollable: (element: Element, options?: { axis?: "x" | "y"; active?: boolean; noCache?: boolean; }) => Element | null; /** * Returns the current {@link ScrollAction} if any. * * @category Scrolling */ export declare const getCurrentScrollAction: (scrollable?: Element) => ScrollAction | null; /** * Scrolls the given scrollable element to the given `to` target. * * Returns `null` if there's an ongoing scroll that is not cancellable. * * Note that if `to` is an element or a query selector string, then it _must_ be * a descendant of the scrollable element. * * @throws {@link Errors.LisnUsageError | LisnUsageError} * If the target coordinates are invalid. * * @param to If this is an element, then its top-left position is used as * the target coordinates. If it is a string, then it is treated * as a selector for an element using `querySelector`. * * @returns `null` if there's an ongoing scroll that is not cancellable, * otherwise a {@link ScrollAction}. * * @category Scrolling */ export declare const scrollTo: (to: TargetCoordinates | Element | string, userOptions?: ScrollToOptions) => ScrollAction | null; /** * Returns true if the given string is a valid scroll direction. * * @category Validation */ export declare const isValidScrollDirection: (direction: string) => direction is ScrollDirection; /** * Returns true if the given string or array is a list of valid scroll * directions. * * @category Validation */ export declare const isValidScrollDirectionList: (directions: string | string[]) => directions is "none" | "left" | "right" | "up" | "down" | "ambiguous" | "up,down" | "down,up" | "right,up" | "right,down" | "right,up,down" | "right,down,up" | "down,right" | "up,right" | "up,right,down" | "up,down,right" | "down,right,up" | "down,up,right" | "left,right" | "left,up" | "left,down" | "left,up,down" | "left,down,up" | "left,right,up" | "left,right,down" | "left,right,up,down" | "left,right,down,up" | "left,down,right" | "left,up,right" | "left,up,right,down" | "left,up,down,right" | "left,down,right,up" | "left,down,up,right" | "down,left" | "up,left" | "up,left,down" | "up,down,left" | "down,left,up" | "down,up,left" | "right,left" | "right,left,up" | "right,left,down" | "right,left,up,down" | "right,left,down,up" | "right,down,left" | "right,up,left" | "right,up,left,down" | "right,up,down,left" | "right,down,left,up" | "right,down,up,left" | "down,left,right" | "down,right,left" | "up,left,right" | "up,left,right,down" | "up,left,down,right" | "up,right,left" | "up,right,left,down" | "up,right,down,left" | "up,down,left,right" | "up,down,right,left" | "down,left,right,up" | "down,left,up,right" | "down,right,left,up" | "down,right,up,left" | "down,up,left,right" | "down,up,right,left" | "ambiguous,left" | "ambiguous,right" | "ambiguous,up" | "ambiguous,down" | "ambiguous,up,down" | "ambiguous,down,up" | "ambiguous,right,up" | "ambiguous,right,down" | "ambiguous,right,up,down" | "ambiguous,right,down,up" | "ambiguous,down,right" | "ambiguous,up,right" | "ambiguous,up,right,down" | "ambiguous,up,down,right" | "ambiguous,down,right,up" | "ambiguous,down,up,right" | "ambiguous,left,right" | "ambiguous,left,up" | "ambiguous,left,down" | "ambiguous,left,up,down" | "ambiguous,left,down,up" | "ambiguous,left,right,up" | "ambiguous,left,right,down" | "ambiguous,left,right,up,down" | "ambiguous,left,right,down,up" | "ambiguous,left,down,right" | "ambiguous,left,up,right" | "ambiguous,left,up,right,down" | "ambiguous,left,up,down,right" | "ambiguous,left,down,right,up" | "ambiguous,left,down,up,right" | "ambiguous,down,left" | "ambiguous,up,left" | "ambiguous,up,left,down" | "ambiguous,up,down,left" | "ambiguous,down,left,up" | "ambiguous,down,up,left" | "ambiguous,right,left" | "ambiguous,right,left,up" | "ambiguous,right,left,down" | "ambiguous,right,left,up,down" | "ambiguous,right,left,down,up" | "ambiguous,right,down,left" | "ambiguous,right,up,left" | "ambiguous,right,up,left,down" | "ambiguous,right,up,down,left" | "ambiguous,right,down,left,up" | "ambiguous,right,down,up,left" | "ambiguous,down,left,right" | "ambiguous,down,right,left" | "ambiguous,up,left,right" | "ambiguous,up,left,right,down" | "ambiguous,up,left,down,right" | "ambiguous,up,right,left" | "ambiguous,up,right,left,down" | "ambiguous,up,right,down,left" | "ambiguous,up,down,left,right" | "ambiguous,up,down,right,left" | "ambiguous,down,left,right,up" | "ambiguous,down,left,up,right" | "ambiguous,down,right,left,up" | "ambiguous,down,right,up,left" | "ambiguous,down,up,left,right" | "ambiguous,down,up,right,left" | "down,ambiguous" | "up,ambiguous" | "up,ambiguous,down" | "up,down,ambiguous" | "down,ambiguous,up" | "down,up,ambiguous" | "right,ambiguous" | "right,ambiguous,up" | "right,ambiguous,down" | "right,ambiguous,up,down" | "right,ambiguous,down,up" | "right,down,ambiguous" | "right,up,ambiguous" | "right,up,ambiguous,down" | "right,up,down,ambiguous" | "right,down,ambiguous,up" | "right,down,up,ambiguous" | "down,ambiguous,right" | "down,right,ambiguous" | "up,ambiguous,right" | "up,ambiguous,right,down" | "up,ambiguous,down,right" | "up,right,ambiguous" | "up,right,ambiguous,down" | "up,right,down,ambiguous" | "up,down,ambiguous,right" | "up,down,right,ambiguous" | "down,ambiguous,right,up" | "down,ambiguous,up,right" | "down,right,ambiguous,up" | "down,right,up,ambiguous" | "down,up,ambiguous,right" | "down,up,right,ambiguous" | "left,ambiguous" | "left,ambiguous,right" | "left,ambiguous,up" | "left,ambiguous,down" | "left,ambiguous,up,down" | "left,ambiguous,down,up" | "left,ambiguous,right,up" | "left,ambiguous,right,down" | "left,ambiguous,right,up,down" | "left,ambiguous,right,down,up" | "left,ambiguous,down,right" | "left,ambiguous,up,right" | "left,ambiguous,up,right,down" | "left,ambiguous,up,down,right" | "left,ambiguous,down,right,up" | "left,ambiguous,down,up,right" | "left,down,ambiguous" | "left,up,ambiguous" | "left,up,ambiguous,down" | "left,up,down,ambiguous" | "left,down,ambiguous,up" | "left,down,up,ambiguous" | "left,right,ambiguous" | "left,right,ambiguous,up" | "left,right,ambiguous,down" | "left,right,ambiguous,up,down" | "left,right,ambiguous,down,up" | "left,right,down,ambiguous" | "left,right,up,ambiguous" | "left,right,up,ambiguous,down" | "left,right,up,down,ambiguous" | "left,right,down,ambiguous,up" | "left,right,down,up,ambiguous" | "left,down,ambiguous,right" | "left,down,right,ambiguous" | "left,up,ambiguous,right" | "left,up,ambiguous,right,down" | "left,up,ambiguous,down,right" | "left,up,right,ambiguous" | "left,up,right,ambiguous,down" | "left,up,right,down,ambiguous" | "left,up,down,ambiguous,right" | "left,up,down,right,ambiguous" | "left,down,ambiguous,right,up" | "left,down,ambiguous,up,right" | "left,down,right,ambiguous,up" | "left,down,right,up,ambiguous" | "left,down,up,ambiguous,right" | "left,down,up,right,ambiguous" | "down,ambiguous,left" | "down,left,ambiguous" | "up,ambiguous,left" | "up,ambiguous,left,down" | "up,ambiguous,down,left" | "up,left,ambiguous" | "up,left,ambiguous,down" | "up,left,down,ambiguous" | "up,down,ambiguous,left" | "up,down,left,ambiguous" | "down,ambiguous,left,up" | "down,ambiguous,up,left" | "down,left,ambiguous,up" | "down,left,up,ambiguous" | "down,up,ambiguous,left" | "down,up,left,ambiguous" | "right,ambiguous,left" | "right,ambiguous,left,up" | "right,ambiguous,left,down" | "right,ambiguous,left,up,down" | "right,ambiguous,left,down,up" | "right,ambiguous,down,left" | "right,ambiguous,up,left" | "right,ambiguous,up,left,down" | "right,ambiguous,up,down,left" | "right,ambiguous,down,left,up" | "right,ambiguous,down,up,left" | "right,left,ambiguous" | "right,left,ambiguous,up" | "right,left,ambiguous,down" | "right,left,ambiguous,up,down" | "right,left,ambiguous,down,up" | "right,left,down,ambiguous" | "right,left,up,ambiguous" | "right,left,up,ambiguous,down" | "right,left,up,down,ambiguous" | "right,left,down,ambiguous,up" | "right,left,down,up,ambiguous" | "right,down,ambiguous,left" | "right,down,left,ambiguous" | "right,up,ambiguous,left" | "right,up,ambiguous,left,down" | "right,up,ambiguous,down,left" | "right,up,left,ambiguous" | "right,up,left,ambiguous,down" | "right,up,left,down,ambiguous" | "right,up,down,ambiguous,left" | "right,up,down,left,ambiguous" | "right,down,ambiguous,left,up" | "right,down,ambiguous,up,left" | "right,down,left,ambiguous,up" | "right,down,left,up,ambiguous" | "right,down,up,ambiguous,left" | "right,down,up,left,ambiguous" | "down,ambiguous,left,right" | "down,ambiguous,right,left" | "down,left,ambiguous,right" | "down,left,right,ambiguous" | "down,right,ambiguous,left" | "down,right,left,ambiguous" | "up,ambiguous,left,right" | "up,ambiguous,left,right,down" | "up,ambiguous,left,down,right" | "up,ambiguous,right,left" | "up,ambiguous,right,left,down" | "up,ambiguous,right,down,left" | "up,ambiguous,down,left,right" | "up,ambiguous,down,right,left" | "up,left,ambiguous,right" | "up,left,ambiguous,right,down" | "up,left,ambiguous,down,right" | "up,left,right,ambiguous" | "up,left,right,ambiguous,down" | "up,left,right,down,ambiguous" | "up,left,down,ambiguous,right" | "up,left,down,right,ambiguous" | "up,right,ambiguous,left" | "up,right,ambiguous,left,down" | "up,right,ambiguous,down,left" | "up,right,left,ambiguous" | "up,right,left,ambiguous,down" | "up,right,left,down,ambiguous" | "up,right,down,ambiguous,left" | "up,right,down,left,ambiguous" | "up,down,ambiguous,left,right" | "up,down,ambiguous,right,left" | "up,down,left,ambiguous,right" | "up,down,left,right,ambiguous" | "up,down,right,ambiguous,left" | "up,down,right,left,ambiguous" | "down,ambiguous,left,right,up" | "down,ambiguous,left,up,right" | "down,ambiguous,right,left,up" | "down,ambiguous,right,up,left" | "down,ambiguous,up,left,right" | "down,ambiguous,up,right,left" | "down,left,ambiguous,right,up" | "down,left,ambiguous,up,right" | "down,left,right,ambiguous,up" | "down,left,right,up,ambiguous" | "down,left,up,ambiguous,right" | "down,left,up,right,ambiguous" | "down,right,ambiguous,left,up" | "down,right,ambiguous,up,left" | "down,right,left,ambiguous,up" | "down,right,left,up,ambiguous" | "down,right,up,ambiguous,left" | "down,right,up,left,ambiguous" | "down,up,ambiguous,left,right" | "down,up,ambiguous,right,left" | "down,up,left,ambiguous,right" | "down,up,left,right,ambiguous" | "down,up,right,ambiguous,left" | "down,up,right,left,ambiguous" | "none,left" | "none,right" | "none,up" | "none,down" | "none,ambiguous" | "none,up,down" | "none,down,up" | "none,right,up" | "none,right,down" | "none,right,up,down" | "none,right,down,up" | "none,down,right" | "none,up,right" | "none,up,right,down" | "none,up,down,right" | "none,down,right,up" | "none,down,up,right" | "none,left,right" | "none,left,up" | "none,left,down" | "none,left,up,down" | "none,left,down,up" | "none,left,right,up" | "none,left,right,down" | "none,left,right,up,down" | "none,left,right,down,up" | "none,left,down,right" | "none,left,up,right" | "none,left,up,right,down" | "none,left,up,down,right" | "none,left,down,right,up" | "none,left,down,up,right" | "none,down,left" | "none,up,left" | "none,up,left,down" | "none,up,down,left" | "none,down,left,up" | "none,down,up,left" | "none,right,left" | "none,right,left,up" | "none,right,left,down" | "none,right,left,up,down" | "none,right,left,down,up" | "none,right,down,left" | "none,right,up,left" | "none,right,up,left,down" | "none,right,up,down,left" | "none,right,down,left,up" | "none,right,down,up,left" | "none,down,left,right" | "none,down,right,left" | "none,up,left,right" | "none,up,left,right,down" | "none,up,left,down,right" | "none,up,right,left" | "none,up,right,left,down" | "none,up,right,down,left" | "none,up,down,left,right" | "none,up,down,right,left" | "none,down,left,right,up" | "none,down,left,up,right" | "none,down,right,left,up" | "none,down,right,up,left" | "none,down,up,left,right" | "none,down,up,right,left" | "none,ambiguous,left" | "none,ambiguous,right" | "none,ambiguous,up" | "none,ambiguous,down" | "none,ambiguous,up,down" | "none,ambiguous,down,up" | "none,ambiguous,right,up" | "none,ambiguous,right,down" | "none,ambiguous,right,up,down" | "none,ambiguous,right,down,up" | "none,ambiguous,down,right" | "none,ambiguous,up,right" | "none,ambiguous,up,right,down" | "none,ambiguous,up,down,right" | "none,ambiguous,down,right,up" | "none,ambiguous,down,up,right" | "none,ambiguous,left,right" | "none,ambiguous,left,up" | "none,ambiguous,left,down" | "none,ambiguous,left,up,down" | "none,ambiguous,left,down,up" | "none,ambiguous,left,right,up" | "none,ambiguous,left,right,down" | "none,ambiguous,left,right,up,down" | "none,ambiguous,left,right,down,up" | "none,ambiguous,left,down,right" | "none,ambiguous,left,up,right" | "none,ambiguous,left,up,right,down" | "none,ambiguous,left,up,down,right" | "none,ambiguous,left,down,right,up" | "none,ambiguous,left,down,up,right" | "none,ambiguous,down,left" | "none,ambiguous,up,left" | "none,ambiguous,up,left,down" | "none,ambiguous,up,down,left" | "none,ambiguous,down,left,up" | "none,ambiguous,down,up,left" | "none,ambiguous,right,left" | "none,ambiguous,right,left,up" | "none,ambiguous,right,left,down" | "none,ambiguous,right,left,up,down" | "none,ambiguous,right,left,down,up" | "none,ambiguous,right,down,left" | "none,ambiguous,right,up,left" | "none,ambiguous,right,up,left,down" | "none,ambiguous,right,up,down,left" | "none,ambiguous,right,down,left,up" | "none,ambiguous,right,down,up,left" | "none,ambiguous,down,left,right" | "none,ambiguous,down,right,left" | "none,ambiguous,up,left,right" | "none,ambiguous,up,left,right,down" | "none,ambiguous,up,left,down,right" | "none,ambiguous,up,right,left" | "none,ambiguous,up,right,left,down" | "none,ambiguous,up,right,down,left" | "none,ambiguous,up,down,left,right" | "none,ambiguous,up,down,right,left" | "none,ambiguous,down,left,right,up" | "none,ambiguous,down,left,up,right" | "none,ambiguous,down,right,left,up" | "none,ambiguous,down,right,up,left" | "none,ambiguous,down,up,left,right" | "none,ambiguous,down,up,right,left" | "none,down,ambiguous" | "none,up,ambiguous" | "none,up,ambiguous,down" | "none,up,down,ambiguous" | "none,down,ambiguous,up" | "none,down,up,ambiguous" | "none,right,ambiguous" | "none,right,ambiguous,up" | "none,right,ambiguous,down" | "none,right,ambiguous,up,down" | "none,right,ambiguous,down,up" | "none,right,down,ambiguous" | "none,right,up,ambiguous" | "none,right,up,ambiguous,down" | "none,right,up,down,ambiguous" | "none,right,down,ambiguous,up" | "none,right,down,up,ambiguous" | "none,down,ambiguous,right" | "none,down,right,ambiguous" | "none,up,ambiguous,right" | "none,up,ambiguous,right,down" | "none,up,ambiguous,down,right" | "none,up,right,ambiguous" | "none,up,right,ambiguous,down" | "none,up,right,down,ambiguous" | "none,up,down,ambiguous,right" | "none,up,down,right,ambiguous" | "none,down,ambiguous,right,up" | "none,down,ambiguous,up,right" | "none,down,right,ambiguous,up" | "none,down,right,up,ambiguous" | "none,down,up,ambiguous,right" | "none,down,up,right,ambiguous" | "none,left,ambiguous" | "none,left,ambiguous,right" | "none,left,ambiguous,up" | "none,left,ambiguous,down" | "none,left,ambiguous,up,down" | "none,left,ambiguous,down,up" | "none,left,ambiguous,right,up" | "none,left,ambiguous,right,down" | "none,left,ambiguous,right,up,down" | "none,left,ambiguous,right,down,up" | "none,left,ambiguous,down,right" | "none,left,ambiguous,up,right" | "none,left,ambiguous,up,right,down" | "none,left,ambiguous,up,down,right" | "none,left,ambiguous,down,right,up" | "none,left,ambiguous,down,up,right" | "none,left,down,ambiguous" | "none,left,up,ambiguous" | "none,left,up,ambiguous,down" | "none,left,up,down,ambiguous" | "none,left,down,ambiguous,up" | "none,left,down,up,ambiguous" | "none,left,right,ambiguous" | "none,left,right,ambiguous,up" | "none,left,right,ambiguous,down" | "none,left,right,ambiguous,up,down" | "none,left,right,ambiguous,down,up" | "none,left,right,down,ambiguous" | "none,left,right,up,ambiguous" | "none,left,right,up,ambiguous,down" | "none,left,right,up,down,ambiguous" | "none,left,right,down,ambiguous,up" | "none,left,right,down,up,ambiguous" | "none,left,down,ambiguous,right" | "none,left,down,right,ambiguous" | "none,left,up,ambiguous,right" | "none,left,up,ambiguous,right,down" | "none,left,up,ambiguous,down,right" | "none,left,up,right,ambiguous" | "none,left,up,right,ambiguous,down" | "none,left,up,right,down,ambiguous" | "none,left,up,down,ambiguous,right" | "none,left,up,down,right,ambiguous" | "none,left,down,ambiguous,right,up" | "none,left,down,ambiguous,up,right" | "none,left,down,right,ambiguous,up" | "none,left,down,right,up,ambiguous" | "none,left,down,up,ambiguous,right" | "none,left,down,up,right,ambiguous" | "none,down,ambiguous,left" | "none,down,left,ambiguous" | "none,up,ambiguous,left" | "none,up,ambiguous,left,down" | "none,up,ambiguous,down,left" | "none,up,left,ambiguous" | "none,up,left,ambiguous,down" | "none,up,left,down,ambiguous" | "none,up,down,ambiguous,left" | "none,up,down,left,ambiguous" | "none,down,ambiguous,left,up" | "none,down,ambiguous,up,left" | "none,down,left,ambiguous,up" | "none,down,left,up,ambiguous" | "none,down,up,ambiguous,left" | "none,down,up,left,ambiguous" | "none,right,ambiguous,left" | "none,right,ambiguous,left,up" | "none,right,ambiguous,left,down" | "none,right,ambiguous,left,up,down" | "none,right,ambiguous,left,down,up" | "none,right,ambiguous,down,left" | "none,right,ambiguous,up,left" | "none,right,ambiguous,up,left,down" | "none,right,ambiguous,up,down,left" | "none,right,ambiguous,down,left,up" | "none,right,ambiguous,down,up,left" | "none,right,left,ambiguous" | "none,right,left,ambiguous,up" | "none,right,left,ambiguous,down" | "none,right,left,ambiguous,up,down" | "none,right,left,ambiguous,down,up" | "none,right,left,down,ambiguous" | "none,right,left,up,ambiguous" | "none,right,left,up,ambiguous,down" | "none,right,left,up,down,ambiguous" | "none,right,left,down,ambiguous,up" | "none,right,left,down,up,ambiguous" | "none,right,down,ambiguous,left" | "none,right,down,left,ambiguous" | "none,right,up,ambiguous,left" | "none,right,up,ambiguous,left,down" | "none,right,up,ambiguous,down,left" | "none,right,up,left,ambiguous" | "none,right,up,left,ambiguous,down" | "none,right,up,left,down,ambiguous" | "none,right,up,down,ambiguous,left" | "none,right,up,down,left,ambiguous" | "none,right,down,ambiguous,left,up" | "none,right,down,ambiguous,up,left" | "none,right,down,left,ambiguous,up" | "none,right,down,left,up,ambiguous" | "none,right,down,up,ambiguous,left" | "none,right,down,up,left,ambiguous" | "none,down,ambiguous,left,right" | "none,down,ambiguous,right,left" | "none,down,left,ambiguous,right" | "none,down,left,right,ambiguous" | "none,down,right,ambiguous,left" | "none,down,right,left,ambiguous" | "none,up,ambiguous,left,right" | "none,up,ambiguous,left,right,down" | "none,up,ambiguous,left,down,right" | "none,up,ambiguous,right,left" | "none,up,ambiguous,right,left,down" | "none,up,ambiguous,right,down,left" | "none,up,ambiguous,down,left,right" | "none,up,ambiguous,down,right,left" | "none,up,left,ambiguous,right" | "none,up,left,ambiguous,right,down" | "none,up,left,ambiguous,down,right" | "none,up,left,right,ambiguous" | "none,up,left,right,ambiguous,down" | "none,up,left,right,down,ambiguous" | "none,up,left,down,ambiguous,right" | "none,up,left,down,right,ambiguous" | "none,up,right,ambiguous,left" | "none,up,right,ambiguous,left,down" | "none,up,right,ambiguous,down,left" | "none,up,right,left,ambiguous" | "none,up,right,left,ambiguous,down" | "none,up,right,left,down,ambiguous" | "none,up,right,down,ambiguous,left" | "none,up,right,down,left,ambiguous" | "none,up,down,ambiguous,left,right" | "none,up,down,ambiguous,right,left" | "none,up,down,left,ambiguous,right" | "none,up,down,left,right,ambiguous" | "none,up,down,right,ambiguous,left" | "none,up,down,right,left,ambiguous" | "none,down,ambiguous,left,right,up" | "none,down,ambiguous,left,up,right" | "none,down,ambiguous,right,left,up" | "none,down,ambiguous,right,up,left" | "none,down,ambiguous,up,left,right" | "none,down,ambiguous,up,right,left" | "none,down,left,ambiguous,right,up" | "none,down,left,ambiguous,up,right" | "none,down,left,right,ambiguous,up" | "none,down,left,right,up,ambiguous" | "none,down,left,up,ambiguous,right" | "none,down,left,up,right,ambiguous" | "none,down,right,ambiguous,left,up" | "none,down,right,ambiguous,up,left" | "none,down,right,left,ambiguous,up" | "none,down,right,left,up,ambiguous" | "none,down,right,up,ambiguous,left" | "none,down,right,up,left,ambiguous" | "none,down,up,ambiguous,left,right" | "none,down,up,ambiguous,right,left" | "none,down,up,left,ambiguous,right" | "none,down,up,left,right,ambiguous" | "none,down,up,right,ambiguous,left" | "none,down,up,right,left,ambiguous" | "ambiguous,none" | "down,none" | "down,none,ambiguous" | "down,ambiguous,none" | "ambiguous,none,down" | "ambiguous,down,none" | "up,none" | "up,none,down" | "up,none,ambiguous" | "up,none,ambiguous,down" | "up,none,down,ambiguous" | "up,ambiguous,none" | "up,down,none" | "up,down,none,ambiguous" | "up,down,ambiguous,none" | "up,ambiguous,none,down" | "up,ambiguous,down,none" | "ambiguous,none,up" | "ambiguous,up,none" | "down,none,up" | "down,none,ambiguous,up" | "down,none,up,ambiguous" | "down,up,none" | "down,up,none,ambiguous" | "down,up,ambiguous,none" | "down,ambiguous,none,up" | "down,ambiguous,up,none" | "ambiguous,none,up,down" | "ambiguous,none,down,up" | "ambiguous,up,none,down" | "ambiguous,up,down,none" | "ambiguous,down,none,up" | "ambiguous,down,up,none" | "right,none" | "right,none,up" | "right,none,down" | "right,none,ambiguous" | "right,none,up,down" | "right,none,down,up" | "right,none,ambiguous,up" | "right,none,ambiguous,down" | "right,none,ambiguous,up,down" | "right,none,ambiguous,down,up" | "right,none,down,ambiguous" | "right,none,up,ambiguous" | "right,none,up,ambiguous,down" | "right,none,up,down,ambiguous" | "right,none,down,ambiguous,up" | "right,none,down,up,ambiguous" | "right,ambiguous,none" | "right,down,none" | "right,down,none,ambiguous" | "right,down,ambiguous,none" | "right,ambiguous,none,down" | "right,ambiguous,down,none" | "right,up,none" | "right,up,none,down" | "right,up,none,ambiguous" | "right,up,none,ambiguous,down" | "right,up,none,down,ambiguous" | "right,up,ambiguous,none" | "right,up,down,none" | "right,up,down,none,ambiguous" | "right,up,down,ambiguous,none" | "right,up,ambiguous,none,down" | "right,up,ambiguous,down,none" | "right,ambiguous,none,up" | "right,ambiguous,up,none" | "right,down,none,up" | "right,down,none,ambiguous,up" | "right,down,none,up,ambiguous" | "right,down,up,none" | "right,down,up,none,ambiguous" | "right,down,up,ambiguous,none" | "right,down,ambiguous,none,up" | "right,down,ambiguous,up,none" | "right,ambiguous,none,up,down" | "right,ambiguous,none,down,up" | "right,ambiguous,up,none,down" | "right,ambiguous,up,down,none" | "right,ambiguous,down,none,up" | "right,ambiguous,down,up,none" | "ambiguous,none,right" | "ambiguous,right,none" | "down,none,right" | "down,none,ambiguous,right" | "down,none,right,ambiguous" | "down,right,none" | "down,right,none,ambiguous" | "down,right,ambiguous,none" | "down,ambiguous,none,right" | "down,ambiguous,right,none" | "ambiguous,none,right,down" | "ambiguous,none,down,right" | "ambiguous,right,none,down" | "ambiguous,right,down,none" | "ambiguous,down,none,right" | "ambiguous,down,right,none" | "up,none,right" | "up,none,right,down" | "up,none,down,right" | "up,none,ambiguous,right" | "up,none,ambiguous,right,down" | "up,none,ambiguous,down,right" | "up,none,right,ambiguous" | "up,none,right,ambiguous,down" | "up,none,right,down,ambiguous" | "up,none,down,ambiguous,right" | "up,none,down,right,ambiguous" | "up,right,none" | "up,right,none,down" | "up,right,none,ambiguous" | "up,right,none,ambiguous,down" | "up,right,none,down,ambiguous" | "up,right,ambiguous,none" | "up,right,down,none" | "up,right,down,none,ambiguous" | "up,right,down,ambiguous,none" | "up,right,ambiguous,none,down" | "up,right,ambiguous,down,none" | "up,ambiguous,none,right" | "up,ambiguous,right,none" | "up,down,none,right" | "up,down,none,ambiguous,right" | "up,down,none,right,ambiguous" | "up,down,right,none" | "up,down,right,none,ambiguous" | "up,down,right,ambiguous,none" | "up,down,ambiguous,none,right" | "up,down,ambiguous,right,none" | "up,ambiguous,none,right,down" | "up,ambiguous,none,down,right" | "up,ambiguous,right,none,down" | "up,ambiguous,right,down,none" | "up,ambiguous,down,none,right" | "up,ambiguous,down,right,none" | "ambiguous,none,right,up" | "ambiguous,none,up,right" | "ambiguous,right,none,up" | "ambiguous,right,up,none" | "ambiguous,up,none,right" | "ambiguous,up,right,none" | "down,none,right,up" | "down,none,up,right" | "down,none,ambiguous,right,up" | "down,none,ambiguous,up,right" | "down,none,right,ambiguous,up" | "down,none,right,up,ambiguous" | "down,none,up,ambiguous,right" | "down,none,up,right,ambiguous" | "down,right,none,up" | "down,right,none,ambiguous,up" | "down,right,none,up,ambiguous" | "down,right,up,none" | "down,right,up,none,ambiguous" | "down,right,up,ambiguous,none" | "down,right,ambiguous,none,up" | "down,right,ambiguous,up,none" | "down,up,none,right" | "down,up,none,ambiguous,right" | "down,up,none,right,ambiguous" | "down,up,right,none" | "down,up,right,none,ambiguous" | "down,up,right,ambiguous,none" | "down,up,ambiguous,none,right" | "down,up,ambiguous,right,none" | "down,ambiguous,none,right,up" | "down,ambiguous,none,up,right" | "down,ambiguous,right,none,up" | "down,ambiguous,right,up,none" | "down,ambiguous,up,none,right" | "down,ambiguous,up,right,none" | "ambiguous,none,right,up,down" | "ambiguous,none,right,down,up" | "ambiguous,none,up,right,down" | "ambiguous,none,up,down,right" | "ambiguous,none,down,right,up" | "ambiguous,none,down,up,right" | "ambiguous,right,none,up,down" | "ambiguous,right,none,down,up" | "ambiguous,right,up,none,down" | "ambiguous,right,up,down,none" | "ambiguous,right,down,none,up" | "ambiguous,right,down,up,none" | "ambiguous,up,none,right,down" | "ambiguous,up,none,down,right" | "ambiguous,up,right,none,down" | "ambiguous,up,right,down,none" | "ambiguous,up,down,none,right" | "ambiguous,up,down,right,none" | "ambiguous,down,none,right,up" | "ambiguous,down,none,up,right" | "ambiguous,down,right,none,up" | "ambiguous,down,right,up,none" | "ambiguous,down,up,none,right" | "ambiguous,down,up,right,none" | "left,none" | "left,none,right" | "left,none,up" | "left,none,down" | "left,none,ambiguous" | "left,none,up,down" | "left,none,down,up" | "left,none,right,up" | "left,none,right,down" | "left,none,right,up,down" | "left,none,right,down,up" | "left,none,down,right" | "left,none,up,right" | "left,none,up,right,down" | "left,none,up,down,right" | "left,none,down,right,up" | "left,none,down,up,right" | "left,none,ambiguous,right" | "left,none,ambiguous,up" | "left,none,ambiguous,down" | "left,none,ambiguous,up,down" | "left,none,ambiguous,down,up" | "left,none,ambiguous,right,up" | "left,none,ambiguous,right,down" | "left,none,ambiguous,right,up,down" | "left,none,ambiguous,right,down,up" | "left,none,ambiguous,down,right" | "left,none,ambiguous,up,right" | "left,none,ambiguous,up,right,down" | "left,none,ambiguous,up,down,right" | "left,none,ambiguous,down,right,up" | "left,none,ambiguous,down,up,right" | "left,none,down,ambiguous" | "left,none,up,ambiguous" | "left,none,up,ambiguous,down" | "left,none,up,down,ambiguous" | "left,none,down,ambiguous,up" | "left,none,down,up,ambiguous" | "left,none,right,ambiguous" | "left,none,right,ambiguous,up" | "left,none,right,ambiguous,down" | "left,none,right,ambiguous,up,down" | "left,none,right,ambiguous,down,up" | "left,none,right,down,ambiguous" | "left,none,right,up,ambiguous" | "left,none,right,up,ambiguous,down" | "left,none,right,up,down,ambiguous" | "left,none,right,down,ambiguous,up" | "left,none,right,down,up,ambiguous" | "left,none,down,ambiguous,right" | "left,none,down,right,ambiguous" | "left,none,up,ambiguous,right" | "left,none,up,ambiguous,right,down" | "left,none,up,ambiguous,down,right" | "left,none,up,right,ambiguous" | "left,none,up,right,ambiguous,down" | "left,none,up,right,down,ambiguous" | "left,none,up,down,ambiguous,right" | "left,none,up,down,right,ambiguous" | "left,none,down,ambiguous,right,up" | "left,none,down,ambiguous,up,right" | "left,none,down,right,ambiguous,up" | "left,none,down,right,up,ambiguous" | "left,none,down,up,ambiguous,right" | "left,none,down,up,right,ambiguous" | "left,ambiguous,none" | "left,down,none" | "left,down,none,ambiguous" | "left,down,ambiguous,none" | "left,ambiguous,none,down" | "left,ambiguous,down,none" | "left,up,none" | "left,up,none,down" | "left,up,none,ambiguous" | "left,up,none,ambiguous,down" | "left,up,none,down,ambiguous" | "left,up,ambiguous,none" | "left,up,down,none" | "left,up,down,none,ambiguous" | "left,up,down,ambiguous,none" | "left,up,ambiguous,none,down" | "left,up,ambiguous,down,none" | "left,ambiguous,none,up" | "left,ambiguous,up,none" | "left,down,none,up" | "left,down,none,ambiguous,up" | "left,down,none,up,ambiguous" | "left,down,up,none" | "left,down,up,none,ambiguous" | "left,down,up,ambiguous,none" | "left,down,ambiguous,none,up" | "left,down,ambiguous,up,none" | "left,ambiguous,none,up,down" | "left,ambiguous,none,down,up" | "left,ambiguous,up,none,down" | "left,ambiguous,up,down,none" | "left,ambiguous,down,none,up" | "left,ambiguous,down,up,none" | "left,right,none" | "left,right,none,up" | "left,right,none,down" | "left,right,none,ambiguous" | "left,right,none,up,down" | "left,right,none,down,up" | "left,right,none,ambiguous,up" | "left,right,none,ambiguous,down" | "left,right,none,ambiguous,up,down" | "left,right,none,ambiguous,down,up" | "left,right,none,down,ambiguous" | "left,right,none,up,ambiguous" | "left,right,none,up,ambiguous,down" | "left,right,none,up,down,ambiguous" | "left,right,none,down,ambiguous,up" | "left,right,none,down,up,ambiguous" | "left,right,ambiguous,none" | "left,right,down,none" | "left,right,down,none,ambiguous" | "left,right,down,ambiguous,none" | "left,right,ambiguous,none,down" | "left,right,ambiguous,down,none" | "left,right,up,none" | "left,right,up,none,down" | "left,right,up,none,ambiguous" | "left,right,up,none,ambiguous,down" | "left,right,up,none,down,ambiguous" | "left,right,up,ambiguous,none" | "left,right,up,down,none" | "left,right,up,down,none,ambiguous" | "left,right,up,down,ambiguous,none" | "left,right,up,ambiguous,none,down" | "left,right,up,ambiguous,down,none" | "left,right,ambiguous,none,up" | "left,right,ambiguous,up,none" | "left,right,down,none,up" | "left,right,down,none,ambiguous,up" | "left,right,down,none,up,ambiguous" | "left,right,down,up,none" | "left,right,down,up,none,ambiguous" | "left,right,down,up,ambiguous,none" | "left,right,down,ambiguous,none,up" | "left,right,down,ambiguous,up,none" | "left,right,ambiguous,none,up,down" | "left,right,ambiguous,none,down,up" | "left,right,ambiguous,up,none,down" | "left,right,ambiguous,up,down,none" | "left,right,ambiguous,down,none,up" | "left,right,ambiguous,down,up,none" | "left,ambiguous,none,right" | "left,ambiguous,right,none" | "left,down,none,right" | "left,down,none,ambiguous,right" | "left,down,none,right,ambiguous" | "left,down,right,none" | "left,down,right,none,ambiguous" | "left,down,right,ambiguous,none" | "left,down,ambiguous,none,right" | "left,down,ambiguous,right,none" | "left,ambiguous,none,right,down" | "left,ambiguous,none,down,right" | "left,ambiguous,right,none,down" | "left,ambiguous,right,down,none" | "left,ambiguous,down,none,right" | "left,ambiguous,down,right,none" | "left,up,none,right" | "left,up,none,right,down" | "left,up,none,down,right" | "left,up,none,ambiguous,right" | "left,up,none,ambiguous,right,down" | "left,up,none,ambiguous,down,right" | "left,up,none,right,ambiguous" | "left,up,none,right,ambiguous,down" | "left,up,none,right,down,ambiguous" | "left,up,none,down,ambiguous,right" | "left,up,none,down,right,ambiguous" | "left,up,right,none" | "left,up,right,none,down" | "left,up,right,none,ambiguous" | "left,up,right,none,ambiguous,down" | "left,up,right,none,down,ambiguous" | "left,up,right,ambiguous,none" | "left,up,right,down,none" | "left,up,right,down,none,ambiguous" | "left,up,right,down,ambiguous,none" | "left,up,right,ambiguous,none,down" | "left,up,right,ambiguous,down,none" | "left,up,ambiguous,none,right" | "left,up,ambiguous,right,none" | "left,up,down,none,right" | "left,up,down,none,ambiguous,right" | "left,up,down,none,right,ambiguous" | "left,up,down,right,none" | "left,up,down,right,none,ambiguous" | "left,up,down,right,ambiguous,none" | "left,up,down,ambiguous,none,right" | "left,up,down,ambiguous,right,none" | "left,up,ambiguous,none,right,down" | "left,up,ambiguous,none,down,right" | "left,up,ambiguous,right,none,down" | "left,up,ambiguous,right,down,none" | "left,up,ambiguous,down,none,right" | "left,up,ambiguous,down,right,none" | "left,ambiguous,none,right,up" | "left,ambiguous,none,up,right" | "left,ambiguous,right,none,up" | "left,ambiguous,right,up,none" | "left,ambiguous,up,none,right" | "left,ambiguous,up,right,none" | "left,down,none,right,up" | "left,down,none,up,right" | "left,down,none,ambiguous,right,up" | "left,down,none,ambiguous,up,right" | "left,down,none,right,ambiguous,up" | "left,down,none,right,up,ambiguous" | "left,down,none,up,ambiguous,right" | "left,down,none,up,right,ambiguous" | "left,down,right,none,up" | "left,down,right,none,ambiguous,up" | "left,down,right,none,up,ambiguous" | "left,down,right,up,none" | "left,down,right,up,none,ambiguous" | "left,down,right,up,ambiguous,none" | "left,down,right,ambiguous,none,up" | "left,down,right,ambiguous,up,none" | "left,down,up,none,right" | "left,down,up,none,ambiguous,right" | "left,down,up,none,right,ambiguous" | "left,down,up,right,none" | "left,down,up,right,none,ambiguous" | "left,down,up,right,ambiguous,none" | "left,down,up,ambiguous,none,right" | "left,down,up,ambiguous,right,none" | "left,down,ambiguous,none,right,up" | "left,down,ambiguous,none,up,right" | "left,down,ambiguous,right,none,up" | "left,down,ambiguous,right,up,none" | "left,down,ambiguous,up,none,right" | "left,down,ambiguous,up,right,none" | "left,ambiguous,none,right,up,down" | "left,ambiguous,none,right,down,up" | "left,ambiguous,none,up,right,down" | "left,ambiguous,none,up,down,right" | "left,ambiguous,none,down,right,up" | "left,ambiguous,none,down,up,right" | "left,ambiguous,right,none,up,down" | "left,ambiguous,right,none,down,up" | "left,ambiguous,right,up,none,down" | "left,ambiguous,right,up,down,none" | "left,ambiguous,right,down,none,up" | "left,ambiguous,right,down,up,none" | "left,ambiguous,up,none,right,down" | "left,ambiguous,up,none,down,right" | "left,ambiguous,up,right,none,down" | "left,ambiguous,up,right,down,none" | "left,ambiguous,up,down,none,right" | "left,ambiguous,up,down,right,none" | "left,ambiguous,down,none,right,up" | "left,ambiguous,down,none,up,right" | "left,ambiguous,down,right,none,up" | "left,ambiguous,down,right,up,none" | "left,ambiguous,down,up,none,right" | "left,ambiguous,down,up,right,none" | "ambiguous,none,left" | "ambiguous,left,none" | "down,none,left" | "down,none,ambiguous,left" | "down,none,left,ambiguous" | "down,left,none" | "down,left,none,ambiguous" | "down,left,ambiguous,none" | "down,ambiguous,none,left" | "down,ambiguous,left,none" | "ambiguous,none,left,down" | "ambiguous,none,down,left" | "ambiguous,left,none,down" | "ambiguous,left,down,none" | "ambiguous,down,none,left" | "ambiguous,down,left,none" | "up,none,left" | "up,none,left,down" | "up,none,down,left" | "up,none,ambiguous,left" | "up,none,ambiguous,left,down" | "up,none,ambiguous,down,left" | "up,none,left,ambiguous" | "up,none,left,ambiguous,down" | "up,none,left,down,ambiguous" | "up,none,down,ambiguous,left" | "up,none,down,left,ambiguous" | "up,left,none" | "up,left,none,down" | "up,left,none,ambiguous" | "up,left,none,ambiguous,down" | "up,left,none,down,ambiguous" | "up,left,ambiguous,none" | "up,left,down,none" | "up,left,down,none,ambiguous" | "up,left,down,ambiguous,none" | "up,left,ambiguous,none,down" | "up,left,ambiguous,down,none" | "up,ambiguous,none,left" | "up,ambiguous,left,none" | "up,down,none,left" | "up,down,none,ambiguous,left" | "up,down,none,left,ambiguous" | "up,down,left,none" | "up,down,left,none,ambiguous" | "up,down,left,ambiguous,none" | "up,down,ambiguous,none,left" | "up,down,ambiguous,left,none" | "up,ambiguous,none,left,down" | "up,ambiguous,none,down,left" | "up,ambiguous,left,none,down" | "up,ambiguous,left,down,none" | "up,ambiguous,down,none,left" | "up,ambiguous,down,left,none" | "ambiguous,none,left,up" | "ambiguous,none,up,left" | "ambiguous,left,none,up" | "ambiguous,left,up,none" | "ambiguous,up,none,left" | "ambiguous,up,left,none" | "down,none,left,up" | "down,none,up,left" | "down,none,ambiguous,left,up" | "down,none,ambiguous,up,left" | "down,none,left,ambiguous,up" | "down,none,left,up,ambiguous" | "down,none,up,ambiguous,left" | "down,none,up,left,ambiguous" | "down,left,none,up" | "down,left,none,ambiguous,up" | "down,left,none,up,ambiguous" | "down,left,up,none" | "down,left,up,none,ambiguous" | "down,left,up,ambiguous,none" | "down,left,ambiguous,none,up" | "down,left,ambiguous,up,none" | "down,up,none,left" | "down,up,none,ambiguous,left" | "down,up,none,left,ambiguous" | "down,up,left,none" | "down,up,left,none,ambiguous" | "down,up,left,ambiguous,none" | "down,up,ambiguous,none,left" | "down,up,ambiguous,left,none" | "down,ambiguous,none,left,up" | "down,ambiguous,none,up,left" | "down,ambiguous,left,none,up" | "down,ambiguous,left,up,none" | "down,ambiguous,up,none,left" | "down,ambiguous,up,left,none" | "ambiguous,none,left,up,down" | "ambiguous,none,left,down,up" | "ambiguous,none,up,left,down" | "ambiguous,none,up,down,left" | "ambiguous,none,down,left,up" | "ambiguous,none,down,up,left" | "ambiguous,left,none,up,down" | "ambiguous,left,none,down,up" | "ambiguous,left,up,none,down" | "ambiguous,left,up,down,none" | "ambiguous,left,down,none,up" | "ambiguous,left,down,up,none" | "ambiguous,up,none,left,down" | "ambiguous,up,none,down,left" | "ambiguous,up,left,none,down" | "ambiguous,up,left,down,none" | "ambiguous,up,down,none,left" | "ambiguous,up,down,left,none" | "ambiguous,down,none,left,up" | "ambiguous,down,none,up,left" | "ambiguous,down,left,none,up" | "ambiguous,down,left,up,none" | "ambiguous,down,up,none,left" | "ambiguous,down,up,left,none" | "right,none,left" | "right,none,left,up" | "right,none,left,down" | "right,none,left,up,down" | "right,none,left,down,up" | "right,none,down,left" | "right,none,up,left" | "right,none,up,left,down" | "right,none,up,down,left" | "right,none,down,left,up" | "right,none,down,up,left" | "right,none,ambiguous,left" | "right,none,ambiguous,left,up" | "right,none,ambiguous,left,down" | "right,none,ambiguous,left,up,down" | "right,none,ambiguous,left,down,up" | "right,none,ambiguous,down,left" | "right,none,ambiguous,up,left" | "right,none,ambiguous,up,left,down" | "right,none,ambiguous,up,down,left" | "right,none,ambiguous,down,left,up" | "right,none,ambiguous,down,up,left" | "right,none,left,ambiguous" | "right,none,left,ambiguous,up" | "right,none,left,ambiguous,down" | "right,none,left,ambiguous,up,down" | "right,none,left,ambiguous,down,up" | "right,none,left,down,ambiguous" | "right,none,left,up,ambiguous" | "right,none,left,up,ambiguous,down" | "right,none,left,up,down,ambiguous" | "right,none,left,down,ambiguous,up" | "right,none,left,down,up,ambiguous" | "right,none,down,ambiguous,left" | "right,none,down,left,ambiguous" | "right,none,up,ambiguous,left" | "right,none,up,ambiguous,left,down" | "right,none,up,ambiguous,down,left" | "right,none,up,left,ambiguous" | "right,none,up,left,ambiguous,down" | "right,none,up,left,down,ambiguous" | "right,none,up,down,ambiguous,left" | "right,none,up,down,left,ambiguous" | "right,none,down,ambiguous,left,up" | "right,none,down,ambiguous,up,left" | "right,none,down,left,ambiguous,up" | "right,none,down,left,up,ambiguous" | "right,none,down,up,ambiguous,left" | "right,none,down,up,left,ambiguous" | "right,left,none" | "right,left,none,up" | "right,left,none,down" | "right,left,none,ambiguous" | "right,left,none,up,down" | "right,left,none,down,up" | "right,left,none,ambiguous,up" | "right,left,none,ambiguous,down" | "right,left,none,ambiguous,up,down" | "right,left,none,ambiguous,down,up" | "right,left,none,down,ambiguous" | "right,left,none,up,ambiguous" | "right,left,none,up,ambiguous,down" | "right,left,none,up,down,ambiguous" | "right,left,none,down,ambiguous,up" | "right,left,none,down,up,ambiguous" | "right,left,ambiguous,none" | "right,left,down,none" | "right,left,down,none,ambiguous" | "right,left,down,ambiguous,none" | "right,left,ambiguous,none,down" | "right,left,ambiguous,down,none" | "right,left,up,none" | "right,left,up,none,down" | "right,left,up,none,ambiguous" | "right,left,up,none,ambiguous,down" | "right,left,up,none,down,ambiguous" | "right,left,up,ambiguous,none" | "right,left,up,down,none" | "right,left,up,down,none,ambiguous" | "right,left,up,down,ambiguous,none" | "right,left,up,ambiguous,none,down" | "right,left,up,ambiguous,down,none" | "right,left,ambiguous,none,up" | "right,left,ambiguous,up,none" | "right,left,down,none,up" | "right,left,down,none,ambiguous,up" | "right,left,down,none,up,ambiguous" | "right,left,down,up,none" | "right,left,down,up,none,ambiguous" | "right,left,down,up,ambiguous,none" | "right,left,down,ambiguous,none,up" | "right,left,down,ambiguous,up,none" | "right,left,ambiguous,none,up,down" | "right,left,ambiguous,none,down,up" | "right,left,ambiguous,up,none,down" | "right,left,ambiguous,up,down,none" | "right,left,ambiguous,down,none,up" | "right,left,ambiguous,down,up,none" | "right,ambiguous,none,left" | "right,ambiguous,left,none" | "right,down,none,left" | "right,down,none,ambiguous,left" | "right,down,none,left,ambiguous" | "right,down,left,none" | "right,down,left,none,ambiguous" | "right,down,left,ambiguous,none" | "right,down,ambiguous,none,left" | "right,down,ambiguous,left,none" | "right,ambiguous,none,left,down" | "right,ambiguous,none,down,left" | "right,ambiguous,left,none,down" | "right,ambiguous,left,down,none" | "right,ambiguous,down,none,left" | "right,ambiguous,down,left,none" | "right,up,none,left" | "right,up,none,left,down" | "right,up,none,down,left" | "right,up,none,ambiguous,left" | "right,up,none,ambiguous,left,down" | "right,up,none,ambiguous,down,left" | "right,up,none,left,ambiguous" | "right,up,none,left,ambiguous,down" | "right,up,none,left,down,ambiguous" | "right,up,none,down,ambiguous,left" | "right,up,none,down,left,ambiguous" | "right,up,left,none" | "right,up,left,none,down" | "right,up,left,none,ambiguous" | "right,up,left,none,ambiguous,down" | "right,up,left,none,down,ambiguous" | "right,up,left,ambiguous,none" | "right,up,left,down,none" | "right,up,left,down,none,ambiguous" | "right,up,left,down,ambiguous,none" | "right,up,left,ambiguous,none,down" | "right,up,left,ambiguous,down,none" | "right,up,ambiguous,none,left" | "right,up,ambiguous,left,none" | "right,up,down,none,left" | "right,up,down,none,ambiguous,left" | "right,up,down,none,left,ambiguous" | "right,up,down,left,none" | "right,up,down,left,none,ambiguous" | "right,up,down,left,ambiguous,none" | "right,up,down,ambiguous,none,left" | "right,up,down,ambiguous,left,none" | "right,up,ambiguous,none,left,down" | "right,up,ambiguous,none,down,left" | "right,up,ambiguous,left,none,down" | "right,up,ambiguous,left,down,none" | "right,up,ambiguous,down,none,left" | "right,up,ambiguous,down,left,none" | "right,ambiguous,none,left,up" | "right,ambiguous,none,up,left" | "right,ambiguous,left,none,up" | "right,ambiguous,left,up,none" | "right,ambiguous,up,none,left" | "right,ambiguous,up,left,none" | "right,down,none,left,up" | "right,down,none,up,left" | "right,down,none,ambiguous,left,up" | "right,down,none,ambiguous,up,left" | "right,down,none,left,ambiguous,up" | "right,down,none,left,up,ambiguous" | "right,down,none,up,ambiguous,left" | "right,down,none,up,left,ambiguous" | "right,down,left,none,up" | "right,down,left,none,ambiguous,up" | "right,down,left,none,up,ambiguous" | "right,down,left,up,none" | "right,down,left,up,none,ambiguous" | "right,down,left,up,ambiguous,none" | "right,down,left,ambiguous,none,up" | "right,down,left,ambiguous,up,none" | "right,down,up,none,left" | "right,down,up,none,ambiguous,left" | "right,down,up,none,left,ambiguous" | "right,down,up,left,none" | "right,down,up,left,none,ambiguous" | "right,down,up,left,ambiguous,none" | "right,down,up,ambiguous,none,left" | "right,down,up,ambiguous,left,none" | "right,down,ambiguous,none,left,up" | "right,down,ambiguous,none,up,left" | "right,down,ambiguous,left,none,up" | "right,down,ambiguous,left,up,none" | "right,down,ambiguous,up,none,left" | "right,down,ambiguous,up,left,none" | "right,ambiguous,none,left,up,down" | "right,ambiguous,none,left,down,up" | "right,ambiguous,none,up,left,down" | "right,ambiguous,none,up,down,left" | "right,ambiguous,none,down,left,up" | "right,ambiguous,none,down,up,left" | "right,ambiguous,left,none,up,down" | "right,ambiguous,left,none,down,up" | "right,a