UNPKG

extra-boolean

Version:

[Boolean] data type has two possible truth values to represent logic.<br>

206 lines 18.9 kB
// METHODS // ======= // ABOUT // ----- /** * Check if a value is boolean. * @param v a value * @returns is boolean? */ export function is(v) { return typeof v === "boolean"; } const RNUMBER = /^[-+]?\d+$/; const RTRUE = /\b(?:t|y|1)\b|\b(?:\+|ay|go|on|up)|(?:tru|acc|asc|day|for|hot|inc|joy|new|pos|top|win|yes|dawn|full|safe|grow|high|just|real|some|know|live|love|open|pure|shin|warm|wis[de]|activ|admit|advan|agree|begin|brigh|build|creat|early|enter|float|f(?:i|ou)nd|grant|light|north|prett|prese|publi|start|succe|victr)/gi; const RFALSE = /\b(?:f|n|0)\b|(?:fal|off|dim|end|low|old|back|cold|cool|dark|dead|decr|desc|dirt|down|dull|dusk|exit|late|sink|ugly|absen|botto|close|finis|night|priva|south|wrong)/gi; const RNEGATE = /\b(?:-|na|no|un|in|aft|bad|dis|lie|non|ben[dt]|den[iy]|empt|fail|fake|hate|los[es]|stop|decli|defea|destr|never|negat|refus|rejec|forget|shr[iu]nk|against|is.?nt|can.?(?:no)?t)|(?:hind)/gi; /** * Convert a string to boolean. * @param s a string * @returns s represents true? */ export function parse(s) { if (RNUMBER.test(s)) return parseInt(s, 10) > 0; var t = s.search(RTRUE) >= 0; var f = s.search(RFALSE) >= 0; var n = (s.match(RNEGATE) || []).length % 2 === 1; return nimply(f, t) === n; } // SINGLE // ------ /** * Check if a boolean is false. * @param a a boolean * @returns ¬a? */ export function not(a) { return !a; } /** * Check if antecedent ⇒ consequent. * @param a antecedent * @param b consequent * @returns a ⇒ b? */ export function imply(a, b) { return !a || b; } export { imply as imp }; /** * Check if antecedent ⇏ consequent. * @param a antecedent * @param b consequent * @returns a ⇏ b? */ export function nimply(a, b) { return !imply(a, b); } /** * Check if antecedent ⇔ consequent. * @param a antecedent * @param b consequent * @returns a ⇔ b? */ export function eq(a, b) { return a === b; } export { eq as eqv }; /** * Check if antecedent ⇎ consequent. * @param a antecedent * @param b consequent * @returns a ⇎ b? */ export function neq(a, b) { return !eq(a, b); } // BASIC // ----- /** * Check if all booleans are true. * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns a ^ b ^ ...? */ export function and(a = true, b = true, c = true, d = true, e = true, f = true, g = true, h = true) { return a && b && c && d && e && f && g && h; } /** * Check if any boolean is false. * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns ¬(a ^ b ^ ...)? */ export function nand(a = true, b = true, c = true, d = true, e = true, f = true, g = true, h = true) { return !and(a, b, c, d, e, f, g, h); } /** * Check if any boolean is true. * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns a ∨ b ∨ ...? */ export function or(a = false, b = false, c = false, d = false, e = false, f = false, g = false, h = false) { return a || b || c || d || e || f || g || h; } /** * Check if all booleans are false. * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns ¬(a ∨ b ∨ ...)? */ export function nor(a = false, b = false, c = false, d = false, e = false, f = false, g = false, h = false) { return !or(a, b, c, d, e, f, g, h); } /** * Check if odd number of booleans are true. * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns a ⊕ b ⊕ ...? */ export function xor(a = false, b = false, c = false, d = false, e = false, f = false, g = false, h = false) { return a !== b !== c !== d !== e !== f !== g !== h; } /** * Check if even number of booleans are true. * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns ¬(a ⊕ b ⊕ ...)? */ export function xnor(a = false, b = false, c = false, d = false, e = false, f = false, g = false, h = false) { return !xor(a, b, c, d, e, f, g, h); } // SPECIAL // ------- /** * Count number of true booleans. * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns a + b + ... */ export function count(a = false, b = false, c = false, d = false, e = false, f = false, g = false, h = false) { return (a ? 1 : 0) + (b ? 1 : 0) + (c ? 1 : 0) + (d ? 1 : 0) + (e ? 1 : 0) + (f ? 1 : 0) + (g ? 1 : 0) + (h ? 1 : 0); } /** * Check if iᵗʰ boolean is true. * @param i index * @param a 1st boolean * @param b 2nd boolean * @param c 3rd boolean * @param d 4th boolean * @param e 5th boolean * @param f 6th boolean * @param g 7th boolean * @param h 8th boolean * @returns iᵗʰ boolean */ export function select(i, a = false, b = false, c = false, d = false, e = false, f = false, g = false, h = false) { switch(i){ case 0: return a; case 1: return b; case 2: return c; case 3: return d; case 4: return e; case 5: return f; case 6: return g; case 7: return h; default: return false; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9leHRyYS1ib29sZWFuL2V4dHJhLWJvb2xlYW4vaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTUVUSE9EU1xuLy8gPT09PT09PVxuXG4vLyBBQk9VVFxuLy8gLS0tLS1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGJvb2xlYW4uXG4gKiBAcGFyYW0gdiBhIHZhbHVlXG4gKiBAcmV0dXJucyBpcyBib29sZWFuP1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXModjogYW55KTogdiBpcyBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2PT09XCJib29sZWFuXCI7XG59XG5cblxuY29uc3QgUk5VTUJFUiA9IC9eWy0rXT9cXGQrJC87XG5jb25zdCBSVFJVRSAgID0gL1xcYig/OnR8eXwxKVxcYnxcXGIoPzpcXCt8YXl8Z298b258dXApfCg/OnRydXxhY2N8YXNjfGRheXxmb3J8aG90fGluY3xqb3l8bmV3fHBvc3x0b3B8d2lufHllc3xkYXdufGZ1bGx8c2FmZXxncm93fGhpZ2h8anVzdHxyZWFsfHNvbWV8a25vd3xsaXZlfGxvdmV8b3BlbnxwdXJlfHNoaW58d2FybXx3aXNbZGVdfGFjdGl2fGFkbWl0fGFkdmFufGFncmVlfGJlZ2lufGJyaWdofGJ1aWxkfGNyZWF0fGVhcmx5fGVudGVyfGZsb2F0fGYoPzppfG91KW5kfGdyYW50fGxpZ2h0fG5vcnRofHByZXR0fHByZXNlfHB1YmxpfHN0YXJ0fHN1Y2NlfHZpY3RyKS9naTtcbmNvbnN0IFJGQUxTRSAgPSAvXFxiKD86ZnxufDApXFxifCg/OmZhbHxvZmZ8ZGltfGVuZHxsb3d8b2xkfGJhY2t8Y29sZHxjb29sfGRhcmt8ZGVhZHxkZWNyfGRlc2N8ZGlydHxkb3dufGR1bGx8ZHVza3xleGl0fGxhdGV8c2lua3x1Z2x5fGFic2VufGJvdHRvfGNsb3NlfGZpbmlzfG5pZ2h0fHByaXZhfHNvdXRofHdyb25nKS9naTtcbmNvbnN0IFJORUdBVEUgPSAvXFxiKD86LXxuYXxub3x1bnxpbnxhZnR8YmFkfGRpc3xsaWV8bm9ufGJlbltkdF18ZGVuW2l5XXxlbXB0fGZhaWx8ZmFrZXxoYXRlfGxvc1tlc118c3RvcHxkZWNsaXxkZWZlYXxkZXN0cnxuZXZlcnxuZWdhdHxyZWZ1c3xyZWplY3xmb3JnZXR8c2hyW2l1XW5rfGFnYWluc3R8aXMuP250fGNhbi4/KD86bm8pP3QpfCg/OmhpbmQpL2dpO1xuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYm9vbGVhbi5cbiAqIEBwYXJhbSBzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyBzIHJlcHJlc2VudHMgdHJ1ZT9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoUk5VTUJFUi50ZXN0KHMpKSByZXR1cm4gcGFyc2VJbnQocywgMTApID4gMDtcbiAgdmFyIHQgPSBzLnNlYXJjaChSVFJVRSkgID49IDA7XG4gIHZhciBmID0gcy5zZWFyY2goUkZBTFNFKSA+PSAwO1xuICB2YXIgbiA9IChzLm1hdGNoKFJORUdBVEUpfHxbXSkubGVuZ3RoICUgMiA9PT0gMTtcbiAgcmV0dXJuIG5pbXBseShmLCB0KSA9PT0gbjtcbn1cblxuXG5cblxuLy8gU0lOR0xFXG4vLyAtLS0tLS1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGJvb2xlYW4gaXMgZmFsc2UuXG4gKiBAcGFyYW0gYSBhIGJvb2xlYW5cbiAqIEByZXR1cm5zIMKsYT9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdChhOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhYTtcbn1cblxuXG4vKipcbiAqIENoZWNrIGlmIGFudGVjZWRlbnQg4oeSIGNvbnNlcXVlbnQuXG4gKiBAcGFyYW0gYSBhbnRlY2VkZW50XG4gKiBAcGFyYW0gYiBjb25zZXF1ZW50XG4gKiBAcmV0dXJucyBhIOKHkiBiP1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wbHkoYTogYm9vbGVhbiwgYjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICByZXR1cm4gIWEgfHwgYjtcbn1cbmV4cG9ydCB7aW1wbHkgYXMgaW1wfTtcblxuXG4vKipcbiAqIENoZWNrIGlmIGFudGVjZWRlbnQg4oePIGNvbnNlcXVlbnQuXG4gKiBAcGFyYW0gYSBhbnRlY2VkZW50XG4gKiBAcGFyYW0gYiBjb25zZXF1ZW50XG4gKiBAcmV0dXJucyBhIOKHjyBiP1xuICovXG5leHBvcnQgZnVuY3Rpb24gbmltcGx5KGE6IGJvb2xlYW4sIGI6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuICFpbXBseShhLCBiKTtcbn1cblxuXG4vKipcbiAqIENoZWNrIGlmIGFudGVjZWRlbnQg4oeUIGNvbnNlcXVlbnQuXG4gKiBAcGFyYW0gYSBhbnRlY2VkZW50XG4gKiBAcGFyYW0gYiBjb25zZXF1ZW50XG4gKiBAcmV0dXJucyBhIOKHlCBiP1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXEoYTogYm9vbGVhbiwgYjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cbmV4cG9ydCB7ZXEgYXMgZXF2fTtcblxuXG4vKipcbiAqIENoZWNrIGlmIGFudGVjZWRlbnQg4oeOIGNvbnNlcXVlbnQuXG4gKiBAcGFyYW0gYSBhbnRlY2VkZW50XG4gKiBAcGFyYW0gYiBjb25zZXF1ZW50XG4gKiBAcmV0dXJucyBhIOKHjiBiP1xuICovXG5leHBvcnQgZnVuY3Rpb24gbmVxKGE6IGJvb2xlYW4sIGI6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuICFlcShhLCBiKTtcbn1cblxuXG5cblxuLy8gQkFTSUNcbi8vIC0tLS0tXG5cbi8qKlxuICogQ2hlY2sgaWYgYWxsIGJvb2xlYW5zIGFyZSB0cnVlLlxuICogQHBhcmFtIGEgMXN0IGJvb2xlYW5cbiAqIEBwYXJhbSBiIDJuZCBib29sZWFuXG4gKiBAcGFyYW0gYyAzcmQgYm9vbGVhblxuICogQHBhcmFtIGQgNHRoIGJvb2xlYW5cbiAqIEBwYXJhbSBlIDV0aCBib29sZWFuXG4gKiBAcGFyYW0gZiA2dGggYm9vbGVhblxuICogQHBhcmFtIGcgN3RoIGJvb2xlYW5cbiAqIEBwYXJhbSBoIDh0aCBib29sZWFuXG4gKiBAcmV0dXJucyBhIF4gYiBeIC4uLj9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuZChhOiBib29sZWFuPXRydWUsIGI6IGJvb2xlYW49dHJ1ZSwgYzpib29sZWFuPXRydWUsIGQ6IGJvb2xlYW49dHJ1ZSxcbiAgZTogYm9vbGVhbj10cnVlLCBmOiBib29sZWFuPXRydWUsIGc6Ym9vbGVhbj10cnVlLCBoOiBib29sZWFuPXRydWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGEgJiYgYiAmJiBjICYmIGQgJiYgZSAmJiBmICYmIGcgJiYgaDtcbn1cblxuXG4vKipcbiAqIENoZWNrIGlmIGFueSBib29sZWFuIGlzIGZhbHNlLlxuICogQHBhcmFtIGEgMXN0IGJvb2xlYW5cbiAqIEBwYXJhbSBiIDJuZCBib29sZWFuXG4gKiBAcGFyYW0gYyAzcmQgYm9vbGVhblxuICogQHBhcmFtIGQgNHRoIGJvb2xlYW5cbiAqIEBwYXJhbSBlIDV0aCBib29sZWFuXG4gKiBAcGFyYW0gZiA2dGggYm9vbGVhblxuICogQHBhcmFtIGcgN3RoIGJvb2xlYW5cbiAqIEBwYXJhbSBoIDh0aCBib29sZWFuXG4gKiBAcmV0dXJucyDCrChhIF4gYiBeIC4uLik/XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW5kKGE6IGJvb2xlYW49dHJ1ZSwgYjogYm9vbGVhbj10cnVlLCBjOmJvb2xlYW49dHJ1ZSwgZDogYm9vbGVhbj10cnVlLFxuICBlOiBib29sZWFuPXRydWUsIGY6IGJvb2xlYW49dHJ1ZSwgZzpib29sZWFuPXRydWUsIGg6IGJvb2xlYW49dHJ1ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gIWFuZChhLCBiLCBjLCBkLCBlLCBmLCBnLCBoKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbnkgYm9vbGVhbiBpcyB0cnVlLlxuICogQHBhcmFtIGEgMXN0IGJvb2xlYW5cbiAqIEBwYXJhbSBiIDJuZCBib29sZWFuXG4gKiBAcGFyYW0gYyAzcmQgYm9vbGVhblxuICogQHBhcmFtIGQgNHRoIGJvb2xlYW5cbiAqIEBwYXJhbSBlIDV0aCBib29sZWFuXG4gKiBAcGFyYW0gZiA2dGggYm9vbGVhblxuICogQHBhcmFtIGcgN3RoIGJvb2xlYW5cbiAqIEBwYXJhbSBoIDh0aCBib29sZWFuXG4gKiBAcmV0dXJucyBhIOKIqCBiIOKIqCAuLi4/XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcihhOiBib29sZWFuPWZhbHNlLCBiOiBib29sZWFuPWZhbHNlLCBjOmJvb2xlYW49ZmFsc2UsIGQ6IGJvb2xlYW49ZmFsc2UsXG4gIGU6IGJvb2xlYW49ZmFsc2UsIGY6IGJvb2xlYW49ZmFsc2UsIGc6Ym9vbGVhbj1mYWxzZSwgaDogYm9vbGVhbj1mYWxzZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYSB8fCBiIHx8IGMgfHwgZCB8fCBlIHx8IGYgfHwgZyB8fCBoO1xufVxuXG5cbi8qKlxuICogQ2hlY2sgaWYgYWxsIGJvb2xlYW5zIGFyZSBmYWxzZS5cbiAqIEBwYXJhbSBhIDFzdCBib29sZWFuXG4gKiBAcGFyYW0gYiAybmQgYm9vbGVhblxuICogQHBhcmFtIGMgM3JkIGJvb2xlYW5cbiAqIEBwYXJhbSBkIDR0aCBib29sZWFuXG4gKiBAcGFyYW0gZSA1dGggYm9vbGVhblxuICogQHBhcmFtIGYgNnRoIGJvb2xlYW5cbiAqIEBwYXJhbSBnIDd0aCBib29sZWFuXG4gKiBAcGFyYW0gaCA4dGggYm9vbGVhblxuICogQHJldHVybnMgwqwoYSDiiKggYiDiiKggLi4uKT9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcihhOiBib29sZWFuPWZhbHNlLCBiOiBib29sZWFuPWZhbHNlLCBjOmJvb2xlYW49ZmFsc2UsIGQ6IGJvb2xlYW49ZmFsc2UsXG4gIGU6IGJvb2xlYW49ZmFsc2UsIGY6IGJvb2xlYW49ZmFsc2UsIGc6Ym9vbGVhbj1mYWxzZSwgaDogYm9vbGVhbj1mYWxzZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW9yKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpO1xufVxuXG5cbi8qKlxuICogQ2hlY2sgaWYgb2RkIG51bWJlciBvZiBib29sZWFucyBhcmUgdHJ1ZS5cbiAqIEBwYXJhbSBhIDFzdCBib29sZWFuXG4gKiBAcGFyYW0gYiAybmQgYm9vbGVhblxuICogQHBhcmFtIGMgM3JkIGJvb2xlYW5cbiAqIEBwYXJhbSBkIDR0aCBib29sZWFuXG4gKiBAcGFyYW0gZSA1dGggYm9vbGVhblxuICogQHBhcmFtIGYgNnRoIGJvb2xlYW5cbiAqIEBwYXJhbSBnIDd0aCBib29sZWFuXG4gKiBAcGFyYW0gaCA4dGggYm9vbGVhblxuICogQHJldHVybnMgYSDiipUgYiDiipUgLi4uP1xuICovXG5leHBvcnQgZnVuY3Rpb24geG9yKGE6IGJvb2xlYW49ZmFsc2UsIGI6IGJvb2xlYW49ZmFsc2UsIGM6Ym9vbGVhbj1mYWxzZSwgZDogYm9vbGVhbj1mYWxzZSxcbiAgZTogYm9vbGVhbj1mYWxzZSwgZjogYm9vbGVhbj1mYWxzZSwgZzpib29sZWFuPWZhbHNlLCBoOiBib29sZWFuPWZhbHNlKTogYm9vbGVhbiB7XG4gIHJldHVybiBhICE9PSBiICE9PSBjICE9PSBkICE9PSBlICE9PSBmICE9PSBnICE9PSBoO1xufVxuXG5cbi8qKlxuICogQ2hlY2sgaWYgZXZlbiBudW1iZXIgb2YgYm9vbGVhbnMgYXJlIHRydWUuXG4gKiBAcGFyYW0gYSAxc3QgYm9vbGVhblxuICogQHBhcmFtIGIgMm5kIGJvb2xlYW5cbiAqIEBwYXJhbSBjIDNyZCBib29sZWFuXG4gKiBAcGFyYW0gZCA0dGggYm9vbGVhblxuICogQHBhcmFtIGUgNXRoIGJvb2xlYW5cbiAqIEBwYXJhbSBmIDZ0aCBib29sZWFuXG4gKiBAcGFyYW0gZyA3dGggYm9vbGVhblxuICogQHBhcmFtIGggOHRoIGJvb2xlYW5cbiAqIEByZXR1cm5zIMKsKGEg4oqVIGIg4oqVIC4uLik/XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bm9yKGE6IGJvb2xlYW49ZmFsc2UsIGI6IGJvb2xlYW49ZmFsc2UsIGM6Ym9vbGVhbj1mYWxzZSwgZDogYm9vbGVhbj1mYWxzZSxcbiAgZTogYm9vbGVhbj1mYWxzZSwgZjogYm9vbGVhbj1mYWxzZSwgZzpib29sZWFuPWZhbHNlLCBoOiBib29sZWFuPWZhbHNlKTogYm9vbGVhbiB7XG4gIHJldHVybiAheG9yKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpO1xufVxuXG5cblxuXG4vLyBTUEVDSUFMXG4vLyAtLS0tLS0tXG5cbi8qKlxuICogQ291bnQgbnVtYmVyIG9mIHRydWUgYm9vbGVhbnMuXG4gKiBAcGFyYW0gYSAxc3QgYm9vbGVhblxuICogQHBhcmFtIGIgMm5kIGJvb2xlYW5cbiAqIEBwYXJhbSBjIDNyZCBib29sZWFuXG4gKiBAcGFyYW0gZCA0dGggYm9vbGVhblxuICogQHBhcmFtIGUgNXRoIGJvb2xlYW5cbiAqIEBwYXJhbSBmIDZ0aCBib29sZWFuXG4gKiBAcGFyYW0gZyA3dGggYm9vbGVhblxuICogQHBhcmFtIGggOHRoIGJvb2xlYW5cbiAqIEByZXR1cm5zIGEgKyBiICsgLi4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3VudChhOiBib29sZWFuPWZhbHNlLCBiOiBib29sZWFuPWZhbHNlLCBjOmJvb2xlYW49ZmFsc2UsIGQ6IGJvb2xlYW49ZmFsc2UsXG4gIGU6IGJvb2xlYW49ZmFsc2UsIGY6IGJvb2xlYW49ZmFsc2UsIGc6Ym9vbGVhbj1mYWxzZSwgaDogYm9vbGVhbj1mYWxzZSk6IG51bWJlciB7XG4gIHJldHVybiAoYT8gMSA6IDApICsgKGI/IDEgOiAwKSArIChjPyAxIDogMCkgKyAoZD8gMSA6IDApICtcbiAgICAoZT8gMSA6IDApICsgKGY/IDEgOiAwKSArIChnPyAxIDogMCkgKyAoaD8gMSA6IDApO1xufVxuXG5cbi8qKlxuICogQ2hlY2sgaWYgaeG1l8qwIGJvb2xlYW4gaXMgdHJ1ZS5cbiAqIEBwYXJhbSBpIGluZGV4XG4gKiBAcGFyYW0gYSAxc3QgYm9vbGVhblxuICogQHBhcmFtIGIgMm5kIGJvb2xlYW5cbiAqIEBwYXJhbSBjIDNyZCBib29sZWFuXG4gKiBAcGFyYW0gZCA0dGggYm9vbGVhblxuICogQHBhcmFtIGUgNXRoIGJvb2xlYW5cbiAqIEBwYXJhbSBmIDZ0aCBib29sZWFuXG4gKiBAcGFyYW0gZyA3dGggYm9vbGVhblxuICogQHBhcmFtIGggOHRoIGJvb2xlYW5cbiAqIEByZXR1cm5zIGnhtZfKsCBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3QoaTogbnVtYmVyLFxuICBhOiBib29sZWFuPWZhbHNlLCBiOiBib29sZWFuPWZhbHNlLCBjOmJvb2xlYW49ZmFsc2UsIGQ6IGJvb2xlYW49ZmFsc2UsXG4gIGU6IGJvb2xlYW49ZmFsc2UsIGY6IGJvb2xlYW49ZmFsc2UsIGc6Ym9vbGVhbj1mYWxzZSwgaDogYm9vbGVhbj1mYWxzZSk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKGkpIHtcbiAgY2FzZSAwOiByZXR1cm4gYTtcbiAgY2FzZSAxOiByZXR1cm4gYjtcbiAgY2FzZSAyOiByZXR1cm4gYztcbiAgY2FzZSAzOiByZXR1cm4gZDtcbiAgY2FzZSA0OiByZXR1cm4gZTtcbiAgY2FzZSA1OiByZXR1cm4gZjtcbiAgY2FzZSA2OiByZXR1cm4gZztcbiAgY2FzZSA3OiByZXR1cm4gaDtcbiAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLFVBQVU7QUFFVixRQUFRO0FBQ1IsUUFBUTtBQUVSOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVMsR0FBRyxDQUFNO0VBQ3ZCLE9BQU8sT0FBTyxNQUFJO0FBQ3BCO0FBR0EsTUFBTSxVQUFVO0FBQ2hCLE1BQU0sUUFBVTtBQUNoQixNQUFNLFNBQVU7QUFDaEIsTUFBTSxVQUFVO0FBRWhCOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVMsTUFBTSxDQUFTO0VBQzdCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxPQUFPLFNBQVMsR0FBRyxNQUFNO0VBQzlDLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFXO0VBQzVCLElBQUksSUFBSSxFQUFFLE1B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