/** Converse.js * * An XMPP chat client that runs in the browser. * * Version: 3.2.1 */ /* jshint ignore:start */ (function (root, factory) { if (typeof define === 'function' && define.amd) { //Allow using this built library as an AMD module //in another project. That other project will only //see this AMD call, not the internal modules in //the closure below. define([], factory); } else { //Browser globals case. root.converse = factory(); } }(this, function () { //almond, and your modules will be inlined here /* jshint ignore:end */ /** * @license almond 0.3.3 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/almond/LICENSE */ //Going sloppy to avoid 'use strict' string cost, but strict practices should //be followed. /*global setTimeout: false */ var requirejs, require, define; (function (undef) { var main, req, makeMap, handlers, defined = {}, waiting = {}, config = {}, defining = {}, hasOwn = Object.prototype.hasOwnProperty, aps = [].slice, jsSuffixRegExp = /\.js$/; function hasProp(obj, prop) { return hasOwn.call(obj, prop); } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @returns {String} normalized name */ function normalize(name, baseName) { var nameParts, nameSegment, mapValue, foundMap, lastIndex, foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, baseParts = baseName && baseName.split("/"), map = config.map, starMap = (map && map['*']) || {}; //Adjust any relative paths. if (name) { name = name.split('/'); lastIndex = name.length - 1; // If wanting node ID compatibility, strip .js from end // of IDs. Have to do this here, and not in nameToUrl // because node allows either .js or non .js to map // to same file. if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); } // Starts with a '.' so need the baseName if (name[0].charAt(0) === '.' && baseParts) { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); name = normalizedBaseParts.concat(name); } //start trimDots for (i = 0; i < name.length; i++) { part = name[i]; if (part === '.') { name.splice(i, 1); i -= 1; } else if (part === '..') { // If at the start, or previous value is still .., // keep them so that when converted to a path it may // still work when converted to a path, even though // as an ID it is less than ideal. In larger point // releases, may be better to just kick out an error. if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') { continue; } else if (i > 0) { name.splice(i - 1, 2); i -= 2; } } } //end trimDots name = name.join('/'); } //Apply map config if available. if ((baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join("/"); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function makeRequire(relName, forceSync) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0); //If first arg is not require('string'), and there is only //one arg, it is the array form without a callback. Insert //a null so that the following concat is correct. if (typeof args[0] !== 'string' && args.length === 1) { args.push(null); } return req.apply(undef, args.concat([relName, forceSync])); }; } function makeNormalize(relName) { return function (name) { return normalize(name, relName); }; } function makeLoad(depName) { return function (value) { defined[depName] = value; }; } function callDep(name) { if (hasProp(waiting, name)) { var args = waiting[name]; delete waiting[name]; defining[name] = true; main.apply(undef, args); } if (!hasProp(defined, name) && !hasProp(defining, name)) { throw new Error('No ' + name); } return defined[name]; } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } //Creates a parts array for a relName where first part is plugin ID, //second part is resource ID. Assumes relName has already been normalized. function makeRelParts(relName) { return relName ? splitPrefix(relName) : []; } /** * Makes a name map, normalizing the name, and using a plugin * for normalization if necessary. Grabs a ref to plugin * too, as an optimization. */ makeMap = function (name, relParts) { var plugin, parts = splitPrefix(name), prefix = parts[0], relResourceName = relParts[1]; name = parts[1]; if (prefix) { prefix = normalize(prefix, relResourceName); plugin = callDep(prefix); } //Normalize according if (prefix) { if (plugin && plugin.normalize) { name = plugin.normalize(name, makeNormalize(relResourceName)); } else { name = normalize(name, relResourceName); } } else { name = normalize(name, relResourceName); parts = splitPrefix(name); prefix = parts[0]; name = parts[1]; if (prefix) { plugin = callDep(prefix); } } //Using ridiculous property names for space reasons return { f: prefix ? prefix + '!' + name : name, //fullName n: name, pr: prefix, p: plugin }; }; function makeConfig(name) { return function () { return (config && config.config && config.config[name]) || {}; }; } handlers = { require: function (name) { return makeRequire(name); }, exports: function (name) { var e = defined[name]; if (typeof e !== 'undefined') { return e; } else { return (defined[name] = {}); } }, module: function (name) { return { id: name, uri: '', exports: defined[name], config: makeConfig(name) }; } }; main = function (name, deps, callback, relName) { var cjsModule, depName, ret, map, i, relParts, args = [], callbackType = typeof callback, usingExports; //Use name if no relName relName = relName || name; relParts = makeRelParts(relName); //Call the callback to define the module, if necessary. if (callbackType === 'undefined' || callbackType === 'function') { //Pull out the defined dependencies and pass the ordered //values to the callback. //Default to [require, exports, module] if no deps deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; for (i = 0; i < deps.length; i += 1) { map = makeMap(deps[i], relParts); depName = map.f; //Fast path CommonJS standard dependencies. if (depName === "require") { args[i] = handlers.require(name); } else if (depName === "exports") { //CommonJS module spec 1.1 args[i] = handlers.exports(name); usingExports = true; } else if (depName === "module") { //CommonJS module spec 1.1 cjsModule = args[i] = handlers.module(name); } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) { args[i] = callDep(depName); } else if (map.p) { map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); args[i] = defined[depName]; } else { throw new Error(name + ' missing ' + depName); } } ret = callback ? callback.apply(defined[name], args) : undefined; if (name) { //If setting exports via "module" is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) { defined[name] = cjsModule.exports; } else if (ret !== undef || !usingExports) { //Use the return value from the function. defined[name] = ret; } } } else if (name) { //May just be an object definition for the module. Only //worry about defining if have a module name. defined[name] = callback; } }; requirejs = require = req = function (deps, callback, relName, forceSync, alt) { if (typeof deps === "string") { if (handlers[deps]) { //callback in this case is really relName return handlers[deps](callback); } //Just return the module wanted. In this scenario, the //deps arg is the module name, and second arg (if passed) //is just the relName. //Normalize module name, if it contains . or .. return callDep(makeMap(deps, makeRelParts(callback)).f); } else if (!deps.splice) { //deps is a config object, not an array. config = deps; if (config.deps) { req(config.deps, config.callback); } if (!callback) { return; } if (callback.splice) { //callback is an array, which means it is a dependency list. //Adjust args if there are dependencies deps = callback; callback = relName; relName = null; } else { deps = undef; } } //Support require(['a']) callback = callback || function () {}; //If relName is a function, it is an errback handler, //so remove it. if (typeof relName === 'function') { relName = forceSync; forceSync = alt; } //Simulate async callback; if (forceSync) { main(undef, deps, callback, relName); } else { //Using a non-zero value because of concern for what old browsers //do, and latest browsers "upgrade" to 4 if lower value is used: //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: //If want a value immediately, use require('id') instead -- something //that works in almond on the global level, but not guaranteed and //unlikely to work in other AMD implementations. setTimeout(function () { main(undef, deps, callback, relName); }, 4); } return req; }; /** * Just drops the config on the floor, but returns req in case * the config return value is used. */ req.config = function (cfg) { return req(cfg); }; /** * Expose module registry for debugging and tooling */ requirejs._defined = defined; define = function (name, deps, callback) { if (typeof name !== 'string') { throw new Error('See almond README: incorrect module build, no module name'); } //This module may not have dependencies if (!deps.splice) { //deps is not an array, so probably means //an object literal or factory function for //the value. Adjust args. callback = deps; deps = []; } if (!hasProp(defined, name) && !hasProp(waiting, name)) { waiting[name] = [name, deps, callback]; } }; define.amd = { jQuery: true }; }()); define("almond", function(){}); /*! * Sizzle CSS Selector Engine v2.2.1 * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-10-17 */ (function( window ) { var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + 1 * new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, // General-purpose constants MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf as it's faster than native // http://jsperf.com/thor-indexof-vs-for/5 indexOf = function( list, elem ) { var i = 0, len = list.length; for ( ; i < len; i++ ) { if ( list[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + identifier + ")" ), "CLASS": new RegExp( "^\\.(" + identifier + ")" ), "TAG": new RegExp( "^(" + identifier + "|[*])" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox<24 // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, // Used for iframes // See setDocument() // Removing the function wrapper causes a "Permission Denied" // error in IE unloadHandler = function() { setDocument(); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var m, i, elem, nid, nidselect, match, groups, newSelector, newContext = context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document nodeType = context ? context.nodeType : 9; results = results || []; // Return early from calls with invalid selector or context if ( typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results; } // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { // ID selector if ( (m = match[1]) ) { // Document context if ( nodeType === 9 ) { if ( (elem = context.getElementById( m )) ) { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } // Element context } else { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( newContext && (elem = newContext.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Type selector } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll if ( support.qsa && !compilerCache[ selector + " " ] && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { if ( nodeType !== 1 ) { newContext = context; newSelector = selector; // qSA looks outside Element context, which is not what we want // Thanks to Andrew Dupont for this workaround technique // Support: IE <=8 // Exclude object elements } else if ( context.nodeName.toLowerCase() !== "object" ) { // Capture the context ID, setting it first if necessary if ( (nid = context.getAttribute( "id" )) ) { nid = nid.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", (nid = expando) ); } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; while ( i-- ) { groups[i] = nidselect + " " + toSelector( groups[i] ); } newSelector = groups.join( "," ); // Expand context for sibling selectors newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch ( qsaError ) { } finally { if ( nid === expando ) { context.removeAttribute( "id" ); } } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {function(string, object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = arr.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } // Expose support vars for convenience support = Sizzle.support = {}; /** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var hasCompare, parent, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Update global variables document = doc; docElem = document.documentElement; documentIsHTML = !isXML( document ); // Support: IE 9-11, Edge // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) if ( (parent = document.defaultView) && parent.top !== parent ) { // Support: IE 11 if ( parent.addEventListener ) { parent.addEventListener( "unload", unloadHandler, false ); // Support: IE 9 - 10 only } else if ( parent.attachEvent ) { parent.attachEvent( "onunload", unloadHandler ); } } /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( document.createComment("") ); return !div.getElementsByTagName("*").length; }); // Support: IE<9 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !document.getElementsByName || !document.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var m = context.getElementById( id ); return m ? [ m ] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); // DocumentFragment nodes don't have gEBTN } else if ( support.qsa ) { return context.querySelectorAll( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 docElem.appendChild( div ).innerHTML = "" + ""; // Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section if ( div.querySelectorAll("[msallowcapture^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { rbuggyQSA.push("~="); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } // Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibing-combinator selector` fails if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { rbuggyQSA.push(".#.+[+~]"); } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input = document.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute if ( div.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another // Purposefully self-exclusive // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = hasCompare ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } : function( a, b ) { // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; } var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return document; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && !compilerCache[ expr + " " ] && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch (e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[6] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] ) { match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index // ...in a gzip-friendly way node = parent; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } } else { // Use previously-cached element index if available if ( useCache ) { // ...in a gzip-friendly way node = elem; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); uniqueCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); // Don't keep the element (issue #299) input[0] = null; return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); tokenize = Sizzle.tokenize = function( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( (tokens = []) ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, uniqueCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); if ( (oldCache = uniqueCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements uniqueCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); // Avoid hanging onto element (issue #299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { outermostContext = context === document || context || outermost; } // Add elements passing elementMatchers directly to results // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; if ( !context && elem.ownerDocument !== document ) { setDocument( elem ); xml = !documentIsHTML; } while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context || document, xml) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // `i` is now the count of elements visited above, and adding it to `matchedCount` // makes the latter nonnegative. matchedCount += i; // Apply set filters to unmatched elements // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` // equals `i`), unless we didn't visit _any_ elements in the above loop because we have // no element matchers and no seed. // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that // case, which will result in a "00" `matchedCount` that differs from `i` but is also // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { cached = matcherFromTokens( match[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; }; /** * A low-level selection function that works with Sizzle's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with Sizzle.compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( (selector = compiled.selector || selector) ); results = results || []; // Try to minimize operations if there is only one selector in the list and no seed // (the latter of which guarantees us context) if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; // Precompiled matchers will still verify ancestry, so step up a level } else if ( compiled ) { context = context.parentNode; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } // Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above ( compiled || compile( selector, match ) )( seed, context, !documentIsHTML, results, !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; }; // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : (val = elem.getAttributeNode( name )) && val.specified ? val.value : null; } }); } // EXPOSE if ( typeof define === "function" && define.amd ) { define('sizzle',[],function() { return Sizzle; }); // Sizzle requires that there be a global window in Common-JS like environments } else if ( typeof module !== "undefined" && module.exports ) { module.exports = Sizzle; } else { window.Sizzle = Sizzle; } // EXPOSE })( window ); /*! * @overview es6-promise - a tiny implementation of Promises/A+. * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) * @license Licensed under MIT license * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version 4.1.1 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define('es6-promise',factory) : (global.ES6Promise = factory()); }(this, (function () { 'use strict'; function objectOrFunction(x) { var type = typeof x; return x !== null && (type === 'object' || type === 'function'); } function isFunction(x) { return typeof x === 'function'; } var _isArray = undefined; if (Array.isArray) { _isArray = Array.isArray; } else { _isArray = function (x) { return Object.prototype.toString.call(x) === '[object Array]'; }; } var isArray = _isArray; var len = 0; var vertxNext = undefined; var customSchedulerFn = undefined; var asap = function asap(callback, arg) { queue[len] = callback; queue[len + 1] = arg; len += 2; if (len === 2) { // If len is 2, that means that we need to schedule an async flush. // If additional callbacks are queued before the queue is flushed, they // will be processed by this flush that we are scheduling. if (customSchedulerFn) { customSchedulerFn(flush); } else { scheduleFlush(); } } }; function setScheduler(scheduleFn) { customSchedulerFn = scheduleFn; } function setAsap(asapFn) { asap = asapFn; } var browserWindow = typeof window !== 'undefined' ? window : undefined; var browserGlobal = browserWindow || {}; var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; // test for web worker but not in IE10 var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; // node function useNextTick() { // node version 0.10.x displays a deprecation warning when nextTick is used recursively // see https://github.com/cujojs/when/issues/410 for details return function () { return process.nextTick(flush); }; } // vertx function useVertxTimer() { if (typeof vertxNext !== 'undefined') { return function () { vertxNext(flush); }; } return useSetTimeout(); } function useMutationObserver() { var iterations = 0; var observer = new BrowserMutationObserver(flush); var node = document.createTextNode(''); observer.observe(node, { characterData: true }); return function () { node.data = iterations = ++iterations % 2; }; } // web worker function useMessageChannel() { var channel = new MessageChannel(); channel.port1.onmessage = flush; return function () { return channel.port2.postMessage(0); }; } function useSetTimeout() { // Store setTimeout reference so es6-promise will be unaffected by // other code modifying setTimeout (like sinon.useFakeTimers()) var globalSetTimeout = setTimeout; return function () { return globalSetTimeout(flush, 1); }; } var queue = new Array(1000); function flush() { for (var i = 0; i < len; i += 2) { var callback = queue[i]; var arg = queue[i + 1]; callback(arg); queue[i] = undefined; queue[i + 1] = undefined; } len = 0; } function attemptVertx() { try { var r = require; var vertx = r('vertx'); vertxNext = vertx.runOnLoop || vertx.runOnContext; return useVertxTimer(); } catch (e) { return useSetTimeout(); } } var scheduleFlush = undefined; // Decide what async method to use to triggering processing of queued callbacks: if (isNode) { scheduleFlush = useNextTick(); } else if (BrowserMutationObserver) { scheduleFlush = useMutationObserver(); } else if (isWorker) { scheduleFlush = useMessageChannel(); } else if (browserWindow === undefined && typeof require === 'function') { scheduleFlush = attemptVertx(); } else { scheduleFlush = useSetTimeout(); } function then(onFulfillment, onRejection) { var _arguments = arguments; var parent = this; var child = new this.constructor(noop); if (child[PROMISE_ID] === undefined) { makePromise(child); } var _state = parent._state; if (_state) { (function () { var callback = _arguments[_state - 1]; asap(function () { return invokeCallback(_state, child, callback, parent._result); }); })(); } else { subscribe(parent, child, onFulfillment, onRejection); } return child; } /** `Promise.resolve` returns a promise that will become resolved with the passed `value`. It is shorthand for the following: ```javascript let promise = new Promise(function(resolve, reject){ resolve(1); }); promise.then(function(value){ // value === 1 }); ``` Instead of writing the above, your code now simply becomes the following: ```javascript let promise = Promise.resolve(1); promise.then(function(value){ // value === 1 }); ``` @method resolve @static @param {Any} value value that the returned promise will be resolved with Useful for tooling. @return {Promise} a promise that will become fulfilled with the given `value` */ function resolve$1(object) { /*jshint validthis:true */ var Constructor = this; if (object && typeof object === 'object' && object.constructor === Constructor) { return object; } var promise = new Constructor(noop); resolve(promise, object); return promise; } var PROMISE_ID = Math.random().toString(36).substring(16); function noop() {} var PENDING = void 0; var FULFILLED = 1; var REJECTED = 2; var GET_THEN_ERROR = new ErrorObject(); function selfFulfillment() { return new TypeError("You cannot resolve a promise with itself"); } function cannotReturnOwn() { return new TypeError('A promises callback cannot return that same promise.'); } function getThen(promise) { try { return promise.then; } catch (error) { GET_THEN_ERROR.error = error; return GET_THEN_ERROR; } } function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { try { then$$1.call(value, fulfillmentHandler, rejectionHandler); } catch (e) { return e; } } function handleForeignThenable(promise, thenable, then$$1) { asap(function (promise) { var sealed = false; var error = tryThen(then$$1, thenable, function (value) { if (sealed) { return; } sealed = true; if (thenable !== value) { resolve(promise, value); } else { fulfill(promise, value); } }, function (reason) { if (sealed) { return; } sealed = true; reject(promise, reason); }, 'Settle: ' + (promise._label || ' unknown promise')); if (!sealed && error) { sealed = true; reject(promise, error); } }, promise); } function handleOwnThenable(promise, thenable) { if (thenable._state === FULFILLED) { fulfill(promise, thenable._result); } else if (thenable._state === REJECTED) { reject(promise, thenable._result); } else { subscribe(thenable, undefined, function (value) { return resolve(promise, value); }, function (reason) { return reject(promise, reason); }); } } function handleMaybeThenable(promise, maybeThenable, then$$1) { if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { handleOwnThenable(promise, maybeThenable); } else { if (then$$1 === GET_THEN_ERROR) { reject(promise, GET_THEN_ERROR.error); GET_THEN_ERROR.error = null; } else if (then$$1 === undefined) { fulfill(promise, maybeThenable); } else if (isFunction(then$$1)) { handleForeignThenable(promise, maybeThenable, then$$1); } else { fulfill(promise, maybeThenable); } } } function resolve(promise, value) { if (promise === value) { reject(promise, selfFulfillment()); } else if (objectOrFunction(value)) { handleMaybeThenable(promise, value, getThen(value)); } else { fulfill(promise, value); } } function publishRejection(promise) { if (promise._onerror) { promise._onerror(promise._result); } publish(promise); } function fulfill(promise, value) { if (promise._state !== PENDING) { return; } promise._result = value; promise._state = FULFILLED; if (promise._subscribers.length !== 0) { asap(publish, promise); } } function reject(promise, reason) { if (promise._state !== PENDING) { return; } promise._state = REJECTED; promise._result = reason; asap(publishRejection, promise); } function subscribe(parent, child, onFulfillment, onRejection) { var _subscribers = parent._subscribers; var length = _subscribers.length; parent._onerror = null; _subscribers[length] = child; _subscribers[length + FULFILLED] = onFulfillment; _subscribers[length + REJECTED] = onRejection; if (length === 0 && parent._state) { asap(publish, parent); } } function publish(promise) { var subscribers = promise._subscribers; var settled = promise._state; if (subscribers.length === 0) { return; } var child = undefined, callback = undefined, detail = promise._result; for (var i = 0; i < subscribers.length; i += 3) { child = subscribers[i]; callback = subscribers[i + settled]; if (child) { invokeCallback(settled, child, callback, detail); } else { callback(detail); } } promise._subscribers.length = 0; } function ErrorObject() { this.error = null; } var TRY_CATCH_ERROR = new ErrorObject(); function tryCatch(callback, detail) { try { return callback(detail); } catch (e) { TRY_CATCH_ERROR.error = e; return TRY_CATCH_ERROR; } } function invokeCallback(settled, promise, callback, detail) { var hasCallback = isFunction(callback), value = undefined, error = undefined, succeeded = undefined, failed = undefined; if (hasCallback) { value = tryCatch(callback, detail); if (value === TRY_CATCH_ERROR) { failed = true; error = value.error; value.error = null; } else { succeeded = true; } if (promise === value) { reject(promise, cannotReturnOwn()); return; } } else { value = detail; succeeded = true; } if (promise._state !== PENDING) { // noop } else if (hasCallback && succeeded) { resolve(promise, value); } else if (failed) { reject(promise, error); } else if (settled === FULFILLED) { fulfill(promise, value); } else if (settled === REJECTED) { reject(promise, value); } } function initializePromise(promise, resolver) { try { resolver(function resolvePromise(value) { resolve(promise, value); }, function rejectPromise(reason) { reject(promise, reason); }); } catch (e) { reject(promise, e); } } var id = 0; function nextId() { return id++; } function makePromise(promise) { promise[PROMISE_ID] = id++; promise._state = undefined; promise._result = undefined; promise._subscribers = []; } function Enumerator$1(Constructor, input) { this._instanceConstructor = Constructor; this.promise = new Constructor(noop); if (!this.promise[PROMISE_ID]) { makePromise(this.promise); } if (isArray(input)) { this.length = input.length; this._remaining = input.length; this._result = new Array(this.length); if (this.length === 0) { fulfill(this.promise, this._result); } else { this.length = this.length || 0; this._enumerate(input); if (this._remaining === 0) { fulfill(this.promise, this._result); } } } else { reject(this.promise, validationError()); } } function validationError() { return new Error('Array Methods must be provided an Array'); } Enumerator$1.prototype._enumerate = function (input) { for (var i = 0; this._state === PENDING && i < input.length; i++) { this._eachEntry(input[i], i); } }; Enumerator$1.prototype._eachEntry = function (entry, i) { var c = this._instanceConstructor; var resolve$$1 = c.resolve; if (resolve$$1 === resolve$1) { var _then = getThen(entry); if (_then === then && entry._state !== PENDING) { this._settledAt(entry._state, i, entry._result); } else if (typeof _then !== 'function') { this._remaining--; this._result[i] = entry; } else if (c === Promise$3) { var promise = new c(noop); handleMaybeThenable(promise, entry, _then); this._willSettleAt(promise, i); } else { this._willSettleAt(new c(function (resolve$$1) { return resolve$$1(entry); }), i); } } else { this._willSettleAt(resolve$$1(entry), i); } }; Enumerator$1.prototype._settledAt = function (state, i, value) { var promise = this.promise; if (promise._state === PENDING) { this._remaining--; if (state === REJECTED) { reject(promise, value); } else { this._result[i] = value; } } if (this._remaining === 0) { fulfill(promise, this._result); } }; Enumerator$1.prototype._willSettleAt = function (promise, i) { var enumerator = this; subscribe(promise, undefined, function (value) { return enumerator._settledAt(FULFILLED, i, value); }, function (reason) { return enumerator._settledAt(REJECTED, i, reason); }); }; /** `Promise.all` accepts an array of promises, and returns a new promise which is fulfilled with an array of fulfillment values for the passed promises, or rejected with the reason of the first passed promise to be rejected. It casts all elements of the passed iterable to promises as it runs this algorithm. Example: ```javascript let promise1 = resolve(1); let promise2 = resolve(2); let promise3 = resolve(3); let promises = [ promise1, promise2, promise3 ]; Promise.all(promises).then(function(array){ // The array here would be [ 1, 2, 3 ]; }); ``` If any of the `promises` given to `all` are rejected, the first promise that is rejected will be given as an argument to the returned promises's rejection handler. For example: Example: ```javascript let promise1 = resolve(1); let promise2 = reject(new Error("2")); let promise3 = reject(new Error("3")); let promises = [ promise1, promise2, promise3 ]; Promise.all(promises).then(function(array){ // Code here never runs because there are rejected promises! }, function(error) { // error.message === "2" }); ``` @method all @static @param {Array} entries array of promises @param {String} label optional string for labeling the promise. Useful for tooling. @return {Promise} promise that is fulfilled when all `promises` have been fulfilled, or rejected if any of them become rejected. @static */ function all$1(entries) { return new Enumerator$1(this, entries).promise; } /** `Promise.race` returns a new promise which is settled in the same way as the first passed promise to settle. Example: ```javascript let promise1 = new Promise(function(resolve, reject){ setTimeout(function(){ resolve('promise 1'); }, 200); }); let promise2 = new Promise(function(resolve, reject){ setTimeout(function(){ resolve('promise 2'); }, 100); }); Promise.race([promise1, promise2]).then(function(result){ // result === 'promise 2' because it was resolved before promise1 // was resolved. }); ``` `Promise.race` is deterministic in that only the state of the first settled promise matters. For example, even if other promises given to the `promises` array argument are resolved, but the first settled promise has become rejected before the other promises became fulfilled, the returned promise will become rejected: ```javascript let promise1 = new Promise(function(resolve, reject){ setTimeout(function(){ resolve('promise 1'); }, 200); }); let promise2 = new Promise(function(resolve, reject){ setTimeout(function(){ reject(new Error('promise 2')); }, 100); }); Promise.race([promise1, promise2]).then(function(result){ // Code here never runs }, function(reason){ // reason.message === 'promise 2' because promise 2 became rejected before // promise 1 became fulfilled }); ``` An example real-world use case is implementing timeouts: ```javascript Promise.race([ajax('foo.json'), timeout(5000)]) ``` @method race @static @param {Array} promises array of promises to observe Useful for tooling. @return {Promise} a promise which settles in the same way as the first passed promise to settle. */ function race$1(entries) { /*jshint validthis:true */ var Constructor = this; if (!isArray(entries)) { return new Constructor(function (_, reject) { return reject(new TypeError('You must pass an array to race.')); }); } else { return new Constructor(function (resolve, reject) { var length = entries.length; for (var i = 0; i < length; i++) { Constructor.resolve(entries[i]).then(resolve, reject); } }); } } /** `Promise.reject` returns a promise rejected with the passed `reason`. It is shorthand for the following: ```javascript let promise = new Promise(function(resolve, reject){ reject(new Error('WHOOPS')); }); promise.then(function(value){ // Code here doesn't run because the promise is rejected! }, function(reason){ // reason.message === 'WHOOPS' }); ``` Instead of writing the above, your code now simply becomes the following: ```javascript let promise = Promise.reject(new Error('WHOOPS')); promise.then(function(value){ // Code here doesn't run because the promise is rejected! }, function(reason){ // reason.message === 'WHOOPS' }); ``` @method reject @static @param {Any} reason value that the returned promise will be rejected with. Useful for tooling. @return {Promise} a promise rejected with the given `reason`. */ function reject$1(reason) { /*jshint validthis:true */ var Constructor = this; var promise = new Constructor(noop); reject(promise, reason); return promise; } function needsResolver() { throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); } function needsNew() { throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); } /** Promise objects represent the eventual result of an asynchronous operation. The primary way of interacting with a promise is through its `then` method, which registers callbacks to receive either a promise's eventual value or the reason why the promise cannot be fulfilled. Terminology ----------- - `promise` is an object or function with a `then` method whose behavior conforms to this specification. - `thenable` is an object or function that defines a `then` method. - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). - `exception` is a value that is thrown using the throw statement. - `reason` is a value that indicates why a promise was rejected. - `settled` the final resting state of a promise, fulfilled or rejected. A promise can be in one of three states: pending, fulfilled, or rejected. Promises that are fulfilled have a fulfillment value and are in the fulfilled state. Promises that are rejected have a rejection reason and are in the rejected state. A fulfillment value is never a thenable. Promises can also be said to *resolve* a value. If this value is also a promise, then the original promise's settled state will match the value's settled state. So a promise that *resolves* a promise that rejects will itself reject, and a promise that *resolves* a promise that fulfills will itself fulfill. Basic Usage: ------------ ```js let promise = new Promise(function(resolve, reject) { // on success resolve(value); // on failure reject(reason); }); promise.then(function(value) { // on fulfillment }, function(reason) { // on rejection }); ``` Advanced Usage: --------------- Promises shine when abstracting away asynchronous interactions such as `XMLHttpRequest`s. ```js function getJSON(url) { return new Promise(function(resolve, reject){ let xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.onreadystatechange = handler; xhr.responseType = 'json'; xhr.setRequestHeader('Accept', 'application/json'); xhr.send(); function handler() { if (this.readyState === this.DONE) { if (this.status === 200) { resolve(this.response); } else { reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); } } }; }); } getJSON('/posts.json').then(function(json) { // on fulfillment }, function(reason) { // on rejection }); ``` Unlike callbacks, promises are great composable primitives. ```js Promise.all([ getJSON('/posts'), getJSON('/comments') ]).then(function(values){ values[0] // => postsJSON values[1] // => commentsJSON return values; }); ``` @class Promise @param {function} resolver Useful for tooling. @constructor */ function Promise$3(resolver) { this[PROMISE_ID] = nextId(); this._result = this._state = undefined; this._subscribers = []; if (noop !== resolver) { typeof resolver !== 'function' && needsResolver(); this instanceof Promise$3 ? initializePromise(this, resolver) : needsNew(); } } Promise$3.all = all$1; Promise$3.race = race$1; Promise$3.resolve = resolve$1; Promise$3.reject = reject$1; Promise$3._setScheduler = setScheduler; Promise$3._setAsap = setAsap; Promise$3._asap = asap; Promise$3.prototype = { constructor: Promise$3, /** The primary way of interacting with a promise is through its `then` method, which registers callbacks to receive either a promise's eventual value or the reason why the promise cannot be fulfilled. ```js findUser().then(function(user){ // user is available }, function(reason){ // user is unavailable, and you are given the reason why }); ``` Chaining -------- The return value of `then` is itself a promise. This second, 'downstream' promise is resolved with the return value of the first promise's fulfillment or rejection handler, or rejected if the handler throws an exception. ```js findUser().then(function (user) { return user.name; }, function (reason) { return 'default name'; }).then(function (userName) { // If `findUser` fulfilled, `userName` will be the user's name, otherwise it // will be `'default name'` }); findUser().then(function (user) { throw new Error('Found user, but still unhappy'); }, function (reason) { throw new Error('`findUser` rejected and we're unhappy'); }).then(function (value) { // never reached }, function (reason) { // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. }); ``` If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. ```js findUser().then(function (user) { throw new PedagogicalException('Upstream error'); }).then(function (value) { // never reached }).then(function (value) { // never reached }, function (reason) { // The `PedgagocialException` is propagated all the way down to here }); ``` Assimilation ------------ Sometimes the value you want to propagate to a downstream promise can only be retrieved asynchronously. This can be achieved by returning a promise in the fulfillment or rejection handler. The downstream promise will then be pending until the returned promise is settled. This is called *assimilation*. ```js findUser().then(function (user) { return findCommentsByAuthor(user); }).then(function (comments) { // The user's comments are now available }); ``` If the assimliated promise rejects, then the downstream promise will also reject. ```js findUser().then(function (user) { return findCommentsByAuthor(user); }).then(function (comments) { // If `findCommentsByAuthor` fulfills, we'll have the value here }, function (reason) { // If `findCommentsByAuthor` rejects, we'll have the reason here }); ``` Simple Example -------------- Synchronous Example ```javascript let result; try { result = findResult(); // success } catch(reason) { // failure } ``` Errback Example ```js findResult(function(result, err){ if (err) { // failure } else { // success } }); ``` Promise Example; ```javascript findResult().then(function(result){ // success }, function(reason){ // failure }); ``` Advanced Example -------------- Synchronous Example ```javascript let author, books; try { author = findAuthor(); books = findBooksByAuthor(author); // success } catch(reason) { // failure } ``` Errback Example ```js function foundBooks(books) { } function failure(reason) { } findAuthor(function(author, err){ if (err) { failure(err); // failure } else { try { findBoooksByAuthor(author, function(books, err) { if (err) { failure(err); } else { try { foundBooks(books); } catch(reason) { failure(reason); } } }); } catch(error) { failure(err); } // success } }); ``` Promise Example; ```javascript findAuthor(). then(findBooksByAuthor). then(function(books){ // found books }).catch(function(reason){ // something went wrong }); ``` @method then @param {Function} onFulfilled @param {Function} onRejected Useful for tooling. @return {Promise} */ then: then, /** `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same as the catch block of a try/catch statement. ```js function findAuthor(){ throw new Error('couldn't find that author'); } // synchronous try { findAuthor(); } catch(reason) { // something went wrong } // async with promises findAuthor().catch(function(reason){ // something went wrong }); ``` @method catch @param {Function} onRejection Useful for tooling. @return {Promise} */ 'catch': function _catch(onRejection) { return this.then(null, onRejection); } }; /*global self*/ function polyfill$1() { var local = undefined; if (typeof global !== 'undefined') { local = global; } else if (typeof self !== 'undefined') { local = self; } else { try { local = Function('return this')(); } catch (e) { throw new Error('polyfill failed because global object is unavailable in this environment'); } } var P = local.Promise; if (P) { var promiseToString = null; try { promiseToString = Object.prototype.toString.call(P.resolve()); } catch (e) { // silently ignored } if (promiseToString === '[object Promise]' && !P.cast) { return; } } local.Promise = Promise$3; } // Strange compat.. Promise$3.polyfill = polyfill$1; Promise$3.Promise = Promise$3; Promise$3.polyfill(); return Promise$3; }))); //# sourceMappingURL=es6-promise.auto.map ; if (!String.prototype.includes) { String.prototype.includes = function(search, start) { 'use strict'; if (typeof start !== 'number') { start = 0; } if (start + search.length > this.length) { return false; } else { return this.indexOf(search, start) !== -1; // eslint-disable-line lodash/prefer-includes } }; } if (!String.prototype.endsWith) { String.prototype.endsWith = function (searchString, position) { var subjectString = this.toString(); if (position === undefined || position > subjectString.length) { position = subjectString.length; } position -= searchString.length; var lastIndex = subjectString.indexOf(searchString, position); return lastIndex !== -1 && lastIndex === position; }; } if (!String.prototype.startsWith) { String.prototype.startsWith = function (searchString, position) { position = position || 0; return this.substr(position, searchString.length) === searchString; }; } if (!String.prototype.splitOnce) { String.prototype.splitOnce = function (delimiter) { var components = this.split(delimiter); return [components.shift(), components.join(delimiter)]; }; } if (!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }; } ; define("polyfill", function(){}); /*! * jQuery Browser Plugin 0.1.0 * https://github.com/gabceb/jquery-browser-plugin * * Original jquery-browser code Copyright 2005, 2015 jQuery Foundation, Inc. and other contributors * http://jquery.org/license * * Modifications Copyright 2015 Gabriel Cebrian * https://github.com/gabceb * * Released under the MIT license * * Date: 05-07-2015 */ /*global window: false */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define('jquery.browser',['jquery'], function ($) { return factory($); }); } else if (typeof module === 'object' && typeof module.exports === 'object') { // Node-like environment module.exports = factory(require('jquery')); } else { // Browser globals factory(window.jQuery); } }(function(jQuery) { "use strict"; function uaMatch( ua ) { // If an UA is not provided, default to the current browser UA. if ( ua === undefined ) { ua = window.navigator.userAgent; } ua = ua.toLowerCase(); var match = /(edge)\/([\w.]+)/.exec( ua ) || /(opr)[\/]([\w.]+)/.exec( ua ) || /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(iemobile)[\/]([\w.]+)/.exec( ua ) || /(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; var platform_match = /(ipad)/.exec( ua ) || /(ipod)/.exec( ua ) || /(windows phone)/.exec( ua ) || /(iphone)/.exec( ua ) || /(kindle)/.exec( ua ) || /(silk)/.exec( ua ) || /(android)/.exec( ua ) || /(win)/.exec( ua ) || /(mac)/.exec( ua ) || /(linux)/.exec( ua ) || /(cros)/.exec( ua ) || /(playbook)/.exec( ua ) || /(bb)/.exec( ua ) || /(blackberry)/.exec( ua ) || []; var browser = {}, matched = { browser: match[ 5 ] || match[ 3 ] || match[ 1 ] || "", version: match[ 2 ] || match[ 4 ] || "0", versionNumber: match[ 4 ] || match[ 2 ] || "0", platform: platform_match[ 0 ] || "" }; if ( matched.browser ) { browser[ matched.browser ] = true; browser.version = matched.version; browser.versionNumber = parseInt(matched.versionNumber, 10); } if ( matched.platform ) { browser[ matched.platform ] = true; } // These are all considered mobile platforms, meaning they run a mobile browser if ( browser.android || browser.bb || browser.blackberry || browser.ipad || browser.iphone || browser.ipod || browser.kindle || browser.playbook || browser.silk || browser[ "windows phone" ]) { browser.mobile = true; } // These are all considered desktop platforms, meaning they run a desktop browser if ( browser.cros || browser.mac || browser.linux || browser.win ) { browser.desktop = true; } // Chrome, Opera 15+ and Safari are webkit based browsers if ( browser.chrome || browser.opr || browser.safari ) { browser.webkit = true; } // IE11 has a new token so we will assign it msie to avoid breaking changes if ( browser.rv || browser.iemobile) { var ie = "msie"; matched.browser = ie; browser[ie] = true; } // Edge is officially known as Microsoft Edge, so rewrite the key to match if ( browser.edge ) { delete browser.edge; var msedge = "msedge"; matched.browser = msedge; browser[msedge] = true; } // Blackberry browsers are marked as Safari on BlackBerry if ( browser.safari && browser.blackberry ) { var blackberry = "blackberry"; matched.browser = blackberry; browser[blackberry] = true; } // Playbook browsers are marked as Safari on Playbook if ( browser.safari && browser.playbook ) { var playbook = "playbook"; matched.browser = playbook; browser[playbook] = true; } // BB10 is a newer OS version of BlackBerry if ( browser.bb ) { var bb = "blackberry"; matched.browser = bb; browser[bb] = true; } // Opera 15+ are identified as opr if ( browser.opr ) { var opera = "opera"; matched.browser = opera; browser[opera] = true; } // Stock Android browsers are marked as Safari on Android. if ( browser.safari && browser.android ) { var android = "android"; matched.browser = android; browser[android] = true; } // Kindle browsers are marked as Safari on Kindle if ( browser.safari && browser.kindle ) { var kindle = "kindle"; matched.browser = kindle; browser[kindle] = true; } // Kindle Silk browsers are marked as Safari on Kindle if ( browser.safari && browser.silk ) { var silk = "silk"; matched.browser = silk; browser[silk] = true; } // Assign the name and platform variable browser.name = matched.browser; browser.platform = matched.platform; return browser; } // Run the matching process, also assign the function to the returned object // for manual, jQuery-free use if desired window.jQBrowser = uaMatch( window.navigator.userAgent ); window.jQBrowser.uaMatch = uaMatch; // Only assign to jQuery.browser if jQuery is loaded if ( jQuery ) { jQuery.browser = window.jQBrowser; } return window.jQBrowser; })); /* jed.js v0.5.0beta https://github.com/SlexAxton/Jed ----------- A gettext compatible i18n library for modern JavaScript Applications by Alex Sexton - AlexSexton [at] gmail - @SlexAxton WTFPL license for use Dojo CLA for contributions Jed offers the entire applicable GNU gettext spec'd set of functions, but also offers some nicer wrappers around them. The api for gettext was written for a language with no function overloading, so Jed allows a little more of that. Many thanks to Joshua I. Miller - unrtst@cpan.org - who wrote gettext.js back in 2008. I was able to vet a lot of my ideas against his. I also made sure Jed passed against his tests in order to offer easy upgrades -- jsgettext.berlios.de */ (function (root, undef) { // Set up some underscore-style functions, if you already have // underscore, feel free to delete this section, and use it // directly, however, the amount of functions used doesn't // warrant having underscore as a full dependency. // Underscore 1.3.0 was used to port and is licensed // under the MIT License by Jeremy Ashkenas. var ArrayProto = Array.prototype, ObjProto = Object.prototype, slice = ArrayProto.slice, hasOwnProp = ObjProto.hasOwnProperty, nativeForEach = ArrayProto.forEach, breaker = {}; // We're not using the OOP style _ so we don't need the // extra level of indirection. This still means that you // sub out for real `_` though. var _ = { forEach : function( obj, iterator, context ) { var i, l, key; if ( obj === null ) { return; } if ( nativeForEach && obj.forEach === nativeForEach ) { obj.forEach( iterator, context ); } else if ( obj.length === +obj.length ) { for ( i = 0, l = obj.length; i < l; i++ ) { if ( i in obj && iterator.call( context, obj[i], i, obj ) === breaker ) { return; } } } else { for ( key in obj) { if ( hasOwnProp.call( obj, key ) ) { if ( iterator.call (context, obj[key], key, obj ) === breaker ) { return; } } } } }, extend : function( obj ) { this.forEach( slice.call( arguments, 1 ), function ( source ) { for ( var prop in source ) { obj[prop] = source[prop]; } }); return obj; } }; // END Miniature underscore impl // Jed is a constructor function var Jed = function ( options ) { // Some minimal defaults this.defaults = { "locale_data" : { "messages" : { "" : { "domain" : "messages", "lang" : "en", "plural_forms" : "nplurals=2; plural=(n != 1);" } // There are no default keys, though } }, // The default domain if one is missing "domain" : "messages" }; // Mix in the sent options with the default options this.options = _.extend( {}, this.defaults, options ); this.textdomain( this.options.domain ); if ( options.domain && ! this.options.locale_data[ this.options.domain ] ) { throw new Error('Text domain set to non-existent domain: `' + options.domain + '`'); } }; // The gettext spec sets this character as the default // delimiter for context lookups. // e.g.: context\u0004key // If your translation company uses something different, // just change this at any time and it will use that instead. Jed.context_delimiter = String.fromCharCode( 4 ); function getPluralFormFunc ( plural_form_string ) { return Jed.PF.compile( plural_form_string || "nplurals=2; plural=(n != 1);"); } function Chain( key, i18n ){ this._key = key; this._i18n = i18n; } // Create a chainable api for adding args prettily _.extend( Chain.prototype, { onDomain : function ( domain ) { this._domain = domain; return this; }, withContext : function ( context ) { this._context = context; return this; }, ifPlural : function ( num, pkey ) { this._val = num; this._pkey = pkey; return this; }, fetch : function ( sArr ) { if ( {}.toString.call( sArr ) != '[object Array]' ) { sArr = [].slice.call(arguments); } return ( sArr && sArr.length ? Jed.sprintf : function(x){ return x; } )( this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val), sArr ); } }); // Add functions to the Jed prototype. // These will be the functions on the object that's returned // from creating a `new Jed()` // These seem redundant, but they gzip pretty well. _.extend( Jed.prototype, { // The sexier api start point translate : function ( key ) { return new Chain( key, this ); }, textdomain : function ( domain ) { if ( ! domain ) { return this._textdomain; } this._textdomain = domain; }, gettext : function ( key ) { return this.dcnpgettext.call( this, undef, undef, key ); }, dgettext : function ( domain, key ) { return this.dcnpgettext.call( this, domain, undef, key ); }, dcgettext : function ( domain , key /*, category */ ) { // Ignores the category anyways return this.dcnpgettext.call( this, domain, undef, key ); }, ngettext : function ( skey, pkey, val ) { return this.dcnpgettext.call( this, undef, undef, skey, pkey, val ); }, dngettext : function ( domain, skey, pkey, val ) { return this.dcnpgettext.call( this, domain, undef, skey, pkey, val ); }, dcngettext : function ( domain, skey, pkey, val/*, category */) { return this.dcnpgettext.call( this, domain, undef, skey, pkey, val ); }, pgettext : function ( context, key ) { return this.dcnpgettext.call( this, undef, context, key ); }, dpgettext : function ( domain, context, key ) { return this.dcnpgettext.call( this, domain, context, key ); }, dcpgettext : function ( domain, context, key/*, category */) { return this.dcnpgettext.call( this, domain, context, key ); }, npgettext : function ( context, skey, pkey, val ) { return this.dcnpgettext.call( this, undef, context, skey, pkey, val ); }, dnpgettext : function ( domain, context, skey, pkey, val ) { return this.dcnpgettext.call( this, domain, context, skey, pkey, val ); }, // The most fully qualified gettext function. It has every option. // Since it has every option, we can use it from every other method. // This is the bread and butter. // Technically there should be one more argument in this function for 'Category', // but since we never use it, we might as well not waste the bytes to define it. dcnpgettext : function ( domain, context, singular_key, plural_key, val ) { // Set some defaults plural_key = plural_key || singular_key; // Use the global domain default if one // isn't explicitly passed in domain = domain || this._textdomain; // Default the value to the singular case val = typeof val == 'undefined' ? 1 : val; var fallback; // Handle special cases // No options found if ( ! this.options ) { // There's likely something wrong, but we'll return the correct key for english // We do this by instantiating a brand new Jed instance with the default set // for everything that could be broken. fallback = new Jed(); return fallback.dcnpgettext.call( fallback, undefined, undefined, singular_key, plural_key, val ); } // No translation data provided if ( ! this.options.locale_data ) { throw new Error('No locale data provided.'); } if ( ! this.options.locale_data[ domain ] ) { throw new Error('Domain `' + domain + '` was not found.'); } if ( ! this.options.locale_data[ domain ][ "" ] ) { throw new Error('No locale meta information provided.'); } // Make sure we have a truthy key. Otherwise we might start looking // into the empty string key, which is the options for the locale // data. if ( ! singular_key ) { throw new Error('No translation key found.'); } // Handle invalid numbers, but try casting strings for good measure if ( typeof val != 'number' ) { val = parseInt( val, 10 ); if ( isNaN( val ) ) { throw new Error('The number that was passed in is not a number.'); } } var key = context ? context + Jed.context_delimiter + singular_key : singular_key, locale_data = this.options.locale_data, dict = locale_data[ domain ], pluralForms = dict[""].plural_forms || (locale_data.messages || this.defaults.locale_data.messages)[""].plural_forms, val_idx = getPluralFormFunc(pluralForms)(val) + 1, val_list, res; // Throw an error if a domain isn't found if ( ! dict ) { throw new Error('No domain named `' + domain + '` could be found.'); } val_list = dict[ key ]; // If there is no match, then revert back to // english style singular/plural with the keys passed in. if ( ! val_list || val_idx >= val_list.length ) { if (this.options.missing_key_callback) { this.options.missing_key_callback(key); } res = [ null, singular_key, plural_key ]; return res[ getPluralFormFunc(pluralForms)( val ) + 1 ]; } res = val_list[ val_idx ]; // This includes empty strings on purpose if ( ! res ) { res = [ null, singular_key, plural_key ]; return res[ getPluralFormFunc(pluralForms)( val ) + 1 ]; } return res; } }); // We add in sprintf capabilities for post translation value interolation // This is not internally used, so you can remove it if you have this // available somewhere else, or want to use a different system. // We _slightly_ modify the normal sprintf behavior to more gracefully handle // undefined values. /** sprintf() for JavaScript 0.7-beta1 http://www.diveintojavascript.com/projects/javascript-sprintf Copyright (c) Alexandru Marasteanu All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of sprintf() for JavaScript nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ var sprintf = (function() { function get_type(variable) { return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase(); } function str_repeat(input, multiplier) { for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */} return output.join(''); } var str_format = function() { if (!str_format.cache.hasOwnProperty(arguments[0])) { str_format.cache[arguments[0]] = str_format.parse(arguments[0]); } return str_format.format.call(null, str_format.cache[arguments[0]], arguments); }; str_format.format = function(parse_tree, argv) { var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length; for (i = 0; i < tree_length; i++) { node_type = get_type(parse_tree[i]); if (node_type === 'string') { output.push(parse_tree[i]); } else if (node_type === 'array') { match = parse_tree[i]; // convenience purposes only if (match[2]) { // keyword argument arg = argv[cursor]; for (k = 0; k < match[2].length; k++) { if (!arg.hasOwnProperty(match[2][k])) { throw(sprintf('[sprintf] property "%s" does not exist', match[2][k])); } arg = arg[match[2][k]]; } } else if (match[1]) { // positional argument (explicit) arg = argv[match[1]]; } else { // positional argument (implicit) arg = argv[cursor++]; } if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { throw(sprintf('[sprintf] expecting number but found %s', get_type(arg))); } // Jed EDIT if ( typeof arg == 'undefined' || arg === null ) { arg = ''; } // Jed EDIT switch (match[8]) { case 'b': arg = arg.toString(2); break; case 'c': arg = String.fromCharCode(arg); break; case 'd': arg = parseInt(arg, 10); break; case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; case 'o': arg = arg.toString(8); break; case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; case 'u': arg = Math.abs(arg); break; case 'x': arg = arg.toString(16); break; case 'X': arg = arg.toString(16).toUpperCase(); break; } arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; pad_length = match[6] - String(arg).length; pad = match[6] ? str_repeat(pad_character, pad_length) : ''; output.push(match[5] ? arg + pad : pad + arg); } } return output.join(''); }; str_format.cache = {}; str_format.parse = function(fmt) { var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; while (_fmt) { if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { parse_tree.push(match[0]); } else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { parse_tree.push('%'); } else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) { if (match[2]) { arg_names |= 1; var field_list = [], replacement_field = match[2], field_match = []; if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { field_list.push(field_match[1]); while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { field_list.push(field_match[1]); } else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { field_list.push(field_match[1]); } else { throw('[sprintf] huh?'); } } } else { throw('[sprintf] huh?'); } match[2] = field_list; } else { arg_names |= 2; } if (arg_names === 3) { throw('[sprintf] mixing positional and named placeholders is not (yet) supported'); } parse_tree.push(match); } else { throw('[sprintf] huh?'); } _fmt = _fmt.substring(match[0].length); } return parse_tree; }; return str_format; })(); var vsprintf = function(fmt, argv) { argv.unshift(fmt); return sprintf.apply(null, argv); }; Jed.parse_plural = function ( plural_forms, n ) { plural_forms = plural_forms.replace(/n/g, n); return Jed.parse_expression(plural_forms); }; Jed.sprintf = function ( fmt, args ) { if ( {}.toString.call( args ) == '[object Array]' ) { return vsprintf( fmt, [].slice.call(args) ); } return sprintf.apply(this, [].slice.call(arguments) ); }; Jed.prototype.sprintf = function () { return Jed.sprintf.apply(this, arguments); }; // END sprintf Implementation // Start the Plural forms section // This is a full plural form expression parser. It is used to avoid // running 'eval' or 'new Function' directly against the plural // forms. // // This can be important if you get translations done through a 3rd // party vendor. I encourage you to use this instead, however, I // also will provide a 'precompiler' that you can use at build time // to output valid/safe function representations of the plural form // expressions. This means you can build this code out for the most // part. Jed.PF = {}; Jed.PF.parse = function ( p ) { var plural_str = Jed.PF.extractPluralExpr( p ); return Jed.PF.parser.parse.call(Jed.PF.parser, plural_str); }; Jed.PF.compile = function ( p ) { // Handle trues and falses as 0 and 1 function imply( val ) { return (val === true ? 1 : val ? val : 0); } var ast = Jed.PF.parse( p ); return function ( n ) { return imply( Jed.PF.interpreter( ast )( n ) ); }; }; Jed.PF.interpreter = function ( ast ) { return function ( n ) { var res; switch ( ast.type ) { case 'GROUP': return Jed.PF.interpreter( ast.expr )( n ); case 'TERNARY': if ( Jed.PF.interpreter( ast.expr )( n ) ) { return Jed.PF.interpreter( ast.truthy )( n ); } return Jed.PF.interpreter( ast.falsey )( n ); case 'OR': return Jed.PF.interpreter( ast.left )( n ) || Jed.PF.interpreter( ast.right )( n ); case 'AND': return Jed.PF.interpreter( ast.left )( n ) && Jed.PF.interpreter( ast.right )( n ); case 'LT': return Jed.PF.interpreter( ast.left )( n ) < Jed.PF.interpreter( ast.right )( n ); case 'GT': return Jed.PF.interpreter( ast.left )( n ) > Jed.PF.interpreter( ast.right )( n ); case 'LTE': return Jed.PF.interpreter( ast.left )( n ) <= Jed.PF.interpreter( ast.right )( n ); case 'GTE': return Jed.PF.interpreter( ast.left )( n ) >= Jed.PF.interpreter( ast.right )( n ); case 'EQ': return Jed.PF.interpreter( ast.left )( n ) == Jed.PF.interpreter( ast.right )( n ); case 'NEQ': return Jed.PF.interpreter( ast.left )( n ) != Jed.PF.interpreter( ast.right )( n ); case 'MOD': return Jed.PF.interpreter( ast.left )( n ) % Jed.PF.interpreter( ast.right )( n ); case 'VAR': return n; case 'NUM': return ast.val; default: throw new Error("Invalid Token found."); } }; }; Jed.PF.extractPluralExpr = function ( p ) { // trim first p = p.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); if (! /;\s*$/.test(p)) { p = p.concat(';'); } var nplurals_re = /nplurals\=(\d+);/, plural_re = /plural\=(.*);/, nplurals_matches = p.match( nplurals_re ), res = {}, plural_matches; // Find the nplurals number if ( nplurals_matches.length > 1 ) { res.nplurals = nplurals_matches[1]; } else { throw new Error('nplurals not found in plural_forms string: ' + p ); } // remove that data to get to the formula p = p.replace( nplurals_re, "" ); plural_matches = p.match( plural_re ); if (!( plural_matches && plural_matches.length > 1 ) ) { throw new Error('`plural` expression not found: ' + p); } return plural_matches[ 1 ]; }; /* Jison generated parser */ Jed.PF.parser = (function(){ var parser = {trace: function trace() { }, yy: {}, symbols_: {"error":2,"expressions":3,"e":4,"EOF":5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,"n":19,"NUMBER":20,"$accept":0,"$end":1}, terminals_: {2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"}, productions_: [0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]], performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) { var $0 = $$.length - 1; switch (yystate) { case 1: return { type : 'GROUP', expr: $$[$0-1] }; break; case 2:this.$ = { type: 'TERNARY', expr: $$[$0-4], truthy : $$[$0-2], falsey: $$[$0] }; break; case 3:this.$ = { type: "OR", left: $$[$0-2], right: $$[$0] }; break; case 4:this.$ = { type: "AND", left: $$[$0-2], right: $$[$0] }; break; case 5:this.$ = { type: 'LT', left: $$[$0-2], right: $$[$0] }; break; case 6:this.$ = { type: 'LTE', left: $$[$0-2], right: $$[$0] }; break; case 7:this.$ = { type: 'GT', left: $$[$0-2], right: $$[$0] }; break; case 8:this.$ = { type: 'GTE', left: $$[$0-2], right: $$[$0] }; break; case 9:this.$ = { type: 'NEQ', left: $$[$0-2], right: $$[$0] }; break; case 10:this.$ = { type: 'EQ', left: $$[$0-2], right: $$[$0] }; break; case 11:this.$ = { type: 'MOD', left: $$[$0-2], right: $$[$0] }; break; case 12:this.$ = { type: 'GROUP', expr: $$[$0-1] }; break; case 13:this.$ = { type: 'VAR' }; break; case 14:this.$ = { type: 'NUM', val: Number(yytext) }; break; } }, table: [{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}], defaultActions: {6:[2,1]}, parseError: function parseError(str, hash) { throw new Error(str); }, parse: function parse(input) { var self = this, stack = [0], vstack = [null], // semantic value stack lstack = [], // location stack table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; //this.reductionCount = this.shiftCount = 0; this.lexer.setInput(input); this.lexer.yy = this.yy; this.yy.lexer = this.lexer; if (typeof this.lexer.yylloc == 'undefined') this.lexer.yylloc = {}; var yyloc = this.lexer.yylloc; lstack.push(yyloc); if (typeof this.yy.parseError === 'function') this.parseError = this.yy.parseError; function popStack (n) { stack.length = stack.length - 2*n; vstack.length = vstack.length - n; lstack.length = lstack.length - n; } function lex() { var token; token = self.lexer.lex() || 1; // $end = 1 // if token isn't its numeric value, convert if (typeof token !== 'number') { token = self.symbols_[token] || token; } return token; } var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected; while (true) { // retreive state number from top of stack state = stack[stack.length-1]; // use default actions if available if (this.defaultActions[state]) { action = this.defaultActions[state]; } else { if (symbol == null) symbol = lex(); // read action for current state and first input action = table[state] && table[state][symbol]; } // handle parse error _handle_error: if (typeof action === 'undefined' || !action.length || !action[0]) { if (!recovering) { // Report error expected = []; for (p in table[state]) if (this.terminals_[p] && p > 2) { expected.push("'"+this.terminals_[p]+"'"); } var errStr = ''; if (this.lexer.showPosition) { errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + this.terminals_[symbol]+ "'"; } else { errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " + (symbol == 1 /*EOF*/ ? "end of input" : ("'"+(this.terminals_[symbol] || symbol)+"'")); } this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected}); } // just recovered from another error if (recovering == 3) { if (symbol == EOF) { throw new Error(errStr || 'Parsing halted.'); } // discard current lookahead and grab another yyleng = this.lexer.yyleng; yytext = this.lexer.yytext; yylineno = this.lexer.yylineno; yyloc = this.lexer.yylloc; symbol = lex(); } // try to recover from error while (1) { // check for error recovery rule in this state if ((TERROR.toString()) in table[state]) { break; } if (state == 0) { throw new Error(errStr || 'Parsing halted.'); } popStack(1); state = stack[stack.length-1]; } preErrorSymbol = symbol; // save the lookahead token symbol = TERROR; // insert generic error symbol as new lookahead state = stack[stack.length-1]; action = table[state] && table[state][TERROR]; recovering = 3; // allow 3 real symbols to be shifted before reporting a new error } // this shouldn't happen, unless resolve defaults are off if (action[0] instanceof Array && action.length > 1) { throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol); } switch (action[0]) { case 1: // shift //this.shiftCount++; stack.push(symbol); vstack.push(this.lexer.yytext); lstack.push(this.lexer.yylloc); stack.push(action[1]); // push state symbol = null; if (!preErrorSymbol) { // normal execution/no error yyleng = this.lexer.yyleng; yytext = this.lexer.yytext; yylineno = this.lexer.yylineno; yyloc = this.lexer.yylloc; if (recovering > 0) recovering--; } else { // error just occurred, resume old lookahead f/ before error symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: // reduce //this.reductionCount++; len = this.productions_[action[1]][1]; // perform semantic action yyval.$ = vstack[vstack.length-len]; // default to $$ = $1 // default location, uses first token for firsts, last for lasts yyval._$ = { first_line: lstack[lstack.length-(len||1)].first_line, last_line: lstack[lstack.length-1].last_line, first_column: lstack[lstack.length-(len||1)].first_column, last_column: lstack[lstack.length-1].last_column }; r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); if (typeof r !== 'undefined') { return r; } // pop off stack if (len) { stack = stack.slice(0,-1*len*2); vstack = vstack.slice(0, -1*len); lstack = lstack.slice(0, -1*len); } stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce) vstack.push(yyval.$); lstack.push(yyval._$); // goto new state = table[STATE][NONTERMINAL] newState = table[stack[stack.length-2]][stack[stack.length-1]]; stack.push(newState); break; case 3: // accept return true; } } return true; }};/* Jison generated lexer */ var lexer = (function(){ var lexer = ({EOF:1, parseError:function parseError(str, hash) { if (this.yy.parseError) { this.yy.parseError(str, hash); } else { throw new Error(str); } }, setInput:function (input) { this._input = input; this._more = this._less = this.done = false; this.yylineno = this.yyleng = 0; this.yytext = this.matched = this.match = ''; this.conditionStack = ['INITIAL']; this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0}; return this; }, input:function () { var ch = this._input[0]; this.yytext+=ch; this.yyleng++; this.match+=ch; this.matched+=ch; var lines = ch.match(/\n/); if (lines) this.yylineno++; this._input = this._input.slice(1); return ch; }, unput:function (ch) { this._input = ch + this._input; return this; }, more:function () { this._more = true; return this; }, pastInput:function () { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); }, upcomingInput:function () { var next = this.match; if (next.length < 20) { next += this._input.substr(0, 20-next.length); } return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, ""); }, showPosition:function () { var pre = this.pastInput(); var c = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c+"^"; }, next:function () { if (this.done) { return this.EOF; } if (!this._input) this.done = true; var token, match, col, lines; if (!this._more) { this.yytext = ''; this.match = ''; } var rules = this._currentRules(); for (var i=0;i < rules.length; i++) { match = this._input.match(this.rules[rules[i]]); if (match) { lines = match[0].match(/\n.*/g); if (lines) this.yylineno += lines.length; this.yylloc = {first_line: this.yylloc.last_line, last_line: this.yylineno+1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length} this.yytext += match[0]; this.match += match[0]; this.matches = match; this.yyleng = this.yytext.length; this._more = false; this._input = this._input.slice(match[0].length); this.matched += match[0]; token = this.performAction.call(this, this.yy, this, rules[i],this.conditionStack[this.conditionStack.length-1]); if (token) return token; else return; } } if (this._input === "") { return this.EOF; } else { this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(), {text: "", token: null, line: this.yylineno}); } }, lex:function lex() { var r = this.next(); if (typeof r !== 'undefined') { return r; } else { return this.lex(); } }, begin:function begin(condition) { this.conditionStack.push(condition); }, popState:function popState() { return this.conditionStack.pop(); }, _currentRules:function _currentRules() { return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules; }, topState:function () { return this.conditionStack[this.conditionStack.length-2]; }, pushState:function begin(condition) { this.begin(condition); }}); lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { var YYSTATE=YY_START; switch($avoiding_name_collisions) { case 0:/* skip whitespace */ break; case 1:return 20 break; case 2:return 19 break; case 3:return 8 break; case 4:return 9 break; case 5:return 6 break; case 6:return 7 break; case 7:return 11 break; case 8:return 13 break; case 9:return 10 break; case 10:return 12 break; case 11:return 14 break; case 12:return 15 break; case 13:return 16 break; case 14:return 17 break; case 15:return 18 break; case 16:return 5 break; case 17:return 'INVALID' break; } }; lexer.rules = [/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./]; lexer.conditions = {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"inclusive":true}};return lexer;})() parser.lexer = lexer; return parser; })(); // End parser // Handle node, amd, and global systems if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { exports = module.exports = Jed; } exports.Jed = Jed; } else { if (typeof define === 'function' && define.amd) { define('jed', [],function() { return Jed; }); } // Leak a global regardless of module system root['Jed'] = Jed; } })(this); /** * @license text 2.0.15 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/text/LICENSE */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define('text',['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, xpcIsWindows, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = {}, masterConfig = (module.config && module.config()) || {}; function useDefault(value, defaultValue) { return value === undefined || value === '' ? defaultValue : value; } //Allow for default ports for http and https. function isSamePort(protocol1, port1, protocol2, port2) { if (port1 === port2) { return true; } else if (protocol1 === protocol2) { if (protocol1 === 'http') { return useDefault(port1, '80') === useDefault(port2, '80'); } else if (protocol1 === 'https') { return useDefault(port1, '443') === useDefault(port2, '443'); } } return false; } text = { version: '2.0.15', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.lastIndexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || isSamePort(uProtocol, uPort, protocol, port)); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config && config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config && config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; // Do not load if it is an empty: url if (url.indexOf('empty:') === 0) { onLoad(); return; } //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node && !process.versions['node-webkit'] && !process.versions['atom-shell'])) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback, errback) { try { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file[0] === '\uFEFF') { file = file.substring(1); } callback(file); } catch (e) { if (errback) { errback(e); } } }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status || 0; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; if (errback) { errback(err); } } else { callback(xhr.responseText); } if (masterConfig.onXhrComplete) { masterConfig.onXhrComplete(xhr, url); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } if (line !== null) { stringBuffer.append(line); } while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes; Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); text.get = function (url, callback) { var inStream, convertStream, fileObj, readData = {}; if (xpcIsWindows) { url = url.replace(/\//g, '\\'); } fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); define('text!ca',[],function () { return '{\n "domain": "converse",\n "locale_data": {\n "converse": {\n "": {\n "domain": "converse",\n "plural_forms": "nplurals=2; plural=(n != 1);",\n "lang": "ca"\n },\n "Bookmark this room": [\n null,\n ""\n ],\n "The name for this bookmark:": [\n null,\n ""\n ],\n "Would you like this room to be automatically joined upon startup?": [\n null,\n ""\n ],\n "What should your nickname for this room be?": [\n null,\n ""\n ],\n "Save": [\n null,\n "Desa"\n ],\n "Cancel": [\n null,\n "Cancel·la"\n ],\n "Bookmarks": [\n null,\n ""\n ],\n "Remove this bookmark": [\n null,\n ""\n ],\n "Show more information on this room": [\n null,\n "Mostra més informació d\'aquesta sala"\n ],\n "Click to open this room": [\n null,\n "Feu clic per obrir aquesta sala"\n ],\n "Close this chat box": [\n null,\n "Tanca aquest quadre del xat"\n ],\n "Personal message": [\n null,\n "Missatge personal"\n ],\n "Send": [\n null,\n ""\n ],\n "me": [\n null,\n "jo"\n ],\n "A very large message has been received.This might be due to an attack meant to degrade the chat performance.Output has been shortened.": [\n null,\n ""\n ],\n "Typing from another device": [\n null,\n ""\n ],\n "is typing": [\n null,\n "està escrivint"\n ],\n "Stopped typing on the other device": [\n null,\n ""\n ],\n "has stopped typing": [\n null,\n "ha deixat d\'escriure"\n ],\n "has gone away": [\n null,\n "ha marxat"\n ],\n "Show this menu": [\n null,\n "Mostra aquest menú"\n ],\n "Write in the third person": [\n null,\n "Escriu en tercera persona"\n ],\n "Remove messages": [\n null,\n "Elimina els missatges"\n ],\n "Are you sure you want to clear the messages from this chat box?": [\n null,\n "Segur que voleu esborrar els missatges d\'aquest quadre del xat?"\n ],\n "has gone offline": [\n null,\n "s\'ha desconnectat"\n ],\n "is busy": [\n null,\n "està ocupat"\n ],\n "Clear all messages": [\n null,\n "Esborra tots els missatges"\n ],\n "Insert a smiley": [\n null,\n "Insereix una cara somrient"\n ],\n "Start a call": [\n null,\n "Inicia una trucada"\n ],\n "Contacts": [\n null,\n "Contactes"\n ],\n "XMPP Username:": [\n null,\n "Nom d\'usuari XMPP:"\n ],\n "Password:": [\n null,\n "Contrasenya:"\n ],\n "Click here to log in anonymously": [\n null,\n "Feu clic aquí per iniciar la sessió de manera anònima"\n ],\n "Log In": [\n null,\n "Inicia la sessió"\n ],\n "user@server": [\n null,\n "usuari@servidor"\n ],\n "password": [\n null,\n "contrasenya"\n ],\n "Sign in": [\n null,\n "Inicia la sessió"\n ],\n "I am %1$s": [\n null,\n "Estic %1$s"\n ],\n "Click here to write a custom status message": [\n null,\n "Feu clic aquí per escriure un missatge d\'estat personalitzat"\n ],\n "Click to change your chat status": [\n null,\n "Feu clic per canviar l\'estat del xat"\n ],\n "Custom status": [\n null,\n "Estat personalitzat"\n ],\n "online": [\n null,\n "en línia"\n ],\n "busy": [\n null,\n "ocupat"\n ],\n "away for long": [\n null,\n "absent durant una estona"\n ],\n "away": [\n null,\n "absent"\n ],\n "offline": [\n null,\n "desconnectat"\n ],\n "Online": [\n null,\n "En línia"\n ],\n "Busy": [\n null,\n "Ocupat"\n ],\n "Away": [\n null,\n "Absent"\n ],\n "Offline": [\n null,\n "Desconnectat"\n ],\n "Log out": [\n null,\n "Tanca la sessió"\n ],\n "Click to add new chat contacts": [\n null,\n "Feu clic per afegir contactes nous al xat"\n ],\n "Add a contact": [\n null,\n "Afegeix un contacte"\n ],\n "Contact name": [\n null,\n "Nom del contacte"\n ],\n "Search": [\n null,\n "Cerca"\n ],\n "Add": [\n null,\n "Afegeix"\n ],\n "No users found": [\n null,\n "No s\'ha trobat cap usuari"\n ],\n "This client does not allow presence subscriptions": [\n null,\n "Aquest client no admet les subscripcions de presència"\n ],\n "Click to hide these contacts": [\n null,\n "Feu clic per amagar aquests contactes"\n ],\n "Minimize this chat box": [\n null,\n "Minimitza aquest quadre del xat"\n ],\n "Click to restore this chat": [\n null,\n "Feu clic per restaurar aquest xat"\n ],\n "Minimized": [\n null,\n "Minimitzat"\n ],\n "This room is not anonymous": [\n null,\n "Aquesta sala no és anònima"\n ],\n "This room now shows unavailable members": [\n null,\n "Aquesta sala ara mostra membres no disponibles"\n ],\n "This room does not show unavailable members": [\n null,\n "Aquesta sala no mostra membres no disponibles"\n ],\n "Room logging is now enabled": [\n null,\n "El registre de la sala està habilitat"\n ],\n "Room logging is now disabled": [\n null,\n "El registre de la sala està deshabilitat"\n ],\n "This room is now semi-anonymous": [\n null,\n "Aquesta sala ara és parcialment anònima"\n ],\n "This room is now fully-anonymous": [\n null,\n "Aquesta sala ara és totalment anònima"\n ],\n "A new room has been created": [\n null,\n "S\'ha creat una sala nova"\n ],\n "You have been banned from this room": [\n null,\n "Se us ha expulsat d\'aquesta sala"\n ],\n "You have been kicked from this room": [\n null,\n "Se us ha expulsat d\'aquesta sala"\n ],\n "You have been removed from this room because of an affiliation change": [\n null,\n "Se us ha eliminat d\'aquesta sala a causa d\'un canvi d\'afiliació"\n ],\n "You have been removed from this room because the room has changed to members-only and you\'re not a member": [\n null,\n "Se us ha eliminat d\'aquesta sala perquè ara només permet membres i no en sou membre"\n ],\n "You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [\n null,\n "Se us ha eliminat d\'aquesta sala perquè s\'està tancant el servei MUC (xat multiusuari)."\n ],\n "Message": [\n null,\n "Missatge"\n ],\n "Hide the list of occupants": [\n null,\n "Amaga la llista d\'ocupants"\n ],\n "${command}": [\n null,\n ""\n ],\n "Are you sure you want to clear the messages from this room?": [\n null,\n "Segur que voleu esborrar els missatges d\'aquesta sala?"\n ],\n "Error: could not execute the command": [\n null,\n "Error: no s\'ha pogut executar l\'ordre"\n ],\n "Change user\'s affiliation to admin": [\n null,\n "Canvia l\'afiliació de l\'usuari a administrador"\n ],\n "Ban user from room": [\n null,\n "Expulsa l\'usuari de la sala"\n ],\n "Change user role to occupant": [\n null,\n "Canvia el rol de l\'usuari a ocupant"\n ],\n "Kick user from room": [\n null,\n "Expulsa l\'usuari de la sala"\n ],\n "Write in 3rd person": [\n null,\n "Escriu en tercera persona"\n ],\n "Grant membership to a user": [\n null,\n "Atorga una afiliació a un usuari"\n ],\n "Remove user\'s ability to post messages": [\n null,\n "Elimina la capacitat de l\'usuari de publicar missatges"\n ],\n "Change your nickname": [\n null,\n "Canvieu el vostre àlies"\n ],\n "Grant moderator role to user": [\n null,\n "Atorga el rol de moderador a l\'usuari"\n ],\n "Grant ownership of this room": [\n null,\n "Atorga la propietat d\'aquesta sala"\n ],\n "Revoke user\'s membership": [\n null,\n "Revoca l\'afiliació de l\'usuari"\n ],\n "Set room subject (alias for /subject)": [\n null,\n ""\n ],\n "Allow muted user to post messages": [\n null,\n "Permet que un usuari silenciat publiqui missatges"\n ],\n "The nickname you chose is reserved or currently in use, please choose a different one.": [\n null,\n ""\n ],\n "Nickname": [\n null,\n "Àlies"\n ],\n "This chatroom requires a password": [\n null,\n "Aquesta sala de xat requereix una contrasenya"\n ],\n "Password: ": [\n null,\n "Contrasenya:"\n ],\n "Submit": [\n null,\n "Envia"\n ],\n "${notification.reason}": [\n null,\n ""\n ],\n " has left the room. \\"": [\n null,\n ""\n ],\n " has joined the room. \\"": [\n null,\n ""\n ],\n " has joined the room.": [\n null,\n ""\n ],\n "Topic set by %1$s to: %2$s": [\n null,\n "Tema definit per %1$s en: %2$s"\n ],\n "Occupants": [\n null,\n "Ocupants"\n ],\n "Hidden": [\n null,\n "Amagat"\n ],\n "Message archiving": [\n null,\n ""\n ],\n "Members only": [\n null,\n ""\n ],\n "Moderated": [\n null,\n "Moderada"\n ],\n "Non-anonymous": [\n null,\n "No és anònima"\n ],\n "Persistent": [\n null,\n ""\n ],\n "Public": [\n null,\n "Pública"\n ],\n "Semi-anonymous": [\n null,\n "Semianònima"\n ],\n "Unmoderated": [\n null,\n "No moderada"\n ],\n "Unsecured": [\n null,\n ""\n ],\n "Messages are archived on the server": [\n null,\n ""\n ],\n "All other room occupants can see your XMPP username": [\n null,\n ""\n ],\n "This room persists even if it\'s unoccupied": [\n null,\n ""\n ],\n "Only moderators can see your XMPP username": [\n null,\n ""\n ],\n "This room will disappear once the last person leaves": [\n null,\n ""\n ],\n "You are about to invite %1$s to the chat room \\"%2$s\\". ": [\n null,\n "Esteu a punt de convidar %1$s a la sala de xat \\"%2$s\\". "\n ],\n "You may optionally include a message, explaining the reason for the invitation.": [\n null,\n "Teniu l\'opció d\'incloure un missatge per explicar el motiu de la invitació."\n ],\n "Please enter a valid XMPP username": [\n null,\n ""\n ],\n "Room name": [\n null,\n "Nom de la sala"\n ],\n "Server": [\n null,\n "Servidor"\n ],\n "Join Room": [\n null,\n "Uneix-me a la sala"\n ],\n "Show rooms": [\n null,\n "Mostra les sales"\n ],\n "Rooms": [\n null,\n "Sales"\n ],\n "No rooms on %1$s": [\n null,\n "No hi ha cap sala a %1$s"\n ],\n "Description:": [\n null,\n "Descripció:"\n ],\n "Room Address (JID):": [\n null,\n ""\n ],\n "Occupants:": [\n null,\n "Ocupants:"\n ],\n "Features:": [\n null,\n "Característiques:"\n ],\n "Requires authentication": [\n null,\n "Cal autenticar-se"\n ],\n "Requires an invitation": [\n null,\n "Cal tenir una invitació"\n ],\n "Open room": [\n null,\n "Obre la sala"\n ],\n "Permanent room": [\n null,\n "Sala permanent"\n ],\n "Temporary room": [\n null,\n "Sala temporal"\n ],\n "%1$s has invited you to join a chat room: %2$s": [\n null,\n "%1$s us ha convidat a unir-vos a una sala de xat: %2$s"\n ],\n "%1$s has invited you to join a chat room: %2$s, and left the following reason: \\"%3$s\\"": [\n null,\n "%1$s us ha convidat a unir-vos a una sala de xat (%2$s) i ha deixat el següent motiu: \\"%3$s\\""\n ],\n "Notification from %1$s": [\n null,\n ""\n ],\n "%1$s says": [\n null,\n ""\n ],\n "wants to be your contact": [\n null,\n ""\n ],\n "Re-establishing encrypted session": [\n null,\n "S\'està tornant a establir la sessió xifrada"\n ],\n "Generating private key.": [\n null,\n "S\'està generant la clau privada"\n ],\n "Your browser might become unresponsive.": [\n null,\n "És possible que el navegador no respongui."\n ],\n "Authentication request from %1$s\\n\\nYour chat contact is attempting to verify your identity, by asking you the question below.\\n\\n%2$s": [\n null,\n "Sol·licitud d\'autenticació de %1$s\\n\\nEl contacte del xat està intentant verificar la vostra identitat mitjançant la pregunta següent.\\n\\n%2$s"\n ],\n "Could not verify this user\'s identify.": [\n null,\n "No s\'ha pogut verificar la identitat d\'aquest usuari."\n ],\n "Exchanging private key with contact.": [\n null,\n "S\'està intercanviant la clau privada amb el contacte."\n ],\n "Your messages are not encrypted anymore": [\n null,\n "Els vostres missatges ja no estan xifrats"\n ],\n "Your messages are now encrypted but your contact\'s identity has not been verified.": [\n null,\n "Ara, els vostres missatges estan xifrats, però no s\'ha verificat la identitat del contacte."\n ],\n "Your contact\'s identify has been verified.": [\n null,\n "S\'ha verificat la identitat del contacte."\n ],\n "Your contact has ended encryption on their end, you should do the same.": [\n null,\n "El contacte ha conclòs el xifratge; cal que feu el mateix."\n ],\n "Your message could not be sent": [\n null,\n "No s\'ha pogut enviar el missatge"\n ],\n "We received an unencrypted message": [\n null,\n "Hem rebut un missatge sense xifrar"\n ],\n "We received an unreadable encrypted message": [\n null,\n "Hem rebut un missatge xifrat il·legible"\n ],\n "Here are the fingerprints, please confirm them with %1$s, outside of this chat.\\n\\nFingerprint for you, %2$s: %3$s\\n\\nFingerprint for %1$s: %4$s\\n\\nIf you have confirmed that the fingerprints match, click OK, otherwise click Cancel.": [\n null,\n "Aquí es mostren les empremtes. Confirmeu-les amb %1$s fora d\'aquest xat.\\n\\nEmpremta de l\'usuari %2$s: %3$s\\n\\nEmpremta de %1$s: %4$s\\n\\nSi heu confirmat que les empremtes coincideixen, feu clic a D\'acord; en cas contrari, feu clic a Cancel·la."\n ],\n "You will be prompted to provide a security question and then an answer to that question.\\n\\nYour contact will then be prompted the same question and if they type the exact same answer (case sensitive), their identity will be verified.": [\n null,\n "Se us demanarà que indiqueu una pregunta de seguretat i la resposta corresponent.\\n\\nEs farà la mateixa pregunta al vostre contacte i, si escriu exactament la mateixa resposta (es distingeix majúscules de minúscules), se\'n verificarà la identitat."\n ],\n "What is your security question?": [\n null,\n "Quina és la vostra pregunta de seguretat?"\n ],\n "What is the answer to the security question?": [\n null,\n "Quina és la resposta a la pregunta de seguretat?"\n ],\n "Invalid authentication scheme provided": [\n null,\n "S\'ha indicat un esquema d\'autenticació no vàlid"\n ],\n "Your messages are not encrypted. Click here to enable OTR encryption.": [\n null,\n "Els vostres missatges no estan xifrats. Feu clic aquí per habilitar el xifratge OTR."\n ],\n "Your messages are encrypted, but your contact has not been verified.": [\n null,\n "Els vostres missatges estan xifrats, però no s\'ha verificat el contacte."\n ],\n "Your messages are encrypted and your contact verified.": [\n null,\n "Els vostres missatges estan xifrats i s\'ha verificat el contacte."\n ],\n "Your contact has closed their end of the private session, you should do the same": [\n null,\n "El vostre contacte ha tancat la seva sessió privada; cal que feu el mateix."\n ],\n "End encrypted conversation": [\n null,\n "Finalitza la conversa xifrada"\n ],\n "Refresh encrypted conversation": [\n null,\n "Actualitza la conversa xifrada"\n ],\n "Start encrypted conversation": [\n null,\n "Comença la conversa xifrada"\n ],\n "Verify with fingerprints": [\n null,\n "Verifica amb empremtes"\n ],\n "Verify with SMP": [\n null,\n "Verifica amb SMP"\n ],\n "What\'s this?": [\n null,\n "Què és això?"\n ],\n "unencrypted": [\n null,\n "sense xifrar"\n ],\n "unverified": [\n null,\n "sense verificar"\n ],\n "verified": [\n null,\n "verificat"\n ],\n "finished": [\n null,\n "acabat"\n ],\n " e.g. conversejs.org": [\n null,\n "p. ex. conversejs.org"\n ],\n "Your XMPP provider\'s domain name:": [\n null,\n "Nom de domini del vostre proveïdor XMPP:"\n ],\n "Fetch registration form": [\n null,\n "Obtingues un formulari de registre"\n ],\n "Tip: A list of public XMPP providers is available": [\n null,\n "Consell: hi ha disponible una llista de proveïdors XMPP públics"\n ],\n "here": [\n null,\n "aquí"\n ],\n "Register": [\n null,\n "Registre"\n ],\n "Sorry, the given provider does not support in band account registration. Please try with a different provider.": [\n null,\n "El proveïdor indicat no admet el registre del compte. Proveu-ho amb un altre proveïdor."\n ],\n "Requesting a registration form from the XMPP server": [\n null,\n "S\'està sol·licitant un formulari de registre del servidor XMPP"\n ],\n "Something went wrong while establishing a connection with \\"%1$s\\". Are you sure it exists?": [\n null,\n "Ha passat alguna cosa mentre s\'establia la connexió amb \\"%1$s\\". Segur que existeix?"\n ],\n "Now logging you in": [\n null,\n "S\'està iniciant la vostra sessió"\n ],\n "Registered successfully": [\n null,\n "Registre correcte"\n ],\n "The provider rejected your registration attempt. Please check the values you entered for correctness.": [\n null,\n "El proveïdor ha rebutjat l\'intent de registre. Comproveu que els valors que heu introduït siguin correctes."\n ],\n "Retry": [\n null,\n ""\n ],\n "This contact is busy": [\n null,\n "Aquest contacte està ocupat"\n ],\n "This contact is online": [\n null,\n "Aquest contacte està en línia"\n ],\n "This contact is offline": [\n null,\n "Aquest contacte està desconnectat"\n ],\n "This contact is unavailable": [\n null,\n "Aquest contacte no està disponible"\n ],\n "This contact is away for an extended period": [\n null,\n "Aquest contacte està absent durant un període prolongat"\n ],\n "This contact is away": [\n null,\n "Aquest contacte està absent"\n ],\n "Groups": [\n null,\n "Grups"\n ],\n "My contacts": [\n null,\n "Els meus contactes"\n ],\n "Pending contacts": [\n null,\n "Contactes pendents"\n ],\n "Contact requests": [\n null,\n "Sol·licituds de contacte"\n ],\n "Ungrouped": [\n null,\n "Sense agrupar"\n ],\n "Filter": [\n null,\n ""\n ],\n "State": [\n null,\n ""\n ],\n "Any": [\n null,\n ""\n ],\n "Unread": [\n null,\n ""\n ],\n "Chatty": [\n null,\n ""\n ],\n "Extended Away": [\n null,\n ""\n ],\n "Click to chat with this contact": [\n null,\n "Feu clic per conversar amb aquest contacte"\n ],\n "Name": [\n null,\n "Nom"\n ],\n "Are you sure you want to remove this contact?": [\n null,\n "Segur que voleu eliminar aquest contacte?"\n ],\n "Are you sure you want to decline this contact request?": [\n null,\n "Segur que voleu rebutjar aquesta sol·licitud de contacte?"\n ]\n }\n }\n}';}); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // Converse.js (A browser based XMPP chat client) // http://conversejs.org // // This is the utilities module. // // Copyright (c) 2012-2017, Jan-Carel Brand // Licensed under the Mozilla Public License (MPLv2) // /*global define, escape, locales, window, Jed */ (function (root, factory) { define('utils',["sizzle", "es6-promise", "jquery.browser", "lodash.noconflict", "locales", "moment_with_locales", "strophe"], factory); })(undefined, function (sizzle, Promise, jQBrowser, _, locales, moment, Strophe) { "use strict"; locales = locales || {}; var b64_sha1 = Strophe.SHA1.b64_sha1; Strophe = Strophe.Strophe; var URL_REGEX = /\b(https?:\/\/|www\.|https?:\/\/www\.)[^\s<>]{2,200}\b/g; var logger = _.assign({ 'debug': _.get(console, 'log') ? console.log.bind(console) : _.noop, 'error': _.get(console, 'log') ? console.log.bind(console) : _.noop, 'info': _.get(console, 'log') ? console.log.bind(console) : _.noop, 'warn': _.get(console, 'log') ? console.log.bind(console) : _.noop }, console); var afterAnimationEnd = function afterAnimationEnd(el, callback) { el.classList.remove('visible'); if (_.isFunction(callback)) { callback(); } }; var unescapeHTML = function unescapeHTML(htmlEscapedText) { /* Helper method that replace HTML-escaped symbols with equivalent characters * (e.g. transform occurrences of '&' to '&') * * Parameters: * (String) htmlEscapedText: a String containing the HTML-escaped symbols. */ var div = document.createElement('div'); div.innerHTML = htmlEscapedText; return div.innerText; }; var isImage = function isImage(url) { return new Promise(function (resolve, reject) { var img = new Image(); var timer = window.setTimeout(function () { reject(new Error("Could not determine whether it's an image")); img = null; }, 3000); img.onerror = img.onabort = function () { clearTimeout(timer); reject(new Error("Could not determine whether it's an image")); }; img.onload = function () { clearTimeout(timer); resolve(img); }; img.src = url; }); }; function calculateSlideStep(height) { if (height > 100) { return 10; } else if (height > 50) { return 5; } else { return 1; } } function calculateElementHeight(el) { /* Return the height of the passed in DOM element, * based on the heights of its children. */ return _.reduce(el.children, function (result, child) { return result + child.offsetHeight; }, 0); } function slideOutWrapup(el) { /* Wrapup function for slideOut. */ el.removeAttribute('data-slider-marker'); el.classList.remove('collapsed'); el.style.overflow = ""; el.style.height = ""; } var u = {}; // Translation machinery // --------------------- u.__ = function (str) { if (_.isUndefined(window.Jed)) { return str; } if (!u.isConverseLocale(this.locale) || this.locale === 'en') { return Jed.sprintf.apply(window.Jed, arguments); } if (typeof this.jed === "undefined") { this.jed = new Jed(window.JSON.parse(locales[this.locale])); } var t = this.jed.translate(str); if (arguments.length > 1) { return t.fetch.apply(t, [].slice.call(arguments, 1)); } else { return t.fetch(); } }; u.___ = function (str) { /* XXX: This is part of a hack to get gettext to scan strings to be * translated. Strings we cannot send to the function above because * they require variable interpolation and we don't yet have the * variables at scan time. * * See actionInfoMessages in src/converse-muc.js */ return str; }; u.isLocaleAvailable = function (locale, available) { /* Check whether the locale or sub locale (e.g. en-US, en) is supported. * * Parameters: * (Function) available - returns a boolean indicating whether the locale is supported */ if (available(locale)) { return locale; } else { var sublocale = locale.split("-")[0]; if (sublocale !== locale && available(sublocale)) { return sublocale; } } }; u.addHyperlinks = function (text) { var list = text.match(URL_REGEX) || []; var links = []; _.each(list, function (match) { var prot = match.indexOf('http://') === 0 || match.indexOf('https://') === 0 ? '' : 'http://'; var url = prot + encodeURI(decodeURI(match)).replace(/[!'()]/g, escape).replace(/\*/g, "%2A"); var a = '' + _.escape(match) + ''; // We first insert a hash of the code that will be inserted, and // then later replace that with the code itself. That way we avoid // issues when some matches are substrings of others. links.push(a); text = text.replace(match, b64_sha1(a)); }); while (links.length) { var a = links.pop(); text = text.replace(b64_sha1(a), a); } return text; }; u.renderImageURLs = function (obj) { var list = obj.textContent.match(URL_REGEX) || []; _.forEach(list, function (url) { isImage(url).then(function (img) { img.className = 'chat-image'; var anchors = sizzle("a[href=\"" + url + "\"]", obj); _.each(anchors, function (a) { a.innerHTML = img.outerHTML; }); }); }); return obj; }; u.slideInAllElements = function (elements) { return Promise.all(_.map(elements, _.partial(u.slideIn, _, 600))); }; u.slideToggleElement = function (el) { if (_.includes(el.classList, 'collapsed')) { return u.slideOut(el); } else { return u.slideIn(el); } }; u.slideOut = function (el) { var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 900; /* Shows/expands an element by sliding it out of itself * * Parameters: * (HTMLElement) el - The HTML string * (Number) duration - The duration amount in milliseconds */ return new Promise(function (resolve, reject) { if (_.isNil(el)) { var err = "Undefined or null element passed into slideOut"; logger.warn(err); reject(new Error(err)); return; } var interval_marker = el.getAttribute('data-slider-marker'); if (interval_marker) { el.removeAttribute('data-slider-marker'); window.clearInterval(interval_marker); } var end_height = calculateElementHeight(el); if (window.converse_disable_effects) { // Effects are disabled (for tests) el.style.height = end_height + 'px'; slideOutWrapup(el); resolve(); return; } var step = calculateSlideStep(end_height), interval = end_height / duration * step; var h = 0; interval_marker = window.setInterval(function () { h += step; if (h < end_height) { el.style.height = h + 'px'; } else { // We recalculate the height to work around an apparent // browser bug where browsers don't know the correct // offsetHeight beforehand. el.style.height = calculateElementHeight(el) + 'px'; window.clearInterval(interval_marker); slideOutWrapup(el); resolve(); } }, interval); el.setAttribute('data-slider-marker', interval_marker); }); }; u.slideIn = function (el) { var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 600; /* Hides/collapses an element by sliding it into itself. */ return new Promise(function (resolve, reject) { if (_.isNil(el)) { var err = "Undefined or null element passed into slideIn"; logger.warn(err); return reject(new Error(err)); } else if (_.includes(el.classList, 'collapsed')) { return resolve(); } else if (window.converse_disable_effects) { // Effects are disabled (for tests) el.classList.add('collapsed'); el.style.height = ""; return resolve(); } var interval_marker = el.getAttribute('data-slider-marker'); if (interval_marker) { el.removeAttribute('data-slider-marker'); window.clearInterval(interval_marker); } var h = el.offsetHeight; var step = calculateSlideStep(h), interval = h / duration * step; el.style.overflow = 'hidden'; interval_marker = window.setInterval(function () { h -= step; if (h > 0) { el.style.height = h + 'px'; } else { el.removeAttribute('data-slider-marker'); window.clearInterval(interval_marker); el.classList.add('collapsed'); el.style.height = ""; resolve(); } }, interval); el.setAttribute('data-slider-marker', interval_marker); }); }; u.fadeIn = function (el, callback) { if (_.isNil(el)) { logger.warn("Undefined or null element passed into fadeIn"); } if (window.converse_disable_effects) { // Effects are disabled (for tests) el.classList.remove('hidden'); if (_.isFunction(callback)) { callback(); } return; } if (_.includes(el.classList, 'hidden')) { /* XXX: This doesn't appear to be working... el.addEventListener("webkitAnimationEnd", _.partial(afterAnimationEnd, el, callback), false); el.addEventListener("animationend", _.partial(afterAnimationEnd, el, callback), false); */ setTimeout(_.partial(afterAnimationEnd, el, callback), 351); el.classList.add('visible'); el.classList.remove('hidden'); } else { afterAnimationEnd(el, callback); } }; u.isSameBareJID = function (jid1, jid2) { return Strophe.getBareJidFromJid(jid1).toLowerCase() === Strophe.getBareJidFromJid(jid2).toLowerCase(); }; u.isNewMessage = function (message) { /* Given a stanza, determine whether it's a new * message, i.e. not a MAM archived one. */ if (message instanceof Element) { return !sizzle('result[xmlns="' + Strophe.NS.MAM + '"]', message).length; } else { return !message.get('archive_id'); } }; u.isOTRMessage = function (message) { var body = message.querySelector('body'), text = !_.isNull(body) ? body.textContent : undefined; return text && !!text.match(/^\?OTR/); }; u.isHeadlineMessage = function (message) { var from_jid = message.getAttribute('from'); if (message.getAttribute('type') === 'headline') { return true; } if (message.getAttribute('type') !== 'error' && !_.isNil(from_jid) && !_.includes(from_jid, '@')) { // Some servers (I'm looking at you Prosody) don't set the message // type to "headline" when sending server messages. For now we // check if an @ signal is included, and if not, we assume it's // a headline message. return true; } return false; }; u.merge = function merge(first, second) { /* Merge the second object into the first one. */ for (var k in second) { if (_.isObject(first[k])) { merge(first[k], second[k]); } else { first[k] = second[k]; } } }; u.applyUserSettings = function applyUserSettings(context, settings, user_settings) { /* Configuration settings might be nested objects. We only want to * add settings which are whitelisted. */ for (var k in settings) { if (_.isUndefined(user_settings[k])) { continue; } if (_.isObject(settings[k]) && !_.isArray(settings[k])) { applyUserSettings(context[k], settings[k], user_settings[k]); } else { context[k] = user_settings[k]; } } }; u.refreshWebkit = function () { /* This works around a webkit bug. Refreshes the browser's viewport, * otherwise chatboxes are not moved along when one is closed. */ if (jQBrowser.webkit && window.requestAnimationFrame) { window.requestAnimationFrame(function () { var conversejs = document.getElementById('conversejs'); conversejs.style.display = 'none'; var tmp = conversejs.offsetHeight; // jshint ignore:line conversejs.style.display = 'block'; }); } }; u.stringToDOM = function (s) { /* Converts an HTML string into a DOM element. * * Parameters: * (String) s - The HTML string */ var div = document.createElement('div'); div.innerHTML = s; return div.childNodes; }; u.matchesSelector = function (el, selector) { /* Checks whether the DOM element matches the given selector. * * Parameters: * (DOMElement) el - The DOM element * (String) selector - The selector */ return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector); }; u.queryChildren = function (el, selector) { /* Returns a list of children of the DOM element that match the * selector. * * Parameters: * (DOMElement) el - the DOM element * (String) selector - the selector they should be matched * against. */ return _.filter(el.children, _.partial(u.matchesSelector, _, selector)); }; u.contains = function (attr, query) { return function (item) { if ((typeof attr === "undefined" ? "undefined" : _typeof(attr)) === 'object') { var value = false; _.forEach(attr, function (a) { value = value || _.includes(item.get(a).toLowerCase(), query.toLowerCase()); }); return value; } else if (typeof attr === 'string') { return _.includes(item.get(attr).toLowerCase(), query.toLowerCase()); } else { throw new TypeError('contains: wrong attribute type. Must be string or array.'); } }; }; u.detectLocale = function (library_check) { /* Determine which locale is supported by the user's system as well * as by the relevant library (e.g. converse.js or moment.js). * * Parameters: * (Function) library_check - returns a boolean indicating whether * the locale is supported. */ var locale, i; if (window.navigator.userLanguage) { locale = u.isLocaleAvailable(window.navigator.userLanguage, library_check); } if (window.navigator.languages && !locale) { for (i = 0; i < window.navigator.languages.length && !locale; i++) { locale = u.isLocaleAvailable(window.navigator.languages[i], library_check); } } if (window.navigator.browserLanguage && !locale) { locale = u.isLocaleAvailable(window.navigator.browserLanguage, library_check); } if (window.navigator.language && !locale) { locale = u.isLocaleAvailable(window.navigator.language, library_check); } if (window.navigator.systemLanguage && !locale) { locale = u.isLocaleAvailable(window.navigator.systemLanguage, library_check); } return locale || 'en'; }; u.isConverseLocale = function (locale) { if (!_.isString(locale)) { return false; } return _.includes(_.keys(locales || {}), locale); }; u.isMomentLocale = function (locale) { if (!_.isString(locale)) { return false; } return moment.locale() !== moment.locale(locale); }; u.getLocale = function (preferred_locale, isSupportedByLibrary) { if (_.isString(preferred_locale)) { if (preferred_locale === 'en' || isSupportedByLibrary(preferred_locale)) { return preferred_locale; } try { var obj = window.JSON.parse(preferred_locale); return obj.locale_data.converse[""].lang; } catch (e) { logger.error(e); } } return u.detectLocale(isSupportedByLibrary) || 'en'; }; u.isOfType = function (type, item) { return item.get('type') == type; }; u.isInstance = function (type, item) { return item instanceof type; }; u.getAttribute = function (key, item) { return item.get(key); }; u.contains.not = function (attr, query) { return function (item) { return !u.contains(attr, query)(item); }; }; u.createFragmentFromText = function (markup) { /* Returns a DocumentFragment containing DOM nodes based on the * passed-in markup text. */ // http://stackoverflow.com/questions/9334645/create-node-from-markup-string var frag = document.createDocumentFragment(), tmp = document.createElement('body'), child; tmp.innerHTML = markup; // Append elements in a loop to a DocumentFragment, so that the // browser does not re-render the document for each node. while (child = tmp.firstChild) { // eslint-disable-line no-cond-assign frag.appendChild(child); } return frag; }; u.addEmoji = function (_converse, emojione, text) { if (_converse.use_emojione) { return emojione.toImage(text); } else { return emojione.shortnameToUnicode(text); } }; u.getEmojisByCategory = function (_converse, emojione) { /* Return a dict of emojis with the categories as keys and * lists of emojis in that category as values. */ if (_.isUndefined(_converse.emojis_by_category)) { var emojis = _.values(_.mapValues(emojione.emojioneList, function (value, key, o) { value._shortname = key; return value; })); var tones = [':tone1:', ':tone2:', ':tone3:', ':tone4:', ':tone5:']; var excluded = [':kiss_ww:', ':kiss_mm:', ':kiss_woman_man:']; var excluded_substrings = [':woman', ':man', ':women_', ':men_', '_man_', '_woman_', '_woman:', '_man:']; var excluded_categories = ['modifier', 'regional']; var categories = _.difference(_.uniq(_.map(emojis, _.partial(_.get, _, 'category'))), excluded_categories); var emojis_by_category = {}; _.forEach(categories, function (cat) { var list = _.sortBy(_.filter(emojis, ['category', cat]), ['uc_base']); list = _.filter(list, function (item) { return !_.includes(_.concat(tones, excluded), item._shortname) && !_.some(excluded_substrings, _.partial(_.includes, item._shortname)); }); if (cat === 'people') { var idx = _.findIndex(list, ['uc_base', '1f600']); list = _.union(_.slice(list, idx), _.slice(list, 0, idx + 1)); } else if (cat === 'activity') { list = _.union(_.slice(list, 27 - 1), _.slice(list, 0, 27)); } else if (cat === 'objects') { list = _.union(_.slice(list, 24 - 1), _.slice(list, 0, 24)); } else if (cat === 'travel') { list = _.union(_.slice(list, 17 - 1), _.slice(list, 0, 17)); } else if (cat === 'symbols') { list = _.union(_.slice(list, 60 - 1), _.slice(list, 0, 60)); } emojis_by_category[cat] = list; }); _converse.emojis_by_category = emojis_by_category; } return _converse.emojis_by_category; }; u.getTonedEmojis = function (_converse) { _converse.toned_emojis = _.uniq(_.map(_.filter(u.getEmojisByCategory(_converse).people, function (person) { return _.includes(person._shortname, '_tone'); }), function (person) { return person._shortname.replace(/_tone[1-5]/, ''); })); return _converse.toned_emojis; }; u.isPersistableModel = function (model) { return model.collection && model.collection.browserStorage; }; u.getWrappedPromise = function () { var wrapper = {}; wrapper.promise = new Promise(function (resolve, reject) { wrapper.resolve = resolve; wrapper.reject = reject; }); return wrapper; }; u.safeSave = function (model, attributes) { if (u.isPersistableModel(model)) { model.save(attributes); } else { model.set(attributes); } }; return u; }); //# sourceMappingURL=utils.js.map; (function (global, factory) { if (typeof define === "function" && define.amd) { define('pluggable',['exports', 'lodash'], factory); } else if (typeof exports !== "undefined") { factory(exports, require('lodash')); } else { var mod = { exports: {} }; factory(mod.exports, global._); global.pluggable = mod.exports; } })(this, function (exports, _lodash) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.enable = undefined; var _ = _interopRequireWildcard(_lodash); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // The `PluginSocket` class contains the plugin architecture, and gets // created whenever `pluggable.enable(obj);` is called on the object // that you want to make pluggable. // You can also see it as the thing into which the plugins are plugged. // It takes two parameters, first, the object being made pluggable, and // then the name by which the pluggable object may be referenced on the // __super__ object (inside overrides). function PluginSocket(plugged, name) { this.name = name; this.plugged = plugged; if (typeof this.plugged.__super__ === 'undefined') { this.plugged.__super__ = {}; } else if (typeof this.plugged.__super__ === 'string') { this.plugged.__super__ = { '__string__': this.plugged.__super__ }; } this.plugged.__super__[name] = this.plugged; this.plugins = {}; this.initialized_plugins = []; } // Now we add methods to the PluginSocket by adding them to its // prototype. _.extend(PluginSocket.prototype, { // `wrappedOverride` creates a partially applied wrapper function // that makes sure to set the proper super method when the // overriding method is called. This is done to enable // chaining of plugin methods, all the way up to the // original method. wrappedOverride: function wrappedOverride(key, value, super_method, default_super) { if (typeof super_method === "function") { if (typeof this.__super__ === "undefined") { /* We're not on the context of the plugged object. * This can happen when the overridden method is called via * an event handler or when it's a constructor. * * In this case, we simply tack on the __super__ obj. */ this.__super__ = default_super; } this.__super__[key] = super_method.bind(this); } return value.apply(this, _.drop(arguments, 4)); }, // `_overrideAttribute` overrides an attribute on the original object // (the thing being plugged into). // // If the attribute being overridden is a function, then the original // function will still be available via the `__super__` attribute. // // If the same function is being overridden multiple times, then // the original function will be available at the end of a chain of // functions, starting from the most recent override, all the way // back to the original function, each being referenced by the // previous' __super__ attribute. // // For example: // // `plugin2.MyFunc.__super__.myFunc => plugin1.MyFunc.__super__.myFunc => original.myFunc` _overrideAttribute: function _overrideAttribute(key, plugin) { var value = plugin.overrides[key]; if (typeof value === "function") { var default_super = {}; default_super[this.name] = this.plugged; var wrapped_function = _.partial(this.wrappedOverride, key, value, this.plugged[key], default_super); this.plugged[key] = wrapped_function; } else { this.plugged[key] = value; } }, _extendObject: function _extendObject(obj, attributes) { if (!obj.prototype.__super__) { obj.prototype.__super__ = {}; obj.prototype.__super__[this.name] = this.plugged; } var that = this; _.each(attributes, function (value, key) { if (key === 'events') { obj.prototype[key] = _.extend(value, obj.prototype[key]); } else if (typeof value === 'function') { // We create a partially applied wrapper function, that // makes sure to set the proper super method when the // overriding method is called. This is done to enable // chaining of plugin methods, all the way up to the // original method. var default_super = {}; default_super[that.name] = that.plugged; var wrapped_function = _.partial(that.wrappedOverride, key, value, obj.prototype[key], default_super); obj.prototype[key] = wrapped_function; } else { obj.prototype[key] = value; } }); }, // Plugins can specify optional dependencies (by means of the // `optional_dependencies` list attribute) which refers to dependencies // which will be initialized first, before the plugin itself gets initialized. // They are optional in the sense that if they aren't available, an // error won't be thrown. // However, if you want to make these dependencies strict (i.e. // non-optional), you can set the `strict_plugin_dependencies` attribute to `true` // on the object being made pluggable (i.e. the object passed to // `pluggable.enable`). loadOptionalDependencies: function loadOptionalDependencies(plugin) { var _this = this; _.each(plugin.optional_dependencies, function (name) { var dep = _this.plugins[name]; if (dep) { if (_.includes(dep.optional_dependencies, plugin.__name__)) { /* FIXME: circular dependency checking is only one level deep. */ throw "Found a circular dependency between the plugins \"" + plugin.__name__ + "\" and \"" + name + "\""; } _this.initializePlugin(dep); } else { _this.throwUndefinedDependencyError("Could not find optional dependency \"" + name + "\" " + "for the plugin \"" + plugin.__name__ + "\". " + "If it's needed, make sure it's loaded by require.js"); } }); }, throwUndefinedDependencyError: function throwUndefinedDependencyError(msg) { if (this.plugged.strict_plugin_dependencies) { throw msg; } else { console.log(msg); return; } }, // `applyOverrides` is called by initializePlugin. It applies any // and all overrides of methods or Backbone views and models that // are defined on any of the plugins. applyOverrides: function applyOverrides(plugin) { var _this2 = this; _.each(Object.keys(plugin.overrides || {}), function (key) { var override = plugin.overrides[key]; if ((typeof override === 'undefined' ? 'undefined' : _typeof(override)) === "object") { if (typeof _this2.plugged[key] === 'undefined') { _this2.throwUndefinedDependencyError("Error: Plugin \"" + plugin.__name__ + "\" tried to override " + key + " but it's not found."); } else { _this2._extendObject(_this2.plugged[key], override); } } else { _this2._overrideAttribute(key, plugin); } }); }, // `initializePlugin` applies the overrides (if any) defined on all // the registered plugins and then calls the initialize method for each plugin. initializePlugin: function initializePlugin(plugin) { if (!_.includes(_.keys(this.allowed_plugins), plugin.__name__)) { /* Don't initialize disallowed plugins. */ return; } if (_.includes(this.initialized_plugins, plugin.__name__)) { /* Don't initialize plugins twice, otherwise we get * infinite recursion in overridden methods. */ return; } _.extend(plugin, this.properties); if (plugin.optional_dependencies) { this.loadOptionalDependencies(plugin); } this.applyOverrides(plugin); if (typeof plugin.initialize === "function") { plugin.initialize.bind(plugin)(this); } this.initialized_plugins.push(plugin.__name__); }, // `registerPlugin` registers (or inserts, if you'd like) a plugin, // by adding it to the `plugins` map on the PluginSocket instance. registerPlugin: function registerPlugin(name, plugin) { if (name in this.plugins) { throw new Error('Error: Plugin name ' + name + ' is already taken'); } plugin.__name__ = name; this.plugins[name] = plugin; }, // `initializePlugins` should get called once all plugins have been // registered. It will then iterate through all the plugins, calling // `initializePlugin` for each. // The passed in properties variable is an object with attributes and methods // which will be attached to the plugins. initializePlugins: function initializePlugins() { var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var whitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var blacklist = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; if (!_.size(this.plugins)) { return; } this.properties = properties; this.allowed_plugins = _.pickBy(this.plugins, function (plugin, key) { return (!whitelist.length || whitelist.length && _.includes(whitelist, key)) && !_.includes(blacklist, key); }); _.each(_.values(this.allowed_plugins), this.initializePlugin.bind(this)); } }); function enable(object, name, attrname) { // Call the `enable` method to make an object pluggable // // It takes three parameters: // - `object`: The object that gets made pluggable. // - `name`: The string name by which the now pluggable object // may be referenced on the __super__ obj (in overrides). // The default value is "plugged". // - `attrname`: The string name of the attribute on the now // pluggable object, which refers to the PluginSocket instance // that gets created. if (typeof attrname === "undefined") { attrname = "pluginSocket"; } if (typeof name === 'undefined') { name = 'plugged'; } var ref = {}; ref[attrname] = new PluginSocket(object, name); return _.extend(object, ref); } exports.enable = enable; exports.default = { enable: enable }; }); //# sourceMappingURL=pluggable.js.map; // Converse.js (A browser based XMPP chat client) // http://conversejs.org // // Copyright (c) 2012-2017, Jan-Carel Brand // Licensed under the Mozilla Public License (MPLv2) // /*global Backbone, define, window, document, JSON */ (function (root, factory) { define('converse-core',["sizzle", "es6-promise", "lodash.noconflict", "polyfill", "utils", "moment_with_locales", "strophe", "pluggable", "backbone.noconflict", "backbone.browserStorage", "backbone.overview"], factory); })(undefined, function (sizzle, Promise, _, polyfill, utils, moment, Strophe, pluggable, Backbone) { /* Cannot use this due to Safari bug. * See https://github.com/jcbrand/converse.js/issues/196 */ // "use strict"; // Strophe globals var _Strophe = Strophe, $build = _Strophe.$build, $iq = _Strophe.$iq, $msg = _Strophe.$msg, $pres = _Strophe.$pres; var b64_sha1 = Strophe.SHA1.b64_sha1; Strophe = Strophe.Strophe; // Use Mustache style syntax for variable interpolation /* Configuration of Lodash templates (this config is distinct to the * config of requirejs-tpl in main.js). This one is for normal inline templates. */ _.templateSettings = { 'escape': /\{\{\{([\s\S]+?)\}\}\}/g, 'evaluate': /\{\[([\s\S]+?)\]\}/g, 'interpolate': /\{\{([\s\S]+?)\}\}/g }; var _converse = { 'templates': {}, 'promises': {} }; _.extend(_converse, Backbone.Events); _converse.core_plugins = ['converse-bookmarks', 'converse-chatboxes', 'converse-chatview', 'converse-controlbox', 'converse-core', 'converse-disco', 'converse-dragresize', 'converse-headline', 'converse-mam', 'converse-minimize', 'converse-muc', 'converse-notification', 'converse-otr', 'converse-ping', 'converse-register', 'converse-roomslist', 'converse-rosterview', 'converse-vcard']; // Make converse pluggable pluggable.enable(_converse, '_converse', 'pluggable'); // Module-level constants _converse.STATUS_WEIGHTS = { 'offline': 6, 'unavailable': 5, 'xa': 4, 'away': 3, 'dnd': 2, 'chat': 1, // We currently don't differentiate between "chat" and "online" 'online': 1 }; _converse.PRETTY_CHAT_STATUS = { 'offline': 'Offline', 'unavailable': 'Unavailable', 'xa': 'Extended Away', 'away': 'Away', 'dnd': 'Do not disturb', 'chat': 'Chattty', 'online': 'Online' }; _converse.ANONYMOUS = "anonymous"; _converse.CLOSED = 'closed'; _converse.EXTERNAL = "external"; _converse.LOGIN = "login"; _converse.LOGOUT = "logout"; _converse.OPENED = 'opened'; _converse.PREBIND = "prebind"; _converse.CONNECTION_STATUS = { 0: 'ERROR', 1: 'CONNECTING', 2: 'CONNFAIL', 3: 'AUTHENTICATING', 4: 'AUTHFAIL', 5: 'CONNECTED', 6: 'DISCONNECTED', 7: 'DISCONNECTING', 8: 'ATTACHED', 9: 'REDIRECT', 10: 'RECONNECTING' }; _converse.DEFAULT_IMAGE_TYPE = 'image/png'; _converse.DEFAULT_IMAGE = "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAIAAABt+uBvAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwHCy455JBsggAABkJJREFUeNrtnM1PE1sUwHvvTD8otWLHST/Gimi1CEgr6M6FEWuIBo2pujDVsNDEP8GN/4MbN7oxrlipG2OCgZgYlxAbkRYw1KqkIDRCSkM7nXvvW8x7vjyNeQ9m7p1p3z1LQk/v/Dhz7vkEXL161cHl9wI5Ag6IA+KAOCAOiAPigDggLhwQB2S+iNZ+PcYY/SWEEP2HAAAIoSAIoihCCP+ngDDGtVotGAz29/cfOXJEUZSOjg6n06lp2sbGRqlUWlhYyGazS0tLbrdbEASrzgksyeYJId3d3el0uqenRxRFAAAA4KdfIIRgjD9+/Pj8+fOpqSndslofEIQwHA6Pjo4mEon//qmFhYXHjx8vLi4ihBgDEnp7e9l8E0Jo165dQ0NDd+/eDYVC2/qsJElDQ0OEkKWlpa2tLZamxAhQo9EIBoOjo6MXL17csZLe3l5FUT59+lQul5l5JRaAVFWNRqN37tw5ceKEQVWRSOTw4cOFQuHbt2+iKLYCIISQLMu3b99OJpOmKAwEAgcPHszn8+vr6wzsiG6UQQhxuVyXLl0aGBgwUW0sFstkMl6v90fo1KyAMMYDAwPnzp0zXfPg4GAqlWo0Gk0MiBAiy/L58+edTqf5Aa4onj59OhaLYYybFRCEMBaL0fNxBw4cSCQStN0QRUBut3t4eJjq6U+dOiVJElVPRBFQIBDo6+ujCqirqyscDlONGykC2lYyYSR6pBoQQapHZwAoHo/TuARYAOrs7GQASFEUqn6aIiBJkhgA6ujooFpUo6iaTa7koFwnaoWadLNe81tbWwzoaJrWrICWl5cZAFpbW6OabVAEtLi4yABQsVjUNK0pAWWzWQaAcrlcswKanZ1VVZUqHYRQEwOq1Wpv3ryhCmh6erpcLjdrNl+v1ycnJ+l5UELI27dvv3//3qxxEADgy5cvExMT9Mznw4cPtFtAdAPFarU6Pj5eKpVM17yxsfHy5cvV1VXazXu62gVBKBQKT58+rdVqJqrFGL948eLdu3dU8/g/H4FBUaJYLAqC0NPTY9brMD4+PjY25mDSracOCABACJmZmXE6nUePHjWu8NWrV48ePSKEsGlAs7Agfd5nenq6Wq0mk0kjDzY2NvbkyRMIIbP2PLvhBUEQ8vl8NpuNx+M+n29bzhVjvLKycv/+/YmJCcazQuwA6YzW1tYmJyf1SY+2trZ/rRk1Go1SqfT69esHDx4UCgVmNaa/zZ/9ABUhRFXVYDB48uTJeDweiUQkSfL7/T9MA2NcqVTK5fLy8vL8/PzU1FSxWHS5XJaM4wGr9sUwxqqqer3eUCgkSZJuUBBCfTRvc3OzXC6vrKxUKhWn02nhCJ5lM4oQQo/HgxD6+vXr58+fHf8sDOp+HQDg8XgclorFU676dKLlo6yWRdItIBwQB8QBcUCtfosRQjRNQwhhjPUC4w46WXryBSHU1zgEQWBz99EFhDGu1+t+v//48ePxeFxRlD179ng8nh0Efgiher2+vr6ur3HMzMysrq7uTJVdACGEurq6Ll++nEgkPB7Pj9jPoDHqOxyqqubz+WfPnuVyuV9XPeyeagAAAoHArVu3BgcHab8CuVzu4cOHpVKJUnfA5GweY+xyuc6cOXPv3r1IJMLAR8iyPDw8XK/Xi8Wiqqqmm5KZgBBC7e3tN27cuHbtGuPVpf7+/lAoNDs7W61WzfVKpgHSSzw3b95MpVKW3MfRaDQSiczNzVUqFRMZmQOIEOL1eq9fv3727FlL1t50URRFluX5+flqtWpWEGAOIFEUU6nUlStXLKSjy759+xwOx9zcnKZpphzGHMzhcDiTydgk9r1w4YIp7RPTAAmCkMlk2FeLf/tIEKbTab/fbwtAhJBoNGrutpNx6e7uPnTokC1eMU3T0um0DZPMkZER6wERQnw+n/FFSxpy7Nix3bt3WwwIIcRgIWnHkkwmjecfRgGx7DtuV/r6+iwGhDHev3+/bQF1dnYaH6E2CkiWZdsC2rt3r8WAHA5HW1ubbQGZcjajgOwTH/4qNko1Wlg4IA6IA+KAOKBWBUQIsfNojyliKIoRRfH9+/dut9umf3wzpoUNNQ4BAJubmwz+ic+OxefzWWlBhJD29nbug7iT5sIBcUAcEAfEAXFAHBAHxOVn+QMrmWpuPZx12gAAAABJRU5ErkJggg=="; _converse.log = function (message, level) { if (message instanceof Error) { message = message.stack; } var logger = _.assign({ 'debug': _.get(console, 'log') ? console.log.bind(console) : _.noop, 'error': _.get(console, 'log') ? console.log.bind(console) : _.noop, 'info': _.get(console, 'log') ? console.log.bind(console) : _.noop, 'warn': _.get(console, 'log') ? console.log.bind(console) : _.noop }, console); if (level === Strophe.LogLevel.ERROR) { if (_converse.debug) { logger.trace("ERROR: " + message); } else { logger.error("ERROR: " + message); } } else if (level === Strophe.LogLevel.WARN) { logger.warn("WARNING: " + message); } else if (level === Strophe.LogLevel.FATAL) { if (_converse.debug) { logger.trace("FATAL: " + message); } else { logger.error("FATAL: " + message); } } else if (_converse.debug) { if (level === Strophe.LogLevel.DEBUG) { logger.debug("DEBUG: " + message); } else { logger.info("INFO: " + message); } } }; var PROMISES = ['initialized', 'cachedRoster', 'connectionInitialized', 'pluginsInitialized', 'roster', 'rosterContactsFetched', 'rosterGroupsFetched', 'rosterInitialized', 'statusInitialized']; function addPromise(promise) { /* Private function, used to add a new promise to the ones already * available via the `waitUntil` api method. */ _converse.promises[promise] = utils.getWrappedPromise(); } _converse.emit = function (name) { /* Event emitter and promise resolver */ _converse.trigger.apply(this, arguments); var promise = _converse.promises[name]; if (!_.isUndefined(promise)) { promise.resolve(); } }; _converse.initialize = function (settings, callback) { "use strict"; var _this = this; settings = !_.isUndefined(settings) ? settings : {}; var init_promise = utils.getWrappedPromise(); _.each(PROMISES, addPromise); if (!_.isUndefined(_converse.connection)) { // Looks like _converse.initialized was called again without logging // out or disconnecting in the previous session. // This happens in tests. We therefore first clean up. Backbone.history.stop(); delete _converse.controlboxtoggle; _converse.connection.reset(); _converse.off(); _converse.stopListening(); _converse._tearDown(); } var unloadevent = void 0; if ('onpagehide' in window) { // Pagehide gets thrown in more cases than unload. Specifically it // gets thrown when the page is cached and not just // closed/destroyed. It's the only viable event on mobile Safari. // https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/ unloadevent = 'pagehide'; } else if ('onbeforeunload' in window) { unloadevent = 'beforeunload'; } else if ('onunload' in window) { unloadevent = 'unload'; } // Logging Strophe.log = function (level, msg) { _converse.log(level + ' ' + msg, level); }; Strophe.error = function (msg) { _converse.log(msg, Strophe.LogLevel.ERROR); }; // Add Strophe Namespaces Strophe.addNamespace('CARBONS', 'urn:xmpp:carbons:2'); Strophe.addNamespace('CHATSTATES', 'http://jabber.org/protocol/chatstates'); Strophe.addNamespace('CSI', 'urn:xmpp:csi:0'); Strophe.addNamespace('DELAY', 'urn:xmpp:delay'); Strophe.addNamespace('HINTS', 'urn:xmpp:hints'); Strophe.addNamespace('MAM', 'urn:xmpp:mam:2'); Strophe.addNamespace('NICK', 'http://jabber.org/protocol/nick'); Strophe.addNamespace('PUBSUB', 'http://jabber.org/protocol/pubsub'); Strophe.addNamespace('ROSTERX', 'http://jabber.org/protocol/rosterx'); Strophe.addNamespace('RSM', 'http://jabber.org/protocol/rsm'); Strophe.addNamespace('XFORM', 'jabber:x:data'); // Instance level constants this.TIMEOUTS = { // Set as module attr so that we can override in tests. 'PAUSED': 10000, 'INACTIVE': 90000 }; // Internationalization this.locale = utils.getLocale(settings.i18n, utils.isConverseLocale); if (!moment.locale) { //moment.lang is deprecated after 2.8.1, use moment.locale instead moment.locale = moment.lang; } moment.locale(utils.getLocale(settings.i18n, utils.isMomentLocale)); var __ = _converse.__ = utils.__.bind(_converse); _converse.___ = utils.___; // XEP-0085 Chat states // http://xmpp.org/extensions/xep-0085.html this.INACTIVE = 'inactive'; this.ACTIVE = 'active'; this.COMPOSING = 'composing'; this.PAUSED = 'paused'; this.GONE = 'gone'; // Default configuration values // ---------------------------- this.default_settings = { allow_contact_requests: true, allow_non_roster_messaging: false, animate: true, authentication: 'login', // Available values are "login", "prebind", "anonymous" and "external". auto_away: 0, // Seconds after which user status is set to 'away' auto_login: false, // Currently only used in connection with anonymous login auto_reconnect: false, auto_subscribe: false, auto_xa: 0, // Seconds after which user status is set to 'xa' blacklisted_plugins: [], bosh_service_url: undefined, connection_options: {}, credentials_url: null, // URL from where login credentials can be fetched csi_waiting_time: 0, // Support for XEP-0352. Seconds before client is considered idle and CSI is sent out. debug: false, default_state: 'online', expose_rid_and_sid: false, filter_by_resource: false, forward_messages: false, hide_offline_users: false, include_offline_state: false, jid: undefined, keepalive: true, message_carbons: true, message_storage: 'session', password: undefined, prebind_url: null, priority: 0, registration_domain: '', rid: undefined, roster_groups: true, show_only_online_users: false, show_send_button: false, sid: undefined, storage: 'session', strict_plugin_dependencies: false, synchronize_availability: true, websocket_url: undefined, whitelisted_plugins: [], xhr_custom_status: false, xhr_custom_status_url: '' }; _.assignIn(this, this.default_settings); // Allow only whitelisted configuration attributes to be overwritten _.assignIn(this, _.pick(settings, _.keys(this.default_settings))); if (this.authentication === _converse.ANONYMOUS) { if (this.auto_login && !this.jid) { throw new Error("Config Error: you need to provide the server's " + "domain via the 'jid' option when using anonymous " + "authentication with auto_login."); } } // Module-level variables // ---------------------- this.callback = callback || _.noop; /* When reloading the page: * For new sessions, we need to send out a presence stanza to notify * the server/network that we're online. * When re-attaching to an existing session (e.g. via the keepalive * option), we don't need to again send out a presence stanza, because * it's as if "we never left" (see onConnectStatusChanged). * https://github.com/jcbrand/converse.js/issues/521 */ this.send_initial_presence = true; this.msg_counter = 0; this.user_settings = settings; // Save the user settings so that they can be used by plugins // Module-level functions // ---------------------- this.generateResource = function () { return "/converse.js-" + Math.floor(Math.random() * 139749825).toString(); }; this.sendCSI = function (stat) { /* Send out a Chat Status Notification (XEP-0352) * * Parameters: * (String) stat: The user's chat status */ /* Send out a Chat Status Notification (XEP-0352) */ // XXX if (converse.features[Strophe.NS.CSI] || true) { _converse.connection.send($build(stat, { xmlns: Strophe.NS.CSI })); _converse.inactive = stat === _converse.INACTIVE ? true : false; }; this.onUserActivity = function () { /* Resets counters and flags relating to CSI and auto_away/auto_xa */ if (_converse.idle_seconds > 0) { _converse.idle_seconds = 0; } if (!_converse.connection.authenticated) { // We can't send out any stanzas when there's no authenticated connection. // converse can happen when the connection reconnects. return; } if (_converse.inactive) { _converse.sendCSI(_converse.ACTIVE); } if (_converse.auto_changed_status === true) { _converse.auto_changed_status = false; // XXX: we should really remember the original state here, and // then set it back to that... _converse.xmppstatus.setStatus(_converse.default_state); } }; this.onEverySecond = function () { /* An interval handler running every second. * Used for CSI and the auto_away and auto_xa features. */ if (!_converse.connection.authenticated) { // We can't send out any stanzas when there's no authenticated connection. // This can happen when the connection reconnects. return; } var stat = _converse.xmppstatus.getStatus(); _converse.idle_seconds++; if (_converse.csi_waiting_time > 0 && _converse.idle_seconds > _converse.csi_waiting_time && !_converse.inactive) { _converse.sendCSI(_converse.INACTIVE); } if (_converse.auto_away > 0 && _converse.idle_seconds > _converse.auto_away && stat !== 'away' && stat !== 'xa' && stat !== 'dnd') { _converse.auto_changed_status = true; _converse.xmppstatus.setStatus('away'); } else if (_converse.auto_xa > 0 && _converse.idle_seconds > _converse.auto_xa && stat !== 'xa' && stat !== 'dnd') { _converse.auto_changed_status = true; _converse.xmppstatus.setStatus('xa'); } }; this.registerIntervalHandler = function () { /* Set an interval of one second and register a handler for it. * Required for the auto_away, auto_xa and csi_waiting_time features. */ if (_converse.auto_away < 1 && _converse.auto_xa < 1 && _converse.csi_waiting_time < 1) { // Waiting time of less then one second means features aren't used. return; } _converse.idle_seconds = 0; _converse.auto_changed_status = false; // Was the user's status changed by _converse.js? window.addEventListener('click', _converse.onUserActivity); window.addEventListener('focus', _converse.onUserActivity); window.addEventListener('keypress', _converse.onUserActivity); window.addEventListener('mousemove', _converse.onUserActivity); window.addEventListener(unloadevent, _converse.onUserActivity); _converse.everySecondTrigger = window.setInterval(_converse.onEverySecond, 1000); }; this.setConnectionStatus = function (connection_status, message) { _converse.connfeedback.set({ 'connection_status': connection_status, 'message': message }); }; this.rejectPresenceSubscription = function (jid, message) { /* Reject or cancel another user's subscription to our presence updates. * * Parameters: * (String) jid - The Jabber ID of the user whose subscription * is being canceled. * (String) message - An optional message to the user */ var pres = $pres({ to: jid, type: "unsubscribed" }); if (message && message !== "") { pres.c("status").t(message); } _converse.connection.send(pres); }; this.reconnect = _.debounce(function () { _converse.log('RECONNECTING'); _converse.log('The connection has dropped, attempting to reconnect.'); _converse.setConnectionStatus(Strophe.Status.RECONNECTING, __('The connection has dropped, attempting to reconnect.')); _converse.connection.reconnecting = true; _converse._tearDown(); _converse.logIn(null, true); }, 3000, { 'leading': true }); this.disconnect = function () { _converse.log('DISCONNECTED'); delete _converse.connection.reconnecting; _converse.connection.reset(); _converse._tearDown(); _converse.emit('disconnected'); }; this.onDisconnected = function () { /* Gets called once strophe's status reaches Strophe.Status.DISCONNECTED. * Will either start a teardown process for converse.js or attempt * to reconnect. */ var reason = _converse.disconnection_reason; if (_converse.disconnection_cause === Strophe.Status.AUTHFAIL) { if (_converse.credentials_url && _converse.auto_reconnect) { /* In this case, we reconnect, because we might be receiving * expirable tokens from the credentials_url. */ _converse.emit('will-reconnect'); return _converse.reconnect(); } else { return _converse.disconnect(); } } else if (_converse.disconnection_cause === _converse.LOGOUT || !_.isUndefined(reason) && reason === _.get(Strophe, 'ErrorCondition.NO_AUTH_MECH') || reason === "host-unknown" || reason === "remote-connection-failed" || !_converse.auto_reconnect) { return _converse.disconnect(); } _converse.emit('will-reconnect'); _converse.reconnect(); }; this.setDisconnectionCause = function (cause, reason, override) { /* Used to keep track of why we got disconnected, so that we can * decide on what the next appropriate action is (in onDisconnected) */ if (_.isUndefined(cause)) { delete _converse.disconnection_cause; delete _converse.disconnection_reason; } else if (_.isUndefined(_converse.disconnection_cause) || override) { _converse.disconnection_cause = cause; _converse.disconnection_reason = reason; } }; this.onConnectStatusChanged = function (status, message) { /* Callback method called by Strophe as the Strophe.Connection goes * through various states while establishing or tearing down a * connection. */ _converse.log("Status changed to: " + _converse.CONNECTION_STATUS[status]); if (status === Strophe.Status.CONNECTED || status === Strophe.Status.ATTACHED) { _converse.setConnectionStatus(status); // By default we always want to send out an initial presence stanza. _converse.send_initial_presence = true; _converse.setDisconnectionCause(); if (_converse.connection.reconnecting) { _converse.log(status === Strophe.Status.CONNECTED ? 'Reconnected' : 'Reattached'); _converse.onConnected(true); } else { _converse.log(status === Strophe.Status.CONNECTED ? 'Connected' : 'Attached'); if (_converse.connection.restored) { // No need to send an initial presence stanza when // we're restoring an existing session. _converse.send_initial_presence = false; } _converse.onConnected(); } } else if (status === Strophe.Status.DISCONNECTED) { _converse.setDisconnectionCause(status, message); _converse.onDisconnected(); } else if (status === Strophe.Status.ERROR) { _converse.setConnectionStatus(status, __('An error occurred while connecting to the chat server.')); } else if (status === Strophe.Status.CONNECTING) { _converse.setConnectionStatus(status); } else if (status === Strophe.Status.AUTHENTICATING) { _converse.setConnectionStatus(status); } else if (status === Strophe.Status.AUTHFAIL) { if (!message) { message = __('Your Jabber ID and/or password is incorrect. Please try again.'); } _converse.setConnectionStatus(status, message); _converse.setDisconnectionCause(status, message, true); _converse.onDisconnected(); } else if (status === Strophe.Status.CONNFAIL) { var feedback = message; if (message === "host-unknown" || message == "remote-connection-failed") { feedback = __("Sorry, we could not connect to the XMPP host with domain: ") + ("\"" + Strophe.getDomainFromJid(_converse.connection.jid) + "\""); } else if (!_.isUndefined(message) && message === _.get(Strophe, 'ErrorCondition.NO_AUTH_MECH')) { feedback = __("The XMPP server did not offer a supported authentication mechanism"); } _converse.setConnectionStatus(status, feedback); _converse.setDisconnectionCause(status, message); } else if (status === Strophe.Status.DISCONNECTING) { _converse.setDisconnectionCause(status, message); } }; this.incrementMsgCounter = function () { this.msg_counter += 1; var unreadMsgCount = this.msg_counter; if (document.title.search(/^Messages \(\d+\) /) === -1) { document.title = "Messages (" + unreadMsgCount + ") " + document.title; } else { document.title = document.title.replace(/^Messages \(\d+\) /, "Messages (" + unreadMsgCount + ") "); } }; this.clearMsgCounter = function () { this.msg_counter = 0; if (document.title.search(/^Messages \(\d+\) /) !== -1) { document.title = document.title.replace(/^Messages \(\d+\) /, ""); } }; this.initStatus = function () { return new Promise(function (resolve, reject) { var promise = new utils.getWrappedPromise(); _this.xmppstatus = new _this.XMPPStatus(); var id = b64_sha1("converse.xmppstatus-" + _converse.bare_jid); _this.xmppstatus.id = id; // Appears to be necessary for backbone.browserStorage _this.xmppstatus.browserStorage = new Backbone.BrowserStorage[_converse.storage](id); _this.xmppstatus.fetch({ success: resolve, error: resolve }); _converse.emit('statusInitialized'); }); }; this.initSession = function () { _converse.session = new Backbone.Model(); var id = b64_sha1('converse.bosh-session'); _converse.session.id = id; // Appears to be necessary for backbone.browserStorage _converse.session.browserStorage = new Backbone.BrowserStorage[_converse.storage](id); _converse.session.fetch(); }; this.clearSession = function () { if (!_.isUndefined(this.roster)) { this.roster.browserStorage._clear(); } if (!_.isUndefined(this.session) && this.session.browserStorage) { this.session.browserStorage._clear(); } }; this.logOut = function () { _converse.clearSession(); _converse.setDisconnectionCause(_converse.LOGOUT, undefined, true); if (!_.isUndefined(_converse.connection)) { _converse.connection.disconnect(); } else { _converse._tearDown(); } _converse.emit('logout'); }; this.saveWindowState = function (ev, hidden) { // XXX: eventually we should be able to just use // document.visibilityState (when we drop support for older // browsers). var state = void 0; var event_map = { 'focus': "visible", 'focusin': "visible", 'pageshow': "visible", 'blur': "hidden", 'focusout': "hidden", 'pagehide': "hidden" }; ev = ev || document.createEvent('Events'); if (ev.type in event_map) { state = event_map[ev.type]; } else { state = document[hidden] ? "hidden" : "visible"; } if (state === 'visible') { _converse.clearMsgCounter(); } _converse.windowState = state; _converse.emit('windowStateChanged', { state: state }); }; this.registerGlobalEventHandlers = function () { // Taken from: // http://stackoverflow.com/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-currently-active var hidden = "hidden"; // Standards: if (hidden in document) { document.addEventListener("visibilitychange", _.partial(_converse.saveWindowState, _, hidden)); } else if ((hidden = "mozHidden") in document) { document.addEventListener("mozvisibilitychange", _.partial(_converse.saveWindowState, _, hidden)); } else if ((hidden = "webkitHidden") in document) { document.addEventListener("webkitvisibilitychange", _.partial(_converse.saveWindowState, _, hidden)); } else if ((hidden = "msHidden") in document) { document.addEventListener("msvisibilitychange", _.partial(_converse.saveWindowState, _, hidden)); } else if ("onfocusin" in document) { // IE 9 and lower: document.onfocusin = document.onfocusout = _.partial(_converse.saveWindowState, _, hidden); } else { // All others: window.onpageshow = window.onpagehide = window.onfocus = window.onblur = _.partial(_converse.saveWindowState, _, hidden); } // set the initial state (but only if browser supports the Page Visibility API) if (document[hidden] !== undefined) { _.partial(_converse.saveWindowState, _, hidden)({ type: document[hidden] ? "blur" : "focus" }); } }; this.enableCarbons = function () { var _this2 = this; /* Ask the XMPP server to enable Message Carbons * See XEP-0280 https://xmpp.org/extensions/xep-0280.html#enabling */ if (!this.message_carbons || this.session.get('carbons_enabled')) { return; } var carbons_iq = new Strophe.Builder('iq', { from: this.connection.jid, id: 'enablecarbons', type: 'set' }).c('enable', { xmlns: Strophe.NS.CARBONS }); this.connection.addHandler(function (iq) { if (iq.querySelectorAll('error').length > 0) { _converse.log('An error occured while trying to enable message carbons.', Strophe.LogLevel.ERROR); } else { _this2.session.save({ carbons_enabled: true }); _converse.log('Message carbons have been enabled.'); } }, null, "iq", null, "enablecarbons"); this.connection.send(carbons_iq); }; this.initRoster = function () { /* Initialize the Bakcbone collections that represent the contats * roster and the roster groups. */ _converse.roster = new _converse.RosterContacts(); _converse.roster.browserStorage = new Backbone.BrowserStorage.session(b64_sha1("converse.contacts-" + _converse.bare_jid)); _converse.rostergroups = new _converse.RosterGroups(); _converse.rostergroups.browserStorage = new Backbone.BrowserStorage.session(b64_sha1("converse.roster.groups" + _converse.bare_jid)); _converse.emit('rosterInitialized'); }; this.populateRoster = function () { /* Fetch all the roster groups, and then the roster contacts. * Emit an event after fetching is done in each case. */ _converse.rostergroups.fetchRosterGroups().then(function () { _converse.emit('rosterGroupsFetched'); _converse.roster.fetchRosterContacts().then(function () { _converse.emit('rosterContactsFetched'); _converse.sendInitialPresence(); }); }); }; this.unregisterPresenceHandler = function () { if (!_.isUndefined(_converse.presence_ref)) { _converse.connection.deleteHandler(_converse.presence_ref); delete _converse.presence_ref; } }; this.registerPresenceHandler = function () { _converse.unregisterPresenceHandler(); _converse.presence_ref = _converse.connection.addHandler(function (presence) { _converse.roster.presenceHandler(presence); return true; }, null, 'presence', null); }; this.sendInitialPresence = function () { if (_converse.send_initial_presence) { _converse.xmppstatus.sendPresence(); } }; this.onStatusInitialized = function (reconnecting) { /* Continue with session establishment (e.g. fetching chat boxes, * populating the roster etc.) necessary once the connection has * been established. */ if (reconnecting) { // No need to recreate the roster, otherwise we lose our // cached data. However we still emit an event, to give // event handlers a chance to register views for the // roster and its groups, before we start populating. _converse.emit('rosterReadyAfterReconnection'); } else { _converse.registerIntervalHandler(); _converse.initRoster(); } _converse.roster.onConnected(); _converse.populateRoster(); _converse.registerPresenceHandler(); if (reconnecting) { _converse.xmppstatus.sendPresence(); } else { init_promise.resolve(); _converse.emit('initialized'); } }; this.setUserJid = function () { _converse.jid = _converse.connection.jid; _converse.bare_jid = Strophe.getBareJidFromJid(_converse.connection.jid); _converse.resource = Strophe.getResourceFromJid(_converse.connection.jid); _converse.domain = Strophe.getDomainFromJid(_converse.connection.jid); }; this.onConnected = function (reconnecting) { /* Called as soon as a new connection has been established, either * by logging in or by attaching to an existing BOSH session. */ // Solves problem of returned PubSub BOSH response not received // by browser. _converse.connection.flush(); _converse.setUserJid(); _converse.initSession(); _converse.enableCarbons(); // If there's no xmppstatus obj, then we were never connected to // begin with, so we set reconnecting to false. reconnecting = _.isUndefined(_converse.xmppstatus) ? false : reconnecting; if (reconnecting) { _converse.onStatusInitialized(true); _converse.emit('reconnected'); } else { _converse.initStatus().then(_.partial(_converse.onStatusInitialized, false), _.partial(_converse.onStatusInitialized, false)).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); _converse.emit('connected'); } }; this.RosterContact = Backbone.Model.extend({ defaults: { 'bookmarked': false, 'chat_state': undefined, 'chat_status': 'offline', 'groups': [], 'image': _converse.DEFAULT_IMAGE, 'image_type': _converse.DEFAULT_IMAGE_TYPE, 'num_unread': 0, 'status': '' }, initialize: function initialize(attributes) { var _this3 = this; var jid = attributes.jid; var bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase(); var resource = Strophe.getResourceFromJid(jid); attributes.jid = bare_jid; this.set(_.assignIn({ 'id': bare_jid, 'jid': bare_jid, 'fullname': bare_jid, 'user_id': Strophe.getNodeFromJid(jid), 'resources': resource ? { resource: 0 } : {} }, attributes)); this.on('destroy', function () { _this3.removeFromRoster(); }); this.on('change:chat_status', function (item) { _converse.emit('contactStatusChanged', item.attributes); }); }, subscribe: function subscribe(message) { /* Send a presence subscription request to this roster contact * * Parameters: * (String) message - An optional message to explain the * reason for the subscription request. */ this.save('ask', "subscribe"); // ask === 'subscribe' Means we have ask to subscribe to them. var pres = $pres({ to: this.get('jid'), type: "subscribe" }); if (message && message !== "") { pres.c("status").t(message).up(); } var nick = _converse.xmppstatus.get('fullname'); if (nick && nick !== "") { pres.c('nick', { 'xmlns': Strophe.NS.NICK }).t(nick).up(); } _converse.connection.send(pres); return this; }, ackSubscribe: function ackSubscribe() { /* Upon receiving the presence stanza of type "subscribed", * the user SHOULD acknowledge receipt of that subscription * state notification by sending a presence stanza of type * "subscribe" to the contact */ _converse.connection.send($pres({ 'type': 'subscribe', 'to': this.get('jid') })); }, ackUnsubscribe: function ackUnsubscribe() { /* Upon receiving the presence stanza of type "unsubscribed", * the user SHOULD acknowledge receipt of that subscription state * notification by sending a presence stanza of type "unsubscribe" * this step lets the user's server know that it MUST no longer * send notification of the subscription state change to the user. * Parameters: * (String) jid - The Jabber ID of the user who is unsubscribing */ _converse.connection.send($pres({ 'type': 'unsubscribe', 'to': this.get('jid') })); this.destroy(); // Will cause removeFromRoster to be called. }, unauthorize: function unauthorize(message) { /* Unauthorize this contact's presence subscription * Parameters: * (String) message - Optional message to send to the person being unauthorized */ _converse.rejectPresenceSubscription(this.get('jid'), message); return this; }, authorize: function authorize(message) { /* Authorize presence subscription * Parameters: * (String) message - Optional message to send to the person being authorized */ var pres = $pres({ to: this.get('jid'), type: "subscribed" }); if (message && message !== "") { pres.c("status").t(message); } _converse.connection.send(pres); return this; }, addResource: function addResource(presence) { /* Adds a new resource and it's associated attributes as taken * from the passed in presence stanza. * * Also updates the contact's chat_status if the presence has * higher priority (and is newer). */ var jid = presence.getAttribute('from'), chat_status = _.propertyOf(presence.querySelector('show'))('textContent') || 'online', resource = Strophe.getResourceFromJid(jid), delay = presence.querySelector("delay[xmlns=\"" + Strophe.NS.DELAY + "\"]"), timestamp = _.isNull(delay) ? moment().format() : moment(delay.getAttribute('stamp')).format(); var priority = _.propertyOf(presence.querySelector('priority'))('textContent') || 0; priority = _.isNaN(parseInt(priority, 10)) ? 0 : parseInt(priority, 10); var resources = _.isObject(this.get('resources')) ? this.get('resources') : {}; resources[resource] = { 'priority': priority, 'status': chat_status, 'timestamp': timestamp }; var changed = { 'resources': resources }; var hpr = this.getHighestPriorityResource(); if (priority == hpr.priority && timestamp == hpr.timestamp) { // Only set the chat status if this is the newest resource // with the highest priority changed.chat_status = chat_status; } this.save(changed); return resources; }, removeResource: function removeResource(resource) { /* Remove the passed in resource from the contact's resources map. * * Also recomputes the chat_status given that there's one less * resource. */ var resources = this.get('resources'); if (!_.isObject(resources)) { resources = {}; } else { delete resources[resource]; } this.save({ 'resources': resources, 'chat_status': _.propertyOf(this.getHighestPriorityResource())('status') || 'offline' }); }, getHighestPriorityResource: function getHighestPriorityResource() { /* Return the resource with the highest priority. * * If multiple resources have the same priority, take the * newest one. */ var resources = this.get('resources'); if (_.isObject(resources) && _.size(resources)) { var val = _.flow(_.values, _.partial(_.sortBy, _, ['priority', 'timestamp']), _.reverse)(resources)[0]; if (!_.isUndefined(val)) { return val; } } }, removeFromRoster: function removeFromRoster(callback) { /* Instruct the XMPP server to remove this contact from our roster * Parameters: * (Function) callback */ var iq = $iq({ type: 'set' }).c('query', { xmlns: Strophe.NS.ROSTER }).c('item', { jid: this.get('jid'), subscription: "remove" }); _converse.connection.sendIQ(iq, callback, callback); return this; } }); this.RosterContacts = Backbone.Collection.extend({ model: _converse.RosterContact, comparator: function comparator(contact1, contact2) { var status1 = contact1.get('chat_status') || 'offline'; var status2 = contact2.get('chat_status') || 'offline'; if (_converse.STATUS_WEIGHTS[status1] === _converse.STATUS_WEIGHTS[status2]) { var name1 = contact1.get('fullname').toLowerCase(); var name2 = contact2.get('fullname').toLowerCase(); return name1 < name2 ? -1 : name1 > name2 ? 1 : 0; } else { return _converse.STATUS_WEIGHTS[status1] < _converse.STATUS_WEIGHTS[status2] ? -1 : 1; } }, onConnected: function onConnected() { /* Called as soon as the connection has been established * (either after initial login, or after reconnection). * * Use the opportunity to register stanza handlers. */ this.registerRosterHandler(); this.registerRosterXHandler(); }, registerRosterHandler: function registerRosterHandler() { /* Register a handler for roster IQ "set" stanzas, which update * roster contacts. */ _converse.connection.addHandler(_converse.roster.onRosterPush.bind(_converse.roster), Strophe.NS.ROSTER, 'iq', "set"); }, registerRosterXHandler: function registerRosterXHandler() { /* Register a handler for RosterX message stanzas, which are * used to suggest roster contacts to a user. */ var t = 0; _converse.connection.addHandler(function (msg) { window.setTimeout(function () { _converse.connection.flush(); _converse.roster.subscribeToSuggestedItems.bind(_converse.roster)(msg); }, t); t += msg.querySelectorAll('item').length * 250; return true; }, Strophe.NS.ROSTERX, 'message', null); }, fetchRosterContacts: function fetchRosterContacts() { var _this4 = this; /* Fetches the roster contacts, first by trying the * sessionStorage cache, and if that's empty, then by querying * the XMPP server. * * Returns a promise which resolves once the contacts have been * fetched. */ return new Promise(function (resolve, reject) { _this4.fetch({ add: true, success: function success(collection) { if (collection.length === 0) { /* We don't have any roster contacts stored in sessionStorage, * so lets fetch the roster from the XMPP server. We pass in * 'sendPresence' as callback method, because after initially * fetching the roster we are ready to receive presence * updates from our contacts. */ _converse.send_initial_presence = true; _converse.roster.fetchFromServer(resolve); } else { _converse.emit('cachedRoster', collection); resolve(); } } }); }); }, subscribeToSuggestedItems: function subscribeToSuggestedItems(msg) { _.each(msg.querySelectorAll('item'), function (item) { if (item.getAttribute('action') === 'add') { _converse.roster.addAndSubscribe(item.getAttribute('jid'), null, _converse.xmppstatus.get('fullname')); } }); return true; }, isSelf: function isSelf(jid) { return utils.isSameBareJID(jid, _converse.connection.jid); }, addAndSubscribe: function addAndSubscribe(jid, name, groups, message, attributes) { /* Add a roster contact and then once we have confirmation from * the XMPP server we subscribe to that contact's presence updates. * Parameters: * (String) jid - The Jabber ID of the user being added and subscribed to. * (String) name - The name of that user * (Array of Strings) groups - Any roster groups the user might belong to * (String) message - An optional message to explain the * reason for the subscription request. * (Object) attributes - Any additional attributes to be stored on the user's model. */ var handler = function handler(contact) { if (contact instanceof _converse.RosterContact) { contact.subscribe(message); } }; this.addContact(jid, name, groups, attributes).then(handler, handler); }, sendContactAddIQ: function sendContactAddIQ(jid, name, groups, callback, errback) { /* Send an IQ stanza to the XMPP server to add a new roster contact. * * Parameters: * (String) jid - The Jabber ID of the user being added * (String) name - The name of that user * (Array of Strings) groups - Any roster groups the user might belong to * (Function) callback - A function to call once the IQ is returned * (Function) errback - A function to call if an error occured */ name = _.isEmpty(name) ? jid : name; var iq = $iq({ type: 'set' }).c('query', { xmlns: Strophe.NS.ROSTER }).c('item', { jid: jid, name: name }); _.each(groups, function (group) { iq.c('group').t(group).up(); }); _converse.connection.sendIQ(iq, callback, errback); }, addContact: function addContact(jid, name, groups, attributes) { var _this5 = this; /* Adds a RosterContact instance to _converse.roster and * registers the contact on the XMPP server. * Returns a promise which is resolved once the XMPP server has * responded. * * Parameters: * (String) jid - The Jabber ID of the user being added and subscribed to. * (String) name - The name of that user * (Array of Strings) groups - Any roster groups the user might belong to * (Object) attributes - Any additional attributes to be stored on the user's model. */ return new Promise(function (resolve, reject) { groups = groups || []; name = _.isEmpty(name) ? jid : name; _this5.sendContactAddIQ(jid, name, groups, function () { var contact = _this5.create(_.assignIn({ ask: undefined, fullname: name, groups: groups, jid: jid, requesting: false, subscription: 'none' }, attributes), { sort: false }); resolve(contact); }, function (err) { alert(__('Sorry, there was an error while trying to add %1$s as a contact.', name)); _converse.log(err, Strophe.LogLevel.ERROR); resolve(err); }); }); }, subscribeBack: function subscribeBack(bare_jid) { var contact = this.get(bare_jid); if (contact instanceof _converse.RosterContact) { contact.authorize().subscribe(); } else { // Can happen when a subscription is retried or roster was deleted var handler = function handler(contact) { if (contact instanceof _converse.RosterContact) { contact.authorize().subscribe(); } }; this.addContact(bare_jid, '', [], { 'subscription': 'from' }).then(handler, handler); } }, getNumOnlineContacts: function getNumOnlineContacts() { var ignored = ['offline', 'unavailable']; if (_converse.show_only_online_users) { ignored = _.union(ignored, ['dnd', 'xa', 'away']); } return _.sum(this.models.filter(function (model) { return !_.includes(ignored, model.get('chat_status')); })); }, onRosterPush: function onRosterPush(iq) { /* Handle roster updates from the XMPP server. * See: https://xmpp.org/rfcs/rfc6121.html#roster-syntax-actions-push * * Parameters: * (XMLElement) IQ - The IQ stanza received from the XMPP server. */ var id = iq.getAttribute('id'); var from = iq.getAttribute('from'); if (from && from !== "" && Strophe.getBareJidFromJid(from) !== _converse.bare_jid) { // Receiving client MUST ignore stanza unless it has no from or from = user's bare JID. // XXX: Some naughty servers apparently send from a full // JID so we need to explicitly compare bare jids here. // https://github.com/jcbrand/converse.js/issues/493 _converse.connection.send($iq({ type: 'error', id: id, from: _converse.connection.jid }).c('error', { 'type': 'cancel' }).c('service-unavailable', { 'xmlns': Strophe.NS.ROSTER })); return true; } _converse.connection.send($iq({ type: 'result', id: id, from: _converse.connection.jid })); var items = sizzle("query[xmlns=\"" + Strophe.NS.ROSTER + "\"] item", iq); _.each(items, this.updateContact.bind(this)); _converse.emit('rosterPush', iq); return true; }, fetchFromServer: function fetchFromServer(callback) { var _this6 = this, _arguments = arguments; /* Get the roster from the XMPP server */ var iq = $iq({ type: 'get', 'id': _converse.connection.getUniqueId('roster') }).c('query', { xmlns: Strophe.NS.ROSTER }); return _converse.connection.sendIQ(iq, function (iq) { _this6.onReceivedFromServer(iq); callback.apply(_this6, _arguments); }); }, onReceivedFromServer: function onReceivedFromServer(iq) { /* An IQ stanza containing the roster has been received from * the XMPP server. */ var items = sizzle("query[xmlns=\"" + Strophe.NS.ROSTER + "\"] item", iq); _.each(items, this.updateContact.bind(this)); _converse.emit('roster', iq); }, updateContact: function updateContact(item) { /* Update or create RosterContact models based on items * received in the IQ from the server. */ var jid = item.getAttribute('jid'); if (this.isSelf(jid)) { return; } var contact = this.get(jid), subscription = item.getAttribute("subscription"), ask = item.getAttribute("ask"), groups = _.map(item.getElementsByTagName('group'), Strophe.getText); if (!contact) { if (subscription === "none" && ask === null || subscription === "remove") { return; // We're lazy when adding contacts. } this.create({ ask: ask, fullname: item.getAttribute("name") || jid, groups: groups, jid: jid, subscription: subscription }, { sort: false }); } else { if (subscription === "remove") { return contact.destroy(); // will trigger removeFromRoster } // We only find out about requesting contacts via the // presence handler, so if we receive a contact // here, we know they aren't requesting anymore. // see docs/DEVELOPER.rst contact.save({ subscription: subscription, ask: ask, requesting: null, groups: groups }); } }, createRequestingContact: function createRequestingContact(presence) { /* Creates a Requesting Contact. * * Note: this method gets completely overridden by converse-vcard.js */ var bare_jid = Strophe.getBareJidFromJid(presence.getAttribute('from')), nick_el = presence.querySelector("nick[xmlns=\"" + Strophe.NS.NICK + "\"]"); var user_data = { jid: bare_jid, subscription: 'none', ask: null, requesting: true, fullname: nick_el && nick_el.textContent || bare_jid }; this.create(user_data); _converse.emit('contactRequest', user_data); }, handleIncomingSubscription: function handleIncomingSubscription(presence) { var jid = presence.getAttribute('from'), bare_jid = Strophe.getBareJidFromJid(jid), contact = this.get(bare_jid); if (!_converse.allow_contact_requests) { _converse.rejectPresenceSubscription(jid, __("This client does not allow presence subscriptions")); } if (_converse.auto_subscribe) { if (!contact || contact.get('subscription') !== 'to') { this.subscribeBack(bare_jid); } else { contact.authorize(); } } else { if (contact) { if (contact.get('subscription') !== 'none') { contact.authorize(); } else if (contact.get('ask') === "subscribe") { contact.authorize(); } } else { this.createRequestingContact(presence); } } }, presenceHandler: function presenceHandler(presence) { var presence_type = presence.getAttribute('type'); if (presence_type === 'error') { return true; } var jid = presence.getAttribute('from'), bare_jid = Strophe.getBareJidFromJid(jid), resource = Strophe.getResourceFromJid(jid), chat_status = _.propertyOf(presence.querySelector('show'))('textContent') || 'online', status_message = _.propertyOf(presence.querySelector('status'))('textContent'), contact = this.get(bare_jid); if (this.isSelf(bare_jid)) { if (_converse.connection.jid !== jid && presence_type !== 'unavailable' && (_converse.synchronize_availability === true || _converse.synchronize_availability === resource)) { // Another resource has changed its status and // synchronize_availability option set to update, // we'll update ours as well. _converse.xmppstatus.save({ 'status': chat_status }); if (status_message) { _converse.xmppstatus.save({ 'status_message': status_message }); } } return; } else if (sizzle("query[xmlns=\"" + Strophe.NS.MUC + "\"]", presence).length) { return; // Ignore MUC } if (contact && status_message !== contact.get('status')) { contact.save({ 'status': status_message }); } if (presence_type === 'subscribed' && contact) { contact.ackSubscribe(); } else if (presence_type === 'unsubscribed' && contact) { contact.ackUnsubscribe(); } else if (presence_type === 'unsubscribe') { return; } else if (presence_type === 'subscribe') { this.handleIncomingSubscription(presence); } else if (presence_type === 'unavailable' && contact) { contact.removeResource(resource); } else if (contact) { // presence_type is undefined contact.addResource(presence); } } }); this.RosterGroup = Backbone.Model.extend({ initialize: function initialize(attributes) { this.set(_.assignIn({ description: __('Click to hide these contacts'), state: _converse.OPENED }, attributes)); // Collection of contacts belonging to this group. this.contacts = new _converse.RosterContacts(); } }); this.RosterGroups = Backbone.Collection.extend({ model: _converse.RosterGroup, fetchRosterGroups: function fetchRosterGroups() { var _this7 = this; /* Fetches all the roster groups from sessionStorage. * * Returns a promise which resolves once the groups have been * returned. */ return new Promise(function (resolve, reject) { _this7.fetch({ silent: true, // We need to first have all groups before // we can start positioning them, so we set // 'silent' to true. success: resolve }); }); } }); this.Message = Backbone.Model.extend({ defaults: function defaults() { return { msgid: _converse.connection.getUniqueId() }; } }); this.Messages = Backbone.Collection.extend({ model: _converse.Message, comparator: 'time' }); this.ChatBox = Backbone.Model.extend({ defaults: { 'type': 'chatbox', 'bookmarked': false, 'chat_state': undefined, 'num_unread': 0, 'url': '' }, initialize: function initialize() { this.messages = new _converse.Messages(); this.messages.browserStorage = new Backbone.BrowserStorage[_converse.message_storage](b64_sha1("converse.messages" + this.get('jid') + _converse.bare_jid)); this.save({ // The chat_state will be set to ACTIVE once the chat box is opened // and we listen for change:chat_state, so shouldn't set it to ACTIVE here. 'box_id': b64_sha1(this.get('jid')), 'time_opened': this.get('time_opened') || moment().valueOf(), 'user_id': Strophe.getNodeFromJid(this.get('jid')) }); }, getMessageBody: function getMessageBody(message) { var type = message.getAttribute('type'); return type === 'error' ? _.propertyOf(message.querySelector('error text'))('textContent') : _.propertyOf(message.querySelector('body'))('textContent'); }, getMessageAttributes: function getMessageAttributes(message, delay, original_stanza) { delay = delay || message.querySelector('delay'); var type = message.getAttribute('type'), body = this.getMessageBody(message); var delayed = !_.isNull(delay), is_groupchat = type === 'groupchat', chat_state = message.getElementsByTagName(_converse.COMPOSING).length && _converse.COMPOSING || message.getElementsByTagName(_converse.PAUSED).length && _converse.PAUSED || message.getElementsByTagName(_converse.INACTIVE).length && _converse.INACTIVE || message.getElementsByTagName(_converse.ACTIVE).length && _converse.ACTIVE || message.getElementsByTagName(_converse.GONE).length && _converse.GONE; var from = void 0; if (is_groupchat) { from = Strophe.unescapeNode(Strophe.getResourceFromJid(message.getAttribute('from'))); } else { from = Strophe.getBareJidFromJid(message.getAttribute('from')); } var time = delayed ? delay.getAttribute('stamp') : moment().format(); var sender = void 0, fullname = void 0; if (is_groupchat && from === this.get('nick') || !is_groupchat && from === _converse.bare_jid) { sender = 'me'; fullname = _converse.xmppstatus.get('fullname') || from; } else { sender = 'them'; fullname = this.get('fullname') || from; } return { 'type': type, 'chat_state': chat_state, 'delayed': delayed, 'fullname': fullname, 'message': body || undefined, 'msgid': message.getAttribute('id'), 'sender': sender, 'time': time }; }, createMessage: function createMessage(message, delay, original_stanza) { return this.messages.create(this.getMessageAttributes.apply(this, arguments)); }, newMessageWillBeHidden: function newMessageWillBeHidden() { /* Returns a boolean to indicate whether a newly received * message will be visible to the user or not. */ return this.get('hidden') || this.get('minimized') || this.isScrolledUp() || _converse.windowState === 'hidden'; }, incrementUnreadMsgCounter: function incrementUnreadMsgCounter(stanza) { /* Given a newly received message, update the unread counter if * necessary. */ if (_.isNull(stanza.querySelector('body'))) { return; // The message has no text } if (utils.isNewMessage(stanza) && this.newMessageWillBeHidden()) { this.save({ 'num_unread': this.get('num_unread') + 1 }); _converse.incrementMsgCounter(); } }, clearUnreadMsgCounter: function clearUnreadMsgCounter() { this.save({ 'num_unread': 0 }); }, isScrolledUp: function isScrolledUp() { return this.get('scrolled', true); } }); this.ConnectionFeedback = Backbone.Model.extend({ defaults: { 'connection_status': undefined, 'message': '' }, initialize: function initialize() { this.on('change', function () { _converse.emit('connfeedback', _converse.connfeedback); }); } }); this.connfeedback = new this.ConnectionFeedback(); this.XMPPStatus = Backbone.Model.extend({ initialize: function initialize() { var _this8 = this; this.set({ 'status': this.getStatus() }); this.on('change', function (item) { if (_.has(item.changed, 'status')) { _converse.emit('statusChanged', _this8.get('status')); } if (_.has(item.changed, 'status_message')) { _converse.emit('statusMessageChanged', _this8.get('status_message')); } }); }, constructPresence: function constructPresence(type, status_message) { var presence = void 0; type = _.isString(type) ? type : this.get('status') || _converse.default_state; status_message = _.isString(status_message) ? status_message : undefined; // Most of these presence types are actually not explicitly sent, // but I add all of them here for reference and future proofing. if (type === 'unavailable' || type === 'probe' || type === 'error' || type === 'unsubscribe' || type === 'unsubscribed' || type === 'subscribe' || type === 'subscribed') { presence = $pres({ 'type': type }); } else if (type === 'offline') { presence = $pres({ 'type': 'unavailable' }); } else if (type === 'online') { presence = $pres(); } else { presence = $pres().c('show').t(type).up(); } if (status_message) { presence.c('status').t(status_message).up(); } presence.c('priority').t(_.isNaN(Number(_converse.priority)) ? 0 : _converse.priority); return presence; }, sendPresence: function sendPresence(type, status_message) { _converse.connection.send(this.constructPresence(type, status_message)); }, setStatus: function setStatus(value) { this.sendPresence(value); this.save({ 'status': value }); }, getStatus: function getStatus() { return this.get('status') || _converse.default_state; }, setStatusMessage: function setStatusMessage(status_message) { this.sendPresence(this.getStatus(), status_message); this.save({ 'status_message': status_message }); if (this.xhr_custom_status) { var xhr = new XMLHttpRequest(); xhr.open('POST', this.xhr_custom_status_url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr.send({ 'msg': status_message }); } var prev_status = this.get('status_message'); if (prev_status === status_message) { this.trigger("update-status-ui", this); } } }); this.setUpXMLLogging = function () { Strophe.log = function (level, msg) { _converse.log(msg, level); }; if (this.debug) { this.connection.xmlInput = function (body) { _converse.log(body.outerHTML, Strophe.LogLevel.DEBUG); }; this.connection.xmlOutput = function (body) { _converse.log(body.outerHTML, Strophe.LogLevel.DEBUG); }; } }; this.fetchLoginCredentials = function () { return new Promise(function (resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open('GET', _converse.credentials_url, true); xhr.setRequestHeader('Accept', "application/json, text/javascript"); xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 400) { var data = JSON.parse(xhr.responseText); resolve({ 'jid': data.jid, 'password': data.password }); } else { xhr.onerror(); } }; xhr.onerror = function () { delete _converse.connection; _converse.emit('noResumeableSession', this); reject(xhr.responseText); }; xhr.send(); }); }; this.startNewBOSHSession = function () { var xhr = new XMLHttpRequest(); xhr.open('GET', _converse.prebind_url, true); xhr.setRequestHeader('Accept', "application/json, text/javascript"); xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 400) { var data = JSON.parse(xhr.responseText); _converse.connection.attach(data.jid, data.sid, data.rid, _converse.onConnectStatusChanged); } else { xhr.onerror(); } }; xhr.onerror = function () { delete _converse.connection; _converse.emit('noResumeableSession', this); }; xhr.send(); }; this.restoreBOSHSession = function (jid_is_required) { /* Tries to restore a cached BOSH session. */ if (!this.jid) { var msg = "restoreBOSHSession: tried to restore a \"keepalive\" session " + "but we don't have the JID for the user!"; if (jid_is_required) { throw new Error(msg); } else { _converse.log(msg); } } try { this.connection.restore(this.jid, this.onConnectStatusChanged); return true; } catch (e) { _converse.log("Could not restore session for jid: " + this.jid + " Error message: " + e.message); this.clearSession(); // If there's a roster, we want to clear it (see #555) return false; } }; this.attemptPreboundSession = function (reconnecting) { /* Handle session resumption or initialization when prebind is * being used. */ if (!reconnecting) { if (this.keepalive && this.restoreBOSHSession(true)) { return; } // No keepalive, or session resumption has failed. if (this.jid && this.sid && this.rid) { return this.connection.attach(this.jid, this.sid, this.rid, this.onConnectStatusChanged); } } if (this.prebind_url) { return this.startNewBOSHSession(); } else { throw new Error("attemptPreboundSession: If you use prebind and not keepalive, " + "then you MUST supply JID, RID and SID values or a prebind_url."); } }; this.attemptNonPreboundSession = function (credentials, reconnecting) { /* Handle session resumption or initialization when prebind is not being used. * * Two potential options exist and are handled in this method: * 1. keepalive * 2. auto_login */ if (!reconnecting && this.keepalive && this.restoreBOSHSession()) { return; } if (credentials) { // When credentials are passed in, they override prebinding // or credentials fetching via HTTP this.autoLogin(credentials); } else if (this.auto_login) { if (this.credentials_url) { this.fetchLoginCredentials().then(this.autoLogin.bind(this), this.autoLogin.bind(this)); } else if (!this.jid) { throw new Error("attemptNonPreboundSession: If you use auto_login, " + "you also need to give either a jid value (and if " + "applicable a password) or you need to pass in a URL " + "from where the username and password can be fetched " + "(via credentials_url)."); } else { this.autoLogin(); // Probably ANONYMOUS login } } else if (reconnecting) { this.autoLogin(); } }; this.autoLogin = function (credentials) { if (credentials) { // If passed in, the credentials come from credentials_url, // so we set them on the converse object. this.jid = credentials.jid; } if (this.authentication === _converse.ANONYMOUS) { if (!this.jid) { throw new Error("Config Error: when using anonymous login " + "you need to provide the server's domain via the 'jid' option. " + "Either when calling converse.initialize, or when calling " + "_converse.api.user.login."); } if (!this.connection.reconnecting) { this.connection.reset(); } this.connection.connect(this.jid.toLowerCase(), null, this.onConnectStatusChanged); } else if (this.authentication === _converse.LOGIN) { var password = _.isNil(credentials) ? _converse.connection.pass || this.password : credentials.password; if (!password) { if (this.auto_login) { throw new Error("initConnection: If you use auto_login and " + "authentication='login' then you also need to provide a password."); } _converse.setDisconnectionCause(Strophe.Status.AUTHFAIL, undefined, true); _converse.disconnect(); return; } var resource = Strophe.getResourceFromJid(this.jid); if (!resource) { this.jid = this.jid.toLowerCase() + _converse.generateResource(); } else { this.jid = Strophe.getBareJidFromJid(this.jid).toLowerCase() + '/' + resource; } if (!this.connection.reconnecting) { this.connection.reset(); } this.connection.connect(this.jid, password, this.onConnectStatusChanged); } }; this.logIn = function (credentials, reconnecting) { // We now try to resume or automatically set up a new session. // Otherwise the user will be shown a login form. if (this.authentication === _converse.PREBIND) { this.attemptPreboundSession(reconnecting); } else { this.attemptNonPreboundSession(credentials, reconnecting); } }; this.initConnection = function () { if (!this.connection) { if (!this.bosh_service_url && !this.websocket_url) { throw new Error("initConnection: you must supply a value for either the bosh_service_url or websocket_url or both."); } if (('WebSocket' in window || 'MozWebSocket' in window) && this.websocket_url) { this.connection = new Strophe.Connection(this.websocket_url, this.connection_options); } else if (this.bosh_service_url) { this.connection = new Strophe.Connection(this.bosh_service_url, _.assignIn(this.connection_options, { 'keepalive': this.keepalive })); } else { throw new Error("initConnection: this browser does not support websockets and bosh_service_url wasn't specified."); } } _converse.emit('connectionInitialized'); }; this._tearDown = function () { /* Remove those views which are only allowed with a valid * connection. */ _converse.emit('beforeTearDown'); _converse.unregisterPresenceHandler(); if (_converse.roster) { _converse.roster.off().reset(); // Removes roster contacts } if (!_.isUndefined(_converse.session)) { _converse.session.destroy(); } window.removeEventListener('click', _converse.onUserActivity); window.removeEventListener('focus', _converse.onUserActivity); window.removeEventListener('keypress', _converse.onUserActivity); window.removeEventListener('mousemove', _converse.onUserActivity); window.removeEventListener(unloadevent, _converse.onUserActivity); window.clearInterval(_converse.everySecondTrigger); _converse.emit('afterTearDown'); return _converse; }; this.initPlugins = function () { // If initialize gets called a second time (e.g. during tests), then we // need to re-apply all plugins (for a new converse instance), and we // therefore need to clear this array that prevents plugins from being // initialized twice. // If initialize is called for the first time, then this array is empty // in any case. _converse.pluggable.initialized_plugins = []; var whitelist = _converse.core_plugins.concat(_converse.whitelisted_plugins); _converse.pluggable.initializePlugins({ 'updateSettings': function updateSettings() { _converse.log("(DEPRECATION) " + "The `updateSettings` method has been deprecated. " + "Please use `_converse.api.settings.update` instead.", Strophe.LogLevel.WARN); _converse.api.settings.update.apply(_converse, arguments); }, '_converse': _converse }, whitelist, _converse.blacklisted_plugins); _converse.emit('pluginsInitialized'); }; // Initialization // -------------- // This is the end of the initialize method. if (settings.connection) { this.connection = settings.connection; } _converse.initPlugins(); _converse.initConnection(); _converse.setUpXMLLogging(); _converse.logIn(); _converse.registerGlobalEventHandlers(); Backbone.history.start(); if (!_.isUndefined(_converse.connection) && _converse.connection.service === 'jasmine tests') { return _converse; } else { return init_promise.promise; } }; // API methods only available to plugins _converse.api = { 'connection': { 'connected': function connected() { return _converse.connection && _converse.connection.connected || false; }, 'disconnect': function disconnect() { _converse.connection.disconnect(); } }, 'emit': function emit() { _converse.emit.apply(_converse, arguments); }, 'user': { 'jid': function jid() { return _converse.connection.jid; }, 'login': function login(credentials) { _converse.initConnection(); _converse.logIn(credentials); }, 'logout': function logout() { _converse.logOut(); }, 'status': { 'get': function get() { return _converse.xmppstatus.get('status'); }, 'set': function set(value, message) { var data = { 'status': value }; if (!_.includes(_.keys(_converse.STATUS_WEIGHTS), value)) { throw new Error('Invalid availability value. See https://xmpp.org/rfcs/rfc3921.html#rfc.section.2.2.2.1'); } if (_.isString(message)) { data.status_message = message; } _converse.xmppstatus.sendPresence(value); _converse.xmppstatus.save(data); }, 'message': { 'get': function get() { return _converse.xmppstatus.get('status_message'); }, 'set': function set(stat) { _converse.xmppstatus.save({ 'status_message': stat }); } } } }, 'settings': { 'update': function update(settings) { utils.merge(_converse.default_settings, settings); utils.merge(_converse, settings); utils.applyUserSettings(_converse, settings, _converse.user_settings); }, 'get': function get(key) { if (_.includes(_.keys(_converse.default_settings), key)) { return _converse[key]; } }, 'set': function set(key, val) { var o = {}; if (_.isObject(key)) { _.assignIn(_converse, _.pick(key, _.keys(_converse.default_settings))); } else if (_.isString("string")) { o[key] = val; _.assignIn(_converse, _.pick(o, _.keys(_converse.default_settings))); } } }, 'promises': { 'add': function add(promises) { promises = _.isArray(promises) ? promises : [promises]; _.each(promises, addPromise); } }, 'contacts': { 'get': function get(jids) { var _transform = function _transform(jid) { var contact = _converse.roster.get(Strophe.getBareJidFromJid(jid)); if (contact) { return contact.attributes; } return null; }; if (_.isUndefined(jids)) { jids = _converse.roster.pluck('jid'); } else if (_.isString(jids)) { return _transform(jids); } return _.map(jids, _transform); }, 'add': function add(jid, name) { if (!_.isString(jid) || !_.includes(jid, '@')) { throw new TypeError('contacts.add: invalid jid'); } _converse.roster.addAndSubscribe(jid, _.isEmpty(name) ? jid : name); } }, 'tokens': { 'get': function get(id) { if (!_converse.expose_rid_and_sid || _.isUndefined(_converse.connection)) { return null; } if (id.toLowerCase() === 'rid') { return _converse.connection.rid || _converse.connection._proto.rid; } else if (id.toLowerCase() === 'sid') { return _converse.connection.sid || _converse.connection._proto.sid; } } }, 'listen': { 'once': _converse.once.bind(_converse), 'on': _converse.on.bind(_converse), 'not': _converse.off.bind(_converse), 'stanza': function stanza(name, options, handler) { if (_.isFunction(options)) { handler = options; options = {}; } else { options = options || {}; } _converse.connection.addHandler(handler, options.ns, name, options.type, options.id, options.from, options); } }, 'waitUntil': function waitUntil(name) { var promise = _converse.promises[name]; if (_.isUndefined(promise)) { return null; } return promise.promise; }, 'send': function send(stanza) { _converse.connection.send(stanza); } }; // The public API return { 'initialize': function initialize(settings, callback) { return _converse.initialize(settings, callback); }, 'plugins': { 'add': function add(name, plugin) { plugin.__name__ = name; if (!_.isUndefined(_converse.pluggable.plugins[name])) { throw new TypeError("Error: plugin with name \"" + name + "\" has already been " + 'registered!'); } else { _converse.pluggable.plugins[name] = plugin; } } }, 'env': { '$build': $build, '$iq': $iq, '$msg': $msg, '$pres': $pres, 'Backbone': Backbone, 'Promise': Promise, 'Strophe': Strophe, '_': _, 'b64_sha1': b64_sha1, 'moment': moment, 'sizzle': sizzle, 'utils': utils } }; }); //# sourceMappingURL=converse-core.js.map; // Converse.js (A browser based XMPP chat client) // http://conversejs.org // // Copyright (c) 2012-2017, Jan-Carel Brand // Licensed under the Mozilla Public License (MPLv2) // /*global define */ (function (root, factory) { define('converse-chatboxes',["converse-core"], factory); }(this, function (converse) { "use strict"; const { Backbone, Strophe, b64_sha1, utils, _ } = converse.env; converse.plugins.add('converse-chatboxes', { overrides: { // Overrides mentioned here will be picked up by converse.js's // plugin architecture they will replace existing methods on the // relevant objects or classes. disconnect: function () { const { _converse } = this.__super__; _converse.chatboxviews.closeAllChatBoxes(); return this.__super__.disconnect.apply(this, arguments); }, logOut: function () { const { _converse } = this.__super__; _converse.chatboxviews.closeAllChatBoxes(); return this.__super__.logOut.apply(this, arguments); }, initStatus: function () { const { _converse } = this.__super__; _converse.chatboxviews.closeAllChatBoxes(); return this.__super__.initStatus.apply(this, arguments); }, onStatusInitialized: function () { const { _converse } = this.__super__; _converse.chatboxes.onConnected(); return this.__super__.onStatusInitialized.apply(this, arguments); } }, initialize () { /* The initialize function gets called as soon as the plugin is * loaded by converse.js's plugin machinery. */ const { _converse } = this; _converse.api.promises.add([ 'chatBoxesFetched', 'chatBoxesInitialized' ]); _converse.ChatBoxes = Backbone.Collection.extend({ comparator: 'time_opened', model (attrs, options) { return new _converse.ChatBox(attrs, options); }, registerMessageHandler () { _converse.connection.addHandler( this.onMessage.bind(this), null, 'message', 'chat' ); _converse.connection.addHandler( this.onErrorMessage.bind(this), null, 'message', 'error' ); }, chatBoxMayBeShown (chatbox) { return true; }, onChatBoxesFetched (collection) { /* Show chat boxes upon receiving them from sessionStorage * * This method gets overridden entirely in src/converse-controlbox.js * if the controlbox plugin is active. */ collection.each((chatbox) => { if (this.chatBoxMayBeShown(chatbox)) { chatbox.trigger('show'); } }); _converse.emit('chatBoxesFetched'); }, onConnected () { this.browserStorage = new Backbone.BrowserStorage[_converse.storage]( b64_sha1(`converse.chatboxes-${_converse.bare_jid}`)); this.registerMessageHandler(); this.fetch({ add: true, success: this.onChatBoxesFetched.bind(this) }); }, onErrorMessage (message) { /* Handler method for all incoming error message stanzas */ // TODO: we can likely just reuse "onMessage" below const from_jid = Strophe.getBareJidFromJid(message.getAttribute('from')); if (utils.isSameBareJID(from_jid, _converse.bare_jid)) { return true; } // Get chat box, but only create a new one when the message has a body. const chatbox = this.getChatBox(from_jid); if (!chatbox) { return true; } chatbox.createMessage(message, null, message); return true; }, onMessage (message) { /* Handler method for all incoming single-user chat "message" * stanzas. */ let contact_jid, delay, resource, from_jid = message.getAttribute('from'), to_jid = message.getAttribute('to'); const original_stanza = message, to_resource = Strophe.getResourceFromJid(to_jid), is_carbon = !_.isNull(message.querySelector(`received[xmlns="${Strophe.NS.CARBONS}"]`)); if (_converse.filter_by_resource && (to_resource && to_resource !== _converse.resource)) { _converse.log( `onMessage: Ignoring incoming message intended for a different resource: ${to_jid}`, Strophe.LogLevel.INFO ); return true; } else if (utils.isHeadlineMessage(message)) { // XXX: Ideally we wouldn't have to check for headline // messages, but Prosody sends headline messages with the // wrong type ('chat'), so we need to filter them out here. _converse.log( `onMessage: Ignoring incoming headline message sent with type 'chat' from JID: ${from_jid}`, Strophe.LogLevel.INFO ); return true; } const forwarded = message.querySelector('forwarded'); if (!_.isNull(forwarded)) { const forwarded_message = forwarded.querySelector('message'); const forwarded_from = forwarded_message.getAttribute('from'); if (is_carbon && Strophe.getBareJidFromJid(forwarded_from) !== from_jid) { // Prevent message forging via carbons // // https://xmpp.org/extensions/xep-0280.html#security return true; } message = forwarded_message; delay = forwarded.querySelector('delay'); from_jid = message.getAttribute('from'); to_jid = message.getAttribute('to'); } const from_bare_jid = Strophe.getBareJidFromJid(from_jid), from_resource = Strophe.getResourceFromJid(from_jid), is_me = from_bare_jid === _converse.bare_jid; if (is_me) { // I am the sender, so this must be a forwarded message... contact_jid = Strophe.getBareJidFromJid(to_jid); resource = Strophe.getResourceFromJid(to_jid); } else { contact_jid = from_bare_jid; resource = from_resource; } // Get chat box, but only create a new one when the message has a body. const chatbox = this.getChatBox(contact_jid, !_.isNull(message.querySelector('body'))), msgid = message.getAttribute('id'); if (chatbox) { const messages = msgid && chatbox.messages.findWhere({msgid}) || []; if (_.isEmpty(messages)) { // Only create the message when we're sure it's not a // duplicate chatbox.incrementUnreadMsgCounter(original_stanza); chatbox.createMessage(message, delay, original_stanza); } } _converse.emit('message', {'stanza': original_stanza, 'chatbox': chatbox}); return true; }, createChatBox (jid, attrs) { /* Creates a chat box * * Parameters: * (String) jid - The JID of the user for whom a chat box * gets created. * (Object) attrs - Optional chat box atributes. */ const bare_jid = Strophe.getBareJidFromJid(jid), roster_item = _converse.roster.get(bare_jid); let roster_info = {}; if (! _.isUndefined(roster_item)) { roster_info = { 'fullname': _.isEmpty(roster_item.get('fullname'))? jid: roster_item.get('fullname'), 'image_type': roster_item.get('image_type'), 'image': roster_item.get('image'), 'url': roster_item.get('url'), }; } else if (!_converse.allow_non_roster_messaging) { _converse.log(`Could not get roster item for JID ${bare_jid}`+ ' and allow_non_roster_messaging is set to false', Strophe.LogLevel.ERROR); return; } return this.create(_.assignIn({ 'id': bare_jid, 'jid': bare_jid, 'fullname': jid, 'image_type': _converse.DEFAULT_IMAGE_TYPE, 'image': _converse.DEFAULT_IMAGE, 'url': '', }, roster_info, attrs || {})); }, getChatBox (jid, create, attrs) { /* Returns a chat box or optionally return a newly * created one if one doesn't exist. * * Parameters: * (String) jid - The JID of the user whose chat box we want * (Boolean) create - Should a new chat box be created if none exists? * (Object) attrs - Optional chat box atributes. */ jid = jid.toLowerCase(); let chatbox = this.get(Strophe.getBareJidFromJid(jid)); if (!chatbox && create) { chatbox = this.createChatBox(jid, attrs); } return chatbox; } }); _converse.ChatBoxViews = Backbone.Overview.extend({ initialize () { this.model.on("add", this.onChatBoxAdded, this); this.model.on("destroy", this.removeChat, this); }, _ensureElement () { /* Override method from backbone.js * If the #conversejs element doesn't exist, create it. */ if (!this.el) { let el = document.querySelector('#conversejs'); if (_.isNull(el)) { el = document.createElement('div'); el.setAttribute('id', 'conversejs'); // Converse.js expects a tag to be present. document.querySelector('body').appendChild(el); } el.innerHTML = ''; this.setElement(el, false); } else { this.setElement(_.result(this, 'el'), false); } }, onChatBoxAdded (item) { // Views aren't created here, since the core code doesn't // contain any views. Instead, they're created in overrides in // plugins, such as in converse-chatview.js and converse-muc.js return this.get(item.get('id')); }, removeChat (item) { this.remove(item.get('id')); }, closeAllChatBoxes () { /* This method gets overridden in src/converse-controlbox.js if * the controlbox plugin is active. */ this.each(function (view) { view.close(); }); return this; }, chatBoxMayBeShown (chatbox) { return this.model.chatBoxMayBeShown(chatbox); }, getChatBox (attrs, create) { let chatbox = this.model.get(attrs.jid); if (!chatbox && create) { chatbox = this.model.create(attrs, { 'error' (model, response) { _converse.log(response.responseText); } }); } return chatbox; }, showChat (attrs) { /* Find the chat box and show it (if it may be shown). * If it doesn't exist, create it. */ const chatbox = this.getChatBox(attrs, true); if (this.chatBoxMayBeShown(chatbox)) { chatbox.trigger('show', true); } return chatbox; } }); // BEGIN: Event handlers _converse.api.listen.on('pluginsInitialized', () => { _converse.chatboxes = new _converse.ChatBoxes(); _converse.chatboxviews = new _converse.ChatBoxViews({ 'model': _converse.chatboxes }); _converse.emit('chatBoxesInitialized'); }); _converse.api.listen.on('beforeTearDown', () => { _converse.chatboxes.remove(); // Don't call off(), events won't get re-registered upon reconnect. delete _converse.chatboxes.browserStorage; }); // END: Event handlers _converse.getViewForChatBox = function (chatbox) { if (!chatbox) { return; } return _converse.chatboxviews.get(chatbox.get('id')); }; /* We extend the default converse.js API */ _.extend(_converse.api, { 'chats': { 'open' (jids, attrs) { if (_.isUndefined(jids)) { _converse.log("chats.open: You need to provide at least one JID", Strophe.LogLevel.ERROR); return null; } else if (_.isString(jids)) { return _converse.getViewForChatBox( _converse.chatboxes.getChatBox(jids, true, attrs).trigger('show') ); } return _.map(jids, (jid) => _converse.getViewForChatBox( _converse.chatboxes.getChatBox(jid, true, attrs).trigger('show') ) ); }, 'get' (jids) { if (_.isUndefined(jids)) { const result = []; _converse.chatboxes.each(function (chatbox) { // FIXME: Leaky abstraction from MUC. We need to add a // base type for chat boxes, and check for that. if (chatbox.get('type') !== 'chatroom') { result.push(_converse.getViewForChatBox(chatbox)); } }); return result; } else if (_.isString(jids)) { return _converse.getViewForChatBox(_converse.chatboxes.getChatBox(jids)); } return _.map(jids, _.partial( _.flow( _converse.chatboxes.getChatBox.bind(_converse.chatboxes), _converse.getViewForChatBox.bind(_converse) ), _, true ) ); } } }); } }); return converse; })); /* jshint maxerr: 10000 */ /* jslint unused: true */ /* jshint shadow: true */ /* jshint -W075 */ (function(ns){ // this list must be ordered from largest length of the value array, index 0, to the shortest ns.emojioneList = {":kiss_mm:":{"uc_base":"1f468-2764-1f48b-1f468","uc_output":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","uc_match":"1f468-2764-fe0f-1f48b-1f468","uc_greedy":"1f468-2764-1f48b-1f468","shortnames":[":couplekiss_mm:"],"category":"people"},":kiss_woman_man:":{"uc_base":"1f469-2764-1f48b-1f468","uc_output":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","uc_match":"1f469-2764-fe0f-1f48b-1f468","uc_greedy":"1f469-2764-1f48b-1f468","shortnames":[],"category":"people"},":kiss_ww:":{"uc_base":"1f469-2764-1f48b-1f469","uc_output":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","uc_match":"1f469-2764-fe0f-1f48b-1f469","uc_greedy":"1f469-2764-1f48b-1f469","shortnames":[":couplekiss_ww:"],"category":"people"},":england:":{"uc_base":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","uc_output":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","uc_match":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","uc_greedy":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","shortnames":[],"category":"flags"},":scotland:":{"uc_base":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","uc_output":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","uc_match":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","uc_greedy":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","shortnames":[],"category":"flags"},":wales:":{"uc_base":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","uc_output":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","uc_match":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","uc_greedy":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","shortnames":[],"category":"flags"},":family_mmbb:":{"uc_base":"1f468-1f468-1f466-1f466","uc_output":"1f468-200d-1f468-200d-1f466-200d-1f466","uc_match":"1f468-1f468-1f466-1f466","uc_greedy":"1f468-1f468-1f466-1f466","shortnames":[],"category":"people"},":family_mmgb:":{"uc_base":"1f468-1f468-1f467-1f466","uc_output":"1f468-200d-1f468-200d-1f467-200d-1f466","uc_match":"1f468-1f468-1f467-1f466","uc_greedy":"1f468-1f468-1f467-1f466","shortnames":[],"category":"people"},":family_mmgg:":{"uc_base":"1f468-1f468-1f467-1f467","uc_output":"1f468-200d-1f468-200d-1f467-200d-1f467","uc_match":"1f468-1f468-1f467-1f467","uc_greedy":"1f468-1f468-1f467-1f467","shortnames":[],"category":"people"},":family_mwbb:":{"uc_base":"1f468-1f469-1f466-1f466","uc_output":"1f468-200d-1f469-200d-1f466-200d-1f466","uc_match":"1f468-1f469-1f466-1f466","uc_greedy":"1f468-1f469-1f466-1f466","shortnames":[],"category":"people"},":family_mwgb:":{"uc_base":"1f468-1f469-1f467-1f466","uc_output":"1f468-200d-1f469-200d-1f467-200d-1f466","uc_match":"1f468-1f469-1f467-1f466","uc_greedy":"1f468-1f469-1f467-1f466","shortnames":[],"category":"people"},":family_mwgg:":{"uc_base":"1f468-1f469-1f467-1f467","uc_output":"1f468-200d-1f469-200d-1f467-200d-1f467","uc_match":"1f468-1f469-1f467-1f467","uc_greedy":"1f468-1f469-1f467-1f467","shortnames":[],"category":"people"},":family_wwbb:":{"uc_base":"1f469-1f469-1f466-1f466","uc_output":"1f469-200d-1f469-200d-1f466-200d-1f466","uc_match":"1f469-1f469-1f466-1f466","uc_greedy":"1f469-1f469-1f466-1f466","shortnames":[],"category":"people"},":family_wwgb:":{"uc_base":"1f469-1f469-1f467-1f466","uc_output":"1f469-200d-1f469-200d-1f467-200d-1f466","uc_match":"1f469-1f469-1f467-1f466","uc_greedy":"1f469-1f469-1f467-1f466","shortnames":[],"category":"people"},":family_wwgg:":{"uc_base":"1f469-1f469-1f467-1f467","uc_output":"1f469-200d-1f469-200d-1f467-200d-1f467","uc_match":"1f469-1f469-1f467-1f467","uc_greedy":"1f469-1f469-1f467-1f467","shortnames":[],"category":"people"},":couple_mm:":{"uc_base":"1f468-2764-1f468","uc_output":"1f468-200d-2764-fe0f-200d-1f468","uc_match":"1f468-2764-fe0f-1f468","uc_greedy":"1f468-2764-1f468","shortnames":[":couple_with_heart_mm:"],"category":"people"},":couple_with_heart_woman_man:":{"uc_base":"1f469-2764-1f468","uc_output":"1f469-200d-2764-fe0f-200d-1f468","uc_match":"1f469-2764-fe0f-1f468","uc_greedy":"1f469-2764-1f468","shortnames":[],"category":"people"},":couple_ww:":{"uc_base":"1f469-2764-1f469","uc_output":"1f469-200d-2764-fe0f-200d-1f469","uc_match":"1f469-2764-fe0f-1f469","uc_greedy":"1f469-2764-1f469","shortnames":[":couple_with_heart_ww:"],"category":"people"},":family_man_boy_boy:":{"uc_base":"1f468-1f466-1f466","uc_output":"1f468-200d-1f466-200d-1f466","uc_match":"1f468-1f466-1f466","uc_greedy":"1f468-1f466-1f466","shortnames":[],"category":"people"},":family_man_girl_boy:":{"uc_base":"1f468-1f467-1f466","uc_output":"1f468-200d-1f467-200d-1f466","uc_match":"1f468-1f467-1f466","uc_greedy":"1f468-1f467-1f466","shortnames":[],"category":"people"},":family_man_girl_girl:":{"uc_base":"1f468-1f467-1f467","uc_output":"1f468-200d-1f467-200d-1f467","uc_match":"1f468-1f467-1f467","uc_greedy":"1f468-1f467-1f467","shortnames":[],"category":"people"},":family_man_woman_boy:":{"uc_base":"1f468-1f469-1f466","uc_output":"1f468-200d-1f469-200d-1f466","uc_match":"1f468-1f469-1f466","uc_greedy":"1f468-1f469-1f466","shortnames":[],"category":"people"},":family_mmb:":{"uc_base":"1f468-1f468-1f466","uc_output":"1f468-200d-1f468-200d-1f466","uc_match":"1f468-1f468-1f466","uc_greedy":"1f468-1f468-1f466","shortnames":[],"category":"people"},":family_mmg:":{"uc_base":"1f468-1f468-1f467","uc_output":"1f468-200d-1f468-200d-1f467","uc_match":"1f468-1f468-1f467","uc_greedy":"1f468-1f468-1f467","shortnames":[],"category":"people"},":family_mwg:":{"uc_base":"1f468-1f469-1f467","uc_output":"1f468-200d-1f469-200d-1f467","uc_match":"1f468-1f469-1f467","uc_greedy":"1f468-1f469-1f467","shortnames":[],"category":"people"},":family_woman_boy_boy:":{"uc_base":"1f469-1f466-1f466","uc_output":"1f469-200d-1f466-200d-1f466","uc_match":"1f469-1f466-1f466","uc_greedy":"1f469-1f466-1f466","shortnames":[],"category":"people"},":family_woman_girl_boy:":{"uc_base":"1f469-1f467-1f466","uc_output":"1f469-200d-1f467-200d-1f466","uc_match":"1f469-1f467-1f466","uc_greedy":"1f469-1f467-1f466","shortnames":[],"category":"people"},":family_woman_girl_girl:":{"uc_base":"1f469-1f467-1f467","uc_output":"1f469-200d-1f467-200d-1f467","uc_match":"1f469-1f467-1f467","uc_greedy":"1f469-1f467-1f467","shortnames":[],"category":"people"},":family_wwb:":{"uc_base":"1f469-1f469-1f466","uc_output":"1f469-200d-1f469-200d-1f466","uc_match":"1f469-1f469-1f466","uc_greedy":"1f469-1f469-1f466","shortnames":[],"category":"people"},":family_wwg:":{"uc_base":"1f469-1f469-1f467","uc_output":"1f469-200d-1f469-200d-1f467","uc_match":"1f469-1f469-1f467","uc_greedy":"1f469-1f469-1f467","shortnames":[],"category":"people"},":blond-haired_man_tone1:":{"uc_base":"1f471-1f3fb-2642","uc_output":"1f471-1f3fb-200d-2642-fe0f","uc_match":"1f471-1f3fb-2642-fe0f","uc_greedy":"1f471-1f3fb-2642","shortnames":[":blond-haired_man_light_skin_tone:"],"category":"people"},":blond-haired_man_tone2:":{"uc_base":"1f471-1f3fc-2642","uc_output":"1f471-1f3fc-200d-2642-fe0f","uc_match":"1f471-1f3fc-2642-fe0f","uc_greedy":"1f471-1f3fc-2642","shortnames":[":blond-haired_man_medium_light_skin_tone:"],"category":"people"},":blond-haired_man_tone3:":{"uc_base":"1f471-1f3fd-2642","uc_output":"1f471-1f3fd-200d-2642-fe0f","uc_match":"1f471-1f3fd-2642-fe0f","uc_greedy":"1f471-1f3fd-2642","shortnames":[":blond-haired_man_medium_skin_tone:"],"category":"people"},":blond-haired_man_tone4:":{"uc_base":"1f471-1f3fe-2642","uc_output":"1f471-1f3fe-200d-2642-fe0f","uc_match":"1f471-1f3fe-2642-fe0f","uc_greedy":"1f471-1f3fe-2642","shortnames":[":blond-haired_man_medium_dark_skin_tone:"],"category":"people"},":blond-haired_man_tone5:":{"uc_base":"1f471-1f3ff-2642","uc_output":"1f471-1f3ff-200d-2642-fe0f","uc_match":"1f471-1f3ff-2642-fe0f","uc_greedy":"1f471-1f3ff-2642","shortnames":[":blond-haired_man_dark_skin_tone:"],"category":"people"},":blond-haired_woman_tone1:":{"uc_base":"1f471-1f3fb-2640","uc_output":"1f471-1f3fb-200d-2640-fe0f","uc_match":"1f471-1f3fb-2640-fe0f","uc_greedy":"1f471-1f3fb-2640","shortnames":[":blond-haired_woman_light_skin_tone:"],"category":"people"},":blond-haired_woman_tone2:":{"uc_base":"1f471-1f3fc-2640","uc_output":"1f471-1f3fc-200d-2640-fe0f","uc_match":"1f471-1f3fc-2640-fe0f","uc_greedy":"1f471-1f3fc-2640","shortnames":[":blond-haired_woman_medium_light_skin_tone:"],"category":"people"},":blond-haired_woman_tone3:":{"uc_base":"1f471-1f3fd-2640","uc_output":"1f471-1f3fd-200d-2640-fe0f","uc_match":"1f471-1f3fd-2640-fe0f","uc_greedy":"1f471-1f3fd-2640","shortnames":[":blond-haired_woman_medium_skin_tone:"],"category":"people"},":blond-haired_woman_tone4:":{"uc_base":"1f471-1f3fe-2640","uc_output":"1f471-1f3fe-200d-2640-fe0f","uc_match":"1f471-1f3fe-2640-fe0f","uc_greedy":"1f471-1f3fe-2640","shortnames":[":blond-haired_woman_medium_dark_skin_tone:"],"category":"people"},":blond-haired_woman_tone5:":{"uc_base":"1f471-1f3ff-2640","uc_output":"1f471-1f3ff-200d-2640-fe0f","uc_match":"1f471-1f3ff-2640-fe0f","uc_greedy":"1f471-1f3ff-2640","shortnames":[":blond-haired_woman_dark_skin_tone:"],"category":"people"},":eye_in_speech_bubble:":{"uc_base":"1f441-1f5e8","uc_output":"1f441-fe0f-200d-1f5e8-fe0f","uc_match":"1f441-fe0f-1f5e8-fe0f","uc_greedy":"1f441-1f5e8","shortnames":[],"category":"symbols"},":man_biking_tone1:":{"uc_base":"1f6b4-1f3fb-2642","uc_output":"1f6b4-1f3fb-200d-2642-fe0f","uc_match":"1f6b4-1f3fb-2642-fe0f","uc_greedy":"1f6b4-1f3fb-2642","shortnames":[":man_biking_light_skin_tone:"],"category":"activity"},":man_biking_tone2:":{"uc_base":"1f6b4-1f3fc-2642","uc_output":"1f6b4-1f3fc-200d-2642-fe0f","uc_match":"1f6b4-1f3fc-2642-fe0f","uc_greedy":"1f6b4-1f3fc-2642","shortnames":[":man_biking_medium_light_skin_tone:"],"category":"activity"},":man_biking_tone3:":{"uc_base":"1f6b4-1f3fd-2642","uc_output":"1f6b4-1f3fd-200d-2642-fe0f","uc_match":"1f6b4-1f3fd-2642-fe0f","uc_greedy":"1f6b4-1f3fd-2642","shortnames":[":man_biking_medium_skin_tone:"],"category":"activity"},":man_biking_tone4:":{"uc_base":"1f6b4-1f3fe-2642","uc_output":"1f6b4-1f3fe-200d-2642-fe0f","uc_match":"1f6b4-1f3fe-2642-fe0f","uc_greedy":"1f6b4-1f3fe-2642","shortnames":[":man_biking_medium_dark_skin_tone:"],"category":"activity"},":man_biking_tone5:":{"uc_base":"1f6b4-1f3ff-2642","uc_output":"1f6b4-1f3ff-200d-2642-fe0f","uc_match":"1f6b4-1f3ff-2642-fe0f","uc_greedy":"1f6b4-1f3ff-2642","shortnames":[":man_biking_dark_skin_tone:"],"category":"activity"},":man_bowing_tone1:":{"uc_base":"1f647-1f3fb-2642","uc_output":"1f647-1f3fb-200d-2642-fe0f","uc_match":"1f647-1f3fb-2642-fe0f","uc_greedy":"1f647-1f3fb-2642","shortnames":[":man_bowing_light_skin_tone:"],"category":"people"},":man_bowing_tone2:":{"uc_base":"1f647-1f3fc-2642","uc_output":"1f647-1f3fc-200d-2642-fe0f","uc_match":"1f647-1f3fc-2642-fe0f","uc_greedy":"1f647-1f3fc-2642","shortnames":[":man_bowing_medium_light_skin_tone:"],"category":"people"},":man_bowing_tone3:":{"uc_base":"1f647-1f3fd-2642","uc_output":"1f647-1f3fd-200d-2642-fe0f","uc_match":"1f647-1f3fd-2642-fe0f","uc_greedy":"1f647-1f3fd-2642","shortnames":[":man_bowing_medium_skin_tone:"],"category":"people"},":man_bowing_tone4:":{"uc_base":"1f647-1f3fe-2642","uc_output":"1f647-1f3fe-200d-2642-fe0f","uc_match":"1f647-1f3fe-2642-fe0f","uc_greedy":"1f647-1f3fe-2642","shortnames":[":man_bowing_medium_dark_skin_tone:"],"category":"people"},":man_bowing_tone5:":{"uc_base":"1f647-1f3ff-2642","uc_output":"1f647-1f3ff-200d-2642-fe0f","uc_match":"1f647-1f3ff-2642-fe0f","uc_greedy":"1f647-1f3ff-2642","shortnames":[":man_bowing_dark_skin_tone:"],"category":"people"},":man_cartwheeling_tone1:":{"uc_base":"1f938-1f3fb-2642","uc_output":"1f938-1f3fb-200d-2642-fe0f","uc_match":"1f938-1f3fb-2642-fe0f","uc_greedy":"1f938-1f3fb-2642","shortnames":[":man_cartwheeling_light_skin_tone:"],"category":"activity"},":man_cartwheeling_tone2:":{"uc_base":"1f938-1f3fc-2642","uc_output":"1f938-1f3fc-200d-2642-fe0f","uc_match":"1f938-1f3fc-2642-fe0f","uc_greedy":"1f938-1f3fc-2642","shortnames":[":man_cartwheeling_medium_light_skin_tone:"],"category":"activity"},":man_cartwheeling_tone3:":{"uc_base":"1f938-1f3fd-2642","uc_output":"1f938-1f3fd-200d-2642-fe0f","uc_match":"1f938-1f3fd-2642-fe0f","uc_greedy":"1f938-1f3fd-2642","shortnames":[":man_cartwheeling_medium_skin_tone:"],"category":"activity"},":man_cartwheeling_tone4:":{"uc_base":"1f938-1f3fe-2642","uc_output":"1f938-1f3fe-200d-2642-fe0f","uc_match":"1f938-1f3fe-2642-fe0f","uc_greedy":"1f938-1f3fe-2642","shortnames":[":man_cartwheeling_medium_dark_skin_tone:"],"category":"activity"},":man_cartwheeling_tone5:":{"uc_base":"1f938-1f3ff-2642","uc_output":"1f938-1f3ff-200d-2642-fe0f","uc_match":"1f938-1f3ff-2642-fe0f","uc_greedy":"1f938-1f3ff-2642","shortnames":[":man_cartwheeling_dark_skin_tone:"],"category":"activity"},":man_climbing_tone1:":{"uc_base":"1f9d7-1f3fb-2642","uc_output":"1f9d7-1f3fb-200d-2642-fe0f","uc_match":"1f9d7-1f3fb-2642-fe0f","uc_greedy":"1f9d7-1f3fb-2642","shortnames":[":man_climbing_light_skin_tone:"],"category":"activity"},":man_climbing_tone2:":{"uc_base":"1f9d7-1f3fc-2642","uc_output":"1f9d7-1f3fc-200d-2642-fe0f","uc_match":"1f9d7-1f3fc-2642-fe0f","uc_greedy":"1f9d7-1f3fc-2642","shortnames":[":man_climbing_medium_light_skin_tone:"],"category":"activity"},":man_climbing_tone3:":{"uc_base":"1f9d7-1f3fd-2642","uc_output":"1f9d7-1f3fd-200d-2642-fe0f","uc_match":"1f9d7-1f3fd-2642-fe0f","uc_greedy":"1f9d7-1f3fd-2642","shortnames":[":man_climbing_medium_skin_tone:"],"category":"activity"},":man_climbing_tone4:":{"uc_base":"1f9d7-1f3fe-2642","uc_output":"1f9d7-1f3fe-200d-2642-fe0f","uc_match":"1f9d7-1f3fe-2642-fe0f","uc_greedy":"1f9d7-1f3fe-2642","shortnames":[":man_climbing_medium_dark_skin_tone:"],"category":"activity"},":man_climbing_tone5:":{"uc_base":"1f9d7-1f3ff-2642","uc_output":"1f9d7-1f3ff-200d-2642-fe0f","uc_match":"1f9d7-1f3ff-2642-fe0f","uc_greedy":"1f9d7-1f3ff-2642","shortnames":[":man_climbing_dark_skin_tone:"],"category":"activity"},":man_construction_worker_tone1:":{"uc_base":"1f477-1f3fb-2642","uc_output":"1f477-1f3fb-200d-2642-fe0f","uc_match":"1f477-1f3fb-2642-fe0f","uc_greedy":"1f477-1f3fb-2642","shortnames":[":man_construction_worker_light_skin_tone:"],"category":"people"},":man_construction_worker_tone2:":{"uc_base":"1f477-1f3fc-2642","uc_output":"1f477-1f3fc-200d-2642-fe0f","uc_match":"1f477-1f3fc-2642-fe0f","uc_greedy":"1f477-1f3fc-2642","shortnames":[":man_construction_worker_medium_light_skin_tone:"],"category":"people"},":man_construction_worker_tone3:":{"uc_base":"1f477-1f3fd-2642","uc_output":"1f477-1f3fd-200d-2642-fe0f","uc_match":"1f477-1f3fd-2642-fe0f","uc_greedy":"1f477-1f3fd-2642","shortnames":[":man_construction_worker_medium_skin_tone:"],"category":"people"},":man_construction_worker_tone4:":{"uc_base":"1f477-1f3fe-2642","uc_output":"1f477-1f3fe-200d-2642-fe0f","uc_match":"1f477-1f3fe-2642-fe0f","uc_greedy":"1f477-1f3fe-2642","shortnames":[":man_construction_worker_medium_dark_skin_tone:"],"category":"people"},":man_construction_worker_tone5:":{"uc_base":"1f477-1f3ff-2642","uc_output":"1f477-1f3ff-200d-2642-fe0f","uc_match":"1f477-1f3ff-2642-fe0f","uc_greedy":"1f477-1f3ff-2642","shortnames":[":man_construction_worker_dark_skin_tone:"],"category":"people"},":man_detective_tone1:":{"uc_base":"1f575-1f3fb-2642","uc_output":"1f575-1f3fb-200d-2642-fe0f","uc_match":"1f575-fe0f-1f3fb-2642-fe0f","uc_greedy":"1f575-1f3fb-2642","shortnames":[":man_detective_light_skin_tone:"],"category":"people"},":man_detective_tone2:":{"uc_base":"1f575-1f3fc-2642","uc_output":"1f575-1f3fc-200d-2642-fe0f","uc_match":"1f575-fe0f-1f3fc-2642-fe0f","uc_greedy":"1f575-1f3fc-2642","shortnames":[":man_detective_medium_light_skin_tone:"],"category":"people"},":man_detective_tone3:":{"uc_base":"1f575-1f3fd-2642","uc_output":"1f575-1f3fd-200d-2642-fe0f","uc_match":"1f575-fe0f-1f3fd-2642-fe0f","uc_greedy":"1f575-1f3fd-2642","shortnames":[":man_detective_medium_skin_tone:"],"category":"people"},":man_detective_tone4:":{"uc_base":"1f575-1f3fe-2642","uc_output":"1f575-1f3fe-200d-2642-fe0f","uc_match":"1f575-fe0f-1f3fe-2642-fe0f","uc_greedy":"1f575-1f3fe-2642","shortnames":[":man_detective_medium_dark_skin_tone:"],"category":"people"},":man_detective_tone5:":{"uc_base":"1f575-1f3ff-2642","uc_output":"1f575-1f3ff-200d-2642-fe0f","uc_match":"1f575-fe0f-1f3ff-2642-fe0f","uc_greedy":"1f575-1f3ff-2642","shortnames":[":man_detective_dark_skin_tone:"],"category":"people"},":man_elf_tone1:":{"uc_base":"1f9dd-1f3fb-2642","uc_output":"1f9dd-1f3fb-200d-2642-fe0f","uc_match":"1f9dd-1f3fb-2642-fe0f","uc_greedy":"1f9dd-1f3fb-2642","shortnames":[":man_elf_light_skin_tone:"],"category":"people"},":man_elf_tone2:":{"uc_base":"1f9dd-1f3fc-2642","uc_output":"1f9dd-1f3fc-200d-2642-fe0f","uc_match":"1f9dd-1f3fc-2642-fe0f","uc_greedy":"1f9dd-1f3fc-2642","shortnames":[":man_elf_medium_light_skin_tone:"],"category":"people"},":man_elf_tone3:":{"uc_base":"1f9dd-1f3fd-2642","uc_output":"1f9dd-1f3fd-200d-2642-fe0f","uc_match":"1f9dd-1f3fd-2642-fe0f","uc_greedy":"1f9dd-1f3fd-2642","shortnames":[":man_elf_medium_skin_tone:"],"category":"people"},":man_elf_tone4:":{"uc_base":"1f9dd-1f3fe-2642","uc_output":"1f9dd-1f3fe-200d-2642-fe0f","uc_match":"1f9dd-1f3fe-2642-fe0f","uc_greedy":"1f9dd-1f3fe-2642","shortnames":[":man_elf_medium_dark_skin_tone:"],"category":"people"},":man_elf_tone5:":{"uc_base":"1f9dd-1f3ff-2642","uc_output":"1f9dd-1f3ff-200d-2642-fe0f","uc_match":"1f9dd-1f3ff-2642-fe0f","uc_greedy":"1f9dd-1f3ff-2642","shortnames":[":man_elf_dark_skin_tone:"],"category":"people"},":man_facepalming_tone1:":{"uc_base":"1f926-1f3fb-2642","uc_output":"1f926-1f3fb-200d-2642-fe0f","uc_match":"1f926-1f3fb-2642-fe0f","uc_greedy":"1f926-1f3fb-2642","shortnames":[":man_facepalming_light_skin_tone:"],"category":"people"},":man_facepalming_tone2:":{"uc_base":"1f926-1f3fc-2642","uc_output":"1f926-1f3fc-200d-2642-fe0f","uc_match":"1f926-1f3fc-2642-fe0f","uc_greedy":"1f926-1f3fc-2642","shortnames":[":man_facepalming_medium_light_skin_tone:"],"category":"people"},":man_facepalming_tone3:":{"uc_base":"1f926-1f3fd-2642","uc_output":"1f926-1f3fd-200d-2642-fe0f","uc_match":"1f926-1f3fd-2642-fe0f","uc_greedy":"1f926-1f3fd-2642","shortnames":[":man_facepalming_medium_skin_tone:"],"category":"people"},":man_facepalming_tone4:":{"uc_base":"1f926-1f3fe-2642","uc_output":"1f926-1f3fe-200d-2642-fe0f","uc_match":"1f926-1f3fe-2642-fe0f","uc_greedy":"1f926-1f3fe-2642","shortnames":[":man_facepalming_medium_dark_skin_tone:"],"category":"people"},":man_facepalming_tone5:":{"uc_base":"1f926-1f3ff-2642","uc_output":"1f926-1f3ff-200d-2642-fe0f","uc_match":"1f926-1f3ff-2642-fe0f","uc_greedy":"1f926-1f3ff-2642","shortnames":[":man_facepalming_dark_skin_tone:"],"category":"people"},":man_fairy_tone1:":{"uc_base":"1f9da-1f3fb-2642","uc_output":"1f9da-1f3fb-200d-2642-fe0f","uc_match":"1f9da-1f3fb-2642-fe0f","uc_greedy":"1f9da-1f3fb-2642","shortnames":[":man_fairy_light_skin_tone:"],"category":"people"},":man_fairy_tone2:":{"uc_base":"1f9da-1f3fc-2642","uc_output":"1f9da-1f3fc-200d-2642-fe0f","uc_match":"1f9da-1f3fc-2642-fe0f","uc_greedy":"1f9da-1f3fc-2642","shortnames":[":man_fairy_medium_light_skin_tone:"],"category":"people"},":man_fairy_tone3:":{"uc_base":"1f9da-1f3fd-2642","uc_output":"1f9da-1f3fd-200d-2642-fe0f","uc_match":"1f9da-1f3fd-2642-fe0f","uc_greedy":"1f9da-1f3fd-2642","shortnames":[":man_fairy_medium_skin_tone:"],"category":"people"},":man_fairy_tone4:":{"uc_base":"1f9da-1f3fe-2642","uc_output":"1f9da-1f3fe-200d-2642-fe0f","uc_match":"1f9da-1f3fe-2642-fe0f","uc_greedy":"1f9da-1f3fe-2642","shortnames":[":man_fairy_medium_dark_skin_tone:"],"category":"people"},":man_fairy_tone5:":{"uc_base":"1f9da-1f3ff-2642","uc_output":"1f9da-1f3ff-200d-2642-fe0f","uc_match":"1f9da-1f3ff-2642-fe0f","uc_greedy":"1f9da-1f3ff-2642","shortnames":[":man_fairy_dark_skin_tone:"],"category":"people"},":man_frowning_tone1:":{"uc_base":"1f64d-1f3fb-2642","uc_output":"1f64d-1f3fb-200d-2642-fe0f","uc_match":"1f64d-1f3fb-2642-fe0f","uc_greedy":"1f64d-1f3fb-2642","shortnames":[":man_frowning_light_skin_tone:"],"category":"people"},":man_frowning_tone2:":{"uc_base":"1f64d-1f3fc-2642","uc_output":"1f64d-1f3fc-200d-2642-fe0f","uc_match":"1f64d-1f3fc-2642-fe0f","uc_greedy":"1f64d-1f3fc-2642","shortnames":[":man_frowning_medium_light_skin_tone:"],"category":"people"},":man_frowning_tone3:":{"uc_base":"1f64d-1f3fd-2642","uc_output":"1f64d-1f3fd-200d-2642-fe0f","uc_match":"1f64d-1f3fd-2642-fe0f","uc_greedy":"1f64d-1f3fd-2642","shortnames":[":man_frowning_medium_skin_tone:"],"category":"people"},":man_frowning_tone4:":{"uc_base":"1f64d-1f3fe-2642","uc_output":"1f64d-1f3fe-200d-2642-fe0f","uc_match":"1f64d-1f3fe-2642-fe0f","uc_greedy":"1f64d-1f3fe-2642","shortnames":[":man_frowning_medium_dark_skin_tone:"],"category":"people"},":man_frowning_tone5:":{"uc_base":"1f64d-1f3ff-2642","uc_output":"1f64d-1f3ff-200d-2642-fe0f","uc_match":"1f64d-1f3ff-2642-fe0f","uc_greedy":"1f64d-1f3ff-2642","shortnames":[":man_frowning_dark_skin_tone:"],"category":"people"},":man_gesturing_no_tone1:":{"uc_base":"1f645-1f3fb-2642","uc_output":"1f645-1f3fb-200d-2642-fe0f","uc_match":"1f645-1f3fb-2642-fe0f","uc_greedy":"1f645-1f3fb-2642","shortnames":[":man_gesturing_no_light_skin_tone:"],"category":"people"},":man_gesturing_no_tone2:":{"uc_base":"1f645-1f3fc-2642","uc_output":"1f645-1f3fc-200d-2642-fe0f","uc_match":"1f645-1f3fc-2642-fe0f","uc_greedy":"1f645-1f3fc-2642","shortnames":[":man_gesturing_no_medium_light_skin_tone:"],"category":"people"},":man_gesturing_no_tone3:":{"uc_base":"1f645-1f3fd-2642","uc_output":"1f645-1f3fd-200d-2642-fe0f","uc_match":"1f645-1f3fd-2642-fe0f","uc_greedy":"1f645-1f3fd-2642","shortnames":[":man_gesturing_no_medium_skin_tone:"],"category":"people"},":man_gesturing_no_tone4:":{"uc_base":"1f645-1f3fe-2642","uc_output":"1f645-1f3fe-200d-2642-fe0f","uc_match":"1f645-1f3fe-2642-fe0f","uc_greedy":"1f645-1f3fe-2642","shortnames":[":man_gesturing_no_medium_dark_skin_tone:"],"category":"people"},":man_gesturing_no_tone5:":{"uc_base":"1f645-1f3ff-2642","uc_output":"1f645-1f3ff-200d-2642-fe0f","uc_match":"1f645-1f3ff-2642-fe0f","uc_greedy":"1f645-1f3ff-2642","shortnames":[":man_gesturing_no_dark_skin_tone:"],"category":"people"},":man_gesturing_ok_tone1:":{"uc_base":"1f646-1f3fb-2642","uc_output":"1f646-1f3fb-200d-2642-fe0f","uc_match":"1f646-1f3fb-2642-fe0f","uc_greedy":"1f646-1f3fb-2642","shortnames":[":man_gesturing_ok_light_skin_tone:"],"category":"people"},":man_gesturing_ok_tone2:":{"uc_base":"1f646-1f3fc-2642","uc_output":"1f646-1f3fc-200d-2642-fe0f","uc_match":"1f646-1f3fc-2642-fe0f","uc_greedy":"1f646-1f3fc-2642","shortnames":[":man_gesturing_ok_medium_light_skin_tone:"],"category":"people"},":man_gesturing_ok_tone3:":{"uc_base":"1f646-1f3fd-2642","uc_output":"1f646-1f3fd-200d-2642-fe0f","uc_match":"1f646-1f3fd-2642-fe0f","uc_greedy":"1f646-1f3fd-2642","shortnames":[":man_gesturing_ok_medium_skin_tone:"],"category":"people"},":man_gesturing_ok_tone4:":{"uc_base":"1f646-1f3fe-2642","uc_output":"1f646-1f3fe-200d-2642-fe0f","uc_match":"1f646-1f3fe-2642-fe0f","uc_greedy":"1f646-1f3fe-2642","shortnames":[":man_gesturing_ok_medium_dark_skin_tone:"],"category":"people"},":man_gesturing_ok_tone5:":{"uc_base":"1f646-1f3ff-2642","uc_output":"1f646-1f3ff-200d-2642-fe0f","uc_match":"1f646-1f3ff-2642-fe0f","uc_greedy":"1f646-1f3ff-2642","shortnames":[":man_gesturing_ok_dark_skin_tone:"],"category":"people"},":man_getting_face_massage_tone1:":{"uc_base":"1f486-1f3fb-2642","uc_output":"1f486-1f3fb-200d-2642-fe0f","uc_match":"1f486-1f3fb-2642-fe0f","uc_greedy":"1f486-1f3fb-2642","shortnames":[":man_getting_face_massage_light_skin_tone:"],"category":"people"},":man_getting_face_massage_tone2:":{"uc_base":"1f486-1f3fc-2642","uc_output":"1f486-1f3fc-200d-2642-fe0f","uc_match":"1f486-1f3fc-2642-fe0f","uc_greedy":"1f486-1f3fc-2642","shortnames":[":man_getting_face_massage_medium_light_skin_tone:"],"category":"people"},":man_getting_face_massage_tone3:":{"uc_base":"1f486-1f3fd-2642","uc_output":"1f486-1f3fd-200d-2642-fe0f","uc_match":"1f486-1f3fd-2642-fe0f","uc_greedy":"1f486-1f3fd-2642","shortnames":[":man_getting_face_massage_medium_skin_tone:"],"category":"people"},":man_getting_face_massage_tone4:":{"uc_base":"1f486-1f3fe-2642","uc_output":"1f486-1f3fe-200d-2642-fe0f","uc_match":"1f486-1f3fe-2642-fe0f","uc_greedy":"1f486-1f3fe-2642","shortnames":[":man_getting_face_massage_medium_dark_skin_tone:"],"category":"people"},":man_getting_face_massage_tone5:":{"uc_base":"1f486-1f3ff-2642","uc_output":"1f486-1f3ff-200d-2642-fe0f","uc_match":"1f486-1f3ff-2642-fe0f","uc_greedy":"1f486-1f3ff-2642","shortnames":[":man_getting_face_massage_dark_skin_tone:"],"category":"people"},":man_getting_haircut_tone1:":{"uc_base":"1f487-1f3fb-2642","uc_output":"1f487-1f3fb-200d-2642-fe0f","uc_match":"1f487-1f3fb-2642-fe0f","uc_greedy":"1f487-1f3fb-2642","shortnames":[":man_getting_haircut_light_skin_tone:"],"category":"people"},":man_getting_haircut_tone2:":{"uc_base":"1f487-1f3fc-2642","uc_output":"1f487-1f3fc-200d-2642-fe0f","uc_match":"1f487-1f3fc-2642-fe0f","uc_greedy":"1f487-1f3fc-2642","shortnames":[":man_getting_haircut_medium_light_skin_tone:"],"category":"people"},":man_getting_haircut_tone3:":{"uc_base":"1f487-1f3fd-2642","uc_output":"1f487-1f3fd-200d-2642-fe0f","uc_match":"1f487-1f3fd-2642-fe0f","uc_greedy":"1f487-1f3fd-2642","shortnames":[":man_getting_haircut_medium_skin_tone:"],"category":"people"},":man_getting_haircut_tone4:":{"uc_base":"1f487-1f3fe-2642","uc_output":"1f487-1f3fe-200d-2642-fe0f","uc_match":"1f487-1f3fe-2642-fe0f","uc_greedy":"1f487-1f3fe-2642","shortnames":[":man_getting_haircut_medium_dark_skin_tone:"],"category":"people"},":man_getting_haircut_tone5:":{"uc_base":"1f487-1f3ff-2642","uc_output":"1f487-1f3ff-200d-2642-fe0f","uc_match":"1f487-1f3ff-2642-fe0f","uc_greedy":"1f487-1f3ff-2642","shortnames":[":man_getting_haircut_dark_skin_tone:"],"category":"people"},":man_golfing_tone1:":{"uc_base":"1f3cc-1f3fb-2642","uc_output":"1f3cc-1f3fb-200d-2642-fe0f","uc_match":"1f3cc-fe0f-1f3fb-2642-fe0f","uc_greedy":"1f3cc-1f3fb-2642","shortnames":[":man_golfing_light_skin_tone:"],"category":"activity"},":man_golfing_tone2:":{"uc_base":"1f3cc-1f3fc-2642","uc_output":"1f3cc-1f3fc-200d-2642-fe0f","uc_match":"1f3cc-fe0f-1f3fc-2642-fe0f","uc_greedy":"1f3cc-1f3fc-2642","shortnames":[":man_golfing_medium_light_skin_tone:"],"category":"activity"},":man_golfing_tone3:":{"uc_base":"1f3cc-1f3fd-2642","uc_output":"1f3cc-1f3fd-200d-2642-fe0f","uc_match":"1f3cc-fe0f-1f3fd-2642-fe0f","uc_greedy":"1f3cc-1f3fd-2642","shortnames":[":man_golfing_medium_skin_tone:"],"category":"activity"},":man_golfing_tone4:":{"uc_base":"1f3cc-1f3fe-2642","uc_output":"1f3cc-1f3fe-200d-2642-fe0f","uc_match":"1f3cc-fe0f-1f3fe-2642-fe0f","uc_greedy":"1f3cc-1f3fe-2642","shortnames":[":man_golfing_medium_dark_skin_tone:"],"category":"activity"},":man_golfing_tone5:":{"uc_base":"1f3cc-1f3ff-2642","uc_output":"1f3cc-1f3ff-200d-2642-fe0f","uc_match":"1f3cc-fe0f-1f3ff-2642-fe0f","uc_greedy":"1f3cc-1f3ff-2642","shortnames":[":man_golfing_dark_skin_tone:"],"category":"activity"},":man_guard_tone1:":{"uc_base":"1f482-1f3fb-2642","uc_output":"1f482-1f3fb-200d-2642-fe0f","uc_match":"1f482-1f3fb-2642-fe0f","uc_greedy":"1f482-1f3fb-2642","shortnames":[":man_guard_light_skin_tone:"],"category":"people"},":man_guard_tone2:":{"uc_base":"1f482-1f3fc-2642","uc_output":"1f482-1f3fc-200d-2642-fe0f","uc_match":"1f482-1f3fc-2642-fe0f","uc_greedy":"1f482-1f3fc-2642","shortnames":[":man_guard_medium_light_skin_tone:"],"category":"people"},":man_guard_tone3:":{"uc_base":"1f482-1f3fd-2642","uc_output":"1f482-1f3fd-200d-2642-fe0f","uc_match":"1f482-1f3fd-2642-fe0f","uc_greedy":"1f482-1f3fd-2642","shortnames":[":man_guard_medium_skin_tone:"],"category":"people"},":man_guard_tone4:":{"uc_base":"1f482-1f3fe-2642","uc_output":"1f482-1f3fe-200d-2642-fe0f","uc_match":"1f482-1f3fe-2642-fe0f","uc_greedy":"1f482-1f3fe-2642","shortnames":[":man_guard_medium_dark_skin_tone:"],"category":"people"},":man_guard_tone5:":{"uc_base":"1f482-1f3ff-2642","uc_output":"1f482-1f3ff-200d-2642-fe0f","uc_match":"1f482-1f3ff-2642-fe0f","uc_greedy":"1f482-1f3ff-2642","shortnames":[":man_guard_dark_skin_tone:"],"category":"people"},":man_health_worker_tone1:":{"uc_base":"1f468-1f3fb-2695","uc_output":"1f468-1f3fb-200d-2695-fe0f","uc_match":"1f468-1f3fb-2695-fe0f","uc_greedy":"1f468-1f3fb-2695","shortnames":[":man_health_worker_light_skin_tone:"],"category":"people"},":man_health_worker_tone2:":{"uc_base":"1f468-1f3fc-2695","uc_output":"1f468-1f3fc-200d-2695-fe0f","uc_match":"1f468-1f3fc-2695-fe0f","uc_greedy":"1f468-1f3fc-2695","shortnames":[":man_health_worker_medium_light_skin_tone:"],"category":"people"},":man_health_worker_tone3:":{"uc_base":"1f468-1f3fd-2695","uc_output":"1f468-1f3fd-200d-2695-fe0f","uc_match":"1f468-1f3fd-2695-fe0f","uc_greedy":"1f468-1f3fd-2695","shortnames":[":man_health_worker_medium_skin_tone:"],"category":"people"},":man_health_worker_tone4:":{"uc_base":"1f468-1f3fe-2695","uc_output":"1f468-1f3fe-200d-2695-fe0f","uc_match":"1f468-1f3fe-2695-fe0f","uc_greedy":"1f468-1f3fe-2695","shortnames":[":man_health_worker_medium_dark_skin_tone:"],"category":"people"},":man_health_worker_tone5:":{"uc_base":"1f468-1f3ff-2695","uc_output":"1f468-1f3ff-200d-2695-fe0f","uc_match":"1f468-1f3ff-2695-fe0f","uc_greedy":"1f468-1f3ff-2695","shortnames":[":man_health_worker_dark_skin_tone:"],"category":"people"},":man_in_lotus_position_tone1:":{"uc_base":"1f9d8-1f3fb-2642","uc_output":"1f9d8-1f3fb-200d-2642-fe0f","uc_match":"1f9d8-1f3fb-2642-fe0f","uc_greedy":"1f9d8-1f3fb-2642","shortnames":[":man_in_lotus_position_light_skin_tone:"],"category":"activity"},":man_in_lotus_position_tone2:":{"uc_base":"1f9d8-1f3fc-2642","uc_output":"1f9d8-1f3fc-200d-2642-fe0f","uc_match":"1f9d8-1f3fc-2642-fe0f","uc_greedy":"1f9d8-1f3fc-2642","shortnames":[":man_in_lotus_position_medium_light_skin_tone:"],"category":"activity"},":man_in_lotus_position_tone3:":{"uc_base":"1f9d8-1f3fd-2642","uc_output":"1f9d8-1f3fd-200d-2642-fe0f","uc_match":"1f9d8-1f3fd-2642-fe0f","uc_greedy":"1f9d8-1f3fd-2642","shortnames":[":man_in_lotus_position_medium_skin_tone:"],"category":"activity"},":man_in_lotus_position_tone4:":{"uc_base":"1f9d8-1f3fe-2642","uc_output":"1f9d8-1f3fe-200d-2642-fe0f","uc_match":"1f9d8-1f3fe-2642-fe0f","uc_greedy":"1f9d8-1f3fe-2642","shortnames":[":man_in_lotus_position_medium_dark_skin_tone:"],"category":"activity"},":man_in_lotus_position_tone5:":{"uc_base":"1f9d8-1f3ff-2642","uc_output":"1f9d8-1f3ff-200d-2642-fe0f","uc_match":"1f9d8-1f3ff-2642-fe0f","uc_greedy":"1f9d8-1f3ff-2642","shortnames":[":man_in_lotus_position_dark_skin_tone:"],"category":"activity"},":man_in_steamy_room_tone1:":{"uc_base":"1f9d6-1f3fb-2642","uc_output":"1f9d6-1f3fb-200d-2642-fe0f","uc_match":"1f9d6-1f3fb-2642-fe0f","uc_greedy":"1f9d6-1f3fb-2642","shortnames":[":man_in_steamy_room_light_skin_tone:"],"category":"activity"},":man_in_steamy_room_tone2:":{"uc_base":"1f9d6-1f3fc-2642","uc_output":"1f9d6-1f3fc-200d-2642-fe0f","uc_match":"1f9d6-1f3fc-2642-fe0f","uc_greedy":"1f9d6-1f3fc-2642","shortnames":[":man_in_steamy_room_medium_light_skin_tone:"],"category":"activity"},":man_in_steamy_room_tone3:":{"uc_base":"1f9d6-1f3fd-2642","uc_output":"1f9d6-1f3fd-200d-2642-fe0f","uc_match":"1f9d6-1f3fd-2642-fe0f","uc_greedy":"1f9d6-1f3fd-2642","shortnames":[":man_in_steamy_room_medium_skin_tone:"],"category":"activity"},":man_in_steamy_room_tone4:":{"uc_base":"1f9d6-1f3fe-2642","uc_output":"1f9d6-1f3fe-200d-2642-fe0f","uc_match":"1f9d6-1f3fe-2642-fe0f","uc_greedy":"1f9d6-1f3fe-2642","shortnames":[":man_in_steamy_room_medium_dark_skin_tone:"],"category":"activity"},":man_in_steamy_room_tone5:":{"uc_base":"1f9d6-1f3ff-2642","uc_output":"1f9d6-1f3ff-200d-2642-fe0f","uc_match":"1f9d6-1f3ff-2642-fe0f","uc_greedy":"1f9d6-1f3ff-2642","shortnames":[":man_in_steamy_room_dark_skin_tone:"],"category":"activity"},":man_judge_tone1:":{"uc_base":"1f468-1f3fb-2696","uc_output":"1f468-1f3fb-200d-2696-fe0f","uc_match":"1f468-1f3fb-2696-fe0f","uc_greedy":"1f468-1f3fb-2696","shortnames":[":man_judge_light_skin_tone:"],"category":"people"},":man_judge_tone2:":{"uc_base":"1f468-1f3fc-2696","uc_output":"1f468-1f3fc-200d-2696-fe0f","uc_match":"1f468-1f3fc-2696-fe0f","uc_greedy":"1f468-1f3fc-2696","shortnames":[":man_judge_medium_light_skin_tone:"],"category":"people"},":man_judge_tone3:":{"uc_base":"1f468-1f3fd-2696","uc_output":"1f468-1f3fd-200d-2696-fe0f","uc_match":"1f468-1f3fd-2696-fe0f","uc_greedy":"1f468-1f3fd-2696","shortnames":[":man_judge_medium_skin_tone:"],"category":"people"},":man_judge_tone4:":{"uc_base":"1f468-1f3fe-2696","uc_output":"1f468-1f3fe-200d-2696-fe0f","uc_match":"1f468-1f3fe-2696-fe0f","uc_greedy":"1f468-1f3fe-2696","shortnames":[":man_judge_medium_dark_skin_tone:"],"category":"people"},":man_judge_tone5:":{"uc_base":"1f468-1f3ff-2696","uc_output":"1f468-1f3ff-200d-2696-fe0f","uc_match":"1f468-1f3ff-2696-fe0f","uc_greedy":"1f468-1f3ff-2696","shortnames":[":man_judge_dark_skin_tone:"],"category":"people"},":man_juggling_tone1:":{"uc_base":"1f939-1f3fb-2642","uc_output":"1f939-1f3fb-200d-2642-fe0f","uc_match":"1f939-1f3fb-2642-fe0f","uc_greedy":"1f939-1f3fb-2642","shortnames":[":man_juggling_light_skin_tone:"],"category":"activity"},":man_juggling_tone2:":{"uc_base":"1f939-1f3fc-2642","uc_output":"1f939-1f3fc-200d-2642-fe0f","uc_match":"1f939-1f3fc-2642-fe0f","uc_greedy":"1f939-1f3fc-2642","shortnames":[":man_juggling_medium_light_skin_tone:"],"category":"activity"},":man_juggling_tone3:":{"uc_base":"1f939-1f3fd-2642","uc_output":"1f939-1f3fd-200d-2642-fe0f","uc_match":"1f939-1f3fd-2642-fe0f","uc_greedy":"1f939-1f3fd-2642","shortnames":[":man_juggling_medium_skin_tone:"],"category":"activity"},":man_juggling_tone4:":{"uc_base":"1f939-1f3fe-2642","uc_output":"1f939-1f3fe-200d-2642-fe0f","uc_match":"1f939-1f3fe-2642-fe0f","uc_greedy":"1f939-1f3fe-2642","shortnames":[":man_juggling_medium_dark_skin_tone:"],"category":"activity"},":man_juggling_tone5:":{"uc_base":"1f939-1f3ff-2642","uc_output":"1f939-1f3ff-200d-2642-fe0f","uc_match":"1f939-1f3ff-2642-fe0f","uc_greedy":"1f939-1f3ff-2642","shortnames":[":man_juggling_dark_skin_tone:"],"category":"activity"},":man_lifting_weights_tone1:":{"uc_base":"1f3cb-1f3fb-2642","uc_output":"1f3cb-1f3fb-200d-2642-fe0f","uc_match":"1f3cb-fe0f-1f3fb-2642-fe0f","uc_greedy":"1f3cb-1f3fb-2642","shortnames":[":man_lifting_weights_light_skin_tone:"],"category":"activity"},":man_lifting_weights_tone2:":{"uc_base":"1f3cb-1f3fc-2642","uc_output":"1f3cb-1f3fc-200d-2642-fe0f","uc_match":"1f3cb-fe0f-1f3fc-2642-fe0f","uc_greedy":"1f3cb-1f3fc-2642","shortnames":[":man_lifting_weights_medium_light_skin_tone:"],"category":"activity"},":man_lifting_weights_tone3:":{"uc_base":"1f3cb-1f3fd-2642","uc_output":"1f3cb-1f3fd-200d-2642-fe0f","uc_match":"1f3cb-fe0f-1f3fd-2642-fe0f","uc_greedy":"1f3cb-1f3fd-2642","shortnames":[":man_lifting_weights_medium_skin_tone:"],"category":"activity"},":man_lifting_weights_tone4:":{"uc_base":"1f3cb-1f3fe-2642","uc_output":"1f3cb-1f3fe-200d-2642-fe0f","uc_match":"1f3cb-fe0f-1f3fe-2642-fe0f","uc_greedy":"1f3cb-1f3fe-2642","shortnames":[":man_lifting_weights_medium_dark_skin_tone:"],"category":"activity"},":man_lifting_weights_tone5:":{"uc_base":"1f3cb-1f3ff-2642","uc_output":"1f3cb-1f3ff-200d-2642-fe0f","uc_match":"1f3cb-fe0f-1f3ff-2642-fe0f","uc_greedy":"1f3cb-1f3ff-2642","shortnames":[":man_lifting_weights_dark_skin_tone:"],"category":"activity"},":man_mage_tone1:":{"uc_base":"1f9d9-1f3fb-2642","uc_output":"1f9d9-1f3fb-200d-2642-fe0f","uc_match":"1f9d9-1f3fb-2642-fe0f","uc_greedy":"1f9d9-1f3fb-2642","shortnames":[":man_mage_light_skin_tone:"],"category":"people"},":man_mage_tone2:":{"uc_base":"1f9d9-1f3fc-2642","uc_output":"1f9d9-1f3fc-200d-2642-fe0f","uc_match":"1f9d9-1f3fc-2642-fe0f","uc_greedy":"1f9d9-1f3fc-2642","shortnames":[":man_mage_medium_light_skin_tone:"],"category":"people"},":man_mage_tone3:":{"uc_base":"1f9d9-1f3fd-2642","uc_output":"1f9d9-1f3fd-200d-2642-fe0f","uc_match":"1f9d9-1f3fd-2642-fe0f","uc_greedy":"1f9d9-1f3fd-2642","shortnames":[":man_mage_medium_skin_tone:"],"category":"people"},":man_mage_tone4:":{"uc_base":"1f9d9-1f3fe-2642","uc_output":"1f9d9-1f3fe-200d-2642-fe0f","uc_match":"1f9d9-1f3fe-2642-fe0f","uc_greedy":"1f9d9-1f3fe-2642","shortnames":[":man_mage_medium_dark_skin_tone:"],"category":"people"},":man_mage_tone5:":{"uc_base":"1f9d9-1f3ff-2642","uc_output":"1f9d9-1f3ff-200d-2642-fe0f","uc_match":"1f9d9-1f3ff-2642-fe0f","uc_greedy":"1f9d9-1f3ff-2642","shortnames":[":man_mage_dark_skin_tone:"],"category":"people"},":man_mountain_biking_tone1:":{"uc_base":"1f6b5-1f3fb-2642","uc_output":"1f6b5-1f3fb-200d-2642-fe0f","uc_match":"1f6b5-1f3fb-2642-fe0f","uc_greedy":"1f6b5-1f3fb-2642","shortnames":[":man_mountain_biking_light_skin_tone:"],"category":"activity"},":man_mountain_biking_tone2:":{"uc_base":"1f6b5-1f3fc-2642","uc_output":"1f6b5-1f3fc-200d-2642-fe0f","uc_match":"1f6b5-1f3fc-2642-fe0f","uc_greedy":"1f6b5-1f3fc-2642","shortnames":[":man_mountain_biking_medium_light_skin_tone:"],"category":"activity"},":man_mountain_biking_tone3:":{"uc_base":"1f6b5-1f3fd-2642","uc_output":"1f6b5-1f3fd-200d-2642-fe0f","uc_match":"1f6b5-1f3fd-2642-fe0f","uc_greedy":"1f6b5-1f3fd-2642","shortnames":[":man_mountain_biking_medium_skin_tone:"],"category":"activity"},":man_mountain_biking_tone4:":{"uc_base":"1f6b5-1f3fe-2642","uc_output":"1f6b5-1f3fe-200d-2642-fe0f","uc_match":"1f6b5-1f3fe-2642-fe0f","uc_greedy":"1f6b5-1f3fe-2642","shortnames":[":man_mountain_biking_medium_dark_skin_tone:"],"category":"activity"},":man_mountain_biking_tone5:":{"uc_base":"1f6b5-1f3ff-2642","uc_output":"1f6b5-1f3ff-200d-2642-fe0f","uc_match":"1f6b5-1f3ff-2642-fe0f","uc_greedy":"1f6b5-1f3ff-2642","shortnames":[":man_mountain_biking_dark_skin_tone:"],"category":"activity"},":man_pilot_tone1:":{"uc_base":"1f468-1f3fb-2708","uc_output":"1f468-1f3fb-200d-2708-fe0f","uc_match":"1f468-1f3fb-2708-fe0f","uc_greedy":"1f468-1f3fb-2708","shortnames":[":man_pilot_light_skin_tone:"],"category":"people"},":man_pilot_tone2:":{"uc_base":"1f468-1f3fc-2708","uc_output":"1f468-1f3fc-200d-2708-fe0f","uc_match":"1f468-1f3fc-2708-fe0f","uc_greedy":"1f468-1f3fc-2708","shortnames":[":man_pilot_medium_light_skin_tone:"],"category":"people"},":man_pilot_tone3:":{"uc_base":"1f468-1f3fd-2708","uc_output":"1f468-1f3fd-200d-2708-fe0f","uc_match":"1f468-1f3fd-2708-fe0f","uc_greedy":"1f468-1f3fd-2708","shortnames":[":man_pilot_medium_skin_tone:"],"category":"people"},":man_pilot_tone4:":{"uc_base":"1f468-1f3fe-2708","uc_output":"1f468-1f3fe-200d-2708-fe0f","uc_match":"1f468-1f3fe-2708-fe0f","uc_greedy":"1f468-1f3fe-2708","shortnames":[":man_pilot_medium_dark_skin_tone:"],"category":"people"},":man_pilot_tone5:":{"uc_base":"1f468-1f3ff-2708","uc_output":"1f468-1f3ff-200d-2708-fe0f","uc_match":"1f468-1f3ff-2708-fe0f","uc_greedy":"1f468-1f3ff-2708","shortnames":[":man_pilot_dark_skin_tone:"],"category":"people"},":man_playing_handball_tone1:":{"uc_base":"1f93e-1f3fb-2642","uc_output":"1f93e-1f3fb-200d-2642-fe0f","uc_match":"1f93e-1f3fb-2642-fe0f","uc_greedy":"1f93e-1f3fb-2642","shortnames":[":man_playing_handball_light_skin_tone:"],"category":"activity"},":man_playing_handball_tone2:":{"uc_base":"1f93e-1f3fc-2642","uc_output":"1f93e-1f3fc-200d-2642-fe0f","uc_match":"1f93e-1f3fc-2642-fe0f","uc_greedy":"1f93e-1f3fc-2642","shortnames":[":man_playing_handball_medium_light_skin_tone:"],"category":"activity"},":man_playing_handball_tone3:":{"uc_base":"1f93e-1f3fd-2642","uc_output":"1f93e-1f3fd-200d-2642-fe0f","uc_match":"1f93e-1f3fd-2642-fe0f","uc_greedy":"1f93e-1f3fd-2642","shortnames":[":man_playing_handball_medium_skin_tone:"],"category":"activity"},":man_playing_handball_tone4:":{"uc_base":"1f93e-1f3fe-2642","uc_output":"1f93e-1f3fe-200d-2642-fe0f","uc_match":"1f93e-1f3fe-2642-fe0f","uc_greedy":"1f93e-1f3fe-2642","shortnames":[":man_playing_handball_medium_dark_skin_tone:"],"category":"activity"},":man_playing_handball_tone5:":{"uc_base":"1f93e-1f3ff-2642","uc_output":"1f93e-1f3ff-200d-2642-fe0f","uc_match":"1f93e-1f3ff-2642-fe0f","uc_greedy":"1f93e-1f3ff-2642","shortnames":[":man_playing_handball_dark_skin_tone:"],"category":"activity"},":man_playing_water_polo_tone1:":{"uc_base":"1f93d-1f3fb-2642","uc_output":"1f93d-1f3fb-200d-2642-fe0f","uc_match":"1f93d-1f3fb-2642-fe0f","uc_greedy":"1f93d-1f3fb-2642","shortnames":[":man_playing_water_polo_light_skin_tone:"],"category":"activity"},":man_playing_water_polo_tone2:":{"uc_base":"1f93d-1f3fc-2642","uc_output":"1f93d-1f3fc-200d-2642-fe0f","uc_match":"1f93d-1f3fc-2642-fe0f","uc_greedy":"1f93d-1f3fc-2642","shortnames":[":man_playing_water_polo_medium_light_skin_tone:"],"category":"activity"},":man_playing_water_polo_tone3:":{"uc_base":"1f93d-1f3fd-2642","uc_output":"1f93d-1f3fd-200d-2642-fe0f","uc_match":"1f93d-1f3fd-2642-fe0f","uc_greedy":"1f93d-1f3fd-2642","shortnames":[":man_playing_water_polo_medium_skin_tone:"],"category":"activity"},":man_playing_water_polo_tone4:":{"uc_base":"1f93d-1f3fe-2642","uc_output":"1f93d-1f3fe-200d-2642-fe0f","uc_match":"1f93d-1f3fe-2642-fe0f","uc_greedy":"1f93d-1f3fe-2642","shortnames":[":man_playing_water_polo_medium_dark_skin_tone:"],"category":"activity"},":man_playing_water_polo_tone5:":{"uc_base":"1f93d-1f3ff-2642","uc_output":"1f93d-1f3ff-200d-2642-fe0f","uc_match":"1f93d-1f3ff-2642-fe0f","uc_greedy":"1f93d-1f3ff-2642","shortnames":[":man_playing_water_polo_dark_skin_tone:"],"category":"activity"},":man_police_officer_tone1:":{"uc_base":"1f46e-1f3fb-2642","uc_output":"1f46e-1f3fb-200d-2642-fe0f","uc_match":"1f46e-1f3fb-2642-fe0f","uc_greedy":"1f46e-1f3fb-2642","shortnames":[":man_police_officer_light_skin_tone:"],"category":"people"},":man_police_officer_tone2:":{"uc_base":"1f46e-1f3fc-2642","uc_output":"1f46e-1f3fc-200d-2642-fe0f","uc_match":"1f46e-1f3fc-2642-fe0f","uc_greedy":"1f46e-1f3fc-2642","shortnames":[":man_police_officer_medium_light_skin_tone:"],"category":"people"},":man_police_officer_tone3:":{"uc_base":"1f46e-1f3fd-2642","uc_output":"1f46e-1f3fd-200d-2642-fe0f","uc_match":"1f46e-1f3fd-2642-fe0f","uc_greedy":"1f46e-1f3fd-2642","shortnames":[":man_police_officer_medium_skin_tone:"],"category":"people"},":man_police_officer_tone4:":{"uc_base":"1f46e-1f3fe-2642","uc_output":"1f46e-1f3fe-200d-2642-fe0f","uc_match":"1f46e-1f3fe-2642-fe0f","uc_greedy":"1f46e-1f3fe-2642","shortnames":[":man_police_officer_medium_dark_skin_tone:"],"category":"people"},":man_police_officer_tone5:":{"uc_base":"1f46e-1f3ff-2642","uc_output":"1f46e-1f3ff-200d-2642-fe0f","uc_match":"1f46e-1f3ff-2642-fe0f","uc_greedy":"1f46e-1f3ff-2642","shortnames":[":man_police_officer_dark_skin_tone:"],"category":"people"},":man_pouting_tone1:":{"uc_base":"1f64e-1f3fb-2642","uc_output":"1f64e-1f3fb-200d-2642-fe0f","uc_match":"1f64e-1f3fb-2642-fe0f","uc_greedy":"1f64e-1f3fb-2642","shortnames":[":man_pouting_light_skin_tone:"],"category":"people"},":man_pouting_tone2:":{"uc_base":"1f64e-1f3fc-2642","uc_output":"1f64e-1f3fc-200d-2642-fe0f","uc_match":"1f64e-1f3fc-2642-fe0f","uc_greedy":"1f64e-1f3fc-2642","shortnames":[":man_pouting_medium_light_skin_tone:"],"category":"people"},":man_pouting_tone3:":{"uc_base":"1f64e-1f3fd-2642","uc_output":"1f64e-1f3fd-200d-2642-fe0f","uc_match":"1f64e-1f3fd-2642-fe0f","uc_greedy":"1f64e-1f3fd-2642","shortnames":[":man_pouting_medium_skin_tone:"],"category":"people"},":man_pouting_tone4:":{"uc_base":"1f64e-1f3fe-2642","uc_output":"1f64e-1f3fe-200d-2642-fe0f","uc_match":"1f64e-1f3fe-2642-fe0f","uc_greedy":"1f64e-1f3fe-2642","shortnames":[":man_pouting_medium_dark_skin_tone:"],"category":"people"},":man_pouting_tone5:":{"uc_base":"1f64e-1f3ff-2642","uc_output":"1f64e-1f3ff-200d-2642-fe0f","uc_match":"1f64e-1f3ff-2642-fe0f","uc_greedy":"1f64e-1f3ff-2642","shortnames":[":man_pouting_dark_skin_tone:"],"category":"people"},":man_raising_hand_tone1:":{"uc_base":"1f64b-1f3fb-2642","uc_output":"1f64b-1f3fb-200d-2642-fe0f","uc_match":"1f64b-1f3fb-2642-fe0f","uc_greedy":"1f64b-1f3fb-2642","shortnames":[":man_raising_hand_light_skin_tone:"],"category":"people"},":man_raising_hand_tone2:":{"uc_base":"1f64b-1f3fc-2642","uc_output":"1f64b-1f3fc-200d-2642-fe0f","uc_match":"1f64b-1f3fc-2642-fe0f","uc_greedy":"1f64b-1f3fc-2642","shortnames":[":man_raising_hand_medium_light_skin_tone:"],"category":"people"},":man_raising_hand_tone3:":{"uc_base":"1f64b-1f3fd-2642","uc_output":"1f64b-1f3fd-200d-2642-fe0f","uc_match":"1f64b-1f3fd-2642-fe0f","uc_greedy":"1f64b-1f3fd-2642","shortnames":[":man_raising_hand_medium_skin_tone:"],"category":"people"},":man_raising_hand_tone4:":{"uc_base":"1f64b-1f3fe-2642","uc_output":"1f64b-1f3fe-200d-2642-fe0f","uc_match":"1f64b-1f3fe-2642-fe0f","uc_greedy":"1f64b-1f3fe-2642","shortnames":[":man_raising_hand_medium_dark_skin_tone:"],"category":"people"},":man_raising_hand_tone5:":{"uc_base":"1f64b-1f3ff-2642","uc_output":"1f64b-1f3ff-200d-2642-fe0f","uc_match":"1f64b-1f3ff-2642-fe0f","uc_greedy":"1f64b-1f3ff-2642","shortnames":[":man_raising_hand_dark_skin_tone:"],"category":"people"},":man_rowing_boat_tone1:":{"uc_base":"1f6a3-1f3fb-2642","uc_output":"1f6a3-1f3fb-200d-2642-fe0f","uc_match":"1f6a3-1f3fb-2642-fe0f","uc_greedy":"1f6a3-1f3fb-2642","shortnames":[":man_rowing_boat_light_skin_tone:"],"category":"activity"},":man_rowing_boat_tone2:":{"uc_base":"1f6a3-1f3fc-2642","uc_output":"1f6a3-1f3fc-200d-2642-fe0f","uc_match":"1f6a3-1f3fc-2642-fe0f","uc_greedy":"1f6a3-1f3fc-2642","shortnames":[":man_rowing_boat_medium_light_skin_tone:"],"category":"activity"},":man_rowing_boat_tone3:":{"uc_base":"1f6a3-1f3fd-2642","uc_output":"1f6a3-1f3fd-200d-2642-fe0f","uc_match":"1f6a3-1f3fd-2642-fe0f","uc_greedy":"1f6a3-1f3fd-2642","shortnames":[":man_rowing_boat_medium_skin_tone:"],"category":"activity"},":man_rowing_boat_tone4:":{"uc_base":"1f6a3-1f3fe-2642","uc_output":"1f6a3-1f3fe-200d-2642-fe0f","uc_match":"1f6a3-1f3fe-2642-fe0f","uc_greedy":"1f6a3-1f3fe-2642","shortnames":[":man_rowing_boat_medium_dark_skin_tone:"],"category":"activity"},":man_rowing_boat_tone5:":{"uc_base":"1f6a3-1f3ff-2642","uc_output":"1f6a3-1f3ff-200d-2642-fe0f","uc_match":"1f6a3-1f3ff-2642-fe0f","uc_greedy":"1f6a3-1f3ff-2642","shortnames":[":man_rowing_boat_dark_skin_tone:"],"category":"activity"},":man_running_tone1:":{"uc_base":"1f3c3-1f3fb-2642","uc_output":"1f3c3-1f3fb-200d-2642-fe0f","uc_match":"1f3c3-1f3fb-2642-fe0f","uc_greedy":"1f3c3-1f3fb-2642","shortnames":[":man_running_light_skin_tone:"],"category":"people"},":man_running_tone2:":{"uc_base":"1f3c3-1f3fc-2642","uc_output":"1f3c3-1f3fc-200d-2642-fe0f","uc_match":"1f3c3-1f3fc-2642-fe0f","uc_greedy":"1f3c3-1f3fc-2642","shortnames":[":man_running_medium_light_skin_tone:"],"category":"people"},":man_running_tone3:":{"uc_base":"1f3c3-1f3fd-2642","uc_output":"1f3c3-1f3fd-200d-2642-fe0f","uc_match":"1f3c3-1f3fd-2642-fe0f","uc_greedy":"1f3c3-1f3fd-2642","shortnames":[":man_running_medium_skin_tone:"],"category":"people"},":man_running_tone4:":{"uc_base":"1f3c3-1f3fe-2642","uc_output":"1f3c3-1f3fe-200d-2642-fe0f","uc_match":"1f3c3-1f3fe-2642-fe0f","uc_greedy":"1f3c3-1f3fe-2642","shortnames":[":man_running_medium_dark_skin_tone:"],"category":"people"},":man_running_tone5:":{"uc_base":"1f3c3-1f3ff-2642","uc_output":"1f3c3-1f3ff-200d-2642-fe0f","uc_match":"1f3c3-1f3ff-2642-fe0f","uc_greedy":"1f3c3-1f3ff-2642","shortnames":[":man_running_dark_skin_tone:"],"category":"people"},":man_shrugging_tone1:":{"uc_base":"1f937-1f3fb-2642","uc_output":"1f937-1f3fb-200d-2642-fe0f","uc_match":"1f937-1f3fb-2642-fe0f","uc_greedy":"1f937-1f3fb-2642","shortnames":[":man_shrugging_light_skin_tone:"],"category":"people"},":man_shrugging_tone2:":{"uc_base":"1f937-1f3fc-2642","uc_output":"1f937-1f3fc-200d-2642-fe0f","uc_match":"1f937-1f3fc-2642-fe0f","uc_greedy":"1f937-1f3fc-2642","shortnames":[":man_shrugging_medium_light_skin_tone:"],"category":"people"},":man_shrugging_tone3:":{"uc_base":"1f937-1f3fd-2642","uc_output":"1f937-1f3fd-200d-2642-fe0f","uc_match":"1f937-1f3fd-2642-fe0f","uc_greedy":"1f937-1f3fd-2642","shortnames":[":man_shrugging_medium_skin_tone:"],"category":"people"},":man_shrugging_tone4:":{"uc_base":"1f937-1f3fe-2642","uc_output":"1f937-1f3fe-200d-2642-fe0f","uc_match":"1f937-1f3fe-2642-fe0f","uc_greedy":"1f937-1f3fe-2642","shortnames":[":man_shrugging_medium_dark_skin_tone:"],"category":"people"},":man_shrugging_tone5:":{"uc_base":"1f937-1f3ff-2642","uc_output":"1f937-1f3ff-200d-2642-fe0f","uc_match":"1f937-1f3ff-2642-fe0f","uc_greedy":"1f937-1f3ff-2642","shortnames":[":man_shrugging_dark_skin_tone:"],"category":"people"},":man_surfing_tone1:":{"uc_base":"1f3c4-1f3fb-2642","uc_output":"1f3c4-1f3fb-200d-2642-fe0f","uc_match":"1f3c4-1f3fb-2642-fe0f","uc_greedy":"1f3c4-1f3fb-2642","shortnames":[":man_surfing_light_skin_tone:"],"category":"activity"},":man_surfing_tone2:":{"uc_base":"1f3c4-1f3fc-2642","uc_output":"1f3c4-1f3fc-200d-2642-fe0f","uc_match":"1f3c4-1f3fc-2642-fe0f","uc_greedy":"1f3c4-1f3fc-2642","shortnames":[":man_surfing_medium_light_skin_tone:"],"category":"activity"},":man_surfing_tone3:":{"uc_base":"1f3c4-1f3fd-2642","uc_output":"1f3c4-1f3fd-200d-2642-fe0f","uc_match":"1f3c4-1f3fd-2642-fe0f","uc_greedy":"1f3c4-1f3fd-2642","shortnames":[":man_surfing_medium_skin_tone:"],"category":"activity"},":man_surfing_tone4:":{"uc_base":"1f3c4-1f3fe-2642","uc_output":"1f3c4-1f3fe-200d-2642-fe0f","uc_match":"1f3c4-1f3fe-2642-fe0f","uc_greedy":"1f3c4-1f3fe-2642","shortnames":[":man_surfing_medium_dark_skin_tone:"],"category":"activity"},":man_surfing_tone5:":{"uc_base":"1f3c4-1f3ff-2642","uc_output":"1f3c4-1f3ff-200d-2642-fe0f","uc_match":"1f3c4-1f3ff-2642-fe0f","uc_greedy":"1f3c4-1f3ff-2642","shortnames":[":man_surfing_dark_skin_tone:"],"category":"activity"},":man_swimming_tone1:":{"uc_base":"1f3ca-1f3fb-2642","uc_output":"1f3ca-1f3fb-200d-2642-fe0f","uc_match":"1f3ca-1f3fb-2642-fe0f","uc_greedy":"1f3ca-1f3fb-2642","shortnames":[":man_swimming_light_skin_tone:"],"category":"activity"},":man_swimming_tone2:":{"uc_base":"1f3ca-1f3fc-2642","uc_output":"1f3ca-1f3fc-200d-2642-fe0f","uc_match":"1f3ca-1f3fc-2642-fe0f","uc_greedy":"1f3ca-1f3fc-2642","shortnames":[":man_swimming_medium_light_skin_tone:"],"category":"activity"},":man_swimming_tone3:":{"uc_base":"1f3ca-1f3fd-2642","uc_output":"1f3ca-1f3fd-200d-2642-fe0f","uc_match":"1f3ca-1f3fd-2642-fe0f","uc_greedy":"1f3ca-1f3fd-2642","shortnames":[":man_swimming_medium_skin_tone:"],"category":"activity"},":man_swimming_tone4:":{"uc_base":"1f3ca-1f3fe-2642","uc_output":"1f3ca-1f3fe-200d-2642-fe0f","uc_match":"1f3ca-1f3fe-2642-fe0f","uc_greedy":"1f3ca-1f3fe-2642","shortnames":[":man_swimming_medium_dark_skin_tone:"],"category":"activity"},":man_swimming_tone5:":{"uc_base":"1f3ca-1f3ff-2642","uc_output":"1f3ca-1f3ff-200d-2642-fe0f","uc_match":"1f3ca-1f3ff-2642-fe0f","uc_greedy":"1f3ca-1f3ff-2642","shortnames":[":man_swimming_dark_skin_tone:"],"category":"activity"},":man_tipping_hand_tone1:":{"uc_base":"1f481-1f3fb-2642","uc_output":"1f481-1f3fb-200d-2642-fe0f","uc_match":"1f481-1f3fb-2642-fe0f","uc_greedy":"1f481-1f3fb-2642","shortnames":[":man_tipping_hand_light_skin_tone:"],"category":"people"},":man_tipping_hand_tone2:":{"uc_base":"1f481-1f3fc-2642","uc_output":"1f481-1f3fc-200d-2642-fe0f","uc_match":"1f481-1f3fc-2642-fe0f","uc_greedy":"1f481-1f3fc-2642","shortnames":[":man_tipping_hand_medium_light_skin_tone:"],"category":"people"},":man_tipping_hand_tone3:":{"uc_base":"1f481-1f3fd-2642","uc_output":"1f481-1f3fd-200d-2642-fe0f","uc_match":"1f481-1f3fd-2642-fe0f","uc_greedy":"1f481-1f3fd-2642","shortnames":[":man_tipping_hand_medium_skin_tone:"],"category":"people"},":man_tipping_hand_tone4:":{"uc_base":"1f481-1f3fe-2642","uc_output":"1f481-1f3fe-200d-2642-fe0f","uc_match":"1f481-1f3fe-2642-fe0f","uc_greedy":"1f481-1f3fe-2642","shortnames":[":man_tipping_hand_medium_dark_skin_tone:"],"category":"people"},":man_tipping_hand_tone5:":{"uc_base":"1f481-1f3ff-2642","uc_output":"1f481-1f3ff-200d-2642-fe0f","uc_match":"1f481-1f3ff-2642-fe0f","uc_greedy":"1f481-1f3ff-2642","shortnames":[":man_tipping_hand_dark_skin_tone:"],"category":"people"},":man_vampire_tone1:":{"uc_base":"1f9db-1f3fb-2642","uc_output":"1f9db-1f3fb-200d-2642-fe0f","uc_match":"1f9db-1f3fb-2642-fe0f","uc_greedy":"1f9db-1f3fb-2642","shortnames":[":man_vampire_light_skin_tone:"],"category":"people"},":man_vampire_tone2:":{"uc_base":"1f9db-1f3fc-2642","uc_output":"1f9db-1f3fc-200d-2642-fe0f","uc_match":"1f9db-1f3fc-2642-fe0f","uc_greedy":"1f9db-1f3fc-2642","shortnames":[":man_vampire_medium_light_skin_tone:"],"category":"people"},":man_vampire_tone3:":{"uc_base":"1f9db-1f3fd-2642","uc_output":"1f9db-1f3fd-200d-2642-fe0f","uc_match":"1f9db-1f3fd-2642-fe0f","uc_greedy":"1f9db-1f3fd-2642","shortnames":[":man_vampire_medium_skin_tone:"],"category":"people"},":man_vampire_tone4:":{"uc_base":"1f9db-1f3fe-2642","uc_output":"1f9db-1f3fe-200d-2642-fe0f","uc_match":"1f9db-1f3fe-2642-fe0f","uc_greedy":"1f9db-1f3fe-2642","shortnames":[":man_vampire_medium_dark_skin_tone:"],"category":"people"},":man_vampire_tone5:":{"uc_base":"1f9db-1f3ff-2642","uc_output":"1f9db-1f3ff-200d-2642-fe0f","uc_match":"1f9db-1f3ff-2642-fe0f","uc_greedy":"1f9db-1f3ff-2642","shortnames":[":man_vampire_dark_skin_tone:"],"category":"people"},":man_walking_tone1:":{"uc_base":"1f6b6-1f3fb-2642","uc_output":"1f6b6-1f3fb-200d-2642-fe0f","uc_match":"1f6b6-1f3fb-2642-fe0f","uc_greedy":"1f6b6-1f3fb-2642","shortnames":[":man_walking_light_skin_tone:"],"category":"people"},":man_walking_tone2:":{"uc_base":"1f6b6-1f3fc-2642","uc_output":"1f6b6-1f3fc-200d-2642-fe0f","uc_match":"1f6b6-1f3fc-2642-fe0f","uc_greedy":"1f6b6-1f3fc-2642","shortnames":[":man_walking_medium_light_skin_tone:"],"category":"people"},":man_walking_tone3:":{"uc_base":"1f6b6-1f3fd-2642","uc_output":"1f6b6-1f3fd-200d-2642-fe0f","uc_match":"1f6b6-1f3fd-2642-fe0f","uc_greedy":"1f6b6-1f3fd-2642","shortnames":[":man_walking_medium_skin_tone:"],"category":"people"},":man_walking_tone4:":{"uc_base":"1f6b6-1f3fe-2642","uc_output":"1f6b6-1f3fe-200d-2642-fe0f","uc_match":"1f6b6-1f3fe-2642-fe0f","uc_greedy":"1f6b6-1f3fe-2642","shortnames":[":man_walking_medium_dark_skin_tone:"],"category":"people"},":man_walking_tone5:":{"uc_base":"1f6b6-1f3ff-2642","uc_output":"1f6b6-1f3ff-200d-2642-fe0f","uc_match":"1f6b6-1f3ff-2642-fe0f","uc_greedy":"1f6b6-1f3ff-2642","shortnames":[":man_walking_dark_skin_tone:"],"category":"people"},":man_wearing_turban_tone1:":{"uc_base":"1f473-1f3fb-2642","uc_output":"1f473-1f3fb-200d-2642-fe0f","uc_match":"1f473-1f3fb-2642-fe0f","uc_greedy":"1f473-1f3fb-2642","shortnames":[":man_wearing_turban_light_skin_tone:"],"category":"people"},":man_wearing_turban_tone2:":{"uc_base":"1f473-1f3fc-2642","uc_output":"1f473-1f3fc-200d-2642-fe0f","uc_match":"1f473-1f3fc-2642-fe0f","uc_greedy":"1f473-1f3fc-2642","shortnames":[":man_wearing_turban_medium_light_skin_tone:"],"category":"people"},":man_wearing_turban_tone3:":{"uc_base":"1f473-1f3fd-2642","uc_output":"1f473-1f3fd-200d-2642-fe0f","uc_match":"1f473-1f3fd-2642-fe0f","uc_greedy":"1f473-1f3fd-2642","shortnames":[":man_wearing_turban_medium_skin_tone:"],"category":"people"},":man_wearing_turban_tone4:":{"uc_base":"1f473-1f3fe-2642","uc_output":"1f473-1f3fe-200d-2642-fe0f","uc_match":"1f473-1f3fe-2642-fe0f","uc_greedy":"1f473-1f3fe-2642","shortnames":[":man_wearing_turban_medium_dark_skin_tone:"],"category":"people"},":man_wearing_turban_tone5:":{"uc_base":"1f473-1f3ff-2642","uc_output":"1f473-1f3ff-200d-2642-fe0f","uc_match":"1f473-1f3ff-2642-fe0f","uc_greedy":"1f473-1f3ff-2642","shortnames":[":man_wearing_turban_dark_skin_tone:"],"category":"people"},":mermaid_tone1:":{"uc_base":"1f9dc-1f3fb-2640","uc_output":"1f9dc-1f3fb-200d-2640-fe0f","uc_match":"1f9dc-1f3fb-2640-fe0f","uc_greedy":"1f9dc-1f3fb-2640","shortnames":[":mermaid_light_skin_tone:"],"category":"people"},":mermaid_tone2:":{"uc_base":"1f9dc-1f3fc-2640","uc_output":"1f9dc-1f3fc-200d-2640-fe0f","uc_match":"1f9dc-1f3fc-2640-fe0f","uc_greedy":"1f9dc-1f3fc-2640","shortnames":[":mermaid_medium_light_skin_tone:"],"category":"people"},":mermaid_tone3:":{"uc_base":"1f9dc-1f3fd-2640","uc_output":"1f9dc-1f3fd-200d-2640-fe0f","uc_match":"1f9dc-1f3fd-2640-fe0f","uc_greedy":"1f9dc-1f3fd-2640","shortnames":[":mermaid_medium_skin_tone:"],"category":"people"},":mermaid_tone4:":{"uc_base":"1f9dc-1f3fe-2640","uc_output":"1f9dc-1f3fe-200d-2640-fe0f","uc_match":"1f9dc-1f3fe-2640-fe0f","uc_greedy":"1f9dc-1f3fe-2640","shortnames":[":mermaid_medium_dark_skin_tone:"],"category":"people"},":mermaid_tone5:":{"uc_base":"1f9dc-1f3ff-2640","uc_output":"1f9dc-1f3ff-200d-2640-fe0f","uc_match":"1f9dc-1f3ff-2640-fe0f","uc_greedy":"1f9dc-1f3ff-2640","shortnames":[":mermaid_dark_skin_tone:"],"category":"people"},":merman_tone1:":{"uc_base":"1f9dc-1f3fb-2642","uc_output":"1f9dc-1f3fb-200d-2642-fe0f","uc_match":"1f9dc-1f3fb-2642-fe0f","uc_greedy":"1f9dc-1f3fb-2642","shortnames":[":merman_light_skin_tone:"],"category":"people"},":merman_tone2:":{"uc_base":"1f9dc-1f3fc-2642","uc_output":"1f9dc-1f3fc-200d-2642-fe0f","uc_match":"1f9dc-1f3fc-2642-fe0f","uc_greedy":"1f9dc-1f3fc-2642","shortnames":[":merman_medium_light_skin_tone:"],"category":"people"},":merman_tone3:":{"uc_base":"1f9dc-1f3fd-2642","uc_output":"1f9dc-1f3fd-200d-2642-fe0f","uc_match":"1f9dc-1f3fd-2642-fe0f","uc_greedy":"1f9dc-1f3fd-2642","shortnames":[":merman_medium_skin_tone:"],"category":"people"},":merman_tone4:":{"uc_base":"1f9dc-1f3fe-2642","uc_output":"1f9dc-1f3fe-200d-2642-fe0f","uc_match":"1f9dc-1f3fe-2642-fe0f","uc_greedy":"1f9dc-1f3fe-2642","shortnames":[":merman_medium_dark_skin_tone:"],"category":"people"},":merman_tone5:":{"uc_base":"1f9dc-1f3ff-2642","uc_output":"1f9dc-1f3ff-200d-2642-fe0f","uc_match":"1f9dc-1f3ff-2642-fe0f","uc_greedy":"1f9dc-1f3ff-2642","shortnames":[":merman_dark_skin_tone:"],"category":"people"},":woman_biking_tone1:":{"uc_base":"1f6b4-1f3fb-2640","uc_output":"1f6b4-1f3fb-200d-2640-fe0f","uc_match":"1f6b4-1f3fb-2640-fe0f","uc_greedy":"1f6b4-1f3fb-2640","shortnames":[":woman_biking_light_skin_tone:"],"category":"activity"},":woman_biking_tone2:":{"uc_base":"1f6b4-1f3fc-2640","uc_output":"1f6b4-1f3fc-200d-2640-fe0f","uc_match":"1f6b4-1f3fc-2640-fe0f","uc_greedy":"1f6b4-1f3fc-2640","shortnames":[":woman_biking_medium_light_skin_tone:"],"category":"activity"},":woman_biking_tone3:":{"uc_base":"1f6b4-1f3fd-2640","uc_output":"1f6b4-1f3fd-200d-2640-fe0f","uc_match":"1f6b4-1f3fd-2640-fe0f","uc_greedy":"1f6b4-1f3fd-2640","shortnames":[":woman_biking_medium_skin_tone:"],"category":"activity"},":woman_biking_tone4:":{"uc_base":"1f6b4-1f3fe-2640","uc_output":"1f6b4-1f3fe-200d-2640-fe0f","uc_match":"1f6b4-1f3fe-2640-fe0f","uc_greedy":"1f6b4-1f3fe-2640","shortnames":[":woman_biking_medium_dark_skin_tone:"],"category":"activity"},":woman_biking_tone5:":{"uc_base":"1f6b4-1f3ff-2640","uc_output":"1f6b4-1f3ff-200d-2640-fe0f","uc_match":"1f6b4-1f3ff-2640-fe0f","uc_greedy":"1f6b4-1f3ff-2640","shortnames":[":woman_biking_dark_skin_tone:"],"category":"activity"},":woman_bowing_tone1:":{"uc_base":"1f647-1f3fb-2640","uc_output":"1f647-1f3fb-200d-2640-fe0f","uc_match":"1f647-1f3fb-2640-fe0f","uc_greedy":"1f647-1f3fb-2640","shortnames":[":woman_bowing_light_skin_tone:"],"category":"people"},":woman_bowing_tone2:":{"uc_base":"1f647-1f3fc-2640","uc_output":"1f647-1f3fc-200d-2640-fe0f","uc_match":"1f647-1f3fc-2640-fe0f","uc_greedy":"1f647-1f3fc-2640","shortnames":[":woman_bowing_medium_light_skin_tone:"],"category":"people"},":woman_bowing_tone3:":{"uc_base":"1f647-1f3fd-2640","uc_output":"1f647-1f3fd-200d-2640-fe0f","uc_match":"1f647-1f3fd-2640-fe0f","uc_greedy":"1f647-1f3fd-2640","shortnames":[":woman_bowing_medium_skin_tone:"],"category":"people"},":woman_bowing_tone4:":{"uc_base":"1f647-1f3fe-2640","uc_output":"1f647-1f3fe-200d-2640-fe0f","uc_match":"1f647-1f3fe-2640-fe0f","uc_greedy":"1f647-1f3fe-2640","shortnames":[":woman_bowing_medium_dark_skin_tone:"],"category":"people"},":woman_bowing_tone5:":{"uc_base":"1f647-1f3ff-2640","uc_output":"1f647-1f3ff-200d-2640-fe0f","uc_match":"1f647-1f3ff-2640-fe0f","uc_greedy":"1f647-1f3ff-2640","shortnames":[":woman_bowing_dark_skin_tone:"],"category":"people"},":woman_cartwheeling_tone1:":{"uc_base":"1f938-1f3fb-2640","uc_output":"1f938-1f3fb-200d-2640-fe0f","uc_match":"1f938-1f3fb-2640-fe0f","uc_greedy":"1f938-1f3fb-2640","shortnames":[":woman_cartwheeling_light_skin_tone:"],"category":"activity"},":woman_cartwheeling_tone2:":{"uc_base":"1f938-1f3fc-2640","uc_output":"1f938-1f3fc-200d-2640-fe0f","uc_match":"1f938-1f3fc-2640-fe0f","uc_greedy":"1f938-1f3fc-2640","shortnames":[":woman_cartwheeling_medium_light_skin_tone:"],"category":"activity"},":woman_cartwheeling_tone3:":{"uc_base":"1f938-1f3fd-2640","uc_output":"1f938-1f3fd-200d-2640-fe0f","uc_match":"1f938-1f3fd-2640-fe0f","uc_greedy":"1f938-1f3fd-2640","shortnames":[":woman_cartwheeling_medium_skin_tone:"],"category":"activity"},":woman_cartwheeling_tone4:":{"uc_base":"1f938-1f3fe-2640","uc_output":"1f938-1f3fe-200d-2640-fe0f","uc_match":"1f938-1f3fe-2640-fe0f","uc_greedy":"1f938-1f3fe-2640","shortnames":[":woman_cartwheeling_medium_dark_skin_tone:"],"category":"activity"},":woman_cartwheeling_tone5:":{"uc_base":"1f938-1f3ff-2640","uc_output":"1f938-1f3ff-200d-2640-fe0f","uc_match":"1f938-1f3ff-2640-fe0f","uc_greedy":"1f938-1f3ff-2640","shortnames":[":woman_cartwheeling_dark_skin_tone:"],"category":"activity"},":woman_climbing_tone1:":{"uc_base":"1f9d7-1f3fb-2640","uc_output":"1f9d7-1f3fb-200d-2640-fe0f","uc_match":"1f9d7-1f3fb-2640-fe0f","uc_greedy":"1f9d7-1f3fb-2640","shortnames":[":woman_climbing_light_skin_tone:"],"category":"activity"},":woman_climbing_tone2:":{"uc_base":"1f9d7-1f3fc-2640","uc_output":"1f9d7-1f3fc-200d-2640-fe0f","uc_match":"1f9d7-1f3fc-2640-fe0f","uc_greedy":"1f9d7-1f3fc-2640","shortnames":[":woman_climbing_medium_light_skin_tone:"],"category":"activity"},":woman_climbing_tone3:":{"uc_base":"1f9d7-1f3fd-2640","uc_output":"1f9d7-1f3fd-200d-2640-fe0f","uc_match":"1f9d7-1f3fd-2640-fe0f","uc_greedy":"1f9d7-1f3fd-2640","shortnames":[":woman_climbing_medium_skin_tone:"],"category":"activity"},":woman_climbing_tone4:":{"uc_base":"1f9d7-1f3fe-2640","uc_output":"1f9d7-1f3fe-200d-2640-fe0f","uc_match":"1f9d7-1f3fe-2640-fe0f","uc_greedy":"1f9d7-1f3fe-2640","shortnames":[":woman_climbing_medium_dark_skin_tone:"],"category":"activity"},":woman_climbing_tone5:":{"uc_base":"1f9d7-1f3ff-2640","uc_output":"1f9d7-1f3ff-200d-2640-fe0f","uc_match":"1f9d7-1f3ff-2640-fe0f","uc_greedy":"1f9d7-1f3ff-2640","shortnames":[":woman_climbing_dark_skin_tone:"],"category":"activity"},":woman_construction_worker_tone1:":{"uc_base":"1f477-1f3fb-2640","uc_output":"1f477-1f3fb-200d-2640-fe0f","uc_match":"1f477-1f3fb-2640-fe0f","uc_greedy":"1f477-1f3fb-2640","shortnames":[":woman_construction_worker_light_skin_tone:"],"category":"people"},":woman_construction_worker_tone2:":{"uc_base":"1f477-1f3fc-2640","uc_output":"1f477-1f3fc-200d-2640-fe0f","uc_match":"1f477-1f3fc-2640-fe0f","uc_greedy":"1f477-1f3fc-2640","shortnames":[":woman_construction_worker_medium_light_skin_tone:"],"category":"people"},":woman_construction_worker_tone3:":{"uc_base":"1f477-1f3fd-2640","uc_output":"1f477-1f3fd-200d-2640-fe0f","uc_match":"1f477-1f3fd-2640-fe0f","uc_greedy":"1f477-1f3fd-2640","shortnames":[":woman_construction_worker_medium_skin_tone:"],"category":"people"},":woman_construction_worker_tone4:":{"uc_base":"1f477-1f3fe-2640","uc_output":"1f477-1f3fe-200d-2640-fe0f","uc_match":"1f477-1f3fe-2640-fe0f","uc_greedy":"1f477-1f3fe-2640","shortnames":[":woman_construction_worker_medium_dark_skin_tone:"],"category":"people"},":woman_construction_worker_tone5:":{"uc_base":"1f477-1f3ff-2640","uc_output":"1f477-1f3ff-200d-2640-fe0f","uc_match":"1f477-1f3ff-2640-fe0f","uc_greedy":"1f477-1f3ff-2640","shortnames":[":woman_construction_worker_dark_skin_tone:"],"category":"people"},":woman_detective_tone1:":{"uc_base":"1f575-1f3fb-2640","uc_output":"1f575-1f3fb-200d-2640-fe0f","uc_match":"1f575-fe0f-1f3fb-2640-fe0f","uc_greedy":"1f575-1f3fb-2640","shortnames":[":woman_detective_light_skin_tone:"],"category":"people"},":woman_detective_tone2:":{"uc_base":"1f575-1f3fc-2640","uc_output":"1f575-1f3fc-200d-2640-fe0f","uc_match":"1f575-fe0f-1f3fc-2640-fe0f","uc_greedy":"1f575-1f3fc-2640","shortnames":[":woman_detective_medium_light_skin_tone:"],"category":"people"},":woman_detective_tone3:":{"uc_base":"1f575-1f3fd-2640","uc_output":"1f575-1f3fd-200d-2640-fe0f","uc_match":"1f575-fe0f-1f3fd-2640-fe0f","uc_greedy":"1f575-1f3fd-2640","shortnames":[":woman_detective_medium_skin_tone:"],"category":"people"},":woman_detective_tone4:":{"uc_base":"1f575-1f3fe-2640","uc_output":"1f575-1f3fe-200d-2640-fe0f","uc_match":"1f575-fe0f-1f3fe-2640-fe0f","uc_greedy":"1f575-1f3fe-2640","shortnames":[":woman_detective_medium_dark_skin_tone:"],"category":"people"},":woman_detective_tone5:":{"uc_base":"1f575-1f3ff-2640","uc_output":"1f575-1f3ff-200d-2640-fe0f","uc_match":"1f575-fe0f-1f3ff-2640-fe0f","uc_greedy":"1f575-1f3ff-2640","shortnames":[":woman_detective_dark_skin_tone:"],"category":"people"},":woman_elf_tone1:":{"uc_base":"1f9dd-1f3fb-2640","uc_output":"1f9dd-1f3fb-200d-2640-fe0f","uc_match":"1f9dd-1f3fb-2640-fe0f","uc_greedy":"1f9dd-1f3fb-2640","shortnames":[":woman_elf_light_skin_tone:"],"category":"people"},":woman_elf_tone2:":{"uc_base":"1f9dd-1f3fc-2640","uc_output":"1f9dd-1f3fc-200d-2640-fe0f","uc_match":"1f9dd-1f3fc-2640-fe0f","uc_greedy":"1f9dd-1f3fc-2640","shortnames":[":woman_elf_medium_light_skin_tone:"],"category":"people"},":woman_elf_tone3:":{"uc_base":"1f9dd-1f3fd-2640","uc_output":"1f9dd-1f3fd-200d-2640-fe0f","uc_match":"1f9dd-1f3fd-2640-fe0f","uc_greedy":"1f9dd-1f3fd-2640","shortnames":[":woman_elf_medium_skin_tone:"],"category":"people"},":woman_elf_tone4:":{"uc_base":"1f9dd-1f3fe-2640","uc_output":"1f9dd-1f3fe-200d-2640-fe0f","uc_match":"1f9dd-1f3fe-2640-fe0f","uc_greedy":"1f9dd-1f3fe-2640","shortnames":[":woman_elf_medium_dark_skin_tone:"],"category":"people"},":woman_elf_tone5:":{"uc_base":"1f9dd-1f3ff-2640","uc_output":"1f9dd-1f3ff-200d-2640-fe0f","uc_match":"1f9dd-1f3ff-2640-fe0f","uc_greedy":"1f9dd-1f3ff-2640","shortnames":[":woman_elf_dark_skin_tone:"],"category":"people"},":woman_facepalming_tone1:":{"uc_base":"1f926-1f3fb-2640","uc_output":"1f926-1f3fb-200d-2640-fe0f","uc_match":"1f926-1f3fb-2640-fe0f","uc_greedy":"1f926-1f3fb-2640","shortnames":[":woman_facepalming_light_skin_tone:"],"category":"people"},":woman_facepalming_tone2:":{"uc_base":"1f926-1f3fc-2640","uc_output":"1f926-1f3fc-200d-2640-fe0f","uc_match":"1f926-1f3fc-2640-fe0f","uc_greedy":"1f926-1f3fc-2640","shortnames":[":woman_facepalming_medium_light_skin_tone:"],"category":"people"},":woman_facepalming_tone3:":{"uc_base":"1f926-1f3fd-2640","uc_output":"1f926-1f3fd-200d-2640-fe0f","uc_match":"1f926-1f3fd-2640-fe0f","uc_greedy":"1f926-1f3fd-2640","shortnames":[":woman_facepalming_medium_skin_tone:"],"category":"people"},":woman_facepalming_tone4:":{"uc_base":"1f926-1f3fe-2640","uc_output":"1f926-1f3fe-200d-2640-fe0f","uc_match":"1f926-1f3fe-2640-fe0f","uc_greedy":"1f926-1f3fe-2640","shortnames":[":woman_facepalming_medium_dark_skin_tone:"],"category":"people"},":woman_facepalming_tone5:":{"uc_base":"1f926-1f3ff-2640","uc_output":"1f926-1f3ff-200d-2640-fe0f","uc_match":"1f926-1f3ff-2640-fe0f","uc_greedy":"1f926-1f3ff-2640","shortnames":[":woman_facepalming_dark_skin_tone:"],"category":"people"},":woman_fairy_tone1:":{"uc_base":"1f9da-1f3fb-2640","uc_output":"1f9da-1f3fb-200d-2640-fe0f","uc_match":"1f9da-1f3fb-2640-fe0f","uc_greedy":"1f9da-1f3fb-2640","shortnames":[":woman_fairy_light_skin_tone:"],"category":"people"},":woman_fairy_tone2:":{"uc_base":"1f9da-1f3fc-2640","uc_output":"1f9da-1f3fc-200d-2640-fe0f","uc_match":"1f9da-1f3fc-2640-fe0f","uc_greedy":"1f9da-1f3fc-2640","shortnames":[":woman_fairy_medium_light_skin_tone:"],"category":"people"},":woman_fairy_tone3:":{"uc_base":"1f9da-1f3fd-2640","uc_output":"1f9da-1f3fd-200d-2640-fe0f","uc_match":"1f9da-1f3fd-2640-fe0f","uc_greedy":"1f9da-1f3fd-2640","shortnames":[":woman_fairy_medium_skin_tone:"],"category":"people"},":woman_fairy_tone4:":{"uc_base":"1f9da-1f3fe-2640","uc_output":"1f9da-1f3fe-200d-2640-fe0f","uc_match":"1f9da-1f3fe-2640-fe0f","uc_greedy":"1f9da-1f3fe-2640","shortnames":[":woman_fairy_medium_dark_skin_tone:"],"category":"people"},":woman_fairy_tone5:":{"uc_base":"1f9da-1f3ff-2640","uc_output":"1f9da-1f3ff-200d-2640-fe0f","uc_match":"1f9da-1f3ff-2640-fe0f","uc_greedy":"1f9da-1f3ff-2640","shortnames":[":woman_fairy_dark_skin_tone:"],"category":"people"},":woman_frowning_tone1:":{"uc_base":"1f64d-1f3fb-2640","uc_output":"1f64d-1f3fb-200d-2640-fe0f","uc_match":"1f64d-1f3fb-2640-fe0f","uc_greedy":"1f64d-1f3fb-2640","shortnames":[":woman_frowning_light_skin_tone:"],"category":"people"},":woman_frowning_tone2:":{"uc_base":"1f64d-1f3fc-2640","uc_output":"1f64d-1f3fc-200d-2640-fe0f","uc_match":"1f64d-1f3fc-2640-fe0f","uc_greedy":"1f64d-1f3fc-2640","shortnames":[":woman_frowning_medium_light_skin_tone:"],"category":"people"},":woman_frowning_tone3:":{"uc_base":"1f64d-1f3fd-2640","uc_output":"1f64d-1f3fd-200d-2640-fe0f","uc_match":"1f64d-1f3fd-2640-fe0f","uc_greedy":"1f64d-1f3fd-2640","shortnames":[":woman_frowning_medium_skin_tone:"],"category":"people"},":woman_frowning_tone4:":{"uc_base":"1f64d-1f3fe-2640","uc_output":"1f64d-1f3fe-200d-2640-fe0f","uc_match":"1f64d-1f3fe-2640-fe0f","uc_greedy":"1f64d-1f3fe-2640","shortnames":[":woman_frowning_medium_dark_skin_tone:"],"category":"people"},":woman_frowning_tone5:":{"uc_base":"1f64d-1f3ff-2640","uc_output":"1f64d-1f3ff-200d-2640-fe0f","uc_match":"1f64d-1f3ff-2640-fe0f","uc_greedy":"1f64d-1f3ff-2640","shortnames":[":woman_frowning_dark_skin_tone:"],"category":"people"},":woman_gesturing_no_tone1:":{"uc_base":"1f645-1f3fb-2640","uc_output":"1f645-1f3fb-200d-2640-fe0f","uc_match":"1f645-1f3fb-2640-fe0f","uc_greedy":"1f645-1f3fb-2640","shortnames":[":woman_gesturing_no_light_skin_tone:"],"category":"people"},":woman_gesturing_no_tone2:":{"uc_base":"1f645-1f3fc-2640","uc_output":"1f645-1f3fc-200d-2640-fe0f","uc_match":"1f645-1f3fc-2640-fe0f","uc_greedy":"1f645-1f3fc-2640","shortnames":[":woman_gesturing_no_medium_light_skin_tone:"],"category":"people"},":woman_gesturing_no_tone3:":{"uc_base":"1f645-1f3fd-2640","uc_output":"1f645-1f3fd-200d-2640-fe0f","uc_match":"1f645-1f3fd-2640-fe0f","uc_greedy":"1f645-1f3fd-2640","shortnames":[":woman_gesturing_no_medium_skin_tone:"],"category":"people"},":woman_gesturing_no_tone4:":{"uc_base":"1f645-1f3fe-2640","uc_output":"1f645-1f3fe-200d-2640-fe0f","uc_match":"1f645-1f3fe-2640-fe0f","uc_greedy":"1f645-1f3fe-2640","shortnames":[":woman_gesturing_no_medium_dark_skin_tone:"],"category":"people"},":woman_gesturing_no_tone5:":{"uc_base":"1f645-1f3ff-2640","uc_output":"1f645-1f3ff-200d-2640-fe0f","uc_match":"1f645-1f3ff-2640-fe0f","uc_greedy":"1f645-1f3ff-2640","shortnames":[":woman_gesturing_no_dark_skin_tone:"],"category":"people"},":woman_gesturing_ok_tone1:":{"uc_base":"1f646-1f3fb-2640","uc_output":"1f646-1f3fb-200d-2640-fe0f","uc_match":"1f646-1f3fb-2640-fe0f","uc_greedy":"1f646-1f3fb-2640","shortnames":[":woman_gesturing_ok_light_skin_tone:"],"category":"people"},":woman_gesturing_ok_tone2:":{"uc_base":"1f646-1f3fc-2640","uc_output":"1f646-1f3fc-200d-2640-fe0f","uc_match":"1f646-1f3fc-2640-fe0f","uc_greedy":"1f646-1f3fc-2640","shortnames":[":woman_gesturing_ok_medium_light_skin_tone:"],"category":"people"},":woman_gesturing_ok_tone3:":{"uc_base":"1f646-1f3fd-2640","uc_output":"1f646-1f3fd-200d-2640-fe0f","uc_match":"1f646-1f3fd-2640-fe0f","uc_greedy":"1f646-1f3fd-2640","shortnames":[":woman_gesturing_ok_medium_skin_tone:"],"category":"people"},":woman_gesturing_ok_tone4:":{"uc_base":"1f646-1f3fe-2640","uc_output":"1f646-1f3fe-200d-2640-fe0f","uc_match":"1f646-1f3fe-2640-fe0f","uc_greedy":"1f646-1f3fe-2640","shortnames":[":woman_gesturing_ok_medium_dark_skin_tone:"],"category":"people"},":woman_gesturing_ok_tone5:":{"uc_base":"1f646-1f3ff-2640","uc_output":"1f646-1f3ff-200d-2640-fe0f","uc_match":"1f646-1f3ff-2640-fe0f","uc_greedy":"1f646-1f3ff-2640","shortnames":[":woman_gesturing_ok_dark_skin_tone:"],"category":"people"},":woman_getting_face_massage_tone1:":{"uc_base":"1f486-1f3fb-2640","uc_output":"1f486-1f3fb-200d-2640-fe0f","uc_match":"1f486-1f3fb-2640-fe0f","uc_greedy":"1f486-1f3fb-2640","shortnames":[":woman_getting_face_massage_light_skin_tone:"],"category":"people"},":woman_getting_face_massage_tone2:":{"uc_base":"1f486-1f3fc-2640","uc_output":"1f486-1f3fc-200d-2640-fe0f","uc_match":"1f486-1f3fc-2640-fe0f","uc_greedy":"1f486-1f3fc-2640","shortnames":[":woman_getting_face_massage_medium_light_skin_tone:"],"category":"people"},":woman_getting_face_massage_tone3:":{"uc_base":"1f486-1f3fd-2640","uc_output":"1f486-1f3fd-200d-2640-fe0f","uc_match":"1f486-1f3fd-2640-fe0f","uc_greedy":"1f486-1f3fd-2640","shortnames":[":woman_getting_face_massage_medium_skin_tone:"],"category":"people"},":woman_getting_face_massage_tone4:":{"uc_base":"1f486-1f3fe-2640","uc_output":"1f486-1f3fe-200d-2640-fe0f","uc_match":"1f486-1f3fe-2640-fe0f","uc_greedy":"1f486-1f3fe-2640","shortnames":[":woman_getting_face_massage_medium_dark_skin_tone:"],"category":"people"},":woman_getting_face_massage_tone5:":{"uc_base":"1f486-1f3ff-2640","uc_output":"1f486-1f3ff-200d-2640-fe0f","uc_match":"1f486-1f3ff-2640-fe0f","uc_greedy":"1f486-1f3ff-2640","shortnames":[":woman_getting_face_massage_dark_skin_tone:"],"category":"people"},":woman_getting_haircut_tone1:":{"uc_base":"1f487-1f3fb-2640","uc_output":"1f487-1f3fb-200d-2640-fe0f","uc_match":"1f487-1f3fb-2640-fe0f","uc_greedy":"1f487-1f3fb-2640","shortnames":[":woman_getting_haircut_light_skin_tone:"],"category":"people"},":woman_getting_haircut_tone2:":{"uc_base":"1f487-1f3fc-2640","uc_output":"1f487-1f3fc-200d-2640-fe0f","uc_match":"1f487-1f3fc-2640-fe0f","uc_greedy":"1f487-1f3fc-2640","shortnames":[":woman_getting_haircut_medium_light_skin_tone:"],"category":"people"},":woman_getting_haircut_tone3:":{"uc_base":"1f487-1f3fd-2640","uc_output":"1f487-1f3fd-200d-2640-fe0f","uc_match":"1f487-1f3fd-2640-fe0f","uc_greedy":"1f487-1f3fd-2640","shortnames":[":woman_getting_haircut_medium_skin_tone:"],"category":"people"},":woman_getting_haircut_tone4:":{"uc_base":"1f487-1f3fe-2640","uc_output":"1f487-1f3fe-200d-2640-fe0f","uc_match":"1f487-1f3fe-2640-fe0f","uc_greedy":"1f487-1f3fe-2640","shortnames":[":woman_getting_haircut_medium_dark_skin_tone:"],"category":"people"},":woman_getting_haircut_tone5:":{"uc_base":"1f487-1f3ff-2640","uc_output":"1f487-1f3ff-200d-2640-fe0f","uc_match":"1f487-1f3ff-2640-fe0f","uc_greedy":"1f487-1f3ff-2640","shortnames":[":woman_getting_haircut_dark_skin_tone:"],"category":"people"},":woman_golfing_tone1:":{"uc_base":"1f3cc-1f3fb-2640","uc_output":"1f3cc-1f3fb-200d-2640-fe0f","uc_match":"1f3cc-fe0f-1f3fb-2640-fe0f","uc_greedy":"1f3cc-1f3fb-2640","shortnames":[":woman_golfing_light_skin_tone:"],"category":"activity"},":woman_golfing_tone2:":{"uc_base":"1f3cc-1f3fc-2640","uc_output":"1f3cc-1f3fc-200d-2640-fe0f","uc_match":"1f3cc-fe0f-1f3fc-2640-fe0f","uc_greedy":"1f3cc-1f3fc-2640","shortnames":[":woman_golfing_medium_light_skin_tone:"],"category":"activity"},":woman_golfing_tone3:":{"uc_base":"1f3cc-1f3fd-2640","uc_output":"1f3cc-1f3fd-200d-2640-fe0f","uc_match":"1f3cc-fe0f-1f3fd-2640-fe0f","uc_greedy":"1f3cc-1f3fd-2640","shortnames":[":woman_golfing_medium_skin_tone:"],"category":"activity"},":woman_golfing_tone4:":{"uc_base":"1f3cc-1f3fe-2640","uc_output":"1f3cc-1f3fe-200d-2640-fe0f","uc_match":"1f3cc-fe0f-1f3fe-2640-fe0f","uc_greedy":"1f3cc-1f3fe-2640","shortnames":[":woman_golfing_medium_dark_skin_tone:"],"category":"activity"},":woman_golfing_tone5:":{"uc_base":"1f3cc-1f3ff-2640","uc_output":"1f3cc-1f3ff-200d-2640-fe0f","uc_match":"1f3cc-fe0f-1f3ff-2640-fe0f","uc_greedy":"1f3cc-1f3ff-2640","shortnames":[":woman_golfing_dark_skin_tone:"],"category":"activity"},":woman_guard_tone1:":{"uc_base":"1f482-1f3fb-2640","uc_output":"1f482-1f3fb-200d-2640-fe0f","uc_match":"1f482-1f3fb-2640-fe0f","uc_greedy":"1f482-1f3fb-2640","shortnames":[":woman_guard_light_skin_tone:"],"category":"people"},":woman_guard_tone2:":{"uc_base":"1f482-1f3fc-2640","uc_output":"1f482-1f3fc-200d-2640-fe0f","uc_match":"1f482-1f3fc-2640-fe0f","uc_greedy":"1f482-1f3fc-2640","shortnames":[":woman_guard_medium_light_skin_tone:"],"category":"people"},":woman_guard_tone3:":{"uc_base":"1f482-1f3fd-2640","uc_output":"1f482-1f3fd-200d-2640-fe0f","uc_match":"1f482-1f3fd-2640-fe0f","uc_greedy":"1f482-1f3fd-2640","shortnames":[":woman_guard_medium_skin_tone:"],"category":"people"},":woman_guard_tone4:":{"uc_base":"1f482-1f3fe-2640","uc_output":"1f482-1f3fe-200d-2640-fe0f","uc_match":"1f482-1f3fe-2640-fe0f","uc_greedy":"1f482-1f3fe-2640","shortnames":[":woman_guard_medium_dark_skin_tone:"],"category":"people"},":woman_guard_tone5:":{"uc_base":"1f482-1f3ff-2640","uc_output":"1f482-1f3ff-200d-2640-fe0f","uc_match":"1f482-1f3ff-2640-fe0f","uc_greedy":"1f482-1f3ff-2640","shortnames":[":woman_guard_dark_skin_tone:"],"category":"people"},":woman_health_worker_tone1:":{"uc_base":"1f469-1f3fb-2695","uc_output":"1f469-1f3fb-200d-2695-fe0f","uc_match":"1f469-1f3fb-2695-fe0f","uc_greedy":"1f469-1f3fb-2695","shortnames":[":woman_health_worker_light_skin_tone:"],"category":"people"},":woman_health_worker_tone2:":{"uc_base":"1f469-1f3fc-2695","uc_output":"1f469-1f3fc-200d-2695-fe0f","uc_match":"1f469-1f3fc-2695-fe0f","uc_greedy":"1f469-1f3fc-2695","shortnames":[":woman_health_worker_medium_light_skin_tone:"],"category":"people"},":woman_health_worker_tone3:":{"uc_base":"1f469-1f3fd-2695","uc_output":"1f469-1f3fd-200d-2695-fe0f","uc_match":"1f469-1f3fd-2695-fe0f","uc_greedy":"1f469-1f3fd-2695","shortnames":[":woman_health_worker_medium_skin_tone:"],"category":"people"},":woman_health_worker_tone4:":{"uc_base":"1f469-1f3fe-2695","uc_output":"1f469-1f3fe-200d-2695-fe0f","uc_match":"1f469-1f3fe-2695-fe0f","uc_greedy":"1f469-1f3fe-2695","shortnames":[":woman_health_worker_medium_dark_skin_tone:"],"category":"people"},":woman_health_worker_tone5:":{"uc_base":"1f469-1f3ff-2695","uc_output":"1f469-1f3ff-200d-2695-fe0f","uc_match":"1f469-1f3ff-2695-fe0f","uc_greedy":"1f469-1f3ff-2695","shortnames":[":woman_health_worker_dark_skin_tone:"],"category":"people"},":woman_in_lotus_position_tone1:":{"uc_base":"1f9d8-1f3fb-2640","uc_output":"1f9d8-1f3fb-200d-2640-fe0f","uc_match":"1f9d8-1f3fb-2640-fe0f","uc_greedy":"1f9d8-1f3fb-2640","shortnames":[":woman_in_lotus_position_light_skin_tone:"],"category":"activity"},":woman_in_lotus_position_tone2:":{"uc_base":"1f9d8-1f3fc-2640","uc_output":"1f9d8-1f3fc-200d-2640-fe0f","uc_match":"1f9d8-1f3fc-2640-fe0f","uc_greedy":"1f9d8-1f3fc-2640","shortnames":[":woman_in_lotus_position_medium_light_skin_tone:"],"category":"activity"},":woman_in_lotus_position_tone3:":{"uc_base":"1f9d8-1f3fd-2640","uc_output":"1f9d8-1f3fd-200d-2640-fe0f","uc_match":"1f9d8-1f3fd-2640-fe0f","uc_greedy":"1f9d8-1f3fd-2640","shortnames":[":woman_in_lotus_position_medium_skin_tone:"],"category":"activity"},":woman_in_lotus_position_tone4:":{"uc_base":"1f9d8-1f3fe-2640","uc_output":"1f9d8-1f3fe-200d-2640-fe0f","uc_match":"1f9d8-1f3fe-2640-fe0f","uc_greedy":"1f9d8-1f3fe-2640","shortnames":[":woman_in_lotus_position_medium_dark_skin_tone:"],"category":"activity"},":woman_in_lotus_position_tone5:":{"uc_base":"1f9d8-1f3ff-2640","uc_output":"1f9d8-1f3ff-200d-2640-fe0f","uc_match":"1f9d8-1f3ff-2640-fe0f","uc_greedy":"1f9d8-1f3ff-2640","shortnames":[":woman_in_lotus_position_dark_skin_tone:"],"category":"activity"},":woman_in_steamy_room_tone1:":{"uc_base":"1f9d6-1f3fb-2640","uc_output":"1f9d6-1f3fb-200d-2640-fe0f","uc_match":"1f9d6-1f3fb-2640-fe0f","uc_greedy":"1f9d6-1f3fb-2640","shortnames":[":woman_in_steamy_room_light_skin_tone:"],"category":"activity"},":woman_in_steamy_room_tone2:":{"uc_base":"1f9d6-1f3fc-2640","uc_output":"1f9d6-1f3fc-200d-2640-fe0f","uc_match":"1f9d6-1f3fc-2640-fe0f","uc_greedy":"1f9d6-1f3fc-2640","shortnames":[":woman_in_steamy_room_medium_light_skin_tone:"],"category":"activity"},":woman_in_steamy_room_tone3:":{"uc_base":"1f9d6-1f3fd-2640","uc_output":"1f9d6-1f3fd-200d-2640-fe0f","uc_match":"1f9d6-1f3fd-2640-fe0f","uc_greedy":"1f9d6-1f3fd-2640","shortnames":[":woman_in_steamy_room_medium_skin_tone:"],"category":"activity"},":woman_in_steamy_room_tone4:":{"uc_base":"1f9d6-1f3fe-2640","uc_output":"1f9d6-1f3fe-200d-2640-fe0f","uc_match":"1f9d6-1f3fe-2640-fe0f","uc_greedy":"1f9d6-1f3fe-2640","shortnames":[":woman_in_steamy_room_medium_dark_skin_tone:"],"category":"activity"},":woman_in_steamy_room_tone5:":{"uc_base":"1f9d6-1f3ff-2640","uc_output":"1f9d6-1f3ff-200d-2640-fe0f","uc_match":"1f9d6-1f3ff-2640-fe0f","uc_greedy":"1f9d6-1f3ff-2640","shortnames":[":woman_in_steamy_room_dark_skin_tone:"],"category":"activity"},":woman_judge_tone1:":{"uc_base":"1f469-1f3fb-2696","uc_output":"1f469-1f3fb-200d-2696-fe0f","uc_match":"1f469-1f3fb-2696-fe0f","uc_greedy":"1f469-1f3fb-2696","shortnames":[":woman_judge_light_skin_tone:"],"category":"people"},":woman_judge_tone2:":{"uc_base":"1f469-1f3fc-2696","uc_output":"1f469-1f3fc-200d-2696-fe0f","uc_match":"1f469-1f3fc-2696-fe0f","uc_greedy":"1f469-1f3fc-2696","shortnames":[":woman_judge_medium_light_skin_tone:"],"category":"people"},":woman_judge_tone3:":{"uc_base":"1f469-1f3fd-2696","uc_output":"1f469-1f3fd-200d-2696-fe0f","uc_match":"1f469-1f3fd-2696-fe0f","uc_greedy":"1f469-1f3fd-2696","shortnames":[":woman_judge_medium_skin_tone:"],"category":"people"},":woman_judge_tone4:":{"uc_base":"1f469-1f3fe-2696","uc_output":"1f469-1f3fe-200d-2696-fe0f","uc_match":"1f469-1f3fe-2696-fe0f","uc_greedy":"1f469-1f3fe-2696","shortnames":[":woman_judge_medium_dark_skin_tone:"],"category":"people"},":woman_judge_tone5:":{"uc_base":"1f469-1f3ff-2696","uc_output":"1f469-1f3ff-200d-2696-fe0f","uc_match":"1f469-1f3ff-2696-fe0f","uc_greedy":"1f469-1f3ff-2696","shortnames":[":woman_judge_dark_skin_tone:"],"category":"people"},":woman_juggling_tone1:":{"uc_base":"1f939-1f3fb-2640","uc_output":"1f939-1f3fb-200d-2640-fe0f","uc_match":"1f939-1f3fb-2640-fe0f","uc_greedy":"1f939-1f3fb-2640","shortnames":[":woman_juggling_light_skin_tone:"],"category":"activity"},":woman_juggling_tone2:":{"uc_base":"1f939-1f3fc-2640","uc_output":"1f939-1f3fc-200d-2640-fe0f","uc_match":"1f939-1f3fc-2640-fe0f","uc_greedy":"1f939-1f3fc-2640","shortnames":[":woman_juggling_medium_light_skin_tone:"],"category":"activity"},":woman_juggling_tone3:":{"uc_base":"1f939-1f3fd-2640","uc_output":"1f939-1f3fd-200d-2640-fe0f","uc_match":"1f939-1f3fd-2640-fe0f","uc_greedy":"1f939-1f3fd-2640","shortnames":[":woman_juggling_medium_skin_tone:"],"category":"activity"},":woman_juggling_tone4:":{"uc_base":"1f939-1f3fe-2640","uc_output":"1f939-1f3fe-200d-2640-fe0f","uc_match":"1f939-1f3fe-2640-fe0f","uc_greedy":"1f939-1f3fe-2640","shortnames":[":woman_juggling_medium_dark_skin_tone:"],"category":"activity"},":woman_juggling_tone5:":{"uc_base":"1f939-1f3ff-2640","uc_output":"1f939-1f3ff-200d-2640-fe0f","uc_match":"1f939-1f3ff-2640-fe0f","uc_greedy":"1f939-1f3ff-2640","shortnames":[":woman_juggling_dark_skin_tone:"],"category":"activity"},":woman_lifting_weights_tone1:":{"uc_base":"1f3cb-1f3fb-2640","uc_output":"1f3cb-1f3fb-200d-2640-fe0f","uc_match":"1f3cb-fe0f-1f3fb-2640-fe0f","uc_greedy":"1f3cb-1f3fb-2640","shortnames":[":woman_lifting_weights_light_skin_tone:"],"category":"activity"},":woman_lifting_weights_tone2:":{"uc_base":"1f3cb-1f3fc-2640","uc_output":"1f3cb-1f3fc-200d-2640-fe0f","uc_match":"1f3cb-fe0f-1f3fc-2640-fe0f","uc_greedy":"1f3cb-1f3fc-2640","shortnames":[":woman_lifting_weights_medium_light_skin_tone:"],"category":"activity"},":woman_lifting_weights_tone3:":{"uc_base":"1f3cb-1f3fd-2640","uc_output":"1f3cb-1f3fd-200d-2640-fe0f","uc_match":"1f3cb-fe0f-1f3fd-2640-fe0f","uc_greedy":"1f3cb-1f3fd-2640","shortnames":[":woman_lifting_weights_medium_skin_tone:"],"category":"activity"},":woman_lifting_weights_tone4:":{"uc_base":"1f3cb-1f3fe-2640","uc_output":"1f3cb-1f3fe-200d-2640-fe0f","uc_match":"1f3cb-fe0f-1f3fe-2640-fe0f","uc_greedy":"1f3cb-1f3fe-2640","shortnames":[":woman_lifting_weights_medium_dark_skin_tone:"],"category":"activity"},":woman_lifting_weights_tone5:":{"uc_base":"1f3cb-1f3ff-2640","uc_output":"1f3cb-1f3ff-200d-2640-fe0f","uc_match":"1f3cb-fe0f-1f3ff-2640-fe0f","uc_greedy":"1f3cb-1f3ff-2640","shortnames":[":woman_lifting_weights_dark_skin_tone:"],"category":"activity"},":woman_mage_tone1:":{"uc_base":"1f9d9-1f3fb-2640","uc_output":"1f9d9-1f3fb-200d-2640-fe0f","uc_match":"1f9d9-1f3fb-2640-fe0f","uc_greedy":"1f9d9-1f3fb-2640","shortnames":[":woman_mage_light_skin_tone:"],"category":"people"},":woman_mage_tone2:":{"uc_base":"1f9d9-1f3fc-2640","uc_output":"1f9d9-1f3fc-200d-2640-fe0f","uc_match":"1f9d9-1f3fc-2640-fe0f","uc_greedy":"1f9d9-1f3fc-2640","shortnames":[":woman_mage_medium_light_skin_tone:"],"category":"people"},":woman_mage_tone3:":{"uc_base":"1f9d9-1f3fd-2640","uc_output":"1f9d9-1f3fd-200d-2640-fe0f","uc_match":"1f9d9-1f3fd-2640-fe0f","uc_greedy":"1f9d9-1f3fd-2640","shortnames":[":woman_mage_medium_skin_tone:"],"category":"people"},":woman_mage_tone4:":{"uc_base":"1f9d9-1f3fe-2640","uc_output":"1f9d9-1f3fe-200d-2640-fe0f","uc_match":"1f9d9-1f3fe-2640-fe0f","uc_greedy":"1f9d9-1f3fe-2640","shortnames":[":woman_mage_medium_dark_skin_tone:"],"category":"people"},":woman_mage_tone5:":{"uc_base":"1f9d9-1f3ff-2640","uc_output":"1f9d9-1f3ff-200d-2640-fe0f","uc_match":"1f9d9-1f3ff-2640-fe0f","uc_greedy":"1f9d9-1f3ff-2640","shortnames":[":woman_mage_dark_skin_tone:"],"category":"people"},":woman_mountain_biking_tone1:":{"uc_base":"1f6b5-1f3fb-2640","uc_output":"1f6b5-1f3fb-200d-2640-fe0f","uc_match":"1f6b5-1f3fb-2640-fe0f","uc_greedy":"1f6b5-1f3fb-2640","shortnames":[":woman_mountain_biking_light_skin_tone:"],"category":"activity"},":woman_mountain_biking_tone2:":{"uc_base":"1f6b5-1f3fc-2640","uc_output":"1f6b5-1f3fc-200d-2640-fe0f","uc_match":"1f6b5-1f3fc-2640-fe0f","uc_greedy":"1f6b5-1f3fc-2640","shortnames":[":woman_mountain_biking_medium_light_skin_tone:"],"category":"activity"},":woman_mountain_biking_tone3:":{"uc_base":"1f6b5-1f3fd-2640","uc_output":"1f6b5-1f3fd-200d-2640-fe0f","uc_match":"1f6b5-1f3fd-2640-fe0f","uc_greedy":"1f6b5-1f3fd-2640","shortnames":[":woman_mountain_biking_medium_skin_tone:"],"category":"activity"},":woman_mountain_biking_tone4:":{"uc_base":"1f6b5-1f3fe-2640","uc_output":"1f6b5-1f3fe-200d-2640-fe0f","uc_match":"1f6b5-1f3fe-2640-fe0f","uc_greedy":"1f6b5-1f3fe-2640","shortnames":[":woman_mountain_biking_medium_dark_skin_tone:"],"category":"activity"},":woman_mountain_biking_tone5:":{"uc_base":"1f6b5-1f3ff-2640","uc_output":"1f6b5-1f3ff-200d-2640-fe0f","uc_match":"1f6b5-1f3ff-2640-fe0f","uc_greedy":"1f6b5-1f3ff-2640","shortnames":[":woman_mountain_biking_dark_skin_tone:"],"category":"activity"},":woman_pilot_tone1:":{"uc_base":"1f469-1f3fb-2708","uc_output":"1f469-1f3fb-200d-2708-fe0f","uc_match":"1f469-1f3fb-2708-fe0f","uc_greedy":"1f469-1f3fb-2708","shortnames":[":woman_pilot_light_skin_tone:"],"category":"people"},":woman_pilot_tone2:":{"uc_base":"1f469-1f3fc-2708","uc_output":"1f469-1f3fc-200d-2708-fe0f","uc_match":"1f469-1f3fc-2708-fe0f","uc_greedy":"1f469-1f3fc-2708","shortnames":[":woman_pilot_medium_light_skin_tone:"],"category":"people"},":woman_pilot_tone3:":{"uc_base":"1f469-1f3fd-2708","uc_output":"1f469-1f3fd-200d-2708-fe0f","uc_match":"1f469-1f3fd-2708-fe0f","uc_greedy":"1f469-1f3fd-2708","shortnames":[":woman_pilot_medium_skin_tone:"],"category":"people"},":woman_pilot_tone4:":{"uc_base":"1f469-1f3fe-2708","uc_output":"1f469-1f3fe-200d-2708-fe0f","uc_match":"1f469-1f3fe-2708-fe0f","uc_greedy":"1f469-1f3fe-2708","shortnames":[":woman_pilot_medium_dark_skin_tone:"],"category":"people"},":woman_pilot_tone5:":{"uc_base":"1f469-1f3ff-2708","uc_output":"1f469-1f3ff-200d-2708-fe0f","uc_match":"1f469-1f3ff-2708-fe0f","uc_greedy":"1f469-1f3ff-2708","shortnames":[":woman_pilot_dark_skin_tone:"],"category":"people"},":woman_playing_handball_tone1:":{"uc_base":"1f93e-1f3fb-2640","uc_output":"1f93e-1f3fb-200d-2640-fe0f","uc_match":"1f93e-1f3fb-2640-fe0f","uc_greedy":"1f93e-1f3fb-2640","shortnames":[":woman_playing_handball_light_skin_tone:"],"category":"activity"},":woman_playing_handball_tone2:":{"uc_base":"1f93e-1f3fc-2640","uc_output":"1f93e-1f3fc-200d-2640-fe0f","uc_match":"1f93e-1f3fc-2640-fe0f","uc_greedy":"1f93e-1f3fc-2640","shortnames":[":woman_playing_handball_medium_light_skin_tone:"],"category":"activity"},":woman_playing_handball_tone3:":{"uc_base":"1f93e-1f3fd-2640","uc_output":"1f93e-1f3fd-200d-2640-fe0f","uc_match":"1f93e-1f3fd-2640-fe0f","uc_greedy":"1f93e-1f3fd-2640","shortnames":[":woman_playing_handball_medium_skin_tone:"],"category":"activity"},":woman_playing_handball_tone4:":{"uc_base":"1f93e-1f3fe-2640","uc_output":"1f93e-1f3fe-200d-2640-fe0f","uc_match":"1f93e-1f3fe-2640-fe0f","uc_greedy":"1f93e-1f3fe-2640","shortnames":[":woman_playing_handball_medium_dark_skin_tone:"],"category":"activity"},":woman_playing_handball_tone5:":{"uc_base":"1f93e-1f3ff-2640","uc_output":"1f93e-1f3ff-200d-2640-fe0f","uc_match":"1f93e-1f3ff-2640-fe0f","uc_greedy":"1f93e-1f3ff-2640","shortnames":[":woman_playing_handball_dark_skin_tone:"],"category":"activity"},":woman_playing_water_polo_tone1:":{"uc_base":"1f93d-1f3fb-2640","uc_output":"1f93d-1f3fb-200d-2640-fe0f","uc_match":"1f93d-1f3fb-2640-fe0f","uc_greedy":"1f93d-1f3fb-2640","shortnames":[":woman_playing_water_polo_light_skin_tone:"],"category":"activity"},":woman_playing_water_polo_tone2:":{"uc_base":"1f93d-1f3fc-2640","uc_output":"1f93d-1f3fc-200d-2640-fe0f","uc_match":"1f93d-1f3fc-2640-fe0f","uc_greedy":"1f93d-1f3fc-2640","shortnames":[":woman_playing_water_polo_medium_light_skin_tone:"],"category":"activity"},":woman_playing_water_polo_tone3:":{"uc_base":"1f93d-1f3fd-2640","uc_output":"1f93d-1f3fd-200d-2640-fe0f","uc_match":"1f93d-1f3fd-2640-fe0f","uc_greedy":"1f93d-1f3fd-2640","shortnames":[":woman_playing_water_polo_medium_skin_tone:"],"category":"activity"},":woman_playing_water_polo_tone4:":{"uc_base":"1f93d-1f3fe-2640","uc_output":"1f93d-1f3fe-200d-2640-fe0f","uc_match":"1f93d-1f3fe-2640-fe0f","uc_greedy":"1f93d-1f3fe-2640","shortnames":[":woman_playing_water_polo_medium_dark_skin_tone:"],"category":"activity"},":woman_playing_water_polo_tone5:":{"uc_base":"1f93d-1f3ff-2640","uc_output":"1f93d-1f3ff-200d-2640-fe0f","uc_match":"1f93d-1f3ff-2640-fe0f","uc_greedy":"1f93d-1f3ff-2640","shortnames":[":woman_playing_water_polo_dark_skin_tone:"],"category":"activity"},":woman_police_officer_tone1:":{"uc_base":"1f46e-1f3fb-2640","uc_output":"1f46e-1f3fb-200d-2640-fe0f","uc_match":"1f46e-1f3fb-2640-fe0f","uc_greedy":"1f46e-1f3fb-2640","shortnames":[":woman_police_officer_light_skin_tone:"],"category":"people"},":woman_police_officer_tone2:":{"uc_base":"1f46e-1f3fc-2640","uc_output":"1f46e-1f3fc-200d-2640-fe0f","uc_match":"1f46e-1f3fc-2640-fe0f","uc_greedy":"1f46e-1f3fc-2640","shortnames":[":woman_police_officer_medium_light_skin_tone:"],"category":"people"},":woman_police_officer_tone3:":{"uc_base":"1f46e-1f3fd-2640","uc_output":"1f46e-1f3fd-200d-2640-fe0f","uc_match":"1f46e-1f3fd-2640-fe0f","uc_greedy":"1f46e-1f3fd-2640","shortnames":[":woman_police_officer_medium_skin_tone:"],"category":"people"},":woman_police_officer_tone4:":{"uc_base":"1f46e-1f3fe-2640","uc_output":"1f46e-1f3fe-200d-2640-fe0f","uc_match":"1f46e-1f3fe-2640-fe0f","uc_greedy":"1f46e-1f3fe-2640","shortnames":[":woman_police_officer_medium_dark_skin_tone:"],"category":"people"},":woman_police_officer_tone5:":{"uc_base":"1f46e-1f3ff-2640","uc_output":"1f46e-1f3ff-200d-2640-fe0f","uc_match":"1f46e-1f3ff-2640-fe0f","uc_greedy":"1f46e-1f3ff-2640","shortnames":[":woman_police_officer_dark_skin_tone:"],"category":"people"},":woman_pouting_tone1:":{"uc_base":"1f64e-1f3fb-2640","uc_output":"1f64e-1f3fb-200d-2640-fe0f","uc_match":"1f64e-1f3fb-2640-fe0f","uc_greedy":"1f64e-1f3fb-2640","shortnames":[":woman_pouting_light_skin_tone:"],"category":"people"},":woman_pouting_tone2:":{"uc_base":"1f64e-1f3fc-2640","uc_output":"1f64e-1f3fc-200d-2640-fe0f","uc_match":"1f64e-1f3fc-2640-fe0f","uc_greedy":"1f64e-1f3fc-2640","shortnames":[":woman_pouting_medium_light_skin_tone:"],"category":"people"},":woman_pouting_tone3:":{"uc_base":"1f64e-1f3fd-2640","uc_output":"1f64e-1f3fd-200d-2640-fe0f","uc_match":"1f64e-1f3fd-2640-fe0f","uc_greedy":"1f64e-1f3fd-2640","shortnames":[":woman_pouting_medium_skin_tone:"],"category":"people"},":woman_pouting_tone4:":{"uc_base":"1f64e-1f3fe-2640","uc_output":"1f64e-1f3fe-200d-2640-fe0f","uc_match":"1f64e-1f3fe-2640-fe0f","uc_greedy":"1f64e-1f3fe-2640","shortnames":[":woman_pouting_medium_dark_skin_tone:"],"category":"people"},":woman_pouting_tone5:":{"uc_base":"1f64e-1f3ff-2640","uc_output":"1f64e-1f3ff-200d-2640-fe0f","uc_match":"1f64e-1f3ff-2640-fe0f","uc_greedy":"1f64e-1f3ff-2640","shortnames":[":woman_pouting_dark_skin_tone:"],"category":"people"},":woman_raising_hand_tone1:":{"uc_base":"1f64b-1f3fb-2640","uc_output":"1f64b-1f3fb-200d-2640-fe0f","uc_match":"1f64b-1f3fb-2640-fe0f","uc_greedy":"1f64b-1f3fb-2640","shortnames":[":woman_raising_hand_light_skin_tone:"],"category":"people"},":woman_raising_hand_tone2:":{"uc_base":"1f64b-1f3fc-2640","uc_output":"1f64b-1f3fc-200d-2640-fe0f","uc_match":"1f64b-1f3fc-2640-fe0f","uc_greedy":"1f64b-1f3fc-2640","shortnames":[":woman_raising_hand_medium_light_skin_tone:"],"category":"people"},":woman_raising_hand_tone3:":{"uc_base":"1f64b-1f3fd-2640","uc_output":"1f64b-1f3fd-200d-2640-fe0f","uc_match":"1f64b-1f3fd-2640-fe0f","uc_greedy":"1f64b-1f3fd-2640","shortnames":[":woman_raising_hand_medium_skin_tone:"],"category":"people"},":woman_raising_hand_tone4:":{"uc_base":"1f64b-1f3fe-2640","uc_output":"1f64b-1f3fe-200d-2640-fe0f","uc_match":"1f64b-1f3fe-2640-fe0f","uc_greedy":"1f64b-1f3fe-2640","shortnames":[":woman_raising_hand_medium_dark_skin_tone:"],"category":"people"},":woman_raising_hand_tone5:":{"uc_base":"1f64b-1f3ff-2640","uc_output":"1f64b-1f3ff-200d-2640-fe0f","uc_match":"1f64b-1f3ff-2640-fe0f","uc_greedy":"1f64b-1f3ff-2640","shortnames":[":woman_raising_hand_dark_skin_tone:"],"category":"people"},":woman_rowing_boat_tone1:":{"uc_base":"1f6a3-1f3fb-2640","uc_output":"1f6a3-1f3fb-200d-2640-fe0f","uc_match":"1f6a3-1f3fb-2640-fe0f","uc_greedy":"1f6a3-1f3fb-2640","shortnames":[":woman_rowing_boat_light_skin_tone:"],"category":"activity"},":woman_rowing_boat_tone2:":{"uc_base":"1f6a3-1f3fc-2640","uc_output":"1f6a3-1f3fc-200d-2640-fe0f","uc_match":"1f6a3-1f3fc-2640-fe0f","uc_greedy":"1f6a3-1f3fc-2640","shortnames":[":woman_rowing_boat_medium_light_skin_tone:"],"category":"activity"},":woman_rowing_boat_tone3:":{"uc_base":"1f6a3-1f3fd-2640","uc_output":"1f6a3-1f3fd-200d-2640-fe0f","uc_match":"1f6a3-1f3fd-2640-fe0f","uc_greedy":"1f6a3-1f3fd-2640","shortnames":[":woman_rowing_boat_medium_skin_tone:"],"category":"activity"},":woman_rowing_boat_tone4:":{"uc_base":"1f6a3-1f3fe-2640","uc_output":"1f6a3-1f3fe-200d-2640-fe0f","uc_match":"1f6a3-1f3fe-2640-fe0f","uc_greedy":"1f6a3-1f3fe-2640","shortnames":[":woman_rowing_boat_medium_dark_skin_tone:"],"category":"activity"},":woman_rowing_boat_tone5:":{"uc_base":"1f6a3-1f3ff-2640","uc_output":"1f6a3-1f3ff-200d-2640-fe0f","uc_match":"1f6a3-1f3ff-2640-fe0f","uc_greedy":"1f6a3-1f3ff-2640","shortnames":[":woman_rowing_boat_dark_skin_tone:"],"category":"activity"},":woman_running_tone1:":{"uc_base":"1f3c3-1f3fb-2640","uc_output":"1f3c3-1f3fb-200d-2640-fe0f","uc_match":"1f3c3-1f3fb-2640-fe0f","uc_greedy":"1f3c3-1f3fb-2640","shortnames":[":woman_running_light_skin_tone:"],"category":"people"},":woman_running_tone2:":{"uc_base":"1f3c3-1f3fc-2640","uc_output":"1f3c3-1f3fc-200d-2640-fe0f","uc_match":"1f3c3-1f3fc-2640-fe0f","uc_greedy":"1f3c3-1f3fc-2640","shortnames":[":woman_running_medium_light_skin_tone:"],"category":"people"},":woman_running_tone3:":{"uc_base":"1f3c3-1f3fd-2640","uc_output":"1f3c3-1f3fd-200d-2640-fe0f","uc_match":"1f3c3-1f3fd-2640-fe0f","uc_greedy":"1f3c3-1f3fd-2640","shortnames":[":woman_running_medium_skin_tone:"],"category":"people"},":woman_running_tone4:":{"uc_base":"1f3c3-1f3fe-2640","uc_output":"1f3c3-1f3fe-200d-2640-fe0f","uc_match":"1f3c3-1f3fe-2640-fe0f","uc_greedy":"1f3c3-1f3fe-2640","shortnames":[":woman_running_medium_dark_skin_tone:"],"category":"people"},":woman_running_tone5:":{"uc_base":"1f3c3-1f3ff-2640","uc_output":"1f3c3-1f3ff-200d-2640-fe0f","uc_match":"1f3c3-1f3ff-2640-fe0f","uc_greedy":"1f3c3-1f3ff-2640","shortnames":[":woman_running_dark_skin_tone:"],"category":"people"},":woman_shrugging_tone1:":{"uc_base":"1f937-1f3fb-2640","uc_output":"1f937-1f3fb-200d-2640-fe0f","uc_match":"1f937-1f3fb-2640-fe0f","uc_greedy":"1f937-1f3fb-2640","shortnames":[":woman_shrugging_light_skin_tone:"],"category":"people"},":woman_shrugging_tone2:":{"uc_base":"1f937-1f3fc-2640","uc_output":"1f937-1f3fc-200d-2640-fe0f","uc_match":"1f937-1f3fc-2640-fe0f","uc_greedy":"1f937-1f3fc-2640","shortnames":[":woman_shrugging_medium_light_skin_tone:"],"category":"people"},":woman_shrugging_tone3:":{"uc_base":"1f937-1f3fd-2640","uc_output":"1f937-1f3fd-200d-2640-fe0f","uc_match":"1f937-1f3fd-2640-fe0f","uc_greedy":"1f937-1f3fd-2640","shortnames":[":woman_shrugging_medium_skin_tone:"],"category":"people"},":woman_shrugging_tone4:":{"uc_base":"1f937-1f3fe-2640","uc_output":"1f937-1f3fe-200d-2640-fe0f","uc_match":"1f937-1f3fe-2640-fe0f","uc_greedy":"1f937-1f3fe-2640","shortnames":[":woman_shrugging_medium_dark_skin_tone:"],"category":"people"},":woman_shrugging_tone5:":{"uc_base":"1f937-1f3ff-2640","uc_output":"1f937-1f3ff-200d-2640-fe0f","uc_match":"1f937-1f3ff-2640-fe0f","uc_greedy":"1f937-1f3ff-2640","shortnames":[":woman_shrugging_dark_skin_tone:"],"category":"people"},":woman_surfing_tone1:":{"uc_base":"1f3c4-1f3fb-2640","uc_output":"1f3c4-1f3fb-200d-2640-fe0f","uc_match":"1f3c4-1f3fb-2640-fe0f","uc_greedy":"1f3c4-1f3fb-2640","shortnames":[":woman_surfing_light_skin_tone:"],"category":"activity"},":woman_surfing_tone2:":{"uc_base":"1f3c4-1f3fc-2640","uc_output":"1f3c4-1f3fc-200d-2640-fe0f","uc_match":"1f3c4-1f3fc-2640-fe0f","uc_greedy":"1f3c4-1f3fc-2640","shortnames":[":woman_surfing_medium_light_skin_tone:"],"category":"activity"},":woman_surfing_tone3:":{"uc_base":"1f3c4-1f3fd-2640","uc_output":"1f3c4-1f3fd-200d-2640-fe0f","uc_match":"1f3c4-1f3fd-2640-fe0f","uc_greedy":"1f3c4-1f3fd-2640","shortnames":[":woman_surfing_medium_skin_tone:"],"category":"activity"},":woman_surfing_tone4:":{"uc_base":"1f3c4-1f3fe-2640","uc_output":"1f3c4-1f3fe-200d-2640-fe0f","uc_match":"1f3c4-1f3fe-2640-fe0f","uc_greedy":"1f3c4-1f3fe-2640","shortnames":[":woman_surfing_medium_dark_skin_tone:"],"category":"activity"},":woman_surfing_tone5:":{"uc_base":"1f3c4-1f3ff-2640","uc_output":"1f3c4-1f3ff-200d-2640-fe0f","uc_match":"1f3c4-1f3ff-2640-fe0f","uc_greedy":"1f3c4-1f3ff-2640","shortnames":[":woman_surfing_dark_skin_tone:"],"category":"activity"},":woman_swimming_tone1:":{"uc_base":"1f3ca-1f3fb-2640","uc_output":"1f3ca-1f3fb-200d-2640-fe0f","uc_match":"1f3ca-1f3fb-2640-fe0f","uc_greedy":"1f3ca-1f3fb-2640","shortnames":[":woman_swimming_light_skin_tone:"],"category":"activity"},":woman_swimming_tone2:":{"uc_base":"1f3ca-1f3fc-2640","uc_output":"1f3ca-1f3fc-200d-2640-fe0f","uc_match":"1f3ca-1f3fc-2640-fe0f","uc_greedy":"1f3ca-1f3fc-2640","shortnames":[":woman_swimming_medium_light_skin_tone:"],"category":"activity"},":woman_swimming_tone3:":{"uc_base":"1f3ca-1f3fd-2640","uc_output":"1f3ca-1f3fd-200d-2640-fe0f","uc_match":"1f3ca-1f3fd-2640-fe0f","uc_greedy":"1f3ca-1f3fd-2640","shortnames":[":woman_swimming_medium_skin_tone:"],"category":"activity"},":woman_swimming_tone4:":{"uc_base":"1f3ca-1f3fe-2640","uc_output":"1f3ca-1f3fe-200d-2640-fe0f","uc_match":"1f3ca-1f3fe-2640-fe0f","uc_greedy":"1f3ca-1f3fe-2640","shortnames":[":woman_swimming_medium_dark_skin_tone:"],"category":"activity"},":woman_swimming_tone5:":{"uc_base":"1f3ca-1f3ff-2640","uc_output":"1f3ca-1f3ff-200d-2640-fe0f","uc_match":"1f3ca-1f3ff-2640-fe0f","uc_greedy":"1f3ca-1f3ff-2640","shortnames":[":woman_swimming_dark_skin_tone:"],"category":"activity"},":woman_tipping_hand_tone1:":{"uc_base":"1f481-1f3fb-2640","uc_output":"1f481-1f3fb-200d-2640-fe0f","uc_match":"1f481-1f3fb-2640-fe0f","uc_greedy":"1f481-1f3fb-2640","shortnames":[":woman_tipping_hand_light_skin_tone:"],"category":"people"},":woman_tipping_hand_tone2:":{"uc_base":"1f481-1f3fc-2640","uc_output":"1f481-1f3fc-200d-2640-fe0f","uc_match":"1f481-1f3fc-2640-fe0f","uc_greedy":"1f481-1f3fc-2640","shortnames":[":woman_tipping_hand_medium_light_skin_tone:"],"category":"people"},":woman_tipping_hand_tone3:":{"uc_base":"1f481-1f3fd-2640","uc_output":"1f481-1f3fd-200d-2640-fe0f","uc_match":"1f481-1f3fd-2640-fe0f","uc_greedy":"1f481-1f3fd-2640","shortnames":[":woman_tipping_hand_medium_skin_tone:"],"category":"people"},":woman_tipping_hand_tone4:":{"uc_base":"1f481-1f3fe-2640","uc_output":"1f481-1f3fe-200d-2640-fe0f","uc_match":"1f481-1f3fe-2640-fe0f","uc_greedy":"1f481-1f3fe-2640","shortnames":[":woman_tipping_hand_medium_dark_skin_tone:"],"category":"people"},":woman_tipping_hand_tone5:":{"uc_base":"1f481-1f3ff-2640","uc_output":"1f481-1f3ff-200d-2640-fe0f","uc_match":"1f481-1f3ff-2640-fe0f","uc_greedy":"1f481-1f3ff-2640","shortnames":[":woman_tipping_hand_dark_skin_tone:"],"category":"people"},":woman_vampire_tone1:":{"uc_base":"1f9db-1f3fb-2640","uc_output":"1f9db-1f3fb-200d-2640-fe0f","uc_match":"1f9db-1f3fb-2640-fe0f","uc_greedy":"1f9db-1f3fb-2640","shortnames":[":woman_vampire_light_skin_tone:"],"category":"people"},":woman_vampire_tone2:":{"uc_base":"1f9db-1f3fc-2640","uc_output":"1f9db-1f3fc-200d-2640-fe0f","uc_match":"1f9db-1f3fc-2640-fe0f","uc_greedy":"1f9db-1f3fc-2640","shortnames":[":woman_vampire_medium_light_skin_tone:"],"category":"people"},":woman_vampire_tone3:":{"uc_base":"1f9db-1f3fd-2640","uc_output":"1f9db-1f3fd-200d-2640-fe0f","uc_match":"1f9db-1f3fd-2640-fe0f","uc_greedy":"1f9db-1f3fd-2640","shortnames":[":woman_vampire_medium_skin_tone:"],"category":"people"},":woman_vampire_tone4:":{"uc_base":"1f9db-1f3fe-2640","uc_output":"1f9db-1f3fe-200d-2640-fe0f","uc_match":"1f9db-1f3fe-2640-fe0f","uc_greedy":"1f9db-1f3fe-2640","shortnames":[":woman_vampire_medium_dark_skin_tone:"],"category":"people"},":woman_vampire_tone5:":{"uc_base":"1f9db-1f3ff-2640","uc_output":"1f9db-1f3ff-200d-2640-fe0f","uc_match":"1f9db-1f3ff-2640-fe0f","uc_greedy":"1f9db-1f3ff-2640","shortnames":[":woman_vampire_dark_skin_tone:"],"category":"people"},":woman_walking_tone1:":{"uc_base":"1f6b6-1f3fb-2640","uc_output":"1f6b6-1f3fb-200d-2640-fe0f","uc_match":"1f6b6-1f3fb-2640-fe0f","uc_greedy":"1f6b6-1f3fb-2640","shortnames":[":woman_walking_light_skin_tone:"],"category":"people"},":woman_walking_tone2:":{"uc_base":"1f6b6-1f3fc-2640","uc_output":"1f6b6-1f3fc-200d-2640-fe0f","uc_match":"1f6b6-1f3fc-2640-fe0f","uc_greedy":"1f6b6-1f3fc-2640","shortnames":[":woman_walking_medium_light_skin_tone:"],"category":"people"},":woman_walking_tone3:":{"uc_base":"1f6b6-1f3fd-2640","uc_output":"1f6b6-1f3fd-200d-2640-fe0f","uc_match":"1f6b6-1f3fd-2640-fe0f","uc_greedy":"1f6b6-1f3fd-2640","shortnames":[":woman_walking_medium_skin_tone:"],"category":"people"},":woman_walking_tone4:":{"uc_base":"1f6b6-1f3fe-2640","uc_output":"1f6b6-1f3fe-200d-2640-fe0f","uc_match":"1f6b6-1f3fe-2640-fe0f","uc_greedy":"1f6b6-1f3fe-2640","shortnames":[":woman_walking_medium_dark_skin_tone:"],"category":"people"},":woman_walking_tone5:":{"uc_base":"1f6b6-1f3ff-2640","uc_output":"1f6b6-1f3ff-200d-2640-fe0f","uc_match":"1f6b6-1f3ff-2640-fe0f","uc_greedy":"1f6b6-1f3ff-2640","shortnames":[":woman_walking_dark_skin_tone:"],"category":"people"},":woman_wearing_turban_tone1:":{"uc_base":"1f473-1f3fb-2640","uc_output":"1f473-1f3fb-200d-2640-fe0f","uc_match":"1f473-1f3fb-2640-fe0f","uc_greedy":"1f473-1f3fb-2640","shortnames":[":woman_wearing_turban_light_skin_tone:"],"category":"people"},":woman_wearing_turban_tone2:":{"uc_base":"1f473-1f3fc-2640","uc_output":"1f473-1f3fc-200d-2640-fe0f","uc_match":"1f473-1f3fc-2640-fe0f","uc_greedy":"1f473-1f3fc-2640","shortnames":[":woman_wearing_turban_medium_light_skin_tone:"],"category":"people"},":woman_wearing_turban_tone3:":{"uc_base":"1f473-1f3fd-2640","uc_output":"1f473-1f3fd-200d-2640-fe0f","uc_match":"1f473-1f3fd-2640-fe0f","uc_greedy":"1f473-1f3fd-2640","shortnames":[":woman_wearing_turban_medium_skin_tone:"],"category":"people"},":woman_wearing_turban_tone4:":{"uc_base":"1f473-1f3fe-2640","uc_output":"1f473-1f3fe-200d-2640-fe0f","uc_match":"1f473-1f3fe-2640-fe0f","uc_greedy":"1f473-1f3fe-2640","shortnames":[":woman_wearing_turban_medium_dark_skin_tone:"],"category":"people"},":woman_wearing_turban_tone5:":{"uc_base":"1f473-1f3ff-2640","uc_output":"1f473-1f3ff-200d-2640-fe0f","uc_match":"1f473-1f3ff-2640-fe0f","uc_greedy":"1f473-1f3ff-2640","shortnames":[":woman_wearing_turban_dark_skin_tone:"],"category":"people"},":man_bouncing_ball_tone1:":{"uc_base":"26f9-1f3fb-2642","uc_output":"26f9-1f3fb-200d-2642-fe0f","uc_match":"26f9-fe0f-1f3fb-2642-fe0f","uc_greedy":"26f9-1f3fb-2642","shortnames":[":man_bouncing_ball_light_skin_tone:"],"category":"activity"},":man_bouncing_ball_tone2:":{"uc_base":"26f9-1f3fc-2642","uc_output":"26f9-1f3fc-200d-2642-fe0f","uc_match":"26f9-fe0f-1f3fc-2642-fe0f","uc_greedy":"26f9-1f3fc-2642","shortnames":[":man_bouncing_ball_medium_light_skin_tone:"],"category":"activity"},":man_bouncing_ball_tone3:":{"uc_base":"26f9-1f3fd-2642","uc_output":"26f9-1f3fd-200d-2642-fe0f","uc_match":"26f9-fe0f-1f3fd-2642-fe0f","uc_greedy":"26f9-1f3fd-2642","shortnames":[":man_bouncing_ball_medium_skin_tone:"],"category":"activity"},":man_bouncing_ball_tone4:":{"uc_base":"26f9-1f3fe-2642","uc_output":"26f9-1f3fe-200d-2642-fe0f","uc_match":"26f9-fe0f-1f3fe-2642-fe0f","uc_greedy":"26f9-1f3fe-2642","shortnames":[":man_bouncing_ball_medium_dark_skin_tone:"],"category":"activity"},":man_bouncing_ball_tone5:":{"uc_base":"26f9-1f3ff-2642","uc_output":"26f9-1f3ff-200d-2642-fe0f","uc_match":"26f9-fe0f-1f3ff-2642-fe0f","uc_greedy":"26f9-1f3ff-2642","shortnames":[":man_bouncing_ball_dark_skin_tone:"],"category":"activity"},":man_detective:":{"uc_base":"1f575-2642","uc_output":"1f575-fe0f-200d-2642-fe0f","uc_match":"1f575-fe0f-2642-fe0f","uc_greedy":"1f575-2642","shortnames":[],"category":"people"},":man_golfing:":{"uc_base":"1f3cc-2642","uc_output":"1f3cc-fe0f-200d-2642-fe0f","uc_match":"1f3cc-fe0f-2642-fe0f","uc_greedy":"1f3cc-2642","shortnames":[],"category":"activity"},":man_lifting_weights:":{"uc_base":"1f3cb-2642","uc_output":"1f3cb-fe0f-200d-2642-fe0f","uc_match":"1f3cb-fe0f-2642-fe0f","uc_greedy":"1f3cb-2642","shortnames":[],"category":"activity"},":woman_bouncing_ball_tone1:":{"uc_base":"26f9-1f3fb-2640","uc_output":"26f9-1f3fb-200d-2640-fe0f","uc_match":"26f9-fe0f-1f3fb-2640-fe0f","uc_greedy":"26f9-1f3fb-2640","shortnames":[":woman_bouncing_ball_light_skin_tone:"],"category":"activity"},":woman_bouncing_ball_tone2:":{"uc_base":"26f9-1f3fc-2640","uc_output":"26f9-1f3fc-200d-2640-fe0f","uc_match":"26f9-fe0f-1f3fc-2640-fe0f","uc_greedy":"26f9-1f3fc-2640","shortnames":[":woman_bouncing_ball_medium_light_skin_tone:"],"category":"activity"},":woman_bouncing_ball_tone3:":{"uc_base":"26f9-1f3fd-2640","uc_output":"26f9-1f3fd-200d-2640-fe0f","uc_match":"26f9-fe0f-1f3fd-2640-fe0f","uc_greedy":"26f9-1f3fd-2640","shortnames":[":woman_bouncing_ball_medium_skin_tone:"],"category":"activity"},":woman_bouncing_ball_tone4:":{"uc_base":"26f9-1f3fe-2640","uc_output":"26f9-1f3fe-200d-2640-fe0f","uc_match":"26f9-fe0f-1f3fe-2640-fe0f","uc_greedy":"26f9-1f3fe-2640","shortnames":[":woman_bouncing_ball_medium_dark_skin_tone:"],"category":"activity"},":woman_bouncing_ball_tone5:":{"uc_base":"26f9-1f3ff-2640","uc_output":"26f9-1f3ff-200d-2640-fe0f","uc_match":"26f9-fe0f-1f3ff-2640-fe0f","uc_greedy":"26f9-1f3ff-2640","shortnames":[":woman_bouncing_ball_dark_skin_tone:"],"category":"activity"},":woman_detective:":{"uc_base":"1f575-2640","uc_output":"1f575-fe0f-200d-2640-fe0f","uc_match":"1f575-fe0f-2640-fe0f","uc_greedy":"1f575-2640","shortnames":[],"category":"people"},":woman_golfing:":{"uc_base":"1f3cc-2640","uc_output":"1f3cc-fe0f-200d-2640-fe0f","uc_match":"1f3cc-fe0f-2640-fe0f","uc_greedy":"1f3cc-2640","shortnames":[],"category":"activity"},":woman_lifting_weights:":{"uc_base":"1f3cb-2640","uc_output":"1f3cb-fe0f-200d-2640-fe0f","uc_match":"1f3cb-fe0f-2640-fe0f","uc_greedy":"1f3cb-2640","shortnames":[],"category":"activity"},":man_bouncing_ball:":{"uc_base":"26f9-2642","uc_output":"26f9-fe0f-200d-2642-fe0f","uc_match":"26f9-fe0f-2642-fe0f","uc_greedy":"26f9-2642","shortnames":[],"category":"activity"},":woman_bouncing_ball:":{"uc_base":"26f9-2640","uc_output":"26f9-fe0f-200d-2640-fe0f","uc_match":"26f9-fe0f-2640-fe0f","uc_greedy":"26f9-2640","shortnames":[],"category":"activity"},":man_artist_tone1:":{"uc_base":"1f468-1f3fb-1f3a8","uc_output":"1f468-1f3fb-200d-1f3a8","uc_match":"1f468-1f3fb-1f3a8","uc_greedy":"1f468-1f3fb-1f3a8","shortnames":[":man_artist_light_skin_tone:"],"category":"people"},":man_artist_tone2:":{"uc_base":"1f468-1f3fc-1f3a8","uc_output":"1f468-1f3fc-200d-1f3a8","uc_match":"1f468-1f3fc-1f3a8","uc_greedy":"1f468-1f3fc-1f3a8","shortnames":[":man_artist_medium_light_skin_tone:"],"category":"people"},":man_artist_tone3:":{"uc_base":"1f468-1f3fd-1f3a8","uc_output":"1f468-1f3fd-200d-1f3a8","uc_match":"1f468-1f3fd-1f3a8","uc_greedy":"1f468-1f3fd-1f3a8","shortnames":[":man_artist_medium_skin_tone:"],"category":"people"},":man_artist_tone4:":{"uc_base":"1f468-1f3fe-1f3a8","uc_output":"1f468-1f3fe-200d-1f3a8","uc_match":"1f468-1f3fe-1f3a8","uc_greedy":"1f468-1f3fe-1f3a8","shortnames":[":man_artist_medium_dark_skin_tone:"],"category":"people"},":man_artist_tone5:":{"uc_base":"1f468-1f3ff-1f3a8","uc_output":"1f468-1f3ff-200d-1f3a8","uc_match":"1f468-1f3ff-1f3a8","uc_greedy":"1f468-1f3ff-1f3a8","shortnames":[":man_artist_dark_skin_tone:"],"category":"people"},":man_astronaut_tone1:":{"uc_base":"1f468-1f3fb-1f680","uc_output":"1f468-1f3fb-200d-1f680","uc_match":"1f468-1f3fb-1f680","uc_greedy":"1f468-1f3fb-1f680","shortnames":[":man_astronaut_light_skin_tone:"],"category":"people"},":man_astronaut_tone2:":{"uc_base":"1f468-1f3fc-1f680","uc_output":"1f468-1f3fc-200d-1f680","uc_match":"1f468-1f3fc-1f680","uc_greedy":"1f468-1f3fc-1f680","shortnames":[":man_astronaut_medium_light_skin_tone:"],"category":"people"},":man_astronaut_tone3:":{"uc_base":"1f468-1f3fd-1f680","uc_output":"1f468-1f3fd-200d-1f680","uc_match":"1f468-1f3fd-1f680","uc_greedy":"1f468-1f3fd-1f680","shortnames":[":man_astronaut_medium_skin_tone:"],"category":"people"},":man_astronaut_tone4:":{"uc_base":"1f468-1f3fe-1f680","uc_output":"1f468-1f3fe-200d-1f680","uc_match":"1f468-1f3fe-1f680","uc_greedy":"1f468-1f3fe-1f680","shortnames":[":man_astronaut_medium_dark_skin_tone:"],"category":"people"},":man_astronaut_tone5:":{"uc_base":"1f468-1f3ff-1f680","uc_output":"1f468-1f3ff-200d-1f680","uc_match":"1f468-1f3ff-1f680","uc_greedy":"1f468-1f3ff-1f680","shortnames":[":man_astronaut_dark_skin_tone:"],"category":"people"},":man_cook_tone1:":{"uc_base":"1f468-1f3fb-1f373","uc_output":"1f468-1f3fb-200d-1f373","uc_match":"1f468-1f3fb-1f373","uc_greedy":"1f468-1f3fb-1f373","shortnames":[":man_cook_light_skin_tone:"],"category":"people"},":man_cook_tone2:":{"uc_base":"1f468-1f3fc-1f373","uc_output":"1f468-1f3fc-200d-1f373","uc_match":"1f468-1f3fc-1f373","uc_greedy":"1f468-1f3fc-1f373","shortnames":[":man_cook_medium_light_skin_tone:"],"category":"people"},":man_cook_tone3:":{"uc_base":"1f468-1f3fd-1f373","uc_output":"1f468-1f3fd-200d-1f373","uc_match":"1f468-1f3fd-1f373","uc_greedy":"1f468-1f3fd-1f373","shortnames":[":man_cook_medium_skin_tone:"],"category":"people"},":man_cook_tone4:":{"uc_base":"1f468-1f3fe-1f373","uc_output":"1f468-1f3fe-200d-1f373","uc_match":"1f468-1f3fe-1f373","uc_greedy":"1f468-1f3fe-1f373","shortnames":[":man_cook_medium_dark_skin_tone:"],"category":"people"},":man_cook_tone5:":{"uc_base":"1f468-1f3ff-1f373","uc_output":"1f468-1f3ff-200d-1f373","uc_match":"1f468-1f3ff-1f373","uc_greedy":"1f468-1f3ff-1f373","shortnames":[":man_cook_dark_skin_tone:"],"category":"people"},":man_factory_worker_tone1:":{"uc_base":"1f468-1f3fb-1f3ed","uc_output":"1f468-1f3fb-200d-1f3ed","uc_match":"1f468-1f3fb-1f3ed","uc_greedy":"1f468-1f3fb-1f3ed","shortnames":[":man_factory_worker_light_skin_tone:"],"category":"people"},":man_factory_worker_tone2:":{"uc_base":"1f468-1f3fc-1f3ed","uc_output":"1f468-1f3fc-200d-1f3ed","uc_match":"1f468-1f3fc-1f3ed","uc_greedy":"1f468-1f3fc-1f3ed","shortnames":[":man_factory_worker_medium_light_skin_tone:"],"category":"people"},":man_factory_worker_tone3:":{"uc_base":"1f468-1f3fd-1f3ed","uc_output":"1f468-1f3fd-200d-1f3ed","uc_match":"1f468-1f3fd-1f3ed","uc_greedy":"1f468-1f3fd-1f3ed","shortnames":[":man_factory_worker_medium_skin_tone:"],"category":"people"},":man_factory_worker_tone4:":{"uc_base":"1f468-1f3fe-1f3ed","uc_output":"1f468-1f3fe-200d-1f3ed","uc_match":"1f468-1f3fe-1f3ed","uc_greedy":"1f468-1f3fe-1f3ed","shortnames":[":man_factory_worker_medium_dark_skin_tone:"],"category":"people"},":man_factory_worker_tone5:":{"uc_base":"1f468-1f3ff-1f3ed","uc_output":"1f468-1f3ff-200d-1f3ed","uc_match":"1f468-1f3ff-1f3ed","uc_greedy":"1f468-1f3ff-1f3ed","shortnames":[":man_factory_worker_dark_skin_tone:"],"category":"people"},":man_farmer_tone1:":{"uc_base":"1f468-1f3fb-1f33e","uc_output":"1f468-1f3fb-200d-1f33e","uc_match":"1f468-1f3fb-1f33e","uc_greedy":"1f468-1f3fb-1f33e","shortnames":[":man_farmer_light_skin_tone:"],"category":"people"},":man_farmer_tone2:":{"uc_base":"1f468-1f3fc-1f33e","uc_output":"1f468-1f3fc-200d-1f33e","uc_match":"1f468-1f3fc-1f33e","uc_greedy":"1f468-1f3fc-1f33e","shortnames":[":man_farmer_medium_light_skin_tone:"],"category":"people"},":man_farmer_tone3:":{"uc_base":"1f468-1f3fd-1f33e","uc_output":"1f468-1f3fd-200d-1f33e","uc_match":"1f468-1f3fd-1f33e","uc_greedy":"1f468-1f3fd-1f33e","shortnames":[":man_farmer_medium_skin_tone:"],"category":"people"},":man_farmer_tone4:":{"uc_base":"1f468-1f3fe-1f33e","uc_output":"1f468-1f3fe-200d-1f33e","uc_match":"1f468-1f3fe-1f33e","uc_greedy":"1f468-1f3fe-1f33e","shortnames":[":man_farmer_medium_dark_skin_tone:"],"category":"people"},":man_farmer_tone5:":{"uc_base":"1f468-1f3ff-1f33e","uc_output":"1f468-1f3ff-200d-1f33e","uc_match":"1f468-1f3ff-1f33e","uc_greedy":"1f468-1f3ff-1f33e","shortnames":[":man_farmer_dark_skin_tone:"],"category":"people"},":man_firefighter_tone1:":{"uc_base":"1f468-1f3fb-1f692","uc_output":"1f468-1f3fb-200d-1f692","uc_match":"1f468-1f3fb-1f692","uc_greedy":"1f468-1f3fb-1f692","shortnames":[":man_firefighter_light_skin_tone:"],"category":"people"},":man_firefighter_tone2:":{"uc_base":"1f468-1f3fc-1f692","uc_output":"1f468-1f3fc-200d-1f692","uc_match":"1f468-1f3fc-1f692","uc_greedy":"1f468-1f3fc-1f692","shortnames":[":man_firefighter_medium_light_skin_tone:"],"category":"people"},":man_firefighter_tone3:":{"uc_base":"1f468-1f3fd-1f692","uc_output":"1f468-1f3fd-200d-1f692","uc_match":"1f468-1f3fd-1f692","uc_greedy":"1f468-1f3fd-1f692","shortnames":[":man_firefighter_medium_skin_tone:"],"category":"people"},":man_firefighter_tone4:":{"uc_base":"1f468-1f3fe-1f692","uc_output":"1f468-1f3fe-200d-1f692","uc_match":"1f468-1f3fe-1f692","uc_greedy":"1f468-1f3fe-1f692","shortnames":[":man_firefighter_medium_dark_skin_tone:"],"category":"people"},":man_firefighter_tone5:":{"uc_base":"1f468-1f3ff-1f692","uc_output":"1f468-1f3ff-200d-1f692","uc_match":"1f468-1f3ff-1f692","uc_greedy":"1f468-1f3ff-1f692","shortnames":[":man_firefighter_dark_skin_tone:"],"category":"people"},":man_mechanic_tone1:":{"uc_base":"1f468-1f3fb-1f527","uc_output":"1f468-1f3fb-200d-1f527","uc_match":"1f468-1f3fb-1f527","uc_greedy":"1f468-1f3fb-1f527","shortnames":[":man_mechanic_light_skin_tone:"],"category":"people"},":man_mechanic_tone2:":{"uc_base":"1f468-1f3fc-1f527","uc_output":"1f468-1f3fc-200d-1f527","uc_match":"1f468-1f3fc-1f527","uc_greedy":"1f468-1f3fc-1f527","shortnames":[":man_mechanic_medium_light_skin_tone:"],"category":"people"},":man_mechanic_tone3:":{"uc_base":"1f468-1f3fd-1f527","uc_output":"1f468-1f3fd-200d-1f527","uc_match":"1f468-1f3fd-1f527","uc_greedy":"1f468-1f3fd-1f527","shortnames":[":man_mechanic_medium_skin_tone:"],"category":"people"},":man_mechanic_tone4:":{"uc_base":"1f468-1f3fe-1f527","uc_output":"1f468-1f3fe-200d-1f527","uc_match":"1f468-1f3fe-1f527","uc_greedy":"1f468-1f3fe-1f527","shortnames":[":man_mechanic_medium_dark_skin_tone:"],"category":"people"},":man_mechanic_tone5:":{"uc_base":"1f468-1f3ff-1f527","uc_output":"1f468-1f3ff-200d-1f527","uc_match":"1f468-1f3ff-1f527","uc_greedy":"1f468-1f3ff-1f527","shortnames":[":man_mechanic_dark_skin_tone:"],"category":"people"},":man_office_worker_tone1:":{"uc_base":"1f468-1f3fb-1f4bc","uc_output":"1f468-1f3fb-200d-1f4bc","uc_match":"1f468-1f3fb-1f4bc","uc_greedy":"1f468-1f3fb-1f4bc","shortnames":[":man_office_worker_light_skin_tone:"],"category":"people"},":man_office_worker_tone2:":{"uc_base":"1f468-1f3fc-1f4bc","uc_output":"1f468-1f3fc-200d-1f4bc","uc_match":"1f468-1f3fc-1f4bc","uc_greedy":"1f468-1f3fc-1f4bc","shortnames":[":man_office_worker_medium_light_skin_tone:"],"category":"people"},":man_office_worker_tone3:":{"uc_base":"1f468-1f3fd-1f4bc","uc_output":"1f468-1f3fd-200d-1f4bc","uc_match":"1f468-1f3fd-1f4bc","uc_greedy":"1f468-1f3fd-1f4bc","shortnames":[":man_office_worker_medium_skin_tone:"],"category":"people"},":man_office_worker_tone4:":{"uc_base":"1f468-1f3fe-1f4bc","uc_output":"1f468-1f3fe-200d-1f4bc","uc_match":"1f468-1f3fe-1f4bc","uc_greedy":"1f468-1f3fe-1f4bc","shortnames":[":man_office_worker_medium_dark_skin_tone:"],"category":"people"},":man_office_worker_tone5:":{"uc_base":"1f468-1f3ff-1f4bc","uc_output":"1f468-1f3ff-200d-1f4bc","uc_match":"1f468-1f3ff-1f4bc","uc_greedy":"1f468-1f3ff-1f4bc","shortnames":[":man_office_worker_dark_skin_tone:"],"category":"people"},":man_scientist_tone1:":{"uc_base":"1f468-1f3fb-1f52c","uc_output":"1f468-1f3fb-200d-1f52c","uc_match":"1f468-1f3fb-1f52c","uc_greedy":"1f468-1f3fb-1f52c","shortnames":[":man_scientist_light_skin_tone:"],"category":"people"},":man_scientist_tone2:":{"uc_base":"1f468-1f3fc-1f52c","uc_output":"1f468-1f3fc-200d-1f52c","uc_match":"1f468-1f3fc-1f52c","uc_greedy":"1f468-1f3fc-1f52c","shortnames":[":man_scientist_medium_light_skin_tone:"],"category":"people"},":man_scientist_tone3:":{"uc_base":"1f468-1f3fd-1f52c","uc_output":"1f468-1f3fd-200d-1f52c","uc_match":"1f468-1f3fd-1f52c","uc_greedy":"1f468-1f3fd-1f52c","shortnames":[":man_scientist_medium_skin_tone:"],"category":"people"},":man_scientist_tone4:":{"uc_base":"1f468-1f3fe-1f52c","uc_output":"1f468-1f3fe-200d-1f52c","uc_match":"1f468-1f3fe-1f52c","uc_greedy":"1f468-1f3fe-1f52c","shortnames":[":man_scientist_medium_dark_skin_tone:"],"category":"people"},":man_scientist_tone5:":{"uc_base":"1f468-1f3ff-1f52c","uc_output":"1f468-1f3ff-200d-1f52c","uc_match":"1f468-1f3ff-1f52c","uc_greedy":"1f468-1f3ff-1f52c","shortnames":[":man_scientist_dark_skin_tone:"],"category":"people"},":man_singer_tone1:":{"uc_base":"1f468-1f3fb-1f3a4","uc_output":"1f468-1f3fb-200d-1f3a4","uc_match":"1f468-1f3fb-1f3a4","uc_greedy":"1f468-1f3fb-1f3a4","shortnames":[":man_singer_light_skin_tone:"],"category":"people"},":man_singer_tone2:":{"uc_base":"1f468-1f3fc-1f3a4","uc_output":"1f468-1f3fc-200d-1f3a4","uc_match":"1f468-1f3fc-1f3a4","uc_greedy":"1f468-1f3fc-1f3a4","shortnames":[":man_singer_medium_light_skin_tone:"],"category":"people"},":man_singer_tone3:":{"uc_base":"1f468-1f3fd-1f3a4","uc_output":"1f468-1f3fd-200d-1f3a4","uc_match":"1f468-1f3fd-1f3a4","uc_greedy":"1f468-1f3fd-1f3a4","shortnames":[":man_singer_medium_skin_tone:"],"category":"people"},":man_singer_tone4:":{"uc_base":"1f468-1f3fe-1f3a4","uc_output":"1f468-1f3fe-200d-1f3a4","uc_match":"1f468-1f3fe-1f3a4","uc_greedy":"1f468-1f3fe-1f3a4","shortnames":[":man_singer_medium_dark_skin_tone:"],"category":"people"},":man_singer_tone5:":{"uc_base":"1f468-1f3ff-1f3a4","uc_output":"1f468-1f3ff-200d-1f3a4","uc_match":"1f468-1f3ff-1f3a4","uc_greedy":"1f468-1f3ff-1f3a4","shortnames":[":man_singer_dark_skin_tone:"],"category":"people"},":man_student_tone1:":{"uc_base":"1f468-1f3fb-1f393","uc_output":"1f468-1f3fb-200d-1f393","uc_match":"1f468-1f3fb-1f393","uc_greedy":"1f468-1f3fb-1f393","shortnames":[":man_student_light_skin_tone:"],"category":"people"},":man_student_tone2:":{"uc_base":"1f468-1f3fc-1f393","uc_output":"1f468-1f3fc-200d-1f393","uc_match":"1f468-1f3fc-1f393","uc_greedy":"1f468-1f3fc-1f393","shortnames":[":man_student_medium_light_skin_tone:"],"category":"people"},":man_student_tone3:":{"uc_base":"1f468-1f3fd-1f393","uc_output":"1f468-1f3fd-200d-1f393","uc_match":"1f468-1f3fd-1f393","uc_greedy":"1f468-1f3fd-1f393","shortnames":[":man_student_medium_skin_tone:"],"category":"people"},":man_student_tone4:":{"uc_base":"1f468-1f3fe-1f393","uc_output":"1f468-1f3fe-200d-1f393","uc_match":"1f468-1f3fe-1f393","uc_greedy":"1f468-1f3fe-1f393","shortnames":[":man_student_medium_dark_skin_tone:"],"category":"people"},":man_student_tone5:":{"uc_base":"1f468-1f3ff-1f393","uc_output":"1f468-1f3ff-200d-1f393","uc_match":"1f468-1f3ff-1f393","uc_greedy":"1f468-1f3ff-1f393","shortnames":[":man_student_dark_skin_tone:"],"category":"people"},":man_teacher_tone1:":{"uc_base":"1f468-1f3fb-1f3eb","uc_output":"1f468-1f3fb-200d-1f3eb","uc_match":"1f468-1f3fb-1f3eb","uc_greedy":"1f468-1f3fb-1f3eb","shortnames":[":man_teacher_light_skin_tone:"],"category":"people"},":man_teacher_tone2:":{"uc_base":"1f468-1f3fc-1f3eb","uc_output":"1f468-1f3fc-200d-1f3eb","uc_match":"1f468-1f3fc-1f3eb","uc_greedy":"1f468-1f3fc-1f3eb","shortnames":[":man_teacher_medium_light_skin_tone:"],"category":"people"},":man_teacher_tone3:":{"uc_base":"1f468-1f3fd-1f3eb","uc_output":"1f468-1f3fd-200d-1f3eb","uc_match":"1f468-1f3fd-1f3eb","uc_greedy":"1f468-1f3fd-1f3eb","shortnames":[":man_teacher_medium_skin_tone:"],"category":"people"},":man_teacher_tone4:":{"uc_base":"1f468-1f3fe-1f3eb","uc_output":"1f468-1f3fe-200d-1f3eb","uc_match":"1f468-1f3fe-1f3eb","uc_greedy":"1f468-1f3fe-1f3eb","shortnames":[":man_teacher_medium_dark_skin_tone:"],"category":"people"},":man_teacher_tone5:":{"uc_base":"1f468-1f3ff-1f3eb","uc_output":"1f468-1f3ff-200d-1f3eb","uc_match":"1f468-1f3ff-1f3eb","uc_greedy":"1f468-1f3ff-1f3eb","shortnames":[":man_teacher_dark_skin_tone:"],"category":"people"},":man_technologist_tone1:":{"uc_base":"1f468-1f3fb-1f4bb","uc_output":"1f468-1f3fb-200d-1f4bb","uc_match":"1f468-1f3fb-1f4bb","uc_greedy":"1f468-1f3fb-1f4bb","shortnames":[":man_technologist_light_skin_tone:"],"category":"people"},":man_technologist_tone2:":{"uc_base":"1f468-1f3fc-1f4bb","uc_output":"1f468-1f3fc-200d-1f4bb","uc_match":"1f468-1f3fc-1f4bb","uc_greedy":"1f468-1f3fc-1f4bb","shortnames":[":man_technologist_medium_light_skin_tone:"],"category":"people"},":man_technologist_tone3:":{"uc_base":"1f468-1f3fd-1f4bb","uc_output":"1f468-1f3fd-200d-1f4bb","uc_match":"1f468-1f3fd-1f4bb","uc_greedy":"1f468-1f3fd-1f4bb","shortnames":[":man_technologist_medium_skin_tone:"],"category":"people"},":man_technologist_tone4:":{"uc_base":"1f468-1f3fe-1f4bb","uc_output":"1f468-1f3fe-200d-1f4bb","uc_match":"1f468-1f3fe-1f4bb","uc_greedy":"1f468-1f3fe-1f4bb","shortnames":[":man_technologist_medium_dark_skin_tone:"],"category":"people"},":man_technologist_tone5:":{"uc_base":"1f468-1f3ff-1f4bb","uc_output":"1f468-1f3ff-200d-1f4bb","uc_match":"1f468-1f3ff-1f4bb","uc_greedy":"1f468-1f3ff-1f4bb","shortnames":[":man_technologist_dark_skin_tone:"],"category":"people"},":woman_artist_tone1:":{"uc_base":"1f469-1f3fb-1f3a8","uc_output":"1f469-1f3fb-200d-1f3a8","uc_match":"1f469-1f3fb-1f3a8","uc_greedy":"1f469-1f3fb-1f3a8","shortnames":[":woman_artist_light_skin_tone:"],"category":"people"},":woman_artist_tone2:":{"uc_base":"1f469-1f3fc-1f3a8","uc_output":"1f469-1f3fc-200d-1f3a8","uc_match":"1f469-1f3fc-1f3a8","uc_greedy":"1f469-1f3fc-1f3a8","shortnames":[":woman_artist_medium_light_skin_tone:"],"category":"people"},":woman_artist_tone3:":{"uc_base":"1f469-1f3fd-1f3a8","uc_output":"1f469-1f3fd-200d-1f3a8","uc_match":"1f469-1f3fd-1f3a8","uc_greedy":"1f469-1f3fd-1f3a8","shortnames":[":woman_artist_medium_skin_tone:"],"category":"people"},":woman_artist_tone4:":{"uc_base":"1f469-1f3fe-1f3a8","uc_output":"1f469-1f3fe-200d-1f3a8","uc_match":"1f469-1f3fe-1f3a8","uc_greedy":"1f469-1f3fe-1f3a8","shortnames":[":woman_artist_medium_dark_skin_tone:"],"category":"people"},":woman_artist_tone5:":{"uc_base":"1f469-1f3ff-1f3a8","uc_output":"1f469-1f3ff-200d-1f3a8","uc_match":"1f469-1f3ff-1f3a8","uc_greedy":"1f469-1f3ff-1f3a8","shortnames":[":woman_artist_dark_skin_tone:"],"category":"people"},":woman_astronaut_tone1:":{"uc_base":"1f469-1f3fb-1f680","uc_output":"1f469-1f3fb-200d-1f680","uc_match":"1f469-1f3fb-1f680","uc_greedy":"1f469-1f3fb-1f680","shortnames":[":woman_astronaut_light_skin_tone:"],"category":"people"},":woman_astronaut_tone2:":{"uc_base":"1f469-1f3fc-1f680","uc_output":"1f469-1f3fc-200d-1f680","uc_match":"1f469-1f3fc-1f680","uc_greedy":"1f469-1f3fc-1f680","shortnames":[":woman_astronaut_medium_light_skin_tone:"],"category":"people"},":woman_astronaut_tone3:":{"uc_base":"1f469-1f3fd-1f680","uc_output":"1f469-1f3fd-200d-1f680","uc_match":"1f469-1f3fd-1f680","uc_greedy":"1f469-1f3fd-1f680","shortnames":[":woman_astronaut_medium_skin_tone:"],"category":"people"},":woman_astronaut_tone4:":{"uc_base":"1f469-1f3fe-1f680","uc_output":"1f469-1f3fe-200d-1f680","uc_match":"1f469-1f3fe-1f680","uc_greedy":"1f469-1f3fe-1f680","shortnames":[":woman_astronaut_medium_dark_skin_tone:"],"category":"people"},":woman_astronaut_tone5:":{"uc_base":"1f469-1f3ff-1f680","uc_output":"1f469-1f3ff-200d-1f680","uc_match":"1f469-1f3ff-1f680","uc_greedy":"1f469-1f3ff-1f680","shortnames":[":woman_astronaut_dark_skin_tone:"],"category":"people"},":woman_cook_tone1:":{"uc_base":"1f469-1f3fb-1f373","uc_output":"1f469-1f3fb-200d-1f373","uc_match":"1f469-1f3fb-1f373","uc_greedy":"1f469-1f3fb-1f373","shortnames":[":woman_cook_light_skin_tone:"],"category":"people"},":woman_cook_tone2:":{"uc_base":"1f469-1f3fc-1f373","uc_output":"1f469-1f3fc-200d-1f373","uc_match":"1f469-1f3fc-1f373","uc_greedy":"1f469-1f3fc-1f373","shortnames":[":woman_cook_medium_light_skin_tone:"],"category":"people"},":woman_cook_tone3:":{"uc_base":"1f469-1f3fd-1f373","uc_output":"1f469-1f3fd-200d-1f373","uc_match":"1f469-1f3fd-1f373","uc_greedy":"1f469-1f3fd-1f373","shortnames":[":woman_cook_medium_skin_tone:"],"category":"people"},":woman_cook_tone4:":{"uc_base":"1f469-1f3fe-1f373","uc_output":"1f469-1f3fe-200d-1f373","uc_match":"1f469-1f3fe-1f373","uc_greedy":"1f469-1f3fe-1f373","shortnames":[":woman_cook_medium_dark_skin_tone:"],"category":"people"},":woman_cook_tone5:":{"uc_base":"1f469-1f3ff-1f373","uc_output":"1f469-1f3ff-200d-1f373","uc_match":"1f469-1f3ff-1f373","uc_greedy":"1f469-1f3ff-1f373","shortnames":[":woman_cook_dark_skin_tone:"],"category":"people"},":woman_factory_worker_tone1:":{"uc_base":"1f469-1f3fb-1f3ed","uc_output":"1f469-1f3fb-200d-1f3ed","uc_match":"1f469-1f3fb-1f3ed","uc_greedy":"1f469-1f3fb-1f3ed","shortnames":[":woman_factory_worker_light_skin_tone:"],"category":"people"},":woman_factory_worker_tone2:":{"uc_base":"1f469-1f3fc-1f3ed","uc_output":"1f469-1f3fc-200d-1f3ed","uc_match":"1f469-1f3fc-1f3ed","uc_greedy":"1f469-1f3fc-1f3ed","shortnames":[":woman_factory_worker_medium_light_skin_tone:"],"category":"people"},":woman_factory_worker_tone3:":{"uc_base":"1f469-1f3fd-1f3ed","uc_output":"1f469-1f3fd-200d-1f3ed","uc_match":"1f469-1f3fd-1f3ed","uc_greedy":"1f469-1f3fd-1f3ed","shortnames":[":woman_factory_worker_medium_skin_tone:"],"category":"people"},":woman_factory_worker_tone4:":{"uc_base":"1f469-1f3fe-1f3ed","uc_output":"1f469-1f3fe-200d-1f3ed","uc_match":"1f469-1f3fe-1f3ed","uc_greedy":"1f469-1f3fe-1f3ed","shortnames":[":woman_factory_worker_medium_dark_skin_tone:"],"category":"people"},":woman_factory_worker_tone5:":{"uc_base":"1f469-1f3ff-1f3ed","uc_output":"1f469-1f3ff-200d-1f3ed","uc_match":"1f469-1f3ff-1f3ed","uc_greedy":"1f469-1f3ff-1f3ed","shortnames":[":woman_factory_worker_dark_skin_tone:"],"category":"people"},":woman_farmer_tone1:":{"uc_base":"1f469-1f3fb-1f33e","uc_output":"1f469-1f3fb-200d-1f33e","uc_match":"1f469-1f3fb-1f33e","uc_greedy":"1f469-1f3fb-1f33e","shortnames":[":woman_farmer_light_skin_tone:"],"category":"people"},":woman_farmer_tone2:":{"uc_base":"1f469-1f3fc-1f33e","uc_output":"1f469-1f3fc-200d-1f33e","uc_match":"1f469-1f3fc-1f33e","uc_greedy":"1f469-1f3fc-1f33e","shortnames":[":woman_farmer_medium_light_skin_tone:"],"category":"people"},":woman_farmer_tone3:":{"uc_base":"1f469-1f3fd-1f33e","uc_output":"1f469-1f3fd-200d-1f33e","uc_match":"1f469-1f3fd-1f33e","uc_greedy":"1f469-1f3fd-1f33e","shortnames":[":woman_farmer_medium_skin_tone:"],"category":"people"},":woman_farmer_tone4:":{"uc_base":"1f469-1f3fe-1f33e","uc_output":"1f469-1f3fe-200d-1f33e","uc_match":"1f469-1f3fe-1f33e","uc_greedy":"1f469-1f3fe-1f33e","shortnames":[":woman_farmer_medium_dark_skin_tone:"],"category":"people"},":woman_farmer_tone5:":{"uc_base":"1f469-1f3ff-1f33e","uc_output":"1f469-1f3ff-200d-1f33e","uc_match":"1f469-1f3ff-1f33e","uc_greedy":"1f469-1f3ff-1f33e","shortnames":[":woman_farmer_dark_skin_tone:"],"category":"people"},":woman_firefighter_tone1:":{"uc_base":"1f469-1f3fb-1f692","uc_output":"1f469-1f3fb-200d-1f692","uc_match":"1f469-1f3fb-1f692","uc_greedy":"1f469-1f3fb-1f692","shortnames":[":woman_firefighter_light_skin_tone:"],"category":"people"},":woman_firefighter_tone2:":{"uc_base":"1f469-1f3fc-1f692","uc_output":"1f469-1f3fc-200d-1f692","uc_match":"1f469-1f3fc-1f692","uc_greedy":"1f469-1f3fc-1f692","shortnames":[":woman_firefighter_medium_light_skin_tone:"],"category":"people"},":woman_firefighter_tone3:":{"uc_base":"1f469-1f3fd-1f692","uc_output":"1f469-1f3fd-200d-1f692","uc_match":"1f469-1f3fd-1f692","uc_greedy":"1f469-1f3fd-1f692","shortnames":[":woman_firefighter_medium_skin_tone:"],"category":"people"},":woman_firefighter_tone4:":{"uc_base":"1f469-1f3fe-1f692","uc_output":"1f469-1f3fe-200d-1f692","uc_match":"1f469-1f3fe-1f692","uc_greedy":"1f469-1f3fe-1f692","shortnames":[":woman_firefighter_medium_dark_skin_tone:"],"category":"people"},":woman_firefighter_tone5:":{"uc_base":"1f469-1f3ff-1f692","uc_output":"1f469-1f3ff-200d-1f692","uc_match":"1f469-1f3ff-1f692","uc_greedy":"1f469-1f3ff-1f692","shortnames":[":woman_firefighter_dark_skin_tone:"],"category":"people"},":woman_mechanic_tone1:":{"uc_base":"1f469-1f3fb-1f527","uc_output":"1f469-1f3fb-200d-1f527","uc_match":"1f469-1f3fb-1f527","uc_greedy":"1f469-1f3fb-1f527","shortnames":[":woman_mechanic_light_skin_tone:"],"category":"people"},":woman_mechanic_tone2:":{"uc_base":"1f469-1f3fc-1f527","uc_output":"1f469-1f3fc-200d-1f527","uc_match":"1f469-1f3fc-1f527","uc_greedy":"1f469-1f3fc-1f527","shortnames":[":woman_mechanic_medium_light_skin_tone:"],"category":"people"},":woman_mechanic_tone3:":{"uc_base":"1f469-1f3fd-1f527","uc_output":"1f469-1f3fd-200d-1f527","uc_match":"1f469-1f3fd-1f527","uc_greedy":"1f469-1f3fd-1f527","shortnames":[":woman_mechanic_medium_skin_tone:"],"category":"people"},":woman_mechanic_tone4:":{"uc_base":"1f469-1f3fe-1f527","uc_output":"1f469-1f3fe-200d-1f527","uc_match":"1f469-1f3fe-1f527","uc_greedy":"1f469-1f3fe-1f527","shortnames":[":woman_mechanic_medium_dark_skin_tone:"],"category":"people"},":woman_mechanic_tone5:":{"uc_base":"1f469-1f3ff-1f527","uc_output":"1f469-1f3ff-200d-1f527","uc_match":"1f469-1f3ff-1f527","uc_greedy":"1f469-1f3ff-1f527","shortnames":[":woman_mechanic_dark_skin_tone:"],"category":"people"},":woman_office_worker_tone1:":{"uc_base":"1f469-1f3fb-1f4bc","uc_output":"1f469-1f3fb-200d-1f4bc","uc_match":"1f469-1f3fb-1f4bc","uc_greedy":"1f469-1f3fb-1f4bc","shortnames":[":woman_office_worker_light_skin_tone:"],"category":"people"},":woman_office_worker_tone2:":{"uc_base":"1f469-1f3fc-1f4bc","uc_output":"1f469-1f3fc-200d-1f4bc","uc_match":"1f469-1f3fc-1f4bc","uc_greedy":"1f469-1f3fc-1f4bc","shortnames":[":woman_office_worker_medium_light_skin_tone:"],"category":"people"},":woman_office_worker_tone3:":{"uc_base":"1f469-1f3fd-1f4bc","uc_output":"1f469-1f3fd-200d-1f4bc","uc_match":"1f469-1f3fd-1f4bc","uc_greedy":"1f469-1f3fd-1f4bc","shortnames":[":woman_office_worker_medium_skin_tone:"],"category":"people"},":woman_office_worker_tone4:":{"uc_base":"1f469-1f3fe-1f4bc","uc_output":"1f469-1f3fe-200d-1f4bc","uc_match":"1f469-1f3fe-1f4bc","uc_greedy":"1f469-1f3fe-1f4bc","shortnames":[":woman_office_worker_medium_dark_skin_tone:"],"category":"people"},":woman_office_worker_tone5:":{"uc_base":"1f469-1f3ff-1f4bc","uc_output":"1f469-1f3ff-200d-1f4bc","uc_match":"1f469-1f3ff-1f4bc","uc_greedy":"1f469-1f3ff-1f4bc","shortnames":[":woman_office_worker_dark_skin_tone:"],"category":"people"},":woman_scientist_tone1:":{"uc_base":"1f469-1f3fb-1f52c","uc_output":"1f469-1f3fb-200d-1f52c","uc_match":"1f469-1f3fb-1f52c","uc_greedy":"1f469-1f3fb-1f52c","shortnames":[":woman_scientist_light_skin_tone:"],"category":"people"},":woman_scientist_tone2:":{"uc_base":"1f469-1f3fc-1f52c","uc_output":"1f469-1f3fc-200d-1f52c","uc_match":"1f469-1f3fc-1f52c","uc_greedy":"1f469-1f3fc-1f52c","shortnames":[":woman_scientist_medium_light_skin_tone:"],"category":"people"},":woman_scientist_tone3:":{"uc_base":"1f469-1f3fd-1f52c","uc_output":"1f469-1f3fd-200d-1f52c","uc_match":"1f469-1f3fd-1f52c","uc_greedy":"1f469-1f3fd-1f52c","shortnames":[":woman_scientist_medium_skin_tone:"],"category":"people"},":woman_scientist_tone4:":{"uc_base":"1f469-1f3fe-1f52c","uc_output":"1f469-1f3fe-200d-1f52c","uc_match":"1f469-1f3fe-1f52c","uc_greedy":"1f469-1f3fe-1f52c","shortnames":[":woman_scientist_medium_dark_skin_tone:"],"category":"people"},":woman_scientist_tone5:":{"uc_base":"1f469-1f3ff-1f52c","uc_output":"1f469-1f3ff-200d-1f52c","uc_match":"1f469-1f3ff-1f52c","uc_greedy":"1f469-1f3ff-1f52c","shortnames":[":woman_scientist_dark_skin_tone:"],"category":"people"},":woman_singer_tone1:":{"uc_base":"1f469-1f3fb-1f3a4","uc_output":"1f469-1f3fb-200d-1f3a4","uc_match":"1f469-1f3fb-1f3a4","uc_greedy":"1f469-1f3fb-1f3a4","shortnames":[":woman_singer_light_skin_tone:"],"category":"people"},":woman_singer_tone2:":{"uc_base":"1f469-1f3fc-1f3a4","uc_output":"1f469-1f3fc-200d-1f3a4","uc_match":"1f469-1f3fc-1f3a4","uc_greedy":"1f469-1f3fc-1f3a4","shortnames":[":woman_singer_medium_light_skin_tone:"],"category":"people"},":woman_singer_tone3:":{"uc_base":"1f469-1f3fd-1f3a4","uc_output":"1f469-1f3fd-200d-1f3a4","uc_match":"1f469-1f3fd-1f3a4","uc_greedy":"1f469-1f3fd-1f3a4","shortnames":[":woman_singer_medium_skin_tone:"],"category":"people"},":woman_singer_tone4:":{"uc_base":"1f469-1f3fe-1f3a4","uc_output":"1f469-1f3fe-200d-1f3a4","uc_match":"1f469-1f3fe-1f3a4","uc_greedy":"1f469-1f3fe-1f3a4","shortnames":[":woman_singer_medium_dark_skin_tone:"],"category":"people"},":woman_singer_tone5:":{"uc_base":"1f469-1f3ff-1f3a4","uc_output":"1f469-1f3ff-200d-1f3a4","uc_match":"1f469-1f3ff-1f3a4","uc_greedy":"1f469-1f3ff-1f3a4","shortnames":[":woman_singer_dark_skin_tone:"],"category":"people"},":woman_student_tone1:":{"uc_base":"1f469-1f3fb-1f393","uc_output":"1f469-1f3fb-200d-1f393","uc_match":"1f469-1f3fb-1f393","uc_greedy":"1f469-1f3fb-1f393","shortnames":[":woman_student_light_skin_tone:"],"category":"people"},":woman_student_tone2:":{"uc_base":"1f469-1f3fc-1f393","uc_output":"1f469-1f3fc-200d-1f393","uc_match":"1f469-1f3fc-1f393","uc_greedy":"1f469-1f3fc-1f393","shortnames":[":woman_student_medium_light_skin_tone:"],"category":"people"},":woman_student_tone3:":{"uc_base":"1f469-1f3fd-1f393","uc_output":"1f469-1f3fd-200d-1f393","uc_match":"1f469-1f3fd-1f393","uc_greedy":"1f469-1f3fd-1f393","shortnames":[":woman_student_medium_skin_tone:"],"category":"people"},":woman_student_tone4:":{"uc_base":"1f469-1f3fe-1f393","uc_output":"1f469-1f3fe-200d-1f393","uc_match":"1f469-1f3fe-1f393","uc_greedy":"1f469-1f3fe-1f393","shortnames":[":woman_student_medium_dark_skin_tone:"],"category":"people"},":woman_student_tone5:":{"uc_base":"1f469-1f3ff-1f393","uc_output":"1f469-1f3ff-200d-1f393","uc_match":"1f469-1f3ff-1f393","uc_greedy":"1f469-1f3ff-1f393","shortnames":[":woman_student_dark_skin_tone:"],"category":"people"},":woman_teacher_tone1:":{"uc_base":"1f469-1f3fb-1f3eb","uc_output":"1f469-1f3fb-200d-1f3eb","uc_match":"1f469-1f3fb-1f3eb","uc_greedy":"1f469-1f3fb-1f3eb","shortnames":[":woman_teacher_light_skin_tone:"],"category":"people"},":woman_teacher_tone2:":{"uc_base":"1f469-1f3fc-1f3eb","uc_output":"1f469-1f3fc-200d-1f3eb","uc_match":"1f469-1f3fc-1f3eb","uc_greedy":"1f469-1f3fc-1f3eb","shortnames":[":woman_teacher_medium_light_skin_tone:"],"category":"people"},":woman_teacher_tone3:":{"uc_base":"1f469-1f3fd-1f3eb","uc_output":"1f469-1f3fd-200d-1f3eb","uc_match":"1f469-1f3fd-1f3eb","uc_greedy":"1f469-1f3fd-1f3eb","shortnames":[":woman_teacher_medium_skin_tone:"],"category":"people"},":woman_teacher_tone4:":{"uc_base":"1f469-1f3fe-1f3eb","uc_output":"1f469-1f3fe-200d-1f3eb","uc_match":"1f469-1f3fe-1f3eb","uc_greedy":"1f469-1f3fe-1f3eb","shortnames":[":woman_teacher_medium_dark_skin_tone:"],"category":"people"},":woman_teacher_tone5:":{"uc_base":"1f469-1f3ff-1f3eb","uc_output":"1f469-1f3ff-200d-1f3eb","uc_match":"1f469-1f3ff-1f3eb","uc_greedy":"1f469-1f3ff-1f3eb","shortnames":[":woman_teacher_dark_skin_tone:"],"category":"people"},":woman_technologist_tone1:":{"uc_base":"1f469-1f3fb-1f4bb","uc_output":"1f469-1f3fb-200d-1f4bb","uc_match":"1f469-1f3fb-1f4bb","uc_greedy":"1f469-1f3fb-1f4bb","shortnames":[":woman_technologist_light_skin_tone:"],"category":"people"},":woman_technologist_tone2:":{"uc_base":"1f469-1f3fc-1f4bb","uc_output":"1f469-1f3fc-200d-1f4bb","uc_match":"1f469-1f3fc-1f4bb","uc_greedy":"1f469-1f3fc-1f4bb","shortnames":[":woman_technologist_medium_light_skin_tone:"],"category":"people"},":woman_technologist_tone3:":{"uc_base":"1f469-1f3fd-1f4bb","uc_output":"1f469-1f3fd-200d-1f4bb","uc_match":"1f469-1f3fd-1f4bb","uc_greedy":"1f469-1f3fd-1f4bb","shortnames":[":woman_technologist_medium_skin_tone:"],"category":"people"},":woman_technologist_tone4:":{"uc_base":"1f469-1f3fe-1f4bb","uc_output":"1f469-1f3fe-200d-1f4bb","uc_match":"1f469-1f3fe-1f4bb","uc_greedy":"1f469-1f3fe-1f4bb","shortnames":[":woman_technologist_medium_dark_skin_tone:"],"category":"people"},":woman_technologist_tone5:":{"uc_base":"1f469-1f3ff-1f4bb","uc_output":"1f469-1f3ff-200d-1f4bb","uc_match":"1f469-1f3ff-1f4bb","uc_greedy":"1f469-1f3ff-1f4bb","shortnames":[":woman_technologist_dark_skin_tone:"],"category":"people"},":rainbow_flag:":{"uc_base":"1f3f3-1f308","uc_output":"1f3f3-fe0f-200d-1f308","uc_match":"1f3f3-fe0f-1f308","uc_greedy":"1f3f3-1f308","shortnames":[":gay_pride_flag:"],"category":"flags"},":blond-haired_man:":{"uc_base":"1f471-2642","uc_output":"1f471-200d-2642-fe0f","uc_match":"1f471-2642-fe0f","uc_greedy":"1f471-2642","shortnames":[],"category":"people"},":blond-haired_woman:":{"uc_base":"1f471-2640","uc_output":"1f471-200d-2640-fe0f","uc_match":"1f471-2640-fe0f","uc_greedy":"1f471-2640","shortnames":[],"category":"people"},":man_biking:":{"uc_base":"1f6b4-2642","uc_output":"1f6b4-200d-2642-fe0f","uc_match":"1f6b4-2642-fe0f","uc_greedy":"1f6b4-2642","shortnames":[],"category":"activity"},":man_bowing:":{"uc_base":"1f647-2642","uc_output":"1f647-200d-2642-fe0f","uc_match":"1f647-2642-fe0f","uc_greedy":"1f647-2642","shortnames":[],"category":"people"},":man_cartwheeling:":{"uc_base":"1f938-2642","uc_output":"1f938-200d-2642-fe0f","uc_match":"1f938-2642-fe0f","uc_greedy":"1f938-2642","shortnames":[],"category":"activity"},":man_climbing:":{"uc_base":"1f9d7-2642","uc_output":"1f9d7-200d-2642-fe0f","uc_match":"1f9d7-2642-fe0f","uc_greedy":"1f9d7-2642","shortnames":[],"category":"activity"},":man_construction_worker:":{"uc_base":"1f477-2642","uc_output":"1f477-200d-2642-fe0f","uc_match":"1f477-2642-fe0f","uc_greedy":"1f477-2642","shortnames":[],"category":"people"},":man_elf:":{"uc_base":"1f9dd-2642","uc_output":"1f9dd-200d-2642-fe0f","uc_match":"1f9dd-2642-fe0f","uc_greedy":"1f9dd-2642","shortnames":[],"category":"people"},":man_facepalming:":{"uc_base":"1f926-2642","uc_output":"1f926-200d-2642-fe0f","uc_match":"1f926-2642-fe0f","uc_greedy":"1f926-2642","shortnames":[],"category":"people"},":man_fairy:":{"uc_base":"1f9da-2642","uc_output":"1f9da-200d-2642-fe0f","uc_match":"1f9da-2642-fe0f","uc_greedy":"1f9da-2642","shortnames":[],"category":"people"},":man_frowning:":{"uc_base":"1f64d-2642","uc_output":"1f64d-200d-2642-fe0f","uc_match":"1f64d-2642-fe0f","uc_greedy":"1f64d-2642","shortnames":[],"category":"people"},":man_genie:":{"uc_base":"1f9de-2642","uc_output":"1f9de-200d-2642-fe0f","uc_match":"1f9de-2642-fe0f","uc_greedy":"1f9de-2642","shortnames":[],"category":"people"},":man_gesturing_no:":{"uc_base":"1f645-2642","uc_output":"1f645-200d-2642-fe0f","uc_match":"1f645-2642-fe0f","uc_greedy":"1f645-2642","shortnames":[],"category":"people"},":man_gesturing_ok:":{"uc_base":"1f646-2642","uc_output":"1f646-200d-2642-fe0f","uc_match":"1f646-2642-fe0f","uc_greedy":"1f646-2642","shortnames":[],"category":"people"},":man_getting_face_massage:":{"uc_base":"1f486-2642","uc_output":"1f486-200d-2642-fe0f","uc_match":"1f486-2642-fe0f","uc_greedy":"1f486-2642","shortnames":[],"category":"people"},":man_getting_haircut:":{"uc_base":"1f487-2642","uc_output":"1f487-200d-2642-fe0f","uc_match":"1f487-2642-fe0f","uc_greedy":"1f487-2642","shortnames":[],"category":"people"},":man_guard:":{"uc_base":"1f482-2642","uc_output":"1f482-200d-2642-fe0f","uc_match":"1f482-2642-fe0f","uc_greedy":"1f482-2642","shortnames":[],"category":"people"},":man_health_worker:":{"uc_base":"1f468-2695","uc_output":"1f468-200d-2695-fe0f","uc_match":"1f468-2695-fe0f","uc_greedy":"1f468-2695","shortnames":[],"category":"people"},":man_in_lotus_position:":{"uc_base":"1f9d8-2642","uc_output":"1f9d8-200d-2642-fe0f","uc_match":"1f9d8-2642-fe0f","uc_greedy":"1f9d8-2642","shortnames":[],"category":"activity"},":man_in_steamy_room:":{"uc_base":"1f9d6-2642","uc_output":"1f9d6-200d-2642-fe0f","uc_match":"1f9d6-2642-fe0f","uc_greedy":"1f9d6-2642","shortnames":[],"category":"activity"},":man_judge:":{"uc_base":"1f468-2696","uc_output":"1f468-200d-2696-fe0f","uc_match":"1f468-2696-fe0f","uc_greedy":"1f468-2696","shortnames":[],"category":"people"},":man_juggling:":{"uc_base":"1f939-2642","uc_output":"1f939-200d-2642-fe0f","uc_match":"1f939-2642-fe0f","uc_greedy":"1f939-2642","shortnames":[],"category":"activity"},":man_mage:":{"uc_base":"1f9d9-2642","uc_output":"1f9d9-200d-2642-fe0f","uc_match":"1f9d9-2642-fe0f","uc_greedy":"1f9d9-2642","shortnames":[],"category":"people"},":man_mountain_biking:":{"uc_base":"1f6b5-2642","uc_output":"1f6b5-200d-2642-fe0f","uc_match":"1f6b5-2642-fe0f","uc_greedy":"1f6b5-2642","shortnames":[],"category":"activity"},":man_pilot:":{"uc_base":"1f468-2708","uc_output":"1f468-200d-2708-fe0f","uc_match":"1f468-2708-fe0f","uc_greedy":"1f468-2708","shortnames":[],"category":"people"},":man_playing_handball:":{"uc_base":"1f93e-2642","uc_output":"1f93e-200d-2642-fe0f","uc_match":"1f93e-2642-fe0f","uc_greedy":"1f93e-2642","shortnames":[],"category":"activity"},":man_playing_water_polo:":{"uc_base":"1f93d-2642","uc_output":"1f93d-200d-2642-fe0f","uc_match":"1f93d-2642-fe0f","uc_greedy":"1f93d-2642","shortnames":[],"category":"activity"},":man_police_officer:":{"uc_base":"1f46e-2642","uc_output":"1f46e-200d-2642-fe0f","uc_match":"1f46e-2642-fe0f","uc_greedy":"1f46e-2642","shortnames":[],"category":"people"},":man_pouting:":{"uc_base":"1f64e-2642","uc_output":"1f64e-200d-2642-fe0f","uc_match":"1f64e-2642-fe0f","uc_greedy":"1f64e-2642","shortnames":[],"category":"people"},":man_raising_hand:":{"uc_base":"1f64b-2642","uc_output":"1f64b-200d-2642-fe0f","uc_match":"1f64b-2642-fe0f","uc_greedy":"1f64b-2642","shortnames":[],"category":"people"},":man_rowing_boat:":{"uc_base":"1f6a3-2642","uc_output":"1f6a3-200d-2642-fe0f","uc_match":"1f6a3-2642-fe0f","uc_greedy":"1f6a3-2642","shortnames":[],"category":"activity"},":man_running:":{"uc_base":"1f3c3-2642","uc_output":"1f3c3-200d-2642-fe0f","uc_match":"1f3c3-2642-fe0f","uc_greedy":"1f3c3-2642","shortnames":[],"category":"people"},":man_shrugging:":{"uc_base":"1f937-2642","uc_output":"1f937-200d-2642-fe0f","uc_match":"1f937-2642-fe0f","uc_greedy":"1f937-2642","shortnames":[],"category":"people"},":man_surfing:":{"uc_base":"1f3c4-2642","uc_output":"1f3c4-200d-2642-fe0f","uc_match":"1f3c4-2642-fe0f","uc_greedy":"1f3c4-2642","shortnames":[],"category":"activity"},":man_swimming:":{"uc_base":"1f3ca-2642","uc_output":"1f3ca-200d-2642-fe0f","uc_match":"1f3ca-2642-fe0f","uc_greedy":"1f3ca-2642","shortnames":[],"category":"activity"},":man_tipping_hand:":{"uc_base":"1f481-2642","uc_output":"1f481-200d-2642-fe0f","uc_match":"1f481-2642-fe0f","uc_greedy":"1f481-2642","shortnames":[],"category":"people"},":man_vampire:":{"uc_base":"1f9db-2642","uc_output":"1f9db-200d-2642-fe0f","uc_match":"1f9db-2642-fe0f","uc_greedy":"1f9db-2642","shortnames":[],"category":"people"},":man_walking:":{"uc_base":"1f6b6-2642","uc_output":"1f6b6-200d-2642-fe0f","uc_match":"1f6b6-2642-fe0f","uc_greedy":"1f6b6-2642","shortnames":[],"category":"people"},":man_wearing_turban:":{"uc_base":"1f473-2642","uc_output":"1f473-200d-2642-fe0f","uc_match":"1f473-2642-fe0f","uc_greedy":"1f473-2642","shortnames":[],"category":"people"},":man_zombie:":{"uc_base":"1f9df-2642","uc_output":"1f9df-200d-2642-fe0f","uc_match":"1f9df-2642-fe0f","uc_greedy":"1f9df-2642","shortnames":[],"category":"people"},":men_with_bunny_ears_partying:":{"uc_base":"1f46f-2642","uc_output":"1f46f-200d-2642-fe0f","uc_match":"1f46f-2642-fe0f","uc_greedy":"1f46f-2642","shortnames":[],"category":"people"},":men_wrestling:":{"uc_base":"1f93c-2642","uc_output":"1f93c-200d-2642-fe0f","uc_match":"1f93c-2642-fe0f","uc_greedy":"1f93c-2642","shortnames":[],"category":"activity"},":mermaid:":{"uc_base":"1f9dc-2640","uc_output":"1f9dc-200d-2640-fe0f","uc_match":"1f9dc-2640-fe0f","uc_greedy":"1f9dc-2640","shortnames":[],"category":"people"},":merman:":{"uc_base":"1f9dc-2642","uc_output":"1f9dc-200d-2642-fe0f","uc_match":"1f9dc-2642-fe0f","uc_greedy":"1f9dc-2642","shortnames":[],"category":"people"},":woman_biking:":{"uc_base":"1f6b4-2640","uc_output":"1f6b4-200d-2640-fe0f","uc_match":"1f6b4-2640-fe0f","uc_greedy":"1f6b4-2640","shortnames":[],"category":"activity"},":woman_bowing:":{"uc_base":"1f647-2640","uc_output":"1f647-200d-2640-fe0f","uc_match":"1f647-2640-fe0f","uc_greedy":"1f647-2640","shortnames":[],"category":"people"},":woman_cartwheeling:":{"uc_base":"1f938-2640","uc_output":"1f938-200d-2640-fe0f","uc_match":"1f938-2640-fe0f","uc_greedy":"1f938-2640","shortnames":[],"category":"activity"},":woman_climbing:":{"uc_base":"1f9d7-2640","uc_output":"1f9d7-200d-2640-fe0f","uc_match":"1f9d7-2640-fe0f","uc_greedy":"1f9d7-2640","shortnames":[],"category":"activity"},":woman_construction_worker:":{"uc_base":"1f477-2640","uc_output":"1f477-200d-2640-fe0f","uc_match":"1f477-2640-fe0f","uc_greedy":"1f477-2640","shortnames":[],"category":"people"},":woman_elf:":{"uc_base":"1f9dd-2640","uc_output":"1f9dd-200d-2640-fe0f","uc_match":"1f9dd-2640-fe0f","uc_greedy":"1f9dd-2640","shortnames":[],"category":"people"},":woman_facepalming:":{"uc_base":"1f926-2640","uc_output":"1f926-200d-2640-fe0f","uc_match":"1f926-2640-fe0f","uc_greedy":"1f926-2640","shortnames":[],"category":"people"},":woman_fairy:":{"uc_base":"1f9da-2640","uc_output":"1f9da-200d-2640-fe0f","uc_match":"1f9da-2640-fe0f","uc_greedy":"1f9da-2640","shortnames":[],"category":"people"},":woman_frowning:":{"uc_base":"1f64d-2640","uc_output":"1f64d-200d-2640-fe0f","uc_match":"1f64d-2640-fe0f","uc_greedy":"1f64d-2640","shortnames":[],"category":"people"},":woman_genie:":{"uc_base":"1f9de-2640","uc_output":"1f9de-200d-2640-fe0f","uc_match":"1f9de-2640-fe0f","uc_greedy":"1f9de-2640","shortnames":[],"category":"people"},":woman_gesturing_no:":{"uc_base":"1f645-2640","uc_output":"1f645-200d-2640-fe0f","uc_match":"1f645-2640-fe0f","uc_greedy":"1f645-2640","shortnames":[],"category":"people"},":woman_gesturing_ok:":{"uc_base":"1f646-2640","uc_output":"1f646-200d-2640-fe0f","uc_match":"1f646-2640-fe0f","uc_greedy":"1f646-2640","shortnames":[],"category":"people"},":woman_getting_face_massage:":{"uc_base":"1f486-2640","uc_output":"1f486-200d-2640-fe0f","uc_match":"1f486-2640-fe0f","uc_greedy":"1f486-2640","shortnames":[],"category":"people"},":woman_getting_haircut:":{"uc_base":"1f487-2640","uc_output":"1f487-200d-2640-fe0f","uc_match":"1f487-2640-fe0f","uc_greedy":"1f487-2640","shortnames":[],"category":"people"},":woman_guard:":{"uc_base":"1f482-2640","uc_output":"1f482-200d-2640-fe0f","uc_match":"1f482-2640-fe0f","uc_greedy":"1f482-2640","shortnames":[],"category":"people"},":woman_health_worker:":{"uc_base":"1f469-2695","uc_output":"1f469-200d-2695-fe0f","uc_match":"1f469-2695-fe0f","uc_greedy":"1f469-2695","shortnames":[],"category":"people"},":woman_in_lotus_position:":{"uc_base":"1f9d8-2640","uc_output":"1f9d8-200d-2640-fe0f","uc_match":"1f9d8-2640-fe0f","uc_greedy":"1f9d8-2640","shortnames":[],"category":"activity"},":woman_in_steamy_room:":{"uc_base":"1f9d6-2640","uc_output":"1f9d6-200d-2640-fe0f","uc_match":"1f9d6-2640-fe0f","uc_greedy":"1f9d6-2640","shortnames":[],"category":"activity"},":woman_judge:":{"uc_base":"1f469-2696","uc_output":"1f469-200d-2696-fe0f","uc_match":"1f469-2696-fe0f","uc_greedy":"1f469-2696","shortnames":[],"category":"people"},":woman_juggling:":{"uc_base":"1f939-2640","uc_output":"1f939-200d-2640-fe0f","uc_match":"1f939-2640-fe0f","uc_greedy":"1f939-2640","shortnames":[],"category":"activity"},":woman_mage:":{"uc_base":"1f9d9-2640","uc_output":"1f9d9-200d-2640-fe0f","uc_match":"1f9d9-2640-fe0f","uc_greedy":"1f9d9-2640","shortnames":[],"category":"people"},":woman_mountain_biking:":{"uc_base":"1f6b5-2640","uc_output":"1f6b5-200d-2640-fe0f","uc_match":"1f6b5-2640-fe0f","uc_greedy":"1f6b5-2640","shortnames":[],"category":"activity"},":woman_pilot:":{"uc_base":"1f469-2708","uc_output":"1f469-200d-2708-fe0f","uc_match":"1f469-2708-fe0f","uc_greedy":"1f469-2708","shortnames":[],"category":"people"},":woman_playing_handball:":{"uc_base":"1f93e-2640","uc_output":"1f93e-200d-2640-fe0f","uc_match":"1f93e-2640-fe0f","uc_greedy":"1f93e-2640","shortnames":[],"category":"activity"},":woman_playing_water_polo:":{"uc_base":"1f93d-2640","uc_output":"1f93d-200d-2640-fe0f","uc_match":"1f93d-2640-fe0f","uc_greedy":"1f93d-2640","shortnames":[],"category":"activity"},":woman_police_officer:":{"uc_base":"1f46e-2640","uc_output":"1f46e-200d-2640-fe0f","uc_match":"1f46e-2640-fe0f","uc_greedy":"1f46e-2640","shortnames":[],"category":"people"},":woman_pouting:":{"uc_base":"1f64e-2640","uc_output":"1f64e-200d-2640-fe0f","uc_match":"1f64e-2640-fe0f","uc_greedy":"1f64e-2640","shortnames":[],"category":"people"},":woman_raising_hand:":{"uc_base":"1f64b-2640","uc_output":"1f64b-200d-2640-fe0f","uc_match":"1f64b-2640-fe0f","uc_greedy":"1f64b-2640","shortnames":[],"category":"people"},":woman_rowing_boat:":{"uc_base":"1f6a3-2640","uc_output":"1f6a3-200d-2640-fe0f","uc_match":"1f6a3-2640-fe0f","uc_greedy":"1f6a3-2640","shortnames":[],"category":"activity"},":woman_running:":{"uc_base":"1f3c3-2640","uc_output":"1f3c3-200d-2640-fe0f","uc_match":"1f3c3-2640-fe0f","uc_greedy":"1f3c3-2640","shortnames":[],"category":"people"},":woman_shrugging:":{"uc_base":"1f937-2640","uc_output":"1f937-200d-2640-fe0f","uc_match":"1f937-2640-fe0f","uc_greedy":"1f937-2640","shortnames":[],"category":"people"},":woman_surfing:":{"uc_base":"1f3c4-2640","uc_output":"1f3c4-200d-2640-fe0f","uc_match":"1f3c4-2640-fe0f","uc_greedy":"1f3c4-2640","shortnames":[],"category":"activity"},":woman_swimming:":{"uc_base":"1f3ca-2640","uc_output":"1f3ca-200d-2640-fe0f","uc_match":"1f3ca-2640-fe0f","uc_greedy":"1f3ca-2640","shortnames":[],"category":"activity"},":woman_tipping_hand:":{"uc_base":"1f481-2640","uc_output":"1f481-200d-2640-fe0f","uc_match":"1f481-2640-fe0f","uc_greedy":"1f481-2640","shortnames":[],"category":"people"},":woman_vampire:":{"uc_base":"1f9db-2640","uc_output":"1f9db-200d-2640-fe0f","uc_match":"1f9db-2640-fe0f","uc_greedy":"1f9db-2640","shortnames":[],"category":"people"},":woman_walking:":{"uc_base":"1f6b6-2640","uc_output":"1f6b6-200d-2640-fe0f","uc_match":"1f6b6-2640-fe0f","uc_greedy":"1f6b6-2640","shortnames":[],"category":"people"},":woman_wearing_turban:":{"uc_base":"1f473-2640","uc_output":"1f473-200d-2640-fe0f","uc_match":"1f473-2640-fe0f","uc_greedy":"1f473-2640","shortnames":[],"category":"people"},":woman_zombie:":{"uc_base":"1f9df-2640","uc_output":"1f9df-200d-2640-fe0f","uc_match":"1f9df-2640-fe0f","uc_greedy":"1f9df-2640","shortnames":[],"category":"people"},":women_with_bunny_ears_partying:":{"uc_base":"1f46f-2640","uc_output":"1f46f-200d-2640-fe0f","uc_match":"1f46f-2640-fe0f","uc_greedy":"1f46f-2640","shortnames":[],"category":"people"},":women_wrestling:":{"uc_base":"1f93c-2640","uc_output":"1f93c-200d-2640-fe0f","uc_match":"1f93c-2640-fe0f","uc_greedy":"1f93c-2640","shortnames":[],"category":"activity"},":family_man_boy:":{"uc_base":"1f468-1f466","uc_output":"1f468-200d-1f466","uc_match":"1f468-1f466","uc_greedy":"1f468-1f466","shortnames":[],"category":"people"},":family_man_girl:":{"uc_base":"1f468-1f467","uc_output":"1f468-200d-1f467","uc_match":"1f468-1f467","uc_greedy":"1f468-1f467","shortnames":[],"category":"people"},":family_woman_boy:":{"uc_base":"1f469-1f466","uc_output":"1f469-200d-1f466","uc_match":"1f469-1f466","uc_greedy":"1f469-1f466","shortnames":[],"category":"people"},":family_woman_girl:":{"uc_base":"1f469-1f467","uc_output":"1f469-200d-1f467","uc_match":"1f469-1f467","uc_greedy":"1f469-1f467","shortnames":[],"category":"people"},":man_artist:":{"uc_base":"1f468-1f3a8","uc_output":"1f468-200d-1f3a8","uc_match":"1f468-1f3a8","uc_greedy":"1f468-1f3a8","shortnames":[],"category":"people"},":man_astronaut:":{"uc_base":"1f468-1f680","uc_output":"1f468-200d-1f680","uc_match":"1f468-1f680","uc_greedy":"1f468-1f680","shortnames":[],"category":"people"},":man_cook:":{"uc_base":"1f468-1f373","uc_output":"1f468-200d-1f373","uc_match":"1f468-1f373","uc_greedy":"1f468-1f373","shortnames":[],"category":"people"},":man_factory_worker:":{"uc_base":"1f468-1f3ed","uc_output":"1f468-200d-1f3ed","uc_match":"1f468-1f3ed","uc_greedy":"1f468-1f3ed","shortnames":[],"category":"people"},":man_farmer:":{"uc_base":"1f468-1f33e","uc_output":"1f468-200d-1f33e","uc_match":"1f468-1f33e","uc_greedy":"1f468-1f33e","shortnames":[],"category":"people"},":man_firefighter:":{"uc_base":"1f468-1f692","uc_output":"1f468-200d-1f692","uc_match":"1f468-1f692","uc_greedy":"1f468-1f692","shortnames":[],"category":"people"},":man_mechanic:":{"uc_base":"1f468-1f527","uc_output":"1f468-200d-1f527","uc_match":"1f468-1f527","uc_greedy":"1f468-1f527","shortnames":[],"category":"people"},":man_office_worker:":{"uc_base":"1f468-1f4bc","uc_output":"1f468-200d-1f4bc","uc_match":"1f468-1f4bc","uc_greedy":"1f468-1f4bc","shortnames":[],"category":"people"},":man_scientist:":{"uc_base":"1f468-1f52c","uc_output":"1f468-200d-1f52c","uc_match":"1f468-1f52c","uc_greedy":"1f468-1f52c","shortnames":[],"category":"people"},":man_singer:":{"uc_base":"1f468-1f3a4","uc_output":"1f468-200d-1f3a4","uc_match":"1f468-1f3a4","uc_greedy":"1f468-1f3a4","shortnames":[],"category":"people"},":man_student:":{"uc_base":"1f468-1f393","uc_output":"1f468-200d-1f393","uc_match":"1f468-1f393","uc_greedy":"1f468-1f393","shortnames":[],"category":"people"},":man_teacher:":{"uc_base":"1f468-1f3eb","uc_output":"1f468-200d-1f3eb","uc_match":"1f468-1f3eb","uc_greedy":"1f468-1f3eb","shortnames":[],"category":"people"},":man_technologist:":{"uc_base":"1f468-1f4bb","uc_output":"1f468-200d-1f4bb","uc_match":"1f468-1f4bb","uc_greedy":"1f468-1f4bb","shortnames":[],"category":"people"},":woman_artist:":{"uc_base":"1f469-1f3a8","uc_output":"1f469-200d-1f3a8","uc_match":"1f469-1f3a8","uc_greedy":"1f469-1f3a8","shortnames":[],"category":"people"},":woman_astronaut:":{"uc_base":"1f469-1f680","uc_output":"1f469-200d-1f680","uc_match":"1f469-1f680","uc_greedy":"1f469-1f680","shortnames":[],"category":"people"},":woman_cook:":{"uc_base":"1f469-1f373","uc_output":"1f469-200d-1f373","uc_match":"1f469-1f373","uc_greedy":"1f469-1f373","shortnames":[],"category":"people"},":woman_factory_worker:":{"uc_base":"1f469-1f3ed","uc_output":"1f469-200d-1f3ed","uc_match":"1f469-1f3ed","uc_greedy":"1f469-1f3ed","shortnames":[],"category":"people"},":woman_farmer:":{"uc_base":"1f469-1f33e","uc_output":"1f469-200d-1f33e","uc_match":"1f469-1f33e","uc_greedy":"1f469-1f33e","shortnames":[],"category":"people"},":woman_firefighter:":{"uc_base":"1f469-1f692","uc_output":"1f469-200d-1f692","uc_match":"1f469-1f692","uc_greedy":"1f469-1f692","shortnames":[],"category":"people"},":woman_mechanic:":{"uc_base":"1f469-1f527","uc_output":"1f469-200d-1f527","uc_match":"1f469-1f527","uc_greedy":"1f469-1f527","shortnames":[],"category":"people"},":woman_office_worker:":{"uc_base":"1f469-1f4bc","uc_output":"1f469-200d-1f4bc","uc_match":"1f469-1f4bc","uc_greedy":"1f469-1f4bc","shortnames":[],"category":"people"},":woman_scientist:":{"uc_base":"1f469-1f52c","uc_output":"1f469-200d-1f52c","uc_match":"1f469-1f52c","uc_greedy":"1f469-1f52c","shortnames":[],"category":"people"},":woman_singer:":{"uc_base":"1f469-1f3a4","uc_output":"1f469-200d-1f3a4","uc_match":"1f469-1f3a4","uc_greedy":"1f469-1f3a4","shortnames":[],"category":"people"},":woman_student:":{"uc_base":"1f469-1f393","uc_output":"1f469-200d-1f393","uc_match":"1f469-1f393","uc_greedy":"1f469-1f393","shortnames":[],"category":"people"},":woman_teacher:":{"uc_base":"1f469-1f3eb","uc_output":"1f469-200d-1f3eb","uc_match":"1f469-1f3eb","uc_greedy":"1f469-1f3eb","shortnames":[],"category":"people"},":woman_technologist:":{"uc_base":"1f469-1f4bb","uc_output":"1f469-200d-1f4bb","uc_match":"1f469-1f4bb","uc_greedy":"1f469-1f4bb","shortnames":[],"category":"people"},":asterisk:":{"uc_base":"002a-20e3","uc_output":"002a-fe0f-20e3","uc_match":"002a-20e3","uc_greedy":"002a-20e3","shortnames":[":keycap_asterisk:"],"category":"symbols"},":eight:":{"uc_base":"0038-20e3","uc_output":"0038-fe0f-20e3","uc_match":"0038-20e3","uc_greedy":"0038-20e3","shortnames":[],"category":"symbols"},":five:":{"uc_base":"0035-20e3","uc_output":"0035-fe0f-20e3","uc_match":"0035-20e3","uc_greedy":"0035-20e3","shortnames":[],"category":"symbols"},":four:":{"uc_base":"0034-20e3","uc_output":"0034-fe0f-20e3","uc_match":"0034-20e3","uc_greedy":"0034-20e3","shortnames":[],"category":"symbols"},":hash:":{"uc_base":"0023-20e3","uc_output":"0023-fe0f-20e3","uc_match":"0023-20e3","uc_greedy":"0023-20e3","shortnames":[],"category":"symbols"},":nine:":{"uc_base":"0039-20e3","uc_output":"0039-fe0f-20e3","uc_match":"0039-20e3","uc_greedy":"0039-20e3","shortnames":[],"category":"symbols"},":one:":{"uc_base":"0031-20e3","uc_output":"0031-fe0f-20e3","uc_match":"0031-20e3","uc_greedy":"0031-20e3","shortnames":[],"category":"symbols"},":seven:":{"uc_base":"0037-20e3","uc_output":"0037-fe0f-20e3","uc_match":"0037-20e3","uc_greedy":"0037-20e3","shortnames":[],"category":"symbols"},":six:":{"uc_base":"0036-20e3","uc_output":"0036-fe0f-20e3","uc_match":"0036-20e3","uc_greedy":"0036-20e3","shortnames":[],"category":"symbols"},":three:":{"uc_base":"0033-20e3","uc_output":"0033-fe0f-20e3","uc_match":"0033-20e3","uc_greedy":"0033-20e3","shortnames":[],"category":"symbols"},":two:":{"uc_base":"0032-20e3","uc_output":"0032-fe0f-20e3","uc_match":"0032-20e3","uc_greedy":"0032-20e3","shortnames":[],"category":"symbols"},":zero:":{"uc_base":"0030-20e3","uc_output":"0030-fe0f-20e3","uc_match":"0030-20e3","uc_greedy":"0030-20e3","shortnames":[],"category":"symbols"},":adult_tone1:":{"uc_base":"1f9d1-1f3fb","uc_output":"1f9d1-1f3fb","uc_match":"1f9d1-1f3fb","uc_greedy":"1f9d1-1f3fb","shortnames":[":adult_light_skin_tone:"],"category":"people"},":adult_tone2:":{"uc_base":"1f9d1-1f3fc","uc_output":"1f9d1-1f3fc","uc_match":"1f9d1-1f3fc","uc_greedy":"1f9d1-1f3fc","shortnames":[":adult_medium_light_skin_tone:"],"category":"people"},":adult_tone3:":{"uc_base":"1f9d1-1f3fd","uc_output":"1f9d1-1f3fd","uc_match":"1f9d1-1f3fd","uc_greedy":"1f9d1-1f3fd","shortnames":[":adult_medium_skin_tone:"],"category":"people"},":adult_tone4:":{"uc_base":"1f9d1-1f3fe","uc_output":"1f9d1-1f3fe","uc_match":"1f9d1-1f3fe","uc_greedy":"1f9d1-1f3fe","shortnames":[":adult_medium_dark_skin_tone:"],"category":"people"},":adult_tone5:":{"uc_base":"1f9d1-1f3ff","uc_output":"1f9d1-1f3ff","uc_match":"1f9d1-1f3ff","uc_greedy":"1f9d1-1f3ff","shortnames":[":adult_dark_skin_tone:"],"category":"people"},":angel_tone1:":{"uc_base":"1f47c-1f3fb","uc_output":"1f47c-1f3fb","uc_match":"1f47c-1f3fb","uc_greedy":"1f47c-1f3fb","shortnames":[],"category":"people"},":angel_tone2:":{"uc_base":"1f47c-1f3fc","uc_output":"1f47c-1f3fc","uc_match":"1f47c-1f3fc","uc_greedy":"1f47c-1f3fc","shortnames":[],"category":"people"},":angel_tone3:":{"uc_base":"1f47c-1f3fd","uc_output":"1f47c-1f3fd","uc_match":"1f47c-1f3fd","uc_greedy":"1f47c-1f3fd","shortnames":[],"category":"people"},":angel_tone4:":{"uc_base":"1f47c-1f3fe","uc_output":"1f47c-1f3fe","uc_match":"1f47c-1f3fe","uc_greedy":"1f47c-1f3fe","shortnames":[],"category":"people"},":angel_tone5:":{"uc_base":"1f47c-1f3ff","uc_output":"1f47c-1f3ff","uc_match":"1f47c-1f3ff","uc_greedy":"1f47c-1f3ff","shortnames":[],"category":"people"},":baby_tone1:":{"uc_base":"1f476-1f3fb","uc_output":"1f476-1f3fb","uc_match":"1f476-1f3fb","uc_greedy":"1f476-1f3fb","shortnames":[],"category":"people"},":baby_tone2:":{"uc_base":"1f476-1f3fc","uc_output":"1f476-1f3fc","uc_match":"1f476-1f3fc","uc_greedy":"1f476-1f3fc","shortnames":[],"category":"people"},":baby_tone3:":{"uc_base":"1f476-1f3fd","uc_output":"1f476-1f3fd","uc_match":"1f476-1f3fd","uc_greedy":"1f476-1f3fd","shortnames":[],"category":"people"},":baby_tone4:":{"uc_base":"1f476-1f3fe","uc_output":"1f476-1f3fe","uc_match":"1f476-1f3fe","uc_greedy":"1f476-1f3fe","shortnames":[],"category":"people"},":baby_tone5:":{"uc_base":"1f476-1f3ff","uc_output":"1f476-1f3ff","uc_match":"1f476-1f3ff","uc_greedy":"1f476-1f3ff","shortnames":[],"category":"people"},":bath_tone1:":{"uc_base":"1f6c0-1f3fb","uc_output":"1f6c0-1f3fb","uc_match":"1f6c0-1f3fb","uc_greedy":"1f6c0-1f3fb","shortnames":[],"category":"objects"},":bath_tone2:":{"uc_base":"1f6c0-1f3fc","uc_output":"1f6c0-1f3fc","uc_match":"1f6c0-1f3fc","uc_greedy":"1f6c0-1f3fc","shortnames":[],"category":"objects"},":bath_tone3:":{"uc_base":"1f6c0-1f3fd","uc_output":"1f6c0-1f3fd","uc_match":"1f6c0-1f3fd","uc_greedy":"1f6c0-1f3fd","shortnames":[],"category":"objects"},":bath_tone4:":{"uc_base":"1f6c0-1f3fe","uc_output":"1f6c0-1f3fe","uc_match":"1f6c0-1f3fe","uc_greedy":"1f6c0-1f3fe","shortnames":[],"category":"objects"},":bath_tone5:":{"uc_base":"1f6c0-1f3ff","uc_output":"1f6c0-1f3ff","uc_match":"1f6c0-1f3ff","uc_greedy":"1f6c0-1f3ff","shortnames":[],"category":"objects"},":bearded_person_tone1:":{"uc_base":"1f9d4-1f3fb","uc_output":"1f9d4-1f3fb","uc_match":"1f9d4-1f3fb","uc_greedy":"1f9d4-1f3fb","shortnames":[":bearded_person_light_skin_tone:"],"category":"people"},":bearded_person_tone2:":{"uc_base":"1f9d4-1f3fc","uc_output":"1f9d4-1f3fc","uc_match":"1f9d4-1f3fc","uc_greedy":"1f9d4-1f3fc","shortnames":[":bearded_person_medium_light_skin_tone:"],"category":"people"},":bearded_person_tone3:":{"uc_base":"1f9d4-1f3fd","uc_output":"1f9d4-1f3fd","uc_match":"1f9d4-1f3fd","uc_greedy":"1f9d4-1f3fd","shortnames":[":bearded_person_medium_skin_tone:"],"category":"people"},":bearded_person_tone4:":{"uc_base":"1f9d4-1f3fe","uc_output":"1f9d4-1f3fe","uc_match":"1f9d4-1f3fe","uc_greedy":"1f9d4-1f3fe","shortnames":[":bearded_person_medium_dark_skin_tone:"],"category":"people"},":bearded_person_tone5:":{"uc_base":"1f9d4-1f3ff","uc_output":"1f9d4-1f3ff","uc_match":"1f9d4-1f3ff","uc_greedy":"1f9d4-1f3ff","shortnames":[":bearded_person_dark_skin_tone:"],"category":"people"},":blond_haired_person_tone1:":{"uc_base":"1f471-1f3fb","uc_output":"1f471-1f3fb","uc_match":"1f471-1f3fb","uc_greedy":"1f471-1f3fb","shortnames":[":person_with_blond_hair_tone1:"],"category":"people"},":blond_haired_person_tone2:":{"uc_base":"1f471-1f3fc","uc_output":"1f471-1f3fc","uc_match":"1f471-1f3fc","uc_greedy":"1f471-1f3fc","shortnames":[":person_with_blond_hair_tone2:"],"category":"people"},":blond_haired_person_tone3:":{"uc_base":"1f471-1f3fd","uc_output":"1f471-1f3fd","uc_match":"1f471-1f3fd","uc_greedy":"1f471-1f3fd","shortnames":[":person_with_blond_hair_tone3:"],"category":"people"},":blond_haired_person_tone4:":{"uc_base":"1f471-1f3fe","uc_output":"1f471-1f3fe","uc_match":"1f471-1f3fe","uc_greedy":"1f471-1f3fe","shortnames":[":person_with_blond_hair_tone4:"],"category":"people"},":blond_haired_person_tone5:":{"uc_base":"1f471-1f3ff","uc_output":"1f471-1f3ff","uc_match":"1f471-1f3ff","uc_greedy":"1f471-1f3ff","shortnames":[":person_with_blond_hair_tone5:"],"category":"people"},":boy_tone1:":{"uc_base":"1f466-1f3fb","uc_output":"1f466-1f3fb","uc_match":"1f466-1f3fb","uc_greedy":"1f466-1f3fb","shortnames":[],"category":"people"},":boy_tone2:":{"uc_base":"1f466-1f3fc","uc_output":"1f466-1f3fc","uc_match":"1f466-1f3fc","uc_greedy":"1f466-1f3fc","shortnames":[],"category":"people"},":boy_tone3:":{"uc_base":"1f466-1f3fd","uc_output":"1f466-1f3fd","uc_match":"1f466-1f3fd","uc_greedy":"1f466-1f3fd","shortnames":[],"category":"people"},":boy_tone4:":{"uc_base":"1f466-1f3fe","uc_output":"1f466-1f3fe","uc_match":"1f466-1f3fe","uc_greedy":"1f466-1f3fe","shortnames":[],"category":"people"},":boy_tone5:":{"uc_base":"1f466-1f3ff","uc_output":"1f466-1f3ff","uc_match":"1f466-1f3ff","uc_greedy":"1f466-1f3ff","shortnames":[],"category":"people"},":breast_feeding_tone1:":{"uc_base":"1f931-1f3fb","uc_output":"1f931-1f3fb","uc_match":"1f931-1f3fb","uc_greedy":"1f931-1f3fb","shortnames":[":breast_feeding_light_skin_tone:"],"category":"activity"},":breast_feeding_tone2:":{"uc_base":"1f931-1f3fc","uc_output":"1f931-1f3fc","uc_match":"1f931-1f3fc","uc_greedy":"1f931-1f3fc","shortnames":[":breast_feeding_medium_light_skin_tone:"],"category":"activity"},":breast_feeding_tone3:":{"uc_base":"1f931-1f3fd","uc_output":"1f931-1f3fd","uc_match":"1f931-1f3fd","uc_greedy":"1f931-1f3fd","shortnames":[":breast_feeding_medium_skin_tone:"],"category":"activity"},":breast_feeding_tone4:":{"uc_base":"1f931-1f3fe","uc_output":"1f931-1f3fe","uc_match":"1f931-1f3fe","uc_greedy":"1f931-1f3fe","shortnames":[":breast_feeding_medium_dark_skin_tone:"],"category":"activity"},":breast_feeding_tone5:":{"uc_base":"1f931-1f3ff","uc_output":"1f931-1f3ff","uc_match":"1f931-1f3ff","uc_greedy":"1f931-1f3ff","shortnames":[":breast_feeding_dark_skin_tone:"],"category":"activity"},":bride_with_veil_tone1:":{"uc_base":"1f470-1f3fb","uc_output":"1f470-1f3fb","uc_match":"1f470-1f3fb","uc_greedy":"1f470-1f3fb","shortnames":[],"category":"people"},":bride_with_veil_tone2:":{"uc_base":"1f470-1f3fc","uc_output":"1f470-1f3fc","uc_match":"1f470-1f3fc","uc_greedy":"1f470-1f3fc","shortnames":[],"category":"people"},":bride_with_veil_tone3:":{"uc_base":"1f470-1f3fd","uc_output":"1f470-1f3fd","uc_match":"1f470-1f3fd","uc_greedy":"1f470-1f3fd","shortnames":[],"category":"people"},":bride_with_veil_tone4:":{"uc_base":"1f470-1f3fe","uc_output":"1f470-1f3fe","uc_match":"1f470-1f3fe","uc_greedy":"1f470-1f3fe","shortnames":[],"category":"people"},":bride_with_veil_tone5:":{"uc_base":"1f470-1f3ff","uc_output":"1f470-1f3ff","uc_match":"1f470-1f3ff","uc_greedy":"1f470-1f3ff","shortnames":[],"category":"people"},":call_me_tone1:":{"uc_base":"1f919-1f3fb","uc_output":"1f919-1f3fb","uc_match":"1f919-1f3fb","uc_greedy":"1f919-1f3fb","shortnames":[":call_me_hand_tone1:"],"category":"people"},":call_me_tone2:":{"uc_base":"1f919-1f3fc","uc_output":"1f919-1f3fc","uc_match":"1f919-1f3fc","uc_greedy":"1f919-1f3fc","shortnames":[":call_me_hand_tone2:"],"category":"people"},":call_me_tone3:":{"uc_base":"1f919-1f3fd","uc_output":"1f919-1f3fd","uc_match":"1f919-1f3fd","uc_greedy":"1f919-1f3fd","shortnames":[":call_me_hand_tone3:"],"category":"people"},":call_me_tone4:":{"uc_base":"1f919-1f3fe","uc_output":"1f919-1f3fe","uc_match":"1f919-1f3fe","uc_greedy":"1f919-1f3fe","shortnames":[":call_me_hand_tone4:"],"category":"people"},":call_me_tone5:":{"uc_base":"1f919-1f3ff","uc_output":"1f919-1f3ff","uc_match":"1f919-1f3ff","uc_greedy":"1f919-1f3ff","shortnames":[":call_me_hand_tone5:"],"category":"people"},":child_tone1:":{"uc_base":"1f9d2-1f3fb","uc_output":"1f9d2-1f3fb","uc_match":"1f9d2-1f3fb","uc_greedy":"1f9d2-1f3fb","shortnames":[":child_light_skin_tone:"],"category":"people"},":child_tone2:":{"uc_base":"1f9d2-1f3fc","uc_output":"1f9d2-1f3fc","uc_match":"1f9d2-1f3fc","uc_greedy":"1f9d2-1f3fc","shortnames":[":child_medium_light_skin_tone:"],"category":"people"},":child_tone3:":{"uc_base":"1f9d2-1f3fd","uc_output":"1f9d2-1f3fd","uc_match":"1f9d2-1f3fd","uc_greedy":"1f9d2-1f3fd","shortnames":[":child_medium_skin_tone:"],"category":"people"},":child_tone4:":{"uc_base":"1f9d2-1f3fe","uc_output":"1f9d2-1f3fe","uc_match":"1f9d2-1f3fe","uc_greedy":"1f9d2-1f3fe","shortnames":[":child_medium_dark_skin_tone:"],"category":"people"},":child_tone5:":{"uc_base":"1f9d2-1f3ff","uc_output":"1f9d2-1f3ff","uc_match":"1f9d2-1f3ff","uc_greedy":"1f9d2-1f3ff","shortnames":[":child_dark_skin_tone:"],"category":"people"},":clap_tone1:":{"uc_base":"1f44f-1f3fb","uc_output":"1f44f-1f3fb","uc_match":"1f44f-1f3fb","uc_greedy":"1f44f-1f3fb","shortnames":[],"category":"people"},":clap_tone2:":{"uc_base":"1f44f-1f3fc","uc_output":"1f44f-1f3fc","uc_match":"1f44f-1f3fc","uc_greedy":"1f44f-1f3fc","shortnames":[],"category":"people"},":clap_tone3:":{"uc_base":"1f44f-1f3fd","uc_output":"1f44f-1f3fd","uc_match":"1f44f-1f3fd","uc_greedy":"1f44f-1f3fd","shortnames":[],"category":"people"},":clap_tone4:":{"uc_base":"1f44f-1f3fe","uc_output":"1f44f-1f3fe","uc_match":"1f44f-1f3fe","uc_greedy":"1f44f-1f3fe","shortnames":[],"category":"people"},":clap_tone5:":{"uc_base":"1f44f-1f3ff","uc_output":"1f44f-1f3ff","uc_match":"1f44f-1f3ff","uc_greedy":"1f44f-1f3ff","shortnames":[],"category":"people"},":construction_worker_tone1:":{"uc_base":"1f477-1f3fb","uc_output":"1f477-1f3fb","uc_match":"1f477-1f3fb","uc_greedy":"1f477-1f3fb","shortnames":[],"category":"people"},":construction_worker_tone2:":{"uc_base":"1f477-1f3fc","uc_output":"1f477-1f3fc","uc_match":"1f477-1f3fc","uc_greedy":"1f477-1f3fc","shortnames":[],"category":"people"},":construction_worker_tone3:":{"uc_base":"1f477-1f3fd","uc_output":"1f477-1f3fd","uc_match":"1f477-1f3fd","uc_greedy":"1f477-1f3fd","shortnames":[],"category":"people"},":construction_worker_tone4:":{"uc_base":"1f477-1f3fe","uc_output":"1f477-1f3fe","uc_match":"1f477-1f3fe","uc_greedy":"1f477-1f3fe","shortnames":[],"category":"people"},":construction_worker_tone5:":{"uc_base":"1f477-1f3ff","uc_output":"1f477-1f3ff","uc_match":"1f477-1f3ff","uc_greedy":"1f477-1f3ff","shortnames":[],"category":"people"},":dancer_tone1:":{"uc_base":"1f483-1f3fb","uc_output":"1f483-1f3fb","uc_match":"1f483-1f3fb","uc_greedy":"1f483-1f3fb","shortnames":[],"category":"people"},":dancer_tone2:":{"uc_base":"1f483-1f3fc","uc_output":"1f483-1f3fc","uc_match":"1f483-1f3fc","uc_greedy":"1f483-1f3fc","shortnames":[],"category":"people"},":dancer_tone3:":{"uc_base":"1f483-1f3fd","uc_output":"1f483-1f3fd","uc_match":"1f483-1f3fd","uc_greedy":"1f483-1f3fd","shortnames":[],"category":"people"},":dancer_tone4:":{"uc_base":"1f483-1f3fe","uc_output":"1f483-1f3fe","uc_match":"1f483-1f3fe","uc_greedy":"1f483-1f3fe","shortnames":[],"category":"people"},":dancer_tone5:":{"uc_base":"1f483-1f3ff","uc_output":"1f483-1f3ff","uc_match":"1f483-1f3ff","uc_greedy":"1f483-1f3ff","shortnames":[],"category":"people"},":detective_tone1:":{"uc_base":"1f575-1f3fb","uc_output":"1f575-1f3fb","uc_match":"1f575-fe0f-1f3fb","uc_greedy":"1f575-fe0f-1f3fb","shortnames":[":spy_tone1:",":sleuth_or_spy_tone1:"],"category":"people"},":detective_tone2:":{"uc_base":"1f575-1f3fc","uc_output":"1f575-1f3fc","uc_match":"1f575-fe0f-1f3fc","uc_greedy":"1f575-fe0f-1f3fc","shortnames":[":spy_tone2:",":sleuth_or_spy_tone2:"],"category":"people"},":detective_tone3:":{"uc_base":"1f575-1f3fd","uc_output":"1f575-1f3fd","uc_match":"1f575-fe0f-1f3fd","uc_greedy":"1f575-fe0f-1f3fd","shortnames":[":spy_tone3:",":sleuth_or_spy_tone3:"],"category":"people"},":detective_tone4:":{"uc_base":"1f575-1f3fe","uc_output":"1f575-1f3fe","uc_match":"1f575-fe0f-1f3fe","uc_greedy":"1f575-fe0f-1f3fe","shortnames":[":spy_tone4:",":sleuth_or_spy_tone4:"],"category":"people"},":detective_tone5:":{"uc_base":"1f575-1f3ff","uc_output":"1f575-1f3ff","uc_match":"1f575-fe0f-1f3ff","uc_greedy":"1f575-fe0f-1f3ff","shortnames":[":spy_tone5:",":sleuth_or_spy_tone5:"],"category":"people"},":ear_tone1:":{"uc_base":"1f442-1f3fb","uc_output":"1f442-1f3fb","uc_match":"1f442-1f3fb","uc_greedy":"1f442-1f3fb","shortnames":[],"category":"people"},":ear_tone2:":{"uc_base":"1f442-1f3fc","uc_output":"1f442-1f3fc","uc_match":"1f442-1f3fc","uc_greedy":"1f442-1f3fc","shortnames":[],"category":"people"},":ear_tone3:":{"uc_base":"1f442-1f3fd","uc_output":"1f442-1f3fd","uc_match":"1f442-1f3fd","uc_greedy":"1f442-1f3fd","shortnames":[],"category":"people"},":ear_tone4:":{"uc_base":"1f442-1f3fe","uc_output":"1f442-1f3fe","uc_match":"1f442-1f3fe","uc_greedy":"1f442-1f3fe","shortnames":[],"category":"people"},":ear_tone5:":{"uc_base":"1f442-1f3ff","uc_output":"1f442-1f3ff","uc_match":"1f442-1f3ff","uc_greedy":"1f442-1f3ff","shortnames":[],"category":"people"},":elf_tone1:":{"uc_base":"1f9dd-1f3fb","uc_output":"1f9dd-1f3fb","uc_match":"1f9dd-1f3fb","uc_greedy":"1f9dd-1f3fb","shortnames":[":elf_light_skin_tone:"],"category":"people"},":elf_tone2:":{"uc_base":"1f9dd-1f3fc","uc_output":"1f9dd-1f3fc","uc_match":"1f9dd-1f3fc","uc_greedy":"1f9dd-1f3fc","shortnames":[":elf_medium_light_skin_tone:"],"category":"people"},":elf_tone3:":{"uc_base":"1f9dd-1f3fd","uc_output":"1f9dd-1f3fd","uc_match":"1f9dd-1f3fd","uc_greedy":"1f9dd-1f3fd","shortnames":[":elf_medium_skin_tone:"],"category":"people"},":elf_tone4:":{"uc_base":"1f9dd-1f3fe","uc_output":"1f9dd-1f3fe","uc_match":"1f9dd-1f3fe","uc_greedy":"1f9dd-1f3fe","shortnames":[":elf_medium_dark_skin_tone:"],"category":"people"},":elf_tone5:":{"uc_base":"1f9dd-1f3ff","uc_output":"1f9dd-1f3ff","uc_match":"1f9dd-1f3ff","uc_greedy":"1f9dd-1f3ff","shortnames":[":elf_dark_skin_tone:"],"category":"people"},":fairy_tone1:":{"uc_base":"1f9da-1f3fb","uc_output":"1f9da-1f3fb","uc_match":"1f9da-1f3fb","uc_greedy":"1f9da-1f3fb","shortnames":[":fairy_light_skin_tone:"],"category":"people"},":fairy_tone2:":{"uc_base":"1f9da-1f3fc","uc_output":"1f9da-1f3fc","uc_match":"1f9da-1f3fc","uc_greedy":"1f9da-1f3fc","shortnames":[":fairy_medium_light_skin_tone:"],"category":"people"},":fairy_tone3:":{"uc_base":"1f9da-1f3fd","uc_output":"1f9da-1f3fd","uc_match":"1f9da-1f3fd","uc_greedy":"1f9da-1f3fd","shortnames":[":fairy_medium_skin_tone:"],"category":"people"},":fairy_tone4:":{"uc_base":"1f9da-1f3fe","uc_output":"1f9da-1f3fe","uc_match":"1f9da-1f3fe","uc_greedy":"1f9da-1f3fe","shortnames":[":fairy_medium_dark_skin_tone:"],"category":"people"},":fairy_tone5:":{"uc_base":"1f9da-1f3ff","uc_output":"1f9da-1f3ff","uc_match":"1f9da-1f3ff","uc_greedy":"1f9da-1f3ff","shortnames":[":fairy_dark_skin_tone:"],"category":"people"},":fingers_crossed_tone1:":{"uc_base":"1f91e-1f3fb","uc_output":"1f91e-1f3fb","uc_match":"1f91e-1f3fb","uc_greedy":"1f91e-1f3fb","shortnames":[":hand_with_index_and_middle_fingers_crossed_tone1:"],"category":"people"},":fingers_crossed_tone2:":{"uc_base":"1f91e-1f3fc","uc_output":"1f91e-1f3fc","uc_match":"1f91e-1f3fc","uc_greedy":"1f91e-1f3fc","shortnames":[":hand_with_index_and_middle_fingers_crossed_tone2:"],"category":"people"},":fingers_crossed_tone3:":{"uc_base":"1f91e-1f3fd","uc_output":"1f91e-1f3fd","uc_match":"1f91e-1f3fd","uc_greedy":"1f91e-1f3fd","shortnames":[":hand_with_index_and_middle_fingers_crossed_tone3:"],"category":"people"},":fingers_crossed_tone4:":{"uc_base":"1f91e-1f3fe","uc_output":"1f91e-1f3fe","uc_match":"1f91e-1f3fe","uc_greedy":"1f91e-1f3fe","shortnames":[":hand_with_index_and_middle_fingers_crossed_tone4:"],"category":"people"},":fingers_crossed_tone5:":{"uc_base":"1f91e-1f3ff","uc_output":"1f91e-1f3ff","uc_match":"1f91e-1f3ff","uc_greedy":"1f91e-1f3ff","shortnames":[":hand_with_index_and_middle_fingers_crossed_tone5:"],"category":"people"},":flag_ac:":{"uc_base":"1f1e6-1f1e8","uc_output":"1f1e6-1f1e8","uc_match":"1f1e6-1f1e8","uc_greedy":"1f1e6-1f1e8","shortnames":[":ac:"],"category":"flags"},":flag_ad:":{"uc_base":"1f1e6-1f1e9","uc_output":"1f1e6-1f1e9","uc_match":"1f1e6-1f1e9","uc_greedy":"1f1e6-1f1e9","shortnames":[":ad:"],"category":"flags"},":flag_ae:":{"uc_base":"1f1e6-1f1ea","uc_output":"1f1e6-1f1ea","uc_match":"1f1e6-1f1ea","uc_greedy":"1f1e6-1f1ea","shortnames":[":ae:"],"category":"flags"},":flag_af:":{"uc_base":"1f1e6-1f1eb","uc_output":"1f1e6-1f1eb","uc_match":"1f1e6-1f1eb","uc_greedy":"1f1e6-1f1eb","shortnames":[":af:"],"category":"flags"},":flag_ag:":{"uc_base":"1f1e6-1f1ec","uc_output":"1f1e6-1f1ec","uc_match":"1f1e6-1f1ec","uc_greedy":"1f1e6-1f1ec","shortnames":[":ag:"],"category":"flags"},":flag_ai:":{"uc_base":"1f1e6-1f1ee","uc_output":"1f1e6-1f1ee","uc_match":"1f1e6-1f1ee","uc_greedy":"1f1e6-1f1ee","shortnames":[":ai:"],"category":"flags"},":flag_al:":{"uc_base":"1f1e6-1f1f1","uc_output":"1f1e6-1f1f1","uc_match":"1f1e6-1f1f1","uc_greedy":"1f1e6-1f1f1","shortnames":[":al:"],"category":"flags"},":flag_am:":{"uc_base":"1f1e6-1f1f2","uc_output":"1f1e6-1f1f2","uc_match":"1f1e6-1f1f2","uc_greedy":"1f1e6-1f1f2","shortnames":[":am:"],"category":"flags"},":flag_ao:":{"uc_base":"1f1e6-1f1f4","uc_output":"1f1e6-1f1f4","uc_match":"1f1e6-1f1f4","uc_greedy":"1f1e6-1f1f4","shortnames":[":ao:"],"category":"flags"},":flag_aq:":{"uc_base":"1f1e6-1f1f6","uc_output":"1f1e6-1f1f6","uc_match":"1f1e6-1f1f6","uc_greedy":"1f1e6-1f1f6","shortnames":[":aq:"],"category":"flags"},":flag_ar:":{"uc_base":"1f1e6-1f1f7","uc_output":"1f1e6-1f1f7","uc_match":"1f1e6-1f1f7","uc_greedy":"1f1e6-1f1f7","shortnames":[":ar:"],"category":"flags"},":flag_as:":{"uc_base":"1f1e6-1f1f8","uc_output":"1f1e6-1f1f8","uc_match":"1f1e6-1f1f8","uc_greedy":"1f1e6-1f1f8","shortnames":[":as:"],"category":"flags"},":flag_at:":{"uc_base":"1f1e6-1f1f9","uc_output":"1f1e6-1f1f9","uc_match":"1f1e6-1f1f9","uc_greedy":"1f1e6-1f1f9","shortnames":[":at:"],"category":"flags"},":flag_au:":{"uc_base":"1f1e6-1f1fa","uc_output":"1f1e6-1f1fa","uc_match":"1f1e6-1f1fa","uc_greedy":"1f1e6-1f1fa","shortnames":[":au:"],"category":"flags"},":flag_aw:":{"uc_base":"1f1e6-1f1fc","uc_output":"1f1e6-1f1fc","uc_match":"1f1e6-1f1fc","uc_greedy":"1f1e6-1f1fc","shortnames":[":aw:"],"category":"flags"},":flag_ax:":{"uc_base":"1f1e6-1f1fd","uc_output":"1f1e6-1f1fd","uc_match":"1f1e6-1f1fd","uc_greedy":"1f1e6-1f1fd","shortnames":[":ax:"],"category":"flags"},":flag_az:":{"uc_base":"1f1e6-1f1ff","uc_output":"1f1e6-1f1ff","uc_match":"1f1e6-1f1ff","uc_greedy":"1f1e6-1f1ff","shortnames":[":az:"],"category":"flags"},":flag_ba:":{"uc_base":"1f1e7-1f1e6","uc_output":"1f1e7-1f1e6","uc_match":"1f1e7-1f1e6","uc_greedy":"1f1e7-1f1e6","shortnames":[":ba:"],"category":"flags"},":flag_bb:":{"uc_base":"1f1e7-1f1e7","uc_output":"1f1e7-1f1e7","uc_match":"1f1e7-1f1e7","uc_greedy":"1f1e7-1f1e7","shortnames":[":bb:"],"category":"flags"},":flag_bd:":{"uc_base":"1f1e7-1f1e9","uc_output":"1f1e7-1f1e9","uc_match":"1f1e7-1f1e9","uc_greedy":"1f1e7-1f1e9","shortnames":[":bd:"],"category":"flags"},":flag_be:":{"uc_base":"1f1e7-1f1ea","uc_output":"1f1e7-1f1ea","uc_match":"1f1e7-1f1ea","uc_greedy":"1f1e7-1f1ea","shortnames":[":be:"],"category":"flags"},":flag_bf:":{"uc_base":"1f1e7-1f1eb","uc_output":"1f1e7-1f1eb","uc_match":"1f1e7-1f1eb","uc_greedy":"1f1e7-1f1eb","shortnames":[":bf:"],"category":"flags"},":flag_bg:":{"uc_base":"1f1e7-1f1ec","uc_output":"1f1e7-1f1ec","uc_match":"1f1e7-1f1ec","uc_greedy":"1f1e7-1f1ec","shortnames":[":bg:"],"category":"flags"},":flag_bh:":{"uc_base":"1f1e7-1f1ed","uc_output":"1f1e7-1f1ed","uc_match":"1f1e7-1f1ed","uc_greedy":"1f1e7-1f1ed","shortnames":[":bh:"],"category":"flags"},":flag_bi:":{"uc_base":"1f1e7-1f1ee","uc_output":"1f1e7-1f1ee","uc_match":"1f1e7-1f1ee","uc_greedy":"1f1e7-1f1ee","shortnames":[":bi:"],"category":"flags"},":flag_bj:":{"uc_base":"1f1e7-1f1ef","uc_output":"1f1e7-1f1ef","uc_match":"1f1e7-1f1ef","uc_greedy":"1f1e7-1f1ef","shortnames":[":bj:"],"category":"flags"},":flag_bl:":{"uc_base":"1f1e7-1f1f1","uc_output":"1f1e7-1f1f1","uc_match":"1f1e7-1f1f1","uc_greedy":"1f1e7-1f1f1","shortnames":[":bl:"],"category":"flags"},":flag_bm:":{"uc_base":"1f1e7-1f1f2","uc_output":"1f1e7-1f1f2","uc_match":"1f1e7-1f1f2","uc_greedy":"1f1e7-1f1f2","shortnames":[":bm:"],"category":"flags"},":flag_bn:":{"uc_base":"1f1e7-1f1f3","uc_output":"1f1e7-1f1f3","uc_match":"1f1e7-1f1f3","uc_greedy":"1f1e7-1f1f3","shortnames":[":bn:"],"category":"flags"},":flag_bo:":{"uc_base":"1f1e7-1f1f4","uc_output":"1f1e7-1f1f4","uc_match":"1f1e7-1f1f4","uc_greedy":"1f1e7-1f1f4","shortnames":[":bo:"],"category":"flags"},":flag_bq:":{"uc_base":"1f1e7-1f1f6","uc_output":"1f1e7-1f1f6","uc_match":"1f1e7-1f1f6","uc_greedy":"1f1e7-1f1f6","shortnames":[":bq:"],"category":"flags"},":flag_br:":{"uc_base":"1f1e7-1f1f7","uc_output":"1f1e7-1f1f7","uc_match":"1f1e7-1f1f7","uc_greedy":"1f1e7-1f1f7","shortnames":[":br:"],"category":"flags"},":flag_bs:":{"uc_base":"1f1e7-1f1f8","uc_output":"1f1e7-1f1f8","uc_match":"1f1e7-1f1f8","uc_greedy":"1f1e7-1f1f8","shortnames":[":bs:"],"category":"flags"},":flag_bt:":{"uc_base":"1f1e7-1f1f9","uc_output":"1f1e7-1f1f9","uc_match":"1f1e7-1f1f9","uc_greedy":"1f1e7-1f1f9","shortnames":[":bt:"],"category":"flags"},":flag_bv:":{"uc_base":"1f1e7-1f1fb","uc_output":"1f1e7-1f1fb","uc_match":"1f1e7-1f1fb","uc_greedy":"1f1e7-1f1fb","shortnames":[":bv:"],"category":"flags"},":flag_bw:":{"uc_base":"1f1e7-1f1fc","uc_output":"1f1e7-1f1fc","uc_match":"1f1e7-1f1fc","uc_greedy":"1f1e7-1f1fc","shortnames":[":bw:"],"category":"flags"},":flag_by:":{"uc_base":"1f1e7-1f1fe","uc_output":"1f1e7-1f1fe","uc_match":"1f1e7-1f1fe","uc_greedy":"1f1e7-1f1fe","shortnames":[":by:"],"category":"flags"},":flag_bz:":{"uc_base":"1f1e7-1f1ff","uc_output":"1f1e7-1f1ff","uc_match":"1f1e7-1f1ff","uc_greedy":"1f1e7-1f1ff","shortnames":[":bz:"],"category":"flags"},":flag_ca:":{"uc_base":"1f1e8-1f1e6","uc_output":"1f1e8-1f1e6","uc_match":"1f1e8-1f1e6","uc_greedy":"1f1e8-1f1e6","shortnames":[":ca:"],"category":"flags"},":flag_cc:":{"uc_base":"1f1e8-1f1e8","uc_output":"1f1e8-1f1e8","uc_match":"1f1e8-1f1e8","uc_greedy":"1f1e8-1f1e8","shortnames":[":cc:"],"category":"flags"},":flag_cd:":{"uc_base":"1f1e8-1f1e9","uc_output":"1f1e8-1f1e9","uc_match":"1f1e8-1f1e9","uc_greedy":"1f1e8-1f1e9","shortnames":[":congo:"],"category":"flags"},":flag_cf:":{"uc_base":"1f1e8-1f1eb","uc_output":"1f1e8-1f1eb","uc_match":"1f1e8-1f1eb","uc_greedy":"1f1e8-1f1eb","shortnames":[":cf:"],"category":"flags"},":flag_cg:":{"uc_base":"1f1e8-1f1ec","uc_output":"1f1e8-1f1ec","uc_match":"1f1e8-1f1ec","uc_greedy":"1f1e8-1f1ec","shortnames":[":cg:"],"category":"flags"},":flag_ch:":{"uc_base":"1f1e8-1f1ed","uc_output":"1f1e8-1f1ed","uc_match":"1f1e8-1f1ed","uc_greedy":"1f1e8-1f1ed","shortnames":[":ch:"],"category":"flags"},":flag_ci:":{"uc_base":"1f1e8-1f1ee","uc_output":"1f1e8-1f1ee","uc_match":"1f1e8-1f1ee","uc_greedy":"1f1e8-1f1ee","shortnames":[":ci:"],"category":"flags"},":flag_ck:":{"uc_base":"1f1e8-1f1f0","uc_output":"1f1e8-1f1f0","uc_match":"1f1e8-1f1f0","uc_greedy":"1f1e8-1f1f0","shortnames":[":ck:"],"category":"flags"},":flag_cl:":{"uc_base":"1f1e8-1f1f1","uc_output":"1f1e8-1f1f1","uc_match":"1f1e8-1f1f1","uc_greedy":"1f1e8-1f1f1","shortnames":[":chile:"],"category":"flags"},":flag_cm:":{"uc_base":"1f1e8-1f1f2","uc_output":"1f1e8-1f1f2","uc_match":"1f1e8-1f1f2","uc_greedy":"1f1e8-1f1f2","shortnames":[":cm:"],"category":"flags"},":flag_cn:":{"uc_base":"1f1e8-1f1f3","uc_output":"1f1e8-1f1f3","uc_match":"1f1e8-1f1f3","uc_greedy":"1f1e8-1f1f3","shortnames":[":cn:"],"category":"flags"},":flag_co:":{"uc_base":"1f1e8-1f1f4","uc_output":"1f1e8-1f1f4","uc_match":"1f1e8-1f1f4","uc_greedy":"1f1e8-1f1f4","shortnames":[":co:"],"category":"flags"},":flag_cp:":{"uc_base":"1f1e8-1f1f5","uc_output":"1f1e8-1f1f5","uc_match":"1f1e8-1f1f5","uc_greedy":"1f1e8-1f1f5","shortnames":[":cp:"],"category":"flags"},":flag_cr:":{"uc_base":"1f1e8-1f1f7","uc_output":"1f1e8-1f1f7","uc_match":"1f1e8-1f1f7","uc_greedy":"1f1e8-1f1f7","shortnames":[":cr:"],"category":"flags"},":flag_cu:":{"uc_base":"1f1e8-1f1fa","uc_output":"1f1e8-1f1fa","uc_match":"1f1e8-1f1fa","uc_greedy":"1f1e8-1f1fa","shortnames":[":cu:"],"category":"flags"},":flag_cv:":{"uc_base":"1f1e8-1f1fb","uc_output":"1f1e8-1f1fb","uc_match":"1f1e8-1f1fb","uc_greedy":"1f1e8-1f1fb","shortnames":[":cv:"],"category":"flags"},":flag_cw:":{"uc_base":"1f1e8-1f1fc","uc_output":"1f1e8-1f1fc","uc_match":"1f1e8-1f1fc","uc_greedy":"1f1e8-1f1fc","shortnames":[":cw:"],"category":"flags"},":flag_cx:":{"uc_base":"1f1e8-1f1fd","uc_output":"1f1e8-1f1fd","uc_match":"1f1e8-1f1fd","uc_greedy":"1f1e8-1f1fd","shortnames":[":cx:"],"category":"flags"},":flag_cy:":{"uc_base":"1f1e8-1f1fe","uc_output":"1f1e8-1f1fe","uc_match":"1f1e8-1f1fe","uc_greedy":"1f1e8-1f1fe","shortnames":[":cy:"],"category":"flags"},":flag_cz:":{"uc_base":"1f1e8-1f1ff","uc_output":"1f1e8-1f1ff","uc_match":"1f1e8-1f1ff","uc_greedy":"1f1e8-1f1ff","shortnames":[":cz:"],"category":"flags"},":flag_de:":{"uc_base":"1f1e9-1f1ea","uc_output":"1f1e9-1f1ea","uc_match":"1f1e9-1f1ea","uc_greedy":"1f1e9-1f1ea","shortnames":[":de:"],"category":"flags"},":flag_dg:":{"uc_base":"1f1e9-1f1ec","uc_output":"1f1e9-1f1ec","uc_match":"1f1e9-1f1ec","uc_greedy":"1f1e9-1f1ec","shortnames":[":dg:"],"category":"flags"},":flag_dj:":{"uc_base":"1f1e9-1f1ef","uc_output":"1f1e9-1f1ef","uc_match":"1f1e9-1f1ef","uc_greedy":"1f1e9-1f1ef","shortnames":[":dj:"],"category":"flags"},":flag_dk:":{"uc_base":"1f1e9-1f1f0","uc_output":"1f1e9-1f1f0","uc_match":"1f1e9-1f1f0","uc_greedy":"1f1e9-1f1f0","shortnames":[":dk:"],"category":"flags"},":flag_dm:":{"uc_base":"1f1e9-1f1f2","uc_output":"1f1e9-1f1f2","uc_match":"1f1e9-1f1f2","uc_greedy":"1f1e9-1f1f2","shortnames":[":dm:"],"category":"flags"},":flag_do:":{"uc_base":"1f1e9-1f1f4","uc_output":"1f1e9-1f1f4","uc_match":"1f1e9-1f1f4","uc_greedy":"1f1e9-1f1f4","shortnames":[":do:"],"category":"flags"},":flag_dz:":{"uc_base":"1f1e9-1f1ff","uc_output":"1f1e9-1f1ff","uc_match":"1f1e9-1f1ff","uc_greedy":"1f1e9-1f1ff","shortnames":[":dz:"],"category":"flags"},":flag_ea:":{"uc_base":"1f1ea-1f1e6","uc_output":"1f1ea-1f1e6","uc_match":"1f1ea-1f1e6","uc_greedy":"1f1ea-1f1e6","shortnames":[":ea:"],"category":"flags"},":flag_ec:":{"uc_base":"1f1ea-1f1e8","uc_output":"1f1ea-1f1e8","uc_match":"1f1ea-1f1e8","uc_greedy":"1f1ea-1f1e8","shortnames":[":ec:"],"category":"flags"},":flag_ee:":{"uc_base":"1f1ea-1f1ea","uc_output":"1f1ea-1f1ea","uc_match":"1f1ea-1f1ea","uc_greedy":"1f1ea-1f1ea","shortnames":[":ee:"],"category":"flags"},":flag_eg:":{"uc_base":"1f1ea-1f1ec","uc_output":"1f1ea-1f1ec","uc_match":"1f1ea-1f1ec","uc_greedy":"1f1ea-1f1ec","shortnames":[":eg:"],"category":"flags"},":flag_eh:":{"uc_base":"1f1ea-1f1ed","uc_output":"1f1ea-1f1ed","uc_match":"1f1ea-1f1ed","uc_greedy":"1f1ea-1f1ed","shortnames":[":eh:"],"category":"flags"},":flag_er:":{"uc_base":"1f1ea-1f1f7","uc_output":"1f1ea-1f1f7","uc_match":"1f1ea-1f1f7","uc_greedy":"1f1ea-1f1f7","shortnames":[":er:"],"category":"flags"},":flag_es:":{"uc_base":"1f1ea-1f1f8","uc_output":"1f1ea-1f1f8","uc_match":"1f1ea-1f1f8","uc_greedy":"1f1ea-1f1f8","shortnames":[":es:"],"category":"flags"},":flag_et:":{"uc_base":"1f1ea-1f1f9","uc_output":"1f1ea-1f1f9","uc_match":"1f1ea-1f1f9","uc_greedy":"1f1ea-1f1f9","shortnames":[":et:"],"category":"flags"},":flag_eu:":{"uc_base":"1f1ea-1f1fa","uc_output":"1f1ea-1f1fa","uc_match":"1f1ea-1f1fa","uc_greedy":"1f1ea-1f1fa","shortnames":[":eu:"],"category":"flags"},":flag_fi:":{"uc_base":"1f1eb-1f1ee","uc_output":"1f1eb-1f1ee","uc_match":"1f1eb-1f1ee","uc_greedy":"1f1eb-1f1ee","shortnames":[":fi:"],"category":"flags"},":flag_fj:":{"uc_base":"1f1eb-1f1ef","uc_output":"1f1eb-1f1ef","uc_match":"1f1eb-1f1ef","uc_greedy":"1f1eb-1f1ef","shortnames":[":fj:"],"category":"flags"},":flag_fk:":{"uc_base":"1f1eb-1f1f0","uc_output":"1f1eb-1f1f0","uc_match":"1f1eb-1f1f0","uc_greedy":"1f1eb-1f1f0","shortnames":[":fk:"],"category":"flags"},":flag_fm:":{"uc_base":"1f1eb-1f1f2","uc_output":"1f1eb-1f1f2","uc_match":"1f1eb-1f1f2","uc_greedy":"1f1eb-1f1f2","shortnames":[":fm:"],"category":"flags"},":flag_fo:":{"uc_base":"1f1eb-1f1f4","uc_output":"1f1eb-1f1f4","uc_match":"1f1eb-1f1f4","uc_greedy":"1f1eb-1f1f4","shortnames":[":fo:"],"category":"flags"},":flag_fr:":{"uc_base":"1f1eb-1f1f7","uc_output":"1f1eb-1f1f7","uc_match":"1f1eb-1f1f7","uc_greedy":"1f1eb-1f1f7","shortnames":[":fr:"],"category":"flags"},":flag_ga:":{"uc_base":"1f1ec-1f1e6","uc_output":"1f1ec-1f1e6","uc_match":"1f1ec-1f1e6","uc_greedy":"1f1ec-1f1e6","shortnames":[":ga:"],"category":"flags"},":flag_gb:":{"uc_base":"1f1ec-1f1e7","uc_output":"1f1ec-1f1e7","uc_match":"1f1ec-1f1e7","uc_greedy":"1f1ec-1f1e7","shortnames":[":gb:"],"category":"flags"},":flag_gd:":{"uc_base":"1f1ec-1f1e9","uc_output":"1f1ec-1f1e9","uc_match":"1f1ec-1f1e9","uc_greedy":"1f1ec-1f1e9","shortnames":[":gd:"],"category":"flags"},":flag_ge:":{"uc_base":"1f1ec-1f1ea","uc_output":"1f1ec-1f1ea","uc_match":"1f1ec-1f1ea","uc_greedy":"1f1ec-1f1ea","shortnames":[":ge:"],"category":"flags"},":flag_gf:":{"uc_base":"1f1ec-1f1eb","uc_output":"1f1ec-1f1eb","uc_match":"1f1ec-1f1eb","uc_greedy":"1f1ec-1f1eb","shortnames":[":gf:"],"category":"flags"},":flag_gg:":{"uc_base":"1f1ec-1f1ec","uc_output":"1f1ec-1f1ec","uc_match":"1f1ec-1f1ec","uc_greedy":"1f1ec-1f1ec","shortnames":[":gg:"],"category":"flags"},":flag_gh:":{"uc_base":"1f1ec-1f1ed","uc_output":"1f1ec-1f1ed","uc_match":"1f1ec-1f1ed","uc_greedy":"1f1ec-1f1ed","shortnames":[":gh:"],"category":"flags"},":flag_gi:":{"uc_base":"1f1ec-1f1ee","uc_output":"1f1ec-1f1ee","uc_match":"1f1ec-1f1ee","uc_greedy":"1f1ec-1f1ee","shortnames":[":gi:"],"category":"flags"},":flag_gl:":{"uc_base":"1f1ec-1f1f1","uc_output":"1f1ec-1f1f1","uc_match":"1f1ec-1f1f1","uc_greedy":"1f1ec-1f1f1","shortnames":[":gl:"],"category":"flags"},":flag_gm:":{"uc_base":"1f1ec-1f1f2","uc_output":"1f1ec-1f1f2","uc_match":"1f1ec-1f1f2","uc_greedy":"1f1ec-1f1f2","shortnames":[":gm:"],"category":"flags"},":flag_gn:":{"uc_base":"1f1ec-1f1f3","uc_output":"1f1ec-1f1f3","uc_match":"1f1ec-1f1f3","uc_greedy":"1f1ec-1f1f3","shortnames":[":gn:"],"category":"flags"},":flag_gp:":{"uc_base":"1f1ec-1f1f5","uc_output":"1f1ec-1f1f5","uc_match":"1f1ec-1f1f5","uc_greedy":"1f1ec-1f1f5","shortnames":[":gp:"],"category":"flags"},":flag_gq:":{"uc_base":"1f1ec-1f1f6","uc_output":"1f1ec-1f1f6","uc_match":"1f1ec-1f1f6","uc_greedy":"1f1ec-1f1f6","shortnames":[":gq:"],"category":"flags"},":flag_gr:":{"uc_base":"1f1ec-1f1f7","uc_output":"1f1ec-1f1f7","uc_match":"1f1ec-1f1f7","uc_greedy":"1f1ec-1f1f7","shortnames":[":gr:"],"category":"flags"},":flag_gs:":{"uc_base":"1f1ec-1f1f8","uc_output":"1f1ec-1f1f8","uc_match":"1f1ec-1f1f8","uc_greedy":"1f1ec-1f1f8","shortnames":[":gs:"],"category":"flags"},":flag_gt:":{"uc_base":"1f1ec-1f1f9","uc_output":"1f1ec-1f1f9","uc_match":"1f1ec-1f1f9","uc_greedy":"1f1ec-1f1f9","shortnames":[":gt:"],"category":"flags"},":flag_gu:":{"uc_base":"1f1ec-1f1fa","uc_output":"1f1ec-1f1fa","uc_match":"1f1ec-1f1fa","uc_greedy":"1f1ec-1f1fa","shortnames":[":gu:"],"category":"flags"},":flag_gw:":{"uc_base":"1f1ec-1f1fc","uc_output":"1f1ec-1f1fc","uc_match":"1f1ec-1f1fc","uc_greedy":"1f1ec-1f1fc","shortnames":[":gw:"],"category":"flags"},":flag_gy:":{"uc_base":"1f1ec-1f1fe","uc_output":"1f1ec-1f1fe","uc_match":"1f1ec-1f1fe","uc_greedy":"1f1ec-1f1fe","shortnames":[":gy:"],"category":"flags"},":flag_hk:":{"uc_base":"1f1ed-1f1f0","uc_output":"1f1ed-1f1f0","uc_match":"1f1ed-1f1f0","uc_greedy":"1f1ed-1f1f0","shortnames":[":hk:"],"category":"flags"},":flag_hm:":{"uc_base":"1f1ed-1f1f2","uc_output":"1f1ed-1f1f2","uc_match":"1f1ed-1f1f2","uc_greedy":"1f1ed-1f1f2","shortnames":[":hm:"],"category":"flags"},":flag_hn:":{"uc_base":"1f1ed-1f1f3","uc_output":"1f1ed-1f1f3","uc_match":"1f1ed-1f1f3","uc_greedy":"1f1ed-1f1f3","shortnames":[":hn:"],"category":"flags"},":flag_hr:":{"uc_base":"1f1ed-1f1f7","uc_output":"1f1ed-1f1f7","uc_match":"1f1ed-1f1f7","uc_greedy":"1f1ed-1f1f7","shortnames":[":hr:"],"category":"flags"},":flag_ht:":{"uc_base":"1f1ed-1f1f9","uc_output":"1f1ed-1f1f9","uc_match":"1f1ed-1f1f9","uc_greedy":"1f1ed-1f1f9","shortnames":[":ht:"],"category":"flags"},":flag_hu:":{"uc_base":"1f1ed-1f1fa","uc_output":"1f1ed-1f1fa","uc_match":"1f1ed-1f1fa","uc_greedy":"1f1ed-1f1fa","shortnames":[":hu:"],"category":"flags"},":flag_ic:":{"uc_base":"1f1ee-1f1e8","uc_output":"1f1ee-1f1e8","uc_match":"1f1ee-1f1e8","uc_greedy":"1f1ee-1f1e8","shortnames":[":ic:"],"category":"flags"},":flag_id:":{"uc_base":"1f1ee-1f1e9","uc_output":"1f1ee-1f1e9","uc_match":"1f1ee-1f1e9","uc_greedy":"1f1ee-1f1e9","shortnames":[":indonesia:"],"category":"flags"},":flag_ie:":{"uc_base":"1f1ee-1f1ea","uc_output":"1f1ee-1f1ea","uc_match":"1f1ee-1f1ea","uc_greedy":"1f1ee-1f1ea","shortnames":[":ie:"],"category":"flags"},":flag_il:":{"uc_base":"1f1ee-1f1f1","uc_output":"1f1ee-1f1f1","uc_match":"1f1ee-1f1f1","uc_greedy":"1f1ee-1f1f1","shortnames":[":il:"],"category":"flags"},":flag_im:":{"uc_base":"1f1ee-1f1f2","uc_output":"1f1ee-1f1f2","uc_match":"1f1ee-1f1f2","uc_greedy":"1f1ee-1f1f2","shortnames":[":im:"],"category":"flags"},":flag_in:":{"uc_base":"1f1ee-1f1f3","uc_output":"1f1ee-1f1f3","uc_match":"1f1ee-1f1f3","uc_greedy":"1f1ee-1f1f3","shortnames":[":in:"],"category":"flags"},":flag_io:":{"uc_base":"1f1ee-1f1f4","uc_output":"1f1ee-1f1f4","uc_match":"1f1ee-1f1f4","uc_greedy":"1f1ee-1f1f4","shortnames":[":io:"],"category":"flags"},":flag_iq:":{"uc_base":"1f1ee-1f1f6","uc_output":"1f1ee-1f1f6","uc_match":"1f1ee-1f1f6","uc_greedy":"1f1ee-1f1f6","shortnames":[":iq:"],"category":"flags"},":flag_ir:":{"uc_base":"1f1ee-1f1f7","uc_output":"1f1ee-1f1f7","uc_match":"1f1ee-1f1f7","uc_greedy":"1f1ee-1f1f7","shortnames":[":ir:"],"category":"flags"},":flag_is:":{"uc_base":"1f1ee-1f1f8","uc_output":"1f1ee-1f1f8","uc_match":"1f1ee-1f1f8","uc_greedy":"1f1ee-1f1f8","shortnames":[":is:"],"category":"flags"},":flag_it:":{"uc_base":"1f1ee-1f1f9","uc_output":"1f1ee-1f1f9","uc_match":"1f1ee-1f1f9","uc_greedy":"1f1ee-1f1f9","shortnames":[":it:"],"category":"flags"},":flag_je:":{"uc_base":"1f1ef-1f1ea","uc_output":"1f1ef-1f1ea","uc_match":"1f1ef-1f1ea","uc_greedy":"1f1ef-1f1ea","shortnames":[":je:"],"category":"flags"},":flag_jm:":{"uc_base":"1f1ef-1f1f2","uc_output":"1f1ef-1f1f2","uc_match":"1f1ef-1f1f2","uc_greedy":"1f1ef-1f1f2","shortnames":[":jm:"],"category":"flags"},":flag_jo:":{"uc_base":"1f1ef-1f1f4","uc_output":"1f1ef-1f1f4","uc_match":"1f1ef-1f1f4","uc_greedy":"1f1ef-1f1f4","shortnames":[":jo:"],"category":"flags"},":flag_jp:":{"uc_base":"1f1ef-1f1f5","uc_output":"1f1ef-1f1f5","uc_match":"1f1ef-1f1f5","uc_greedy":"1f1ef-1f1f5","shortnames":[":jp:"],"category":"flags"},":flag_ke:":{"uc_base":"1f1f0-1f1ea","uc_output":"1f1f0-1f1ea","uc_match":"1f1f0-1f1ea","uc_greedy":"1f1f0-1f1ea","shortnames":[":ke:"],"category":"flags"},":flag_kg:":{"uc_base":"1f1f0-1f1ec","uc_output":"1f1f0-1f1ec","uc_match":"1f1f0-1f1ec","uc_greedy":"1f1f0-1f1ec","shortnames":[":kg:"],"category":"flags"},":flag_kh:":{"uc_base":"1f1f0-1f1ed","uc_output":"1f1f0-1f1ed","uc_match":"1f1f0-1f1ed","uc_greedy":"1f1f0-1f1ed","shortnames":[":kh:"],"category":"flags"},":flag_ki:":{"uc_base":"1f1f0-1f1ee","uc_output":"1f1f0-1f1ee","uc_match":"1f1f0-1f1ee","uc_greedy":"1f1f0-1f1ee","shortnames":[":ki:"],"category":"flags"},":flag_km:":{"uc_base":"1f1f0-1f1f2","uc_output":"1f1f0-1f1f2","uc_match":"1f1f0-1f1f2","uc_greedy":"1f1f0-1f1f2","shortnames":[":km:"],"category":"flags"},":flag_kn:":{"uc_base":"1f1f0-1f1f3","uc_output":"1f1f0-1f1f3","uc_match":"1f1f0-1f1f3","uc_greedy":"1f1f0-1f1f3","shortnames":[":kn:"],"category":"flags"},":flag_kp:":{"uc_base":"1f1f0-1f1f5","uc_output":"1f1f0-1f1f5","uc_match":"1f1f0-1f1f5","uc_greedy":"1f1f0-1f1f5","shortnames":[":kp:"],"category":"flags"},":flag_kr:":{"uc_base":"1f1f0-1f1f7","uc_output":"1f1f0-1f1f7","uc_match":"1f1f0-1f1f7","uc_greedy":"1f1f0-1f1f7","shortnames":[":kr:"],"category":"flags"},":flag_kw:":{"uc_base":"1f1f0-1f1fc","uc_output":"1f1f0-1f1fc","uc_match":"1f1f0-1f1fc","uc_greedy":"1f1f0-1f1fc","shortnames":[":kw:"],"category":"flags"},":flag_ky:":{"uc_base":"1f1f0-1f1fe","uc_output":"1f1f0-1f1fe","uc_match":"1f1f0-1f1fe","uc_greedy":"1f1f0-1f1fe","shortnames":[":ky:"],"category":"flags"},":flag_kz:":{"uc_base":"1f1f0-1f1ff","uc_output":"1f1f0-1f1ff","uc_match":"1f1f0-1f1ff","uc_greedy":"1f1f0-1f1ff","shortnames":[":kz:"],"category":"flags"},":flag_la:":{"uc_base":"1f1f1-1f1e6","uc_output":"1f1f1-1f1e6","uc_match":"1f1f1-1f1e6","uc_greedy":"1f1f1-1f1e6","shortnames":[":la:"],"category":"flags"},":flag_lb:":{"uc_base":"1f1f1-1f1e7","uc_output":"1f1f1-1f1e7","uc_match":"1f1f1-1f1e7","uc_greedy":"1f1f1-1f1e7","shortnames":[":lb:"],"category":"flags"},":flag_lc:":{"uc_base":"1f1f1-1f1e8","uc_output":"1f1f1-1f1e8","uc_match":"1f1f1-1f1e8","uc_greedy":"1f1f1-1f1e8","shortnames":[":lc:"],"category":"flags"},":flag_li:":{"uc_base":"1f1f1-1f1ee","uc_output":"1f1f1-1f1ee","uc_match":"1f1f1-1f1ee","uc_greedy":"1f1f1-1f1ee","shortnames":[":li:"],"category":"flags"},":flag_lk:":{"uc_base":"1f1f1-1f1f0","uc_output":"1f1f1-1f1f0","uc_match":"1f1f1-1f1f0","uc_greedy":"1f1f1-1f1f0","shortnames":[":lk:"],"category":"flags"},":flag_lr:":{"uc_base":"1f1f1-1f1f7","uc_output":"1f1f1-1f1f7","uc_match":"1f1f1-1f1f7","uc_greedy":"1f1f1-1f1f7","shortnames":[":lr:"],"category":"flags"},":flag_ls:":{"uc_base":"1f1f1-1f1f8","uc_output":"1f1f1-1f1f8","uc_match":"1f1f1-1f1f8","uc_greedy":"1f1f1-1f1f8","shortnames":[":ls:"],"category":"flags"},":flag_lt:":{"uc_base":"1f1f1-1f1f9","uc_output":"1f1f1-1f1f9","uc_match":"1f1f1-1f1f9","uc_greedy":"1f1f1-1f1f9","shortnames":[":lt:"],"category":"flags"},":flag_lu:":{"uc_base":"1f1f1-1f1fa","uc_output":"1f1f1-1f1fa","uc_match":"1f1f1-1f1fa","uc_greedy":"1f1f1-1f1fa","shortnames":[":lu:"],"category":"flags"},":flag_lv:":{"uc_base":"1f1f1-1f1fb","uc_output":"1f1f1-1f1fb","uc_match":"1f1f1-1f1fb","uc_greedy":"1f1f1-1f1fb","shortnames":[":lv:"],"category":"flags"},":flag_ly:":{"uc_base":"1f1f1-1f1fe","uc_output":"1f1f1-1f1fe","uc_match":"1f1f1-1f1fe","uc_greedy":"1f1f1-1f1fe","shortnames":[":ly:"],"category":"flags"},":flag_ma:":{"uc_base":"1f1f2-1f1e6","uc_output":"1f1f2-1f1e6","uc_match":"1f1f2-1f1e6","uc_greedy":"1f1f2-1f1e6","shortnames":[":ma:"],"category":"flags"},":flag_mc:":{"uc_base":"1f1f2-1f1e8","uc_output":"1f1f2-1f1e8","uc_match":"1f1f2-1f1e8","uc_greedy":"1f1f2-1f1e8","shortnames":[":mc:"],"category":"flags"},":flag_md:":{"uc_base":"1f1f2-1f1e9","uc_output":"1f1f2-1f1e9","uc_match":"1f1f2-1f1e9","uc_greedy":"1f1f2-1f1e9","shortnames":[":md:"],"category":"flags"},":flag_me:":{"uc_base":"1f1f2-1f1ea","uc_output":"1f1f2-1f1ea","uc_match":"1f1f2-1f1ea","uc_greedy":"1f1f2-1f1ea","shortnames":[":me:"],"category":"flags"},":flag_mf:":{"uc_base":"1f1f2-1f1eb","uc_output":"1f1f2-1f1eb","uc_match":"1f1f2-1f1eb","uc_greedy":"1f1f2-1f1eb","shortnames":[":mf:"],"category":"flags"},":flag_mg:":{"uc_base":"1f1f2-1f1ec","uc_output":"1f1f2-1f1ec","uc_match":"1f1f2-1f1ec","uc_greedy":"1f1f2-1f1ec","shortnames":[":mg:"],"category":"flags"},":flag_mh:":{"uc_base":"1f1f2-1f1ed","uc_output":"1f1f2-1f1ed","uc_match":"1f1f2-1f1ed","uc_greedy":"1f1f2-1f1ed","shortnames":[":mh:"],"category":"flags"},":flag_mk:":{"uc_base":"1f1f2-1f1f0","uc_output":"1f1f2-1f1f0","uc_match":"1f1f2-1f1f0","uc_greedy":"1f1f2-1f1f0","shortnames":[":mk:"],"category":"flags"},":flag_ml:":{"uc_base":"1f1f2-1f1f1","uc_output":"1f1f2-1f1f1","uc_match":"1f1f2-1f1f1","uc_greedy":"1f1f2-1f1f1","shortnames":[":ml:"],"category":"flags"},":flag_mm:":{"uc_base":"1f1f2-1f1f2","uc_output":"1f1f2-1f1f2","uc_match":"1f1f2-1f1f2","uc_greedy":"1f1f2-1f1f2","shortnames":[":mm:"],"category":"flags"},":flag_mn:":{"uc_base":"1f1f2-1f1f3","uc_output":"1f1f2-1f1f3","uc_match":"1f1f2-1f1f3","uc_greedy":"1f1f2-1f1f3","shortnames":[":mn:"],"category":"flags"},":flag_mo:":{"uc_base":"1f1f2-1f1f4","uc_output":"1f1f2-1f1f4","uc_match":"1f1f2-1f1f4","uc_greedy":"1f1f2-1f1f4","shortnames":[":mo:"],"category":"flags"},":flag_mp:":{"uc_base":"1f1f2-1f1f5","uc_output":"1f1f2-1f1f5","uc_match":"1f1f2-1f1f5","uc_greedy":"1f1f2-1f1f5","shortnames":[":mp:"],"category":"flags"},":flag_mq:":{"uc_base":"1f1f2-1f1f6","uc_output":"1f1f2-1f1f6","uc_match":"1f1f2-1f1f6","uc_greedy":"1f1f2-1f1f6","shortnames":[":mq:"],"category":"flags"},":flag_mr:":{"uc_base":"1f1f2-1f1f7","uc_output":"1f1f2-1f1f7","uc_match":"1f1f2-1f1f7","uc_greedy":"1f1f2-1f1f7","shortnames":[":mr:"],"category":"flags"},":flag_ms:":{"uc_base":"1f1f2-1f1f8","uc_output":"1f1f2-1f1f8","uc_match":"1f1f2-1f1f8","uc_greedy":"1f1f2-1f1f8","shortnames":[":ms:"],"category":"flags"},":flag_mt:":{"uc_base":"1f1f2-1f1f9","uc_output":"1f1f2-1f1f9","uc_match":"1f1f2-1f1f9","uc_greedy":"1f1f2-1f1f9","shortnames":[":mt:"],"category":"flags"},":flag_mu:":{"uc_base":"1f1f2-1f1fa","uc_output":"1f1f2-1f1fa","uc_match":"1f1f2-1f1fa","uc_greedy":"1f1f2-1f1fa","shortnames":[":mu:"],"category":"flags"},":flag_mv:":{"uc_base":"1f1f2-1f1fb","uc_output":"1f1f2-1f1fb","uc_match":"1f1f2-1f1fb","uc_greedy":"1f1f2-1f1fb","shortnames":[":mv:"],"category":"flags"},":flag_mw:":{"uc_base":"1f1f2-1f1fc","uc_output":"1f1f2-1f1fc","uc_match":"1f1f2-1f1fc","uc_greedy":"1f1f2-1f1fc","shortnames":[":mw:"],"category":"flags"},":flag_mx:":{"uc_base":"1f1f2-1f1fd","uc_output":"1f1f2-1f1fd","uc_match":"1f1f2-1f1fd","uc_greedy":"1f1f2-1f1fd","shortnames":[":mx:"],"category":"flags"},":flag_my:":{"uc_base":"1f1f2-1f1fe","uc_output":"1f1f2-1f1fe","uc_match":"1f1f2-1f1fe","uc_greedy":"1f1f2-1f1fe","shortnames":[":my:"],"category":"flags"},":flag_mz:":{"uc_base":"1f1f2-1f1ff","uc_output":"1f1f2-1f1ff","uc_match":"1f1f2-1f1ff","uc_greedy":"1f1f2-1f1ff","shortnames":[":mz:"],"category":"flags"},":flag_na:":{"uc_base":"1f1f3-1f1e6","uc_output":"1f1f3-1f1e6","uc_match":"1f1f3-1f1e6","uc_greedy":"1f1f3-1f1e6","shortnames":[":na:"],"category":"flags"},":flag_nc:":{"uc_base":"1f1f3-1f1e8","uc_output":"1f1f3-1f1e8","uc_match":"1f1f3-1f1e8","uc_greedy":"1f1f3-1f1e8","shortnames":[":nc:"],"category":"flags"},":flag_ne:":{"uc_base":"1f1f3-1f1ea","uc_output":"1f1f3-1f1ea","uc_match":"1f1f3-1f1ea","uc_greedy":"1f1f3-1f1ea","shortnames":[":ne:"],"category":"flags"},":flag_nf:":{"uc_base":"1f1f3-1f1eb","uc_output":"1f1f3-1f1eb","uc_match":"1f1f3-1f1eb","uc_greedy":"1f1f3-1f1eb","shortnames":[":nf:"],"category":"flags"},":flag_ng:":{"uc_base":"1f1f3-1f1ec","uc_output":"1f1f3-1f1ec","uc_match":"1f1f3-1f1ec","uc_greedy":"1f1f3-1f1ec","shortnames":[":nigeria:"],"category":"flags"},":flag_ni:":{"uc_base":"1f1f3-1f1ee","uc_output":"1f1f3-1f1ee","uc_match":"1f1f3-1f1ee","uc_greedy":"1f1f3-1f1ee","shortnames":[":ni:"],"category":"flags"},":flag_nl:":{"uc_base":"1f1f3-1f1f1","uc_output":"1f1f3-1f1f1","uc_match":"1f1f3-1f1f1","uc_greedy":"1f1f3-1f1f1","shortnames":[":nl:"],"category":"flags"},":flag_no:":{"uc_base":"1f1f3-1f1f4","uc_output":"1f1f3-1f1f4","uc_match":"1f1f3-1f1f4","uc_greedy":"1f1f3-1f1f4","shortnames":[":no:"],"category":"flags"},":flag_np:":{"uc_base":"1f1f3-1f1f5","uc_output":"1f1f3-1f1f5","uc_match":"1f1f3-1f1f5","uc_greedy":"1f1f3-1f1f5","shortnames":[":np:"],"category":"flags"},":flag_nr:":{"uc_base":"1f1f3-1f1f7","uc_output":"1f1f3-1f1f7","uc_match":"1f1f3-1f1f7","uc_greedy":"1f1f3-1f1f7","shortnames":[":nr:"],"category":"flags"},":flag_nu:":{"uc_base":"1f1f3-1f1fa","uc_output":"1f1f3-1f1fa","uc_match":"1f1f3-1f1fa","uc_greedy":"1f1f3-1f1fa","shortnames":[":nu:"],"category":"flags"},":flag_nz:":{"uc_base":"1f1f3-1f1ff","uc_output":"1f1f3-1f1ff","uc_match":"1f1f3-1f1ff","uc_greedy":"1f1f3-1f1ff","shortnames":[":nz:"],"category":"flags"},":flag_om:":{"uc_base":"1f1f4-1f1f2","uc_output":"1f1f4-1f1f2","uc_match":"1f1f4-1f1f2","uc_greedy":"1f1f4-1f1f2","shortnames":[":om:"],"category":"flags"},":flag_pa:":{"uc_base":"1f1f5-1f1e6","uc_output":"1f1f5-1f1e6","uc_match":"1f1f5-1f1e6","uc_greedy":"1f1f5-1f1e6","shortnames":[":pa:"],"category":"flags"},":flag_pe:":{"uc_base":"1f1f5-1f1ea","uc_output":"1f1f5-1f1ea","uc_match":"1f1f5-1f1ea","uc_greedy":"1f1f5-1f1ea","shortnames":[":pe:"],"category":"flags"},":flag_pf:":{"uc_base":"1f1f5-1f1eb","uc_output":"1f1f5-1f1eb","uc_match":"1f1f5-1f1eb","uc_greedy":"1f1f5-1f1eb","shortnames":[":pf:"],"category":"flags"},":flag_pg:":{"uc_base":"1f1f5-1f1ec","uc_output":"1f1f5-1f1ec","uc_match":"1f1f5-1f1ec","uc_greedy":"1f1f5-1f1ec","shortnames":[":pg:"],"category":"flags"},":flag_ph:":{"uc_base":"1f1f5-1f1ed","uc_output":"1f1f5-1f1ed","uc_match":"1f1f5-1f1ed","uc_greedy":"1f1f5-1f1ed","shortnames":[":ph:"],"category":"flags"},":flag_pk:":{"uc_base":"1f1f5-1f1f0","uc_output":"1f1f5-1f1f0","uc_match":"1f1f5-1f1f0","uc_greedy":"1f1f5-1f1f0","shortnames":[":pk:"],"category":"flags"},":flag_pl:":{"uc_base":"1f1f5-1f1f1","uc_output":"1f1f5-1f1f1","uc_match":"1f1f5-1f1f1","uc_greedy":"1f1f5-1f1f1","shortnames":[":pl:"],"category":"flags"},":flag_pm:":{"uc_base":"1f1f5-1f1f2","uc_output":"1f1f5-1f1f2","uc_match":"1f1f5-1f1f2","uc_greedy":"1f1f5-1f1f2","shortnames":[":pm:"],"category":"flags"},":flag_pn:":{"uc_base":"1f1f5-1f1f3","uc_output":"1f1f5-1f1f3","uc_match":"1f1f5-1f1f3","uc_greedy":"1f1f5-1f1f3","shortnames":[":pn:"],"category":"flags"},":flag_pr:":{"uc_base":"1f1f5-1f1f7","uc_output":"1f1f5-1f1f7","uc_match":"1f1f5-1f1f7","uc_greedy":"1f1f5-1f1f7","shortnames":[":pr:"],"category":"flags"},":flag_ps:":{"uc_base":"1f1f5-1f1f8","uc_output":"1f1f5-1f1f8","uc_match":"1f1f5-1f1f8","uc_greedy":"1f1f5-1f1f8","shortnames":[":ps:"],"category":"flags"},":flag_pt:":{"uc_base":"1f1f5-1f1f9","uc_output":"1f1f5-1f1f9","uc_match":"1f1f5-1f1f9","uc_greedy":"1f1f5-1f1f9","shortnames":[":pt:"],"category":"flags"},":flag_pw:":{"uc_base":"1f1f5-1f1fc","uc_output":"1f1f5-1f1fc","uc_match":"1f1f5-1f1fc","uc_greedy":"1f1f5-1f1fc","shortnames":[":pw:"],"category":"flags"},":flag_py:":{"uc_base":"1f1f5-1f1fe","uc_output":"1f1f5-1f1fe","uc_match":"1f1f5-1f1fe","uc_greedy":"1f1f5-1f1fe","shortnames":[":py:"],"category":"flags"},":flag_qa:":{"uc_base":"1f1f6-1f1e6","uc_output":"1f1f6-1f1e6","uc_match":"1f1f6-1f1e6","uc_greedy":"1f1f6-1f1e6","shortnames":[":qa:"],"category":"flags"},":flag_re:":{"uc_base":"1f1f7-1f1ea","uc_output":"1f1f7-1f1ea","uc_match":"1f1f7-1f1ea","uc_greedy":"1f1f7-1f1ea","shortnames":[":re:"],"category":"flags"},":flag_ro:":{"uc_base":"1f1f7-1f1f4","uc_output":"1f1f7-1f1f4","uc_match":"1f1f7-1f1f4","uc_greedy":"1f1f7-1f1f4","shortnames":[":ro:"],"category":"flags"},":flag_rs:":{"uc_base":"1f1f7-1f1f8","uc_output":"1f1f7-1f1f8","uc_match":"1f1f7-1f1f8","uc_greedy":"1f1f7-1f1f8","shortnames":[":rs:"],"category":"flags"},":flag_ru:":{"uc_base":"1f1f7-1f1fa","uc_output":"1f1f7-1f1fa","uc_match":"1f1f7-1f1fa","uc_greedy":"1f1f7-1f1fa","shortnames":[":ru:"],"category":"flags"},":flag_rw:":{"uc_base":"1f1f7-1f1fc","uc_output":"1f1f7-1f1fc","uc_match":"1f1f7-1f1fc","uc_greedy":"1f1f7-1f1fc","shortnames":[":rw:"],"category":"flags"},":flag_sa:":{"uc_base":"1f1f8-1f1e6","uc_output":"1f1f8-1f1e6","uc_match":"1f1f8-1f1e6","uc_greedy":"1f1f8-1f1e6","shortnames":[":saudiarabia:",":saudi:"],"category":"flags"},":flag_sb:":{"uc_base":"1f1f8-1f1e7","uc_output":"1f1f8-1f1e7","uc_match":"1f1f8-1f1e7","uc_greedy":"1f1f8-1f1e7","shortnames":[":sb:"],"category":"flags"},":flag_sc:":{"uc_base":"1f1f8-1f1e8","uc_output":"1f1f8-1f1e8","uc_match":"1f1f8-1f1e8","uc_greedy":"1f1f8-1f1e8","shortnames":[":sc:"],"category":"flags"},":flag_sd:":{"uc_base":"1f1f8-1f1e9","uc_output":"1f1f8-1f1e9","uc_match":"1f1f8-1f1e9","uc_greedy":"1f1f8-1f1e9","shortnames":[":sd:"],"category":"flags"},":flag_se:":{"uc_base":"1f1f8-1f1ea","uc_output":"1f1f8-1f1ea","uc_match":"1f1f8-1f1ea","uc_greedy":"1f1f8-1f1ea","shortnames":[":se:"],"category":"flags"},":flag_sg:":{"uc_base":"1f1f8-1f1ec","uc_output":"1f1f8-1f1ec","uc_match":"1f1f8-1f1ec","uc_greedy":"1f1f8-1f1ec","shortnames":[":sg:"],"category":"flags"},":flag_sh:":{"uc_base":"1f1f8-1f1ed","uc_output":"1f1f8-1f1ed","uc_match":"1f1f8-1f1ed","uc_greedy":"1f1f8-1f1ed","shortnames":[":sh:"],"category":"flags"},":flag_si:":{"uc_base":"1f1f8-1f1ee","uc_output":"1f1f8-1f1ee","uc_match":"1f1f8-1f1ee","uc_greedy":"1f1f8-1f1ee","shortnames":[":si:"],"category":"flags"},":flag_sj:":{"uc_base":"1f1f8-1f1ef","uc_output":"1f1f8-1f1ef","uc_match":"1f1f8-1f1ef","uc_greedy":"1f1f8-1f1ef","shortnames":[":sj:"],"category":"flags"},":flag_sk:":{"uc_base":"1f1f8-1f1f0","uc_output":"1f1f8-1f1f0","uc_match":"1f1f8-1f1f0","uc_greedy":"1f1f8-1f1f0","shortnames":[":sk:"],"category":"flags"},":flag_sl:":{"uc_base":"1f1f8-1f1f1","uc_output":"1f1f8-1f1f1","uc_match":"1f1f8-1f1f1","uc_greedy":"1f1f8-1f1f1","shortnames":[":sl:"],"category":"flags"},":flag_sm:":{"uc_base":"1f1f8-1f1f2","uc_output":"1f1f8-1f1f2","uc_match":"1f1f8-1f1f2","uc_greedy":"1f1f8-1f1f2","shortnames":[":sm:"],"category":"flags"},":flag_sn:":{"uc_base":"1f1f8-1f1f3","uc_output":"1f1f8-1f1f3","uc_match":"1f1f8-1f1f3","uc_greedy":"1f1f8-1f1f3","shortnames":[":sn:"],"category":"flags"},":flag_so:":{"uc_base":"1f1f8-1f1f4","uc_output":"1f1f8-1f1f4","uc_match":"1f1f8-1f1f4","uc_greedy":"1f1f8-1f1f4","shortnames":[":so:"],"category":"flags"},":flag_sr:":{"uc_base":"1f1f8-1f1f7","uc_output":"1f1f8-1f1f7","uc_match":"1f1f8-1f1f7","uc_greedy":"1f1f8-1f1f7","shortnames":[":sr:"],"category":"flags"},":flag_ss:":{"uc_base":"1f1f8-1f1f8","uc_output":"1f1f8-1f1f8","uc_match":"1f1f8-1f1f8","uc_greedy":"1f1f8-1f1f8","shortnames":[":ss:"],"category":"flags"},":flag_st:":{"uc_base":"1f1f8-1f1f9","uc_output":"1f1f8-1f1f9","uc_match":"1f1f8-1f1f9","uc_greedy":"1f1f8-1f1f9","shortnames":[":st:"],"category":"flags"},":flag_sv:":{"uc_base":"1f1f8-1f1fb","uc_output":"1f1f8-1f1fb","uc_match":"1f1f8-1f1fb","uc_greedy":"1f1f8-1f1fb","shortnames":[":sv:"],"category":"flags"},":flag_sx:":{"uc_base":"1f1f8-1f1fd","uc_output":"1f1f8-1f1fd","uc_match":"1f1f8-1f1fd","uc_greedy":"1f1f8-1f1fd","shortnames":[":sx:"],"category":"flags"},":flag_sy:":{"uc_base":"1f1f8-1f1fe","uc_output":"1f1f8-1f1fe","uc_match":"1f1f8-1f1fe","uc_greedy":"1f1f8-1f1fe","shortnames":[":sy:"],"category":"flags"},":flag_sz:":{"uc_base":"1f1f8-1f1ff","uc_output":"1f1f8-1f1ff","uc_match":"1f1f8-1f1ff","uc_greedy":"1f1f8-1f1ff","shortnames":[":sz:"],"category":"flags"},":flag_ta:":{"uc_base":"1f1f9-1f1e6","uc_output":"1f1f9-1f1e6","uc_match":"1f1f9-1f1e6","uc_greedy":"1f1f9-1f1e6","shortnames":[":ta:"],"category":"flags"},":flag_tc:":{"uc_base":"1f1f9-1f1e8","uc_output":"1f1f9-1f1e8","uc_match":"1f1f9-1f1e8","uc_greedy":"1f1f9-1f1e8","shortnames":[":tc:"],"category":"flags"},":flag_td:":{"uc_base":"1f1f9-1f1e9","uc_output":"1f1f9-1f1e9","uc_match":"1f1f9-1f1e9","uc_greedy":"1f1f9-1f1e9","shortnames":[":td:"],"category":"flags"},":flag_tf:":{"uc_base":"1f1f9-1f1eb","uc_output":"1f1f9-1f1eb","uc_match":"1f1f9-1f1eb","uc_greedy":"1f1f9-1f1eb","shortnames":[":tf:"],"category":"flags"},":flag_tg:":{"uc_base":"1f1f9-1f1ec","uc_output":"1f1f9-1f1ec","uc_match":"1f1f9-1f1ec","uc_greedy":"1f1f9-1f1ec","shortnames":[":tg:"],"category":"flags"},":flag_th:":{"uc_base":"1f1f9-1f1ed","uc_output":"1f1f9-1f1ed","uc_match":"1f1f9-1f1ed","uc_greedy":"1f1f9-1f1ed","shortnames":[":th:"],"category":"flags"},":flag_tj:":{"uc_base":"1f1f9-1f1ef","uc_output":"1f1f9-1f1ef","uc_match":"1f1f9-1f1ef","uc_greedy":"1f1f9-1f1ef","shortnames":[":tj:"],"category":"flags"},":flag_tk:":{"uc_base":"1f1f9-1f1f0","uc_output":"1f1f9-1f1f0","uc_match":"1f1f9-1f1f0","uc_greedy":"1f1f9-1f1f0","shortnames":[":tk:"],"category":"flags"},":flag_tl:":{"uc_base":"1f1f9-1f1f1","uc_output":"1f1f9-1f1f1","uc_match":"1f1f9-1f1f1","uc_greedy":"1f1f9-1f1f1","shortnames":[":tl:"],"category":"flags"},":flag_tm:":{"uc_base":"1f1f9-1f1f2","uc_output":"1f1f9-1f1f2","uc_match":"1f1f9-1f1f2","uc_greedy":"1f1f9-1f1f2","shortnames":[":turkmenistan:"],"category":"flags"},":flag_tn:":{"uc_base":"1f1f9-1f1f3","uc_output":"1f1f9-1f1f3","uc_match":"1f1f9-1f1f3","uc_greedy":"1f1f9-1f1f3","shortnames":[":tn:"],"category":"flags"},":flag_to:":{"uc_base":"1f1f9-1f1f4","uc_output":"1f1f9-1f1f4","uc_match":"1f1f9-1f1f4","uc_greedy":"1f1f9-1f1f4","shortnames":[":to:"],"category":"flags"},":flag_tr:":{"uc_base":"1f1f9-1f1f7","uc_output":"1f1f9-1f1f7","uc_match":"1f1f9-1f1f7","uc_greedy":"1f1f9-1f1f7","shortnames":[":tr:"],"category":"flags"},":flag_tt:":{"uc_base":"1f1f9-1f1f9","uc_output":"1f1f9-1f1f9","uc_match":"1f1f9-1f1f9","uc_greedy":"1f1f9-1f1f9","shortnames":[":tt:"],"category":"flags"},":flag_tv:":{"uc_base":"1f1f9-1f1fb","uc_output":"1f1f9-1f1fb","uc_match":"1f1f9-1f1fb","uc_greedy":"1f1f9-1f1fb","shortnames":[":tuvalu:"],"category":"flags"},":flag_tw:":{"uc_base":"1f1f9-1f1fc","uc_output":"1f1f9-1f1fc","uc_match":"1f1f9-1f1fc","uc_greedy":"1f1f9-1f1fc","shortnames":[":tw:"],"category":"flags"},":flag_tz:":{"uc_base":"1f1f9-1f1ff","uc_output":"1f1f9-1f1ff","uc_match":"1f1f9-1f1ff","uc_greedy":"1f1f9-1f1ff","shortnames":[":tz:"],"category":"flags"},":flag_ua:":{"uc_base":"1f1fa-1f1e6","uc_output":"1f1fa-1f1e6","uc_match":"1f1fa-1f1e6","uc_greedy":"1f1fa-1f1e6","shortnames":[":ua:"],"category":"flags"},":flag_ug:":{"uc_base":"1f1fa-1f1ec","uc_output":"1f1fa-1f1ec","uc_match":"1f1fa-1f1ec","uc_greedy":"1f1fa-1f1ec","shortnames":[":ug:"],"category":"flags"},":flag_um:":{"uc_base":"1f1fa-1f1f2","uc_output":"1f1fa-1f1f2","uc_match":"1f1fa-1f1f2","uc_greedy":"1f1fa-1f1f2","shortnames":[":um:"],"category":"flags"},":flag_us:":{"uc_base":"1f1fa-1f1f8","uc_output":"1f1fa-1f1f8","uc_match":"1f1fa-1f1f8","uc_greedy":"1f1fa-1f1f8","shortnames":[":us:"],"category":"flags"},":flag_uy:":{"uc_base":"1f1fa-1f1fe","uc_output":"1f1fa-1f1fe","uc_match":"1f1fa-1f1fe","uc_greedy":"1f1fa-1f1fe","shortnames":[":uy:"],"category":"flags"},":flag_uz:":{"uc_base":"1f1fa-1f1ff","uc_output":"1f1fa-1f1ff","uc_match":"1f1fa-1f1ff","uc_greedy":"1f1fa-1f1ff","shortnames":[":uz:"],"category":"flags"},":flag_va:":{"uc_base":"1f1fb-1f1e6","uc_output":"1f1fb-1f1e6","uc_match":"1f1fb-1f1e6","uc_greedy":"1f1fb-1f1e6","shortnames":[":va:"],"category":"flags"},":flag_vc:":{"uc_base":"1f1fb-1f1e8","uc_output":"1f1fb-1f1e8","uc_match":"1f1fb-1f1e8","uc_greedy":"1f1fb-1f1e8","shortnames":[":vc:"],"category":"flags"},":flag_ve:":{"uc_base":"1f1fb-1f1ea","uc_output":"1f1fb-1f1ea","uc_match":"1f1fb-1f1ea","uc_greedy":"1f1fb-1f1ea","shortnames":[":ve:"],"category":"flags"},":flag_vg:":{"uc_base":"1f1fb-1f1ec","uc_output":"1f1fb-1f1ec","uc_match":"1f1fb-1f1ec","uc_greedy":"1f1fb-1f1ec","shortnames":[":vg:"],"category":"flags"},":flag_vi:":{"uc_base":"1f1fb-1f1ee","uc_output":"1f1fb-1f1ee","uc_match":"1f1fb-1f1ee","uc_greedy":"1f1fb-1f1ee","shortnames":[":vi:"],"category":"flags"},":flag_vn:":{"uc_base":"1f1fb-1f1f3","uc_output":"1f1fb-1f1f3","uc_match":"1f1fb-1f1f3","uc_greedy":"1f1fb-1f1f3","shortnames":[":vn:"],"category":"flags"},":flag_vu:":{"uc_base":"1f1fb-1f1fa","uc_output":"1f1fb-1f1fa","uc_match":"1f1fb-1f1fa","uc_greedy":"1f1fb-1f1fa","shortnames":[":vu:"],"category":"flags"},":flag_wf:":{"uc_base":"1f1fc-1f1eb","uc_output":"1f1fc-1f1eb","uc_match":"1f1fc-1f1eb","uc_greedy":"1f1fc-1f1eb","shortnames":[":wf:"],"category":"flags"},":flag_ws:":{"uc_base":"1f1fc-1f1f8","uc_output":"1f1fc-1f1f8","uc_match":"1f1fc-1f1f8","uc_greedy":"1f1fc-1f1f8","shortnames":[":ws:"],"category":"flags"},":flag_xk:":{"uc_base":"1f1fd-1f1f0","uc_output":"1f1fd-1f1f0","uc_match":"1f1fd-1f1f0","uc_greedy":"1f1fd-1f1f0","shortnames":[":xk:"],"category":"flags"},":flag_ye:":{"uc_base":"1f1fe-1f1ea","uc_output":"1f1fe-1f1ea","uc_match":"1f1fe-1f1ea","uc_greedy":"1f1fe-1f1ea","shortnames":[":ye:"],"category":"flags"},":flag_yt:":{"uc_base":"1f1fe-1f1f9","uc_output":"1f1fe-1f1f9","uc_match":"1f1fe-1f1f9","uc_greedy":"1f1fe-1f1f9","shortnames":[":yt:"],"category":"flags"},":flag_za:":{"uc_base":"1f1ff-1f1e6","uc_output":"1f1ff-1f1e6","uc_match":"1f1ff-1f1e6","uc_greedy":"1f1ff-1f1e6","shortnames":[":za:"],"category":"flags"},":flag_zm:":{"uc_base":"1f1ff-1f1f2","uc_output":"1f1ff-1f1f2","uc_match":"1f1ff-1f1f2","uc_greedy":"1f1ff-1f1f2","shortnames":[":zm:"],"category":"flags"},":flag_zw:":{"uc_base":"1f1ff-1f1fc","uc_output":"1f1ff-1f1fc","uc_match":"1f1ff-1f1fc","uc_greedy":"1f1ff-1f1fc","shortnames":[":zw:"],"category":"flags"},":girl_tone1:":{"uc_base":"1f467-1f3fb","uc_output":"1f467-1f3fb","uc_match":"1f467-1f3fb","uc_greedy":"1f467-1f3fb","shortnames":[],"category":"people"},":girl_tone2:":{"uc_base":"1f467-1f3fc","uc_output":"1f467-1f3fc","uc_match":"1f467-1f3fc","uc_greedy":"1f467-1f3fc","shortnames":[],"category":"people"},":girl_tone3:":{"uc_base":"1f467-1f3fd","uc_output":"1f467-1f3fd","uc_match":"1f467-1f3fd","uc_greedy":"1f467-1f3fd","shortnames":[],"category":"people"},":girl_tone4:":{"uc_base":"1f467-1f3fe","uc_output":"1f467-1f3fe","uc_match":"1f467-1f3fe","uc_greedy":"1f467-1f3fe","shortnames":[],"category":"people"},":girl_tone5:":{"uc_base":"1f467-1f3ff","uc_output":"1f467-1f3ff","uc_match":"1f467-1f3ff","uc_greedy":"1f467-1f3ff","shortnames":[],"category":"people"},":guard_tone1:":{"uc_base":"1f482-1f3fb","uc_output":"1f482-1f3fb","uc_match":"1f482-1f3fb","uc_greedy":"1f482-1f3fb","shortnames":[":guardsman_tone1:"],"category":"people"},":guard_tone2:":{"uc_base":"1f482-1f3fc","uc_output":"1f482-1f3fc","uc_match":"1f482-1f3fc","uc_greedy":"1f482-1f3fc","shortnames":[":guardsman_tone2:"],"category":"people"},":guard_tone3:":{"uc_base":"1f482-1f3fd","uc_output":"1f482-1f3fd","uc_match":"1f482-1f3fd","uc_greedy":"1f482-1f3fd","shortnames":[":guardsman_tone3:"],"category":"people"},":guard_tone4:":{"uc_base":"1f482-1f3fe","uc_output":"1f482-1f3fe","uc_match":"1f482-1f3fe","uc_greedy":"1f482-1f3fe","shortnames":[":guardsman_tone4:"],"category":"people"},":guard_tone5:":{"uc_base":"1f482-1f3ff","uc_output":"1f482-1f3ff","uc_match":"1f482-1f3ff","uc_greedy":"1f482-1f3ff","shortnames":[":guardsman_tone5:"],"category":"people"},":hand_splayed_tone1:":{"uc_base":"1f590-1f3fb","uc_output":"1f590-1f3fb","uc_match":"1f590-fe0f-1f3fb","uc_greedy":"1f590-fe0f-1f3fb","shortnames":[":raised_hand_with_fingers_splayed_tone1:"],"category":"people"},":hand_splayed_tone2:":{"uc_base":"1f590-1f3fc","uc_output":"1f590-1f3fc","uc_match":"1f590-fe0f-1f3fc","uc_greedy":"1f590-fe0f-1f3fc","shortnames":[":raised_hand_with_fingers_splayed_tone2:"],"category":"people"},":hand_splayed_tone3:":{"uc_base":"1f590-1f3fd","uc_output":"1f590-1f3fd","uc_match":"1f590-fe0f-1f3fd","uc_greedy":"1f590-fe0f-1f3fd","shortnames":[":raised_hand_with_fingers_splayed_tone3:"],"category":"people"},":hand_splayed_tone4:":{"uc_base":"1f590-1f3fe","uc_output":"1f590-1f3fe","uc_match":"1f590-fe0f-1f3fe","uc_greedy":"1f590-fe0f-1f3fe","shortnames":[":raised_hand_with_fingers_splayed_tone4:"],"category":"people"},":hand_splayed_tone5:":{"uc_base":"1f590-1f3ff","uc_output":"1f590-1f3ff","uc_match":"1f590-fe0f-1f3ff","uc_greedy":"1f590-fe0f-1f3ff","shortnames":[":raised_hand_with_fingers_splayed_tone5:"],"category":"people"},":horse_racing_tone1:":{"uc_base":"1f3c7-1f3fb","uc_output":"1f3c7-1f3fb","uc_match":"1f3c7-1f3fb","uc_greedy":"1f3c7-1f3fb","shortnames":[],"category":"activity"},":horse_racing_tone2:":{"uc_base":"1f3c7-1f3fc","uc_output":"1f3c7-1f3fc","uc_match":"1f3c7-1f3fc","uc_greedy":"1f3c7-1f3fc","shortnames":[],"category":"activity"},":horse_racing_tone3:":{"uc_base":"1f3c7-1f3fd","uc_output":"1f3c7-1f3fd","uc_match":"1f3c7-1f3fd","uc_greedy":"1f3c7-1f3fd","shortnames":[],"category":"activity"},":horse_racing_tone4:":{"uc_base":"1f3c7-1f3fe","uc_output":"1f3c7-1f3fe","uc_match":"1f3c7-1f3fe","uc_greedy":"1f3c7-1f3fe","shortnames":[],"category":"activity"},":horse_racing_tone5:":{"uc_base":"1f3c7-1f3ff","uc_output":"1f3c7-1f3ff","uc_match":"1f3c7-1f3ff","uc_greedy":"1f3c7-1f3ff","shortnames":[],"category":"activity"},":left_facing_fist_tone1:":{"uc_base":"1f91b-1f3fb","uc_output":"1f91b-1f3fb","uc_match":"1f91b-1f3fb","uc_greedy":"1f91b-1f3fb","shortnames":[":left_fist_tone1:"],"category":"people"},":left_facing_fist_tone2:":{"uc_base":"1f91b-1f3fc","uc_output":"1f91b-1f3fc","uc_match":"1f91b-1f3fc","uc_greedy":"1f91b-1f3fc","shortnames":[":left_fist_tone2:"],"category":"people"},":left_facing_fist_tone3:":{"uc_base":"1f91b-1f3fd","uc_output":"1f91b-1f3fd","uc_match":"1f91b-1f3fd","uc_greedy":"1f91b-1f3fd","shortnames":[":left_fist_tone3:"],"category":"people"},":left_facing_fist_tone4:":{"uc_base":"1f91b-1f3fe","uc_output":"1f91b-1f3fe","uc_match":"1f91b-1f3fe","uc_greedy":"1f91b-1f3fe","shortnames":[":left_fist_tone4:"],"category":"people"},":left_facing_fist_tone5:":{"uc_base":"1f91b-1f3ff","uc_output":"1f91b-1f3ff","uc_match":"1f91b-1f3ff","uc_greedy":"1f91b-1f3ff","shortnames":[":left_fist_tone5:"],"category":"people"},":love_you_gesture_tone1:":{"uc_base":"1f91f-1f3fb","uc_output":"1f91f-1f3fb","uc_match":"1f91f-1f3fb","uc_greedy":"1f91f-1f3fb","shortnames":[":love_you_gesture_light_skin_tone:"],"category":"people"},":love_you_gesture_tone2:":{"uc_base":"1f91f-1f3fc","uc_output":"1f91f-1f3fc","uc_match":"1f91f-1f3fc","uc_greedy":"1f91f-1f3fc","shortnames":[":love_you_gesture_medium_light_skin_tone:"],"category":"people"},":love_you_gesture_tone3:":{"uc_base":"1f91f-1f3fd","uc_output":"1f91f-1f3fd","uc_match":"1f91f-1f3fd","uc_greedy":"1f91f-1f3fd","shortnames":[":love_you_gesture_medium_skin_tone:"],"category":"people"},":love_you_gesture_tone4:":{"uc_base":"1f91f-1f3fe","uc_output":"1f91f-1f3fe","uc_match":"1f91f-1f3fe","uc_greedy":"1f91f-1f3fe","shortnames":[":love_you_gesture_medium_dark_skin_tone:"],"category":"people"},":love_you_gesture_tone5:":{"uc_base":"1f91f-1f3ff","uc_output":"1f91f-1f3ff","uc_match":"1f91f-1f3ff","uc_greedy":"1f91f-1f3ff","shortnames":[":love_you_gesture_dark_skin_tone:"],"category":"people"},":mage_tone1:":{"uc_base":"1f9d9-1f3fb","uc_output":"1f9d9-1f3fb","uc_match":"1f9d9-1f3fb","uc_greedy":"1f9d9-1f3fb","shortnames":[":mage_light_skin_tone:"],"category":"people"},":mage_tone2:":{"uc_base":"1f9d9-1f3fc","uc_output":"1f9d9-1f3fc","uc_match":"1f9d9-1f3fc","uc_greedy":"1f9d9-1f3fc","shortnames":[":mage_medium_light_skin_tone:"],"category":"people"},":mage_tone3:":{"uc_base":"1f9d9-1f3fd","uc_output":"1f9d9-1f3fd","uc_match":"1f9d9-1f3fd","uc_greedy":"1f9d9-1f3fd","shortnames":[":mage_medium_skin_tone:"],"category":"people"},":mage_tone4:":{"uc_base":"1f9d9-1f3fe","uc_output":"1f9d9-1f3fe","uc_match":"1f9d9-1f3fe","uc_greedy":"1f9d9-1f3fe","shortnames":[":mage_medium_dark_skin_tone:"],"category":"people"},":mage_tone5:":{"uc_base":"1f9d9-1f3ff","uc_output":"1f9d9-1f3ff","uc_match":"1f9d9-1f3ff","uc_greedy":"1f9d9-1f3ff","shortnames":[":mage_dark_skin_tone:"],"category":"people"},":man_dancing_tone1:":{"uc_base":"1f57a-1f3fb","uc_output":"1f57a-1f3fb","uc_match":"1f57a-1f3fb","uc_greedy":"1f57a-1f3fb","shortnames":[":male_dancer_tone1:"],"category":"people"},":man_dancing_tone2:":{"uc_base":"1f57a-1f3fc","uc_output":"1f57a-1f3fc","uc_match":"1f57a-1f3fc","uc_greedy":"1f57a-1f3fc","shortnames":[":male_dancer_tone2:"],"category":"people"},":man_dancing_tone3:":{"uc_base":"1f57a-1f3fd","uc_output":"1f57a-1f3fd","uc_match":"1f57a-1f3fd","uc_greedy":"1f57a-1f3fd","shortnames":[":male_dancer_tone3:"],"category":"people"},":man_dancing_tone4:":{"uc_base":"1f57a-1f3fe","uc_output":"1f57a-1f3fe","uc_match":"1f57a-1f3fe","uc_greedy":"1f57a-1f3fe","shortnames":[":male_dancer_tone4:"],"category":"people"},":man_dancing_tone5:":{"uc_base":"1f57a-1f3ff","uc_output":"1f57a-1f3ff","uc_match":"1f57a-1f3ff","uc_greedy":"1f57a-1f3ff","shortnames":[":male_dancer_tone5:"],"category":"people"},":man_in_business_suit_levitating_tone1:":{"uc_base":"1f574-1f3fb","uc_output":"1f574-1f3fb","uc_match":"1f574-fe0f-1f3fb","uc_greedy":"1f574-fe0f-1f3fb","shortnames":[":man_in_business_suit_levitating_light_skin_tone:"],"category":"people"},":man_in_business_suit_levitating_tone2:":{"uc_base":"1f574-1f3fc","uc_output":"1f574-1f3fc","uc_match":"1f574-fe0f-1f3fc","uc_greedy":"1f574-fe0f-1f3fc","shortnames":[":man_in_business_suit_levitating_medium_light_skin_tone:"],"category":"people"},":man_in_business_suit_levitating_tone3:":{"uc_base":"1f574-1f3fd","uc_output":"1f574-1f3fd","uc_match":"1f574-fe0f-1f3fd","uc_greedy":"1f574-fe0f-1f3fd","shortnames":[":man_in_business_suit_levitating_medium_skin_tone:"],"category":"people"},":man_in_business_suit_levitating_tone4:":{"uc_base":"1f574-1f3fe","uc_output":"1f574-1f3fe","uc_match":"1f574-fe0f-1f3fe","uc_greedy":"1f574-fe0f-1f3fe","shortnames":[":man_in_business_suit_levitating_medium_dark_skin_tone:"],"category":"people"},":man_in_business_suit_levitating_tone5:":{"uc_base":"1f574-1f3ff","uc_output":"1f574-1f3ff","uc_match":"1f574-fe0f-1f3ff","uc_greedy":"1f574-fe0f-1f3ff","shortnames":[":man_in_business_suit_levitating_dark_skin_tone:"],"category":"people"},":man_in_tuxedo_tone1:":{"uc_base":"1f935-1f3fb","uc_output":"1f935-1f3fb","uc_match":"1f935-1f3fb","uc_greedy":"1f935-1f3fb","shortnames":[":tuxedo_tone1:"],"category":"people"},":man_in_tuxedo_tone2:":{"uc_base":"1f935-1f3fc","uc_output":"1f935-1f3fc","uc_match":"1f935-1f3fc","uc_greedy":"1f935-1f3fc","shortnames":[":tuxedo_tone2:"],"category":"people"},":man_in_tuxedo_tone3:":{"uc_base":"1f935-1f3fd","uc_output":"1f935-1f3fd","uc_match":"1f935-1f3fd","uc_greedy":"1f935-1f3fd","shortnames":[":tuxedo_tone3:"],"category":"people"},":man_in_tuxedo_tone4:":{"uc_base":"1f935-1f3fe","uc_output":"1f935-1f3fe","uc_match":"1f935-1f3fe","uc_greedy":"1f935-1f3fe","shortnames":[":tuxedo_tone4:"],"category":"people"},":man_in_tuxedo_tone5:":{"uc_base":"1f935-1f3ff","uc_output":"1f935-1f3ff","uc_match":"1f935-1f3ff","uc_greedy":"1f935-1f3ff","shortnames":[":tuxedo_tone5:"],"category":"people"},":man_tone1:":{"uc_base":"1f468-1f3fb","uc_output":"1f468-1f3fb","uc_match":"1f468-1f3fb","uc_greedy":"1f468-1f3fb","shortnames":[],"category":"people"},":man_tone2:":{"uc_base":"1f468-1f3fc","uc_output":"1f468-1f3fc","uc_match":"1f468-1f3fc","uc_greedy":"1f468-1f3fc","shortnames":[],"category":"people"},":man_tone3:":{"uc_base":"1f468-1f3fd","uc_output":"1f468-1f3fd","uc_match":"1f468-1f3fd","uc_greedy":"1f468-1f3fd","shortnames":[],"category":"people"},":man_tone4:":{"uc_base":"1f468-1f3fe","uc_output":"1f468-1f3fe","uc_match":"1f468-1f3fe","uc_greedy":"1f468-1f3fe","shortnames":[],"category":"people"},":man_tone5:":{"uc_base":"1f468-1f3ff","uc_output":"1f468-1f3ff","uc_match":"1f468-1f3ff","uc_greedy":"1f468-1f3ff","shortnames":[],"category":"people"},":man_with_chinese_cap_tone1:":{"uc_base":"1f472-1f3fb","uc_output":"1f472-1f3fb","uc_match":"1f472-1f3fb","uc_greedy":"1f472-1f3fb","shortnames":[":man_with_gua_pi_mao_tone1:"],"category":"people"},":man_with_chinese_cap_tone2:":{"uc_base":"1f472-1f3fc","uc_output":"1f472-1f3fc","uc_match":"1f472-1f3fc","uc_greedy":"1f472-1f3fc","shortnames":[":man_with_gua_pi_mao_tone2:"],"category":"people"},":man_with_chinese_cap_tone3:":{"uc_base":"1f472-1f3fd","uc_output":"1f472-1f3fd","uc_match":"1f472-1f3fd","uc_greedy":"1f472-1f3fd","shortnames":[":man_with_gua_pi_mao_tone3:"],"category":"people"},":man_with_chinese_cap_tone4:":{"uc_base":"1f472-1f3fe","uc_output":"1f472-1f3fe","uc_match":"1f472-1f3fe","uc_greedy":"1f472-1f3fe","shortnames":[":man_with_gua_pi_mao_tone4:"],"category":"people"},":man_with_chinese_cap_tone5:":{"uc_base":"1f472-1f3ff","uc_output":"1f472-1f3ff","uc_match":"1f472-1f3ff","uc_greedy":"1f472-1f3ff","shortnames":[":man_with_gua_pi_mao_tone5:"],"category":"people"},":merperson_tone1:":{"uc_base":"1f9dc-1f3fb","uc_output":"1f9dc-1f3fb","uc_match":"1f9dc-1f3fb","uc_greedy":"1f9dc-1f3fb","shortnames":[":merperson_light_skin_tone:"],"category":"people"},":merperson_tone2:":{"uc_base":"1f9dc-1f3fc","uc_output":"1f9dc-1f3fc","uc_match":"1f9dc-1f3fc","uc_greedy":"1f9dc-1f3fc","shortnames":[":merperson_medium_light_skin_tone:"],"category":"people"},":merperson_tone3:":{"uc_base":"1f9dc-1f3fd","uc_output":"1f9dc-1f3fd","uc_match":"1f9dc-1f3fd","uc_greedy":"1f9dc-1f3fd","shortnames":[":merperson_medium_skin_tone:"],"category":"people"},":merperson_tone4:":{"uc_base":"1f9dc-1f3fe","uc_output":"1f9dc-1f3fe","uc_match":"1f9dc-1f3fe","uc_greedy":"1f9dc-1f3fe","shortnames":[":merperson_medium_dark_skin_tone:"],"category":"people"},":merperson_tone5:":{"uc_base":"1f9dc-1f3ff","uc_output":"1f9dc-1f3ff","uc_match":"1f9dc-1f3ff","uc_greedy":"1f9dc-1f3ff","shortnames":[":merperson_dark_skin_tone:"],"category":"people"},":metal_tone1:":{"uc_base":"1f918-1f3fb","uc_output":"1f918-1f3fb","uc_match":"1f918-1f3fb","uc_greedy":"1f918-1f3fb","shortnames":[":sign_of_the_horns_tone1:"],"category":"people"},":metal_tone2:":{"uc_base":"1f918-1f3fc","uc_output":"1f918-1f3fc","uc_match":"1f918-1f3fc","uc_greedy":"1f918-1f3fc","shortnames":[":sign_of_the_horns_tone2:"],"category":"people"},":metal_tone3:":{"uc_base":"1f918-1f3fd","uc_output":"1f918-1f3fd","uc_match":"1f918-1f3fd","uc_greedy":"1f918-1f3fd","shortnames":[":sign_of_the_horns_tone3:"],"category":"people"},":metal_tone4:":{"uc_base":"1f918-1f3fe","uc_output":"1f918-1f3fe","uc_match":"1f918-1f3fe","uc_greedy":"1f918-1f3fe","shortnames":[":sign_of_the_horns_tone4:"],"category":"people"},":metal_tone5:":{"uc_base":"1f918-1f3ff","uc_output":"1f918-1f3ff","uc_match":"1f918-1f3ff","uc_greedy":"1f918-1f3ff","shortnames":[":sign_of_the_horns_tone5:"],"category":"people"},":middle_finger_tone1:":{"uc_base":"1f595-1f3fb","uc_output":"1f595-1f3fb","uc_match":"1f595-1f3fb","uc_greedy":"1f595-1f3fb","shortnames":[":reversed_hand_with_middle_finger_extended_tone1:"],"category":"people"},":middle_finger_tone2:":{"uc_base":"1f595-1f3fc","uc_output":"1f595-1f3fc","uc_match":"1f595-1f3fc","uc_greedy":"1f595-1f3fc","shortnames":[":reversed_hand_with_middle_finger_extended_tone2:"],"category":"people"},":middle_finger_tone3:":{"uc_base":"1f595-1f3fd","uc_output":"1f595-1f3fd","uc_match":"1f595-1f3fd","uc_greedy":"1f595-1f3fd","shortnames":[":reversed_hand_with_middle_finger_extended_tone3:"],"category":"people"},":middle_finger_tone4:":{"uc_base":"1f595-1f3fe","uc_output":"1f595-1f3fe","uc_match":"1f595-1f3fe","uc_greedy":"1f595-1f3fe","shortnames":[":reversed_hand_with_middle_finger_extended_tone4:"],"category":"people"},":middle_finger_tone5:":{"uc_base":"1f595-1f3ff","uc_output":"1f595-1f3ff","uc_match":"1f595-1f3ff","uc_greedy":"1f595-1f3ff","shortnames":[":reversed_hand_with_middle_finger_extended_tone5:"],"category":"people"},":mrs_claus_tone1:":{"uc_base":"1f936-1f3fb","uc_output":"1f936-1f3fb","uc_match":"1f936-1f3fb","uc_greedy":"1f936-1f3fb","shortnames":[":mother_christmas_tone1:"],"category":"people"},":mrs_claus_tone2:":{"uc_base":"1f936-1f3fc","uc_output":"1f936-1f3fc","uc_match":"1f936-1f3fc","uc_greedy":"1f936-1f3fc","shortnames":[":mother_christmas_tone2:"],"category":"people"},":mrs_claus_tone3:":{"uc_base":"1f936-1f3fd","uc_output":"1f936-1f3fd","uc_match":"1f936-1f3fd","uc_greedy":"1f936-1f3fd","shortnames":[":mother_christmas_tone3:"],"category":"people"},":mrs_claus_tone4:":{"uc_base":"1f936-1f3fe","uc_output":"1f936-1f3fe","uc_match":"1f936-1f3fe","uc_greedy":"1f936-1f3fe","shortnames":[":mother_christmas_tone4:"],"category":"people"},":mrs_claus_tone5:":{"uc_base":"1f936-1f3ff","uc_output":"1f936-1f3ff","uc_match":"1f936-1f3ff","uc_greedy":"1f936-1f3ff","shortnames":[":mother_christmas_tone5:"],"category":"people"},":muscle_tone1:":{"uc_base":"1f4aa-1f3fb","uc_output":"1f4aa-1f3fb","uc_match":"1f4aa-1f3fb","uc_greedy":"1f4aa-1f3fb","shortnames":[],"category":"people"},":muscle_tone2:":{"uc_base":"1f4aa-1f3fc","uc_output":"1f4aa-1f3fc","uc_match":"1f4aa-1f3fc","uc_greedy":"1f4aa-1f3fc","shortnames":[],"category":"people"},":muscle_tone3:":{"uc_base":"1f4aa-1f3fd","uc_output":"1f4aa-1f3fd","uc_match":"1f4aa-1f3fd","uc_greedy":"1f4aa-1f3fd","shortnames":[],"category":"people"},":muscle_tone4:":{"uc_base":"1f4aa-1f3fe","uc_output":"1f4aa-1f3fe","uc_match":"1f4aa-1f3fe","uc_greedy":"1f4aa-1f3fe","shortnames":[],"category":"people"},":muscle_tone5:":{"uc_base":"1f4aa-1f3ff","uc_output":"1f4aa-1f3ff","uc_match":"1f4aa-1f3ff","uc_greedy":"1f4aa-1f3ff","shortnames":[],"category":"people"},":nail_care_tone1:":{"uc_base":"1f485-1f3fb","uc_output":"1f485-1f3fb","uc_match":"1f485-1f3fb","uc_greedy":"1f485-1f3fb","shortnames":[],"category":"people"},":nail_care_tone2:":{"uc_base":"1f485-1f3fc","uc_output":"1f485-1f3fc","uc_match":"1f485-1f3fc","uc_greedy":"1f485-1f3fc","shortnames":[],"category":"people"},":nail_care_tone3:":{"uc_base":"1f485-1f3fd","uc_output":"1f485-1f3fd","uc_match":"1f485-1f3fd","uc_greedy":"1f485-1f3fd","shortnames":[],"category":"people"},":nail_care_tone4:":{"uc_base":"1f485-1f3fe","uc_output":"1f485-1f3fe","uc_match":"1f485-1f3fe","uc_greedy":"1f485-1f3fe","shortnames":[],"category":"people"},":nail_care_tone5:":{"uc_base":"1f485-1f3ff","uc_output":"1f485-1f3ff","uc_match":"1f485-1f3ff","uc_greedy":"1f485-1f3ff","shortnames":[],"category":"people"},":nose_tone1:":{"uc_base":"1f443-1f3fb","uc_output":"1f443-1f3fb","uc_match":"1f443-1f3fb","uc_greedy":"1f443-1f3fb","shortnames":[],"category":"people"},":nose_tone2:":{"uc_base":"1f443-1f3fc","uc_output":"1f443-1f3fc","uc_match":"1f443-1f3fc","uc_greedy":"1f443-1f3fc","shortnames":[],"category":"people"},":nose_tone3:":{"uc_base":"1f443-1f3fd","uc_output":"1f443-1f3fd","uc_match":"1f443-1f3fd","uc_greedy":"1f443-1f3fd","shortnames":[],"category":"people"},":nose_tone4:":{"uc_base":"1f443-1f3fe","uc_output":"1f443-1f3fe","uc_match":"1f443-1f3fe","uc_greedy":"1f443-1f3fe","shortnames":[],"category":"people"},":nose_tone5:":{"uc_base":"1f443-1f3ff","uc_output":"1f443-1f3ff","uc_match":"1f443-1f3ff","uc_greedy":"1f443-1f3ff","shortnames":[],"category":"people"},":ok_hand_tone1:":{"uc_base":"1f44c-1f3fb","uc_output":"1f44c-1f3fb","uc_match":"1f44c-1f3fb","uc_greedy":"1f44c-1f3fb","shortnames":[],"category":"people"},":ok_hand_tone2:":{"uc_base":"1f44c-1f3fc","uc_output":"1f44c-1f3fc","uc_match":"1f44c-1f3fc","uc_greedy":"1f44c-1f3fc","shortnames":[],"category":"people"},":ok_hand_tone3:":{"uc_base":"1f44c-1f3fd","uc_output":"1f44c-1f3fd","uc_match":"1f44c-1f3fd","uc_greedy":"1f44c-1f3fd","shortnames":[],"category":"people"},":ok_hand_tone4:":{"uc_base":"1f44c-1f3fe","uc_output":"1f44c-1f3fe","uc_match":"1f44c-1f3fe","uc_greedy":"1f44c-1f3fe","shortnames":[],"category":"people"},":ok_hand_tone5:":{"uc_base":"1f44c-1f3ff","uc_output":"1f44c-1f3ff","uc_match":"1f44c-1f3ff","uc_greedy":"1f44c-1f3ff","shortnames":[],"category":"people"},":older_adult_tone1:":{"uc_base":"1f9d3-1f3fb","uc_output":"1f9d3-1f3fb","uc_match":"1f9d3-1f3fb","uc_greedy":"1f9d3-1f3fb","shortnames":[":older_adult_light_skin_tone:"],"category":"people"},":older_adult_tone2:":{"uc_base":"1f9d3-1f3fc","uc_output":"1f9d3-1f3fc","uc_match":"1f9d3-1f3fc","uc_greedy":"1f9d3-1f3fc","shortnames":[":older_adult_medium_light_skin_tone:"],"category":"people"},":older_adult_tone3:":{"uc_base":"1f9d3-1f3fd","uc_output":"1f9d3-1f3fd","uc_match":"1f9d3-1f3fd","uc_greedy":"1f9d3-1f3fd","shortnames":[":older_adult_medium_skin_tone:"],"category":"people"},":older_adult_tone4:":{"uc_base":"1f9d3-1f3fe","uc_output":"1f9d3-1f3fe","uc_match":"1f9d3-1f3fe","uc_greedy":"1f9d3-1f3fe","shortnames":[":older_adult_medium_dark_skin_tone:"],"category":"people"},":older_adult_tone5:":{"uc_base":"1f9d3-1f3ff","uc_output":"1f9d3-1f3ff","uc_match":"1f9d3-1f3ff","uc_greedy":"1f9d3-1f3ff","shortnames":[":older_adult_dark_skin_tone:"],"category":"people"},":older_man_tone1:":{"uc_base":"1f474-1f3fb","uc_output":"1f474-1f3fb","uc_match":"1f474-1f3fb","uc_greedy":"1f474-1f3fb","shortnames":[],"category":"people"},":older_man_tone2:":{"uc_base":"1f474-1f3fc","uc_output":"1f474-1f3fc","uc_match":"1f474-1f3fc","uc_greedy":"1f474-1f3fc","shortnames":[],"category":"people"},":older_man_tone3:":{"uc_base":"1f474-1f3fd","uc_output":"1f474-1f3fd","uc_match":"1f474-1f3fd","uc_greedy":"1f474-1f3fd","shortnames":[],"category":"people"},":older_man_tone4:":{"uc_base":"1f474-1f3fe","uc_output":"1f474-1f3fe","uc_match":"1f474-1f3fe","uc_greedy":"1f474-1f3fe","shortnames":[],"category":"people"},":older_man_tone5:":{"uc_base":"1f474-1f3ff","uc_output":"1f474-1f3ff","uc_match":"1f474-1f3ff","uc_greedy":"1f474-1f3ff","shortnames":[],"category":"people"},":older_woman_tone1:":{"uc_base":"1f475-1f3fb","uc_output":"1f475-1f3fb","uc_match":"1f475-1f3fb","uc_greedy":"1f475-1f3fb","shortnames":[":grandma_tone1:"],"category":"people"},":older_woman_tone2:":{"uc_base":"1f475-1f3fc","uc_output":"1f475-1f3fc","uc_match":"1f475-1f3fc","uc_greedy":"1f475-1f3fc","shortnames":[":grandma_tone2:"],"category":"people"},":older_woman_tone3:":{"uc_base":"1f475-1f3fd","uc_output":"1f475-1f3fd","uc_match":"1f475-1f3fd","uc_greedy":"1f475-1f3fd","shortnames":[":grandma_tone3:"],"category":"people"},":older_woman_tone4:":{"uc_base":"1f475-1f3fe","uc_output":"1f475-1f3fe","uc_match":"1f475-1f3fe","uc_greedy":"1f475-1f3fe","shortnames":[":grandma_tone4:"],"category":"people"},":older_woman_tone5:":{"uc_base":"1f475-1f3ff","uc_output":"1f475-1f3ff","uc_match":"1f475-1f3ff","uc_greedy":"1f475-1f3ff","shortnames":[":grandma_tone5:"],"category":"people"},":open_hands_tone1:":{"uc_base":"1f450-1f3fb","uc_output":"1f450-1f3fb","uc_match":"1f450-1f3fb","uc_greedy":"1f450-1f3fb","shortnames":[],"category":"people"},":open_hands_tone2:":{"uc_base":"1f450-1f3fc","uc_output":"1f450-1f3fc","uc_match":"1f450-1f3fc","uc_greedy":"1f450-1f3fc","shortnames":[],"category":"people"},":open_hands_tone3:":{"uc_base":"1f450-1f3fd","uc_output":"1f450-1f3fd","uc_match":"1f450-1f3fd","uc_greedy":"1f450-1f3fd","shortnames":[],"category":"people"},":open_hands_tone4:":{"uc_base":"1f450-1f3fe","uc_output":"1f450-1f3fe","uc_match":"1f450-1f3fe","uc_greedy":"1f450-1f3fe","shortnames":[],"category":"people"},":open_hands_tone5:":{"uc_base":"1f450-1f3ff","uc_output":"1f450-1f3ff","uc_match":"1f450-1f3ff","uc_greedy":"1f450-1f3ff","shortnames":[],"category":"people"},":palms_up_together_tone1:":{"uc_base":"1f932-1f3fb","uc_output":"1f932-1f3fb","uc_match":"1f932-1f3fb","uc_greedy":"1f932-1f3fb","shortnames":[":palms_up_together_light_skin_tone:"],"category":"people"},":palms_up_together_tone2:":{"uc_base":"1f932-1f3fc","uc_output":"1f932-1f3fc","uc_match":"1f932-1f3fc","uc_greedy":"1f932-1f3fc","shortnames":[":palms_up_together_medium_light_skin_tone:"],"category":"people"},":palms_up_together_tone3:":{"uc_base":"1f932-1f3fd","uc_output":"1f932-1f3fd","uc_match":"1f932-1f3fd","uc_greedy":"1f932-1f3fd","shortnames":[":palms_up_together_medium_skin_tone:"],"category":"people"},":palms_up_together_tone4:":{"uc_base":"1f932-1f3fe","uc_output":"1f932-1f3fe","uc_match":"1f932-1f3fe","uc_greedy":"1f932-1f3fe","shortnames":[":palms_up_together_medium_dark_skin_tone:"],"category":"people"},":palms_up_together_tone5:":{"uc_base":"1f932-1f3ff","uc_output":"1f932-1f3ff","uc_match":"1f932-1f3ff","uc_greedy":"1f932-1f3ff","shortnames":[":palms_up_together_dark_skin_tone:"],"category":"people"},":person_biking_tone1:":{"uc_base":"1f6b4-1f3fb","uc_output":"1f6b4-1f3fb","uc_match":"1f6b4-1f3fb","uc_greedy":"1f6b4-1f3fb","shortnames":[":bicyclist_tone1:"],"category":"activity"},":person_biking_tone2:":{"uc_base":"1f6b4-1f3fc","uc_output":"1f6b4-1f3fc","uc_match":"1f6b4-1f3fc","uc_greedy":"1f6b4-1f3fc","shortnames":[":bicyclist_tone2:"],"category":"activity"},":person_biking_tone3:":{"uc_base":"1f6b4-1f3fd","uc_output":"1f6b4-1f3fd","uc_match":"1f6b4-1f3fd","uc_greedy":"1f6b4-1f3fd","shortnames":[":bicyclist_tone3:"],"category":"activity"},":person_biking_tone4:":{"uc_base":"1f6b4-1f3fe","uc_output":"1f6b4-1f3fe","uc_match":"1f6b4-1f3fe","uc_greedy":"1f6b4-1f3fe","shortnames":[":bicyclist_tone4:"],"category":"activity"},":person_biking_tone5:":{"uc_base":"1f6b4-1f3ff","uc_output":"1f6b4-1f3ff","uc_match":"1f6b4-1f3ff","uc_greedy":"1f6b4-1f3ff","shortnames":[":bicyclist_tone5:"],"category":"activity"},":person_bowing_tone1:":{"uc_base":"1f647-1f3fb","uc_output":"1f647-1f3fb","uc_match":"1f647-1f3fb","uc_greedy":"1f647-1f3fb","shortnames":[":bow_tone1:"],"category":"people"},":person_bowing_tone2:":{"uc_base":"1f647-1f3fc","uc_output":"1f647-1f3fc","uc_match":"1f647-1f3fc","uc_greedy":"1f647-1f3fc","shortnames":[":bow_tone2:"],"category":"people"},":person_bowing_tone3:":{"uc_base":"1f647-1f3fd","uc_output":"1f647-1f3fd","uc_match":"1f647-1f3fd","uc_greedy":"1f647-1f3fd","shortnames":[":bow_tone3:"],"category":"people"},":person_bowing_tone4:":{"uc_base":"1f647-1f3fe","uc_output":"1f647-1f3fe","uc_match":"1f647-1f3fe","uc_greedy":"1f647-1f3fe","shortnames":[":bow_tone4:"],"category":"people"},":person_bowing_tone5:":{"uc_base":"1f647-1f3ff","uc_output":"1f647-1f3ff","uc_match":"1f647-1f3ff","uc_greedy":"1f647-1f3ff","shortnames":[":bow_tone5:"],"category":"people"},":person_climbing_tone1:":{"uc_base":"1f9d7-1f3fb","uc_output":"1f9d7-1f3fb","uc_match":"1f9d7-1f3fb","uc_greedy":"1f9d7-1f3fb","shortnames":[":person_climbing_light_skin_tone:"],"category":"activity"},":person_climbing_tone2:":{"uc_base":"1f9d7-1f3fc","uc_output":"1f9d7-1f3fc","uc_match":"1f9d7-1f3fc","uc_greedy":"1f9d7-1f3fc","shortnames":[":person_climbing_medium_light_skin_tone:"],"category":"activity"},":person_climbing_tone3:":{"uc_base":"1f9d7-1f3fd","uc_output":"1f9d7-1f3fd","uc_match":"1f9d7-1f3fd","uc_greedy":"1f9d7-1f3fd","shortnames":[":person_climbing_medium_skin_tone:"],"category":"activity"},":person_climbing_tone4:":{"uc_base":"1f9d7-1f3fe","uc_output":"1f9d7-1f3fe","uc_match":"1f9d7-1f3fe","uc_greedy":"1f9d7-1f3fe","shortnames":[":person_climbing_medium_dark_skin_tone:"],"category":"activity"},":person_climbing_tone5:":{"uc_base":"1f9d7-1f3ff","uc_output":"1f9d7-1f3ff","uc_match":"1f9d7-1f3ff","uc_greedy":"1f9d7-1f3ff","shortnames":[":person_climbing_dark_skin_tone:"],"category":"activity"},":person_doing_cartwheel_tone1:":{"uc_base":"1f938-1f3fb","uc_output":"1f938-1f3fb","uc_match":"1f938-1f3fb","uc_greedy":"1f938-1f3fb","shortnames":[":cartwheel_tone1:"],"category":"activity"},":person_doing_cartwheel_tone2:":{"uc_base":"1f938-1f3fc","uc_output":"1f938-1f3fc","uc_match":"1f938-1f3fc","uc_greedy":"1f938-1f3fc","shortnames":[":cartwheel_tone2:"],"category":"activity"},":person_doing_cartwheel_tone3:":{"uc_base":"1f938-1f3fd","uc_output":"1f938-1f3fd","uc_match":"1f938-1f3fd","uc_greedy":"1f938-1f3fd","shortnames":[":cartwheel_tone3:"],"category":"activity"},":person_doing_cartwheel_tone4:":{"uc_base":"1f938-1f3fe","uc_output":"1f938-1f3fe","uc_match":"1f938-1f3fe","uc_greedy":"1f938-1f3fe","shortnames":[":cartwheel_tone4:"],"category":"activity"},":person_doing_cartwheel_tone5:":{"uc_base":"1f938-1f3ff","uc_output":"1f938-1f3ff","uc_match":"1f938-1f3ff","uc_greedy":"1f938-1f3ff","shortnames":[":cartwheel_tone5:"],"category":"activity"},":person_facepalming_tone1:":{"uc_base":"1f926-1f3fb","uc_output":"1f926-1f3fb","uc_match":"1f926-1f3fb","uc_greedy":"1f926-1f3fb","shortnames":[":face_palm_tone1:",":facepalm_tone1:"],"category":"people"},":person_facepalming_tone2:":{"uc_base":"1f926-1f3fc","uc_output":"1f926-1f3fc","uc_match":"1f926-1f3fc","uc_greedy":"1f926-1f3fc","shortnames":[":face_palm_tone2:",":facepalm_tone2:"],"category":"people"},":person_facepalming_tone3:":{"uc_base":"1f926-1f3fd","uc_output":"1f926-1f3fd","uc_match":"1f926-1f3fd","uc_greedy":"1f926-1f3fd","shortnames":[":face_palm_tone3:",":facepalm_tone3:"],"category":"people"},":person_facepalming_tone4:":{"uc_base":"1f926-1f3fe","uc_output":"1f926-1f3fe","uc_match":"1f926-1f3fe","uc_greedy":"1f926-1f3fe","shortnames":[":face_palm_tone4:",":facepalm_tone4:"],"category":"people"},":person_facepalming_tone5:":{"uc_base":"1f926-1f3ff","uc_output":"1f926-1f3ff","uc_match":"1f926-1f3ff","uc_greedy":"1f926-1f3ff","shortnames":[":face_palm_tone5:",":facepalm_tone5:"],"category":"people"},":person_frowning_tone1:":{"uc_base":"1f64d-1f3fb","uc_output":"1f64d-1f3fb","uc_match":"1f64d-1f3fb","uc_greedy":"1f64d-1f3fb","shortnames":[],"category":"people"},":person_frowning_tone2:":{"uc_base":"1f64d-1f3fc","uc_output":"1f64d-1f3fc","uc_match":"1f64d-1f3fc","uc_greedy":"1f64d-1f3fc","shortnames":[],"category":"people"},":person_frowning_tone3:":{"uc_base":"1f64d-1f3fd","uc_output":"1f64d-1f3fd","uc_match":"1f64d-1f3fd","uc_greedy":"1f64d-1f3fd","shortnames":[],"category":"people"},":person_frowning_tone4:":{"uc_base":"1f64d-1f3fe","uc_output":"1f64d-1f3fe","uc_match":"1f64d-1f3fe","uc_greedy":"1f64d-1f3fe","shortnames":[],"category":"people"},":person_frowning_tone5:":{"uc_base":"1f64d-1f3ff","uc_output":"1f64d-1f3ff","uc_match":"1f64d-1f3ff","uc_greedy":"1f64d-1f3ff","shortnames":[],"category":"people"},":person_gesturing_no_tone1:":{"uc_base":"1f645-1f3fb","uc_output":"1f645-1f3fb","uc_match":"1f645-1f3fb","uc_greedy":"1f645-1f3fb","shortnames":[":no_good_tone1:"],"category":"people"},":person_gesturing_no_tone2:":{"uc_base":"1f645-1f3fc","uc_output":"1f645-1f3fc","uc_match":"1f645-1f3fc","uc_greedy":"1f645-1f3fc","shortnames":[":no_good_tone2:"],"category":"people"},":person_gesturing_no_tone3:":{"uc_base":"1f645-1f3fd","uc_output":"1f645-1f3fd","uc_match":"1f645-1f3fd","uc_greedy":"1f645-1f3fd","shortnames":[":no_good_tone3:"],"category":"people"},":person_gesturing_no_tone4:":{"uc_base":"1f645-1f3fe","uc_output":"1f645-1f3fe","uc_match":"1f645-1f3fe","uc_greedy":"1f645-1f3fe","shortnames":[":no_good_tone4:"],"category":"people"},":person_gesturing_no_tone5:":{"uc_base":"1f645-1f3ff","uc_output":"1f645-1f3ff","uc_match":"1f645-1f3ff","uc_greedy":"1f645-1f3ff","shortnames":[":no_good_tone5:"],"category":"people"},":person_gesturing_ok_tone1:":{"uc_base":"1f646-1f3fb","uc_output":"1f646-1f3fb","uc_match":"1f646-1f3fb","uc_greedy":"1f646-1f3fb","shortnames":[":ok_woman_tone1:"],"category":"people"},":person_gesturing_ok_tone2:":{"uc_base":"1f646-1f3fc","uc_output":"1f646-1f3fc","uc_match":"1f646-1f3fc","uc_greedy":"1f646-1f3fc","shortnames":[":ok_woman_tone2:"],"category":"people"},":person_gesturing_ok_tone3:":{"uc_base":"1f646-1f3fd","uc_output":"1f646-1f3fd","uc_match":"1f646-1f3fd","uc_greedy":"1f646-1f3fd","shortnames":[":ok_woman_tone3:"],"category":"people"},":person_gesturing_ok_tone4:":{"uc_base":"1f646-1f3fe","uc_output":"1f646-1f3fe","uc_match":"1f646-1f3fe","uc_greedy":"1f646-1f3fe","shortnames":[":ok_woman_tone4:"],"category":"people"},":person_gesturing_ok_tone5:":{"uc_base":"1f646-1f3ff","uc_output":"1f646-1f3ff","uc_match":"1f646-1f3ff","uc_greedy":"1f646-1f3ff","shortnames":[":ok_woman_tone5:"],"category":"people"},":person_getting_haircut_tone1:":{"uc_base":"1f487-1f3fb","uc_output":"1f487-1f3fb","uc_match":"1f487-1f3fb","uc_greedy":"1f487-1f3fb","shortnames":[":haircut_tone1:"],"category":"people"},":person_getting_haircut_tone2:":{"uc_base":"1f487-1f3fc","uc_output":"1f487-1f3fc","uc_match":"1f487-1f3fc","uc_greedy":"1f487-1f3fc","shortnames":[":haircut_tone2:"],"category":"people"},":person_getting_haircut_tone3:":{"uc_base":"1f487-1f3fd","uc_output":"1f487-1f3fd","uc_match":"1f487-1f3fd","uc_greedy":"1f487-1f3fd","shortnames":[":haircut_tone3:"],"category":"people"},":person_getting_haircut_tone4:":{"uc_base":"1f487-1f3fe","uc_output":"1f487-1f3fe","uc_match":"1f487-1f3fe","uc_greedy":"1f487-1f3fe","shortnames":[":haircut_tone4:"],"category":"people"},":person_getting_haircut_tone5:":{"uc_base":"1f487-1f3ff","uc_output":"1f487-1f3ff","uc_match":"1f487-1f3ff","uc_greedy":"1f487-1f3ff","shortnames":[":haircut_tone5:"],"category":"people"},":person_getting_massage_tone1:":{"uc_base":"1f486-1f3fb","uc_output":"1f486-1f3fb","uc_match":"1f486-1f3fb","uc_greedy":"1f486-1f3fb","shortnames":[":massage_tone1:"],"category":"people"},":person_getting_massage_tone2:":{"uc_base":"1f486-1f3fc","uc_output":"1f486-1f3fc","uc_match":"1f486-1f3fc","uc_greedy":"1f486-1f3fc","shortnames":[":massage_tone2:"],"category":"people"},":person_getting_massage_tone3:":{"uc_base":"1f486-1f3fd","uc_output":"1f486-1f3fd","uc_match":"1f486-1f3fd","uc_greedy":"1f486-1f3fd","shortnames":[":massage_tone3:"],"category":"people"},":person_getting_massage_tone4:":{"uc_base":"1f486-1f3fe","uc_output":"1f486-1f3fe","uc_match":"1f486-1f3fe","uc_greedy":"1f486-1f3fe","shortnames":[":massage_tone4:"],"category":"people"},":person_getting_massage_tone5:":{"uc_base":"1f486-1f3ff","uc_output":"1f486-1f3ff","uc_match":"1f486-1f3ff","uc_greedy":"1f486-1f3ff","shortnames":[":massage_tone5:"],"category":"people"},":person_golfing_tone1:":{"uc_base":"1f3cc-1f3fb","uc_output":"1f3cc-1f3fb","uc_match":"1f3cc-fe0f-1f3fb","uc_greedy":"1f3cc-fe0f-1f3fb","shortnames":[":person_golfing_light_skin_tone:"],"category":"activity"},":person_golfing_tone2:":{"uc_base":"1f3cc-1f3fc","uc_output":"1f3cc-1f3fc","uc_match":"1f3cc-fe0f-1f3fc","uc_greedy":"1f3cc-fe0f-1f3fc","shortnames":[":person_golfing_medium_light_skin_tone:"],"category":"activity"},":person_golfing_tone3:":{"uc_base":"1f3cc-1f3fd","uc_output":"1f3cc-1f3fd","uc_match":"1f3cc-fe0f-1f3fd","uc_greedy":"1f3cc-fe0f-1f3fd","shortnames":[":person_golfing_medium_skin_tone:"],"category":"activity"},":person_golfing_tone4:":{"uc_base":"1f3cc-1f3fe","uc_output":"1f3cc-1f3fe","uc_match":"1f3cc-fe0f-1f3fe","uc_greedy":"1f3cc-fe0f-1f3fe","shortnames":[":person_golfing_medium_dark_skin_tone:"],"category":"activity"},":person_golfing_tone5:":{"uc_base":"1f3cc-1f3ff","uc_output":"1f3cc-1f3ff","uc_match":"1f3cc-fe0f-1f3ff","uc_greedy":"1f3cc-fe0f-1f3ff","shortnames":[":person_golfing_dark_skin_tone:"],"category":"activity"},":person_in_bed_tone1:":{"uc_base":"1f6cc-1f3fb","uc_output":"1f6cc-1f3fb","uc_match":"1f6cc-1f3fb","uc_greedy":"1f6cc-1f3fb","shortnames":[":person_in_bed_light_skin_tone:"],"category":"objects"},":person_in_bed_tone2:":{"uc_base":"1f6cc-1f3fc","uc_output":"1f6cc-1f3fc","uc_match":"1f6cc-1f3fc","uc_greedy":"1f6cc-1f3fc","shortnames":[":person_in_bed_medium_light_skin_tone:"],"category":"objects"},":person_in_bed_tone3:":{"uc_base":"1f6cc-1f3fd","uc_output":"1f6cc-1f3fd","uc_match":"1f6cc-1f3fd","uc_greedy":"1f6cc-1f3fd","shortnames":[":person_in_bed_medium_skin_tone:"],"category":"objects"},":person_in_bed_tone4:":{"uc_base":"1f6cc-1f3fe","uc_output":"1f6cc-1f3fe","uc_match":"1f6cc-1f3fe","uc_greedy":"1f6cc-1f3fe","shortnames":[":person_in_bed_medium_dark_skin_tone:"],"category":"objects"},":person_in_bed_tone5:":{"uc_base":"1f6cc-1f3ff","uc_output":"1f6cc-1f3ff","uc_match":"1f6cc-1f3ff","uc_greedy":"1f6cc-1f3ff","shortnames":[":person_in_bed_dark_skin_tone:"],"category":"objects"},":person_in_lotus_position_tone1:":{"uc_base":"1f9d8-1f3fb","uc_output":"1f9d8-1f3fb","uc_match":"1f9d8-1f3fb","uc_greedy":"1f9d8-1f3fb","shortnames":[":person_in_lotus_position_light_skin_tone:"],"category":"activity"},":person_in_lotus_position_tone2:":{"uc_base":"1f9d8-1f3fc","uc_output":"1f9d8-1f3fc","uc_match":"1f9d8-1f3fc","uc_greedy":"1f9d8-1f3fc","shortnames":[":person_in_lotus_position_medium_light_skin_tone:"],"category":"activity"},":person_in_lotus_position_tone3:":{"uc_base":"1f9d8-1f3fd","uc_output":"1f9d8-1f3fd","uc_match":"1f9d8-1f3fd","uc_greedy":"1f9d8-1f3fd","shortnames":[":person_in_lotus_position_medium_skin_tone:"],"category":"activity"},":person_in_lotus_position_tone4:":{"uc_base":"1f9d8-1f3fe","uc_output":"1f9d8-1f3fe","uc_match":"1f9d8-1f3fe","uc_greedy":"1f9d8-1f3fe","shortnames":[":person_in_lotus_position_medium_dark_skin_tone:"],"category":"activity"},":person_in_lotus_position_tone5:":{"uc_base":"1f9d8-1f3ff","uc_output":"1f9d8-1f3ff","uc_match":"1f9d8-1f3ff","uc_greedy":"1f9d8-1f3ff","shortnames":[":person_in_lotus_position_dark_skin_tone:"],"category":"activity"},":person_in_steamy_room_tone1:":{"uc_base":"1f9d6-1f3fb","uc_output":"1f9d6-1f3fb","uc_match":"1f9d6-1f3fb","uc_greedy":"1f9d6-1f3fb","shortnames":[":person_in_steamy_room_light_skin_tone:"],"category":"activity"},":person_in_steamy_room_tone2:":{"uc_base":"1f9d6-1f3fc","uc_output":"1f9d6-1f3fc","uc_match":"1f9d6-1f3fc","uc_greedy":"1f9d6-1f3fc","shortnames":[":person_in_steamy_room_medium_light_skin_tone:"],"category":"activity"},":person_in_steamy_room_tone3:":{"uc_base":"1f9d6-1f3fd","uc_output":"1f9d6-1f3fd","uc_match":"1f9d6-1f3fd","uc_greedy":"1f9d6-1f3fd","shortnames":[":person_in_steamy_room_medium_skin_tone:"],"category":"activity"},":person_in_steamy_room_tone4:":{"uc_base":"1f9d6-1f3fe","uc_output":"1f9d6-1f3fe","uc_match":"1f9d6-1f3fe","uc_greedy":"1f9d6-1f3fe","shortnames":[":person_in_steamy_room_medium_dark_skin_tone:"],"category":"activity"},":person_in_steamy_room_tone5:":{"uc_base":"1f9d6-1f3ff","uc_output":"1f9d6-1f3ff","uc_match":"1f9d6-1f3ff","uc_greedy":"1f9d6-1f3ff","shortnames":[":person_in_steamy_room_dark_skin_tone:"],"category":"activity"},":person_juggling_tone1:":{"uc_base":"1f939-1f3fb","uc_output":"1f939-1f3fb","uc_match":"1f939-1f3fb","uc_greedy":"1f939-1f3fb","shortnames":[":juggling_tone1:",":juggler_tone1:"],"category":"activity"},":person_juggling_tone2:":{"uc_base":"1f939-1f3fc","uc_output":"1f939-1f3fc","uc_match":"1f939-1f3fc","uc_greedy":"1f939-1f3fc","shortnames":[":juggling_tone2:",":juggler_tone2:"],"category":"activity"},":person_juggling_tone3:":{"uc_base":"1f939-1f3fd","uc_output":"1f939-1f3fd","uc_match":"1f939-1f3fd","uc_greedy":"1f939-1f3fd","shortnames":[":juggling_tone3:",":juggler_tone3:"],"category":"activity"},":person_juggling_tone4:":{"uc_base":"1f939-1f3fe","uc_output":"1f939-1f3fe","uc_match":"1f939-1f3fe","uc_greedy":"1f939-1f3fe","shortnames":[":juggling_tone4:",":juggler_tone4:"],"category":"activity"},":person_juggling_tone5:":{"uc_base":"1f939-1f3ff","uc_output":"1f939-1f3ff","uc_match":"1f939-1f3ff","uc_greedy":"1f939-1f3ff","shortnames":[":juggling_tone5:",":juggler_tone5:"],"category":"activity"},":person_lifting_weights_tone1:":{"uc_base":"1f3cb-1f3fb","uc_output":"1f3cb-1f3fb","uc_match":"1f3cb-fe0f-1f3fb","uc_greedy":"1f3cb-fe0f-1f3fb","shortnames":[":lifter_tone1:",":weight_lifter_tone1:"],"category":"activity"},":person_lifting_weights_tone2:":{"uc_base":"1f3cb-1f3fc","uc_output":"1f3cb-1f3fc","uc_match":"1f3cb-fe0f-1f3fc","uc_greedy":"1f3cb-fe0f-1f3fc","shortnames":[":lifter_tone2:",":weight_lifter_tone2:"],"category":"activity"},":person_lifting_weights_tone3:":{"uc_base":"1f3cb-1f3fd","uc_output":"1f3cb-1f3fd","uc_match":"1f3cb-fe0f-1f3fd","uc_greedy":"1f3cb-fe0f-1f3fd","shortnames":[":lifter_tone3:",":weight_lifter_tone3:"],"category":"activity"},":person_lifting_weights_tone4:":{"uc_base":"1f3cb-1f3fe","uc_output":"1f3cb-1f3fe","uc_match":"1f3cb-fe0f-1f3fe","uc_greedy":"1f3cb-fe0f-1f3fe","shortnames":[":lifter_tone4:",":weight_lifter_tone4:"],"category":"activity"},":person_lifting_weights_tone5:":{"uc_base":"1f3cb-1f3ff","uc_output":"1f3cb-1f3ff","uc_match":"1f3cb-fe0f-1f3ff","uc_greedy":"1f3cb-fe0f-1f3ff","shortnames":[":lifter_tone5:",":weight_lifter_tone5:"],"category":"activity"},":person_mountain_biking_tone1:":{"uc_base":"1f6b5-1f3fb","uc_output":"1f6b5-1f3fb","uc_match":"1f6b5-1f3fb","uc_greedy":"1f6b5-1f3fb","shortnames":[":mountain_bicyclist_tone1:"],"category":"activity"},":person_mountain_biking_tone2:":{"uc_base":"1f6b5-1f3fc","uc_output":"1f6b5-1f3fc","uc_match":"1f6b5-1f3fc","uc_greedy":"1f6b5-1f3fc","shortnames":[":mountain_bicyclist_tone2:"],"category":"activity"},":person_mountain_biking_tone3:":{"uc_base":"1f6b5-1f3fd","uc_output":"1f6b5-1f3fd","uc_match":"1f6b5-1f3fd","uc_greedy":"1f6b5-1f3fd","shortnames":[":mountain_bicyclist_tone3:"],"category":"activity"},":person_mountain_biking_tone4:":{"uc_base":"1f6b5-1f3fe","uc_output":"1f6b5-1f3fe","uc_match":"1f6b5-1f3fe","uc_greedy":"1f6b5-1f3fe","shortnames":[":mountain_bicyclist_tone4:"],"category":"activity"},":person_mountain_biking_tone5:":{"uc_base":"1f6b5-1f3ff","uc_output":"1f6b5-1f3ff","uc_match":"1f6b5-1f3ff","uc_greedy":"1f6b5-1f3ff","shortnames":[":mountain_bicyclist_tone5:"],"category":"activity"},":person_playing_handball_tone1:":{"uc_base":"1f93e-1f3fb","uc_output":"1f93e-1f3fb","uc_match":"1f93e-1f3fb","uc_greedy":"1f93e-1f3fb","shortnames":[":handball_tone1:"],"category":"activity"},":person_playing_handball_tone2:":{"uc_base":"1f93e-1f3fc","uc_output":"1f93e-1f3fc","uc_match":"1f93e-1f3fc","uc_greedy":"1f93e-1f3fc","shortnames":[":handball_tone2:"],"category":"activity"},":person_playing_handball_tone3:":{"uc_base":"1f93e-1f3fd","uc_output":"1f93e-1f3fd","uc_match":"1f93e-1f3fd","uc_greedy":"1f93e-1f3fd","shortnames":[":handball_tone3:"],"category":"activity"},":person_playing_handball_tone4:":{"uc_base":"1f93e-1f3fe","uc_output":"1f93e-1f3fe","uc_match":"1f93e-1f3fe","uc_greedy":"1f93e-1f3fe","shortnames":[":handball_tone4:"],"category":"activity"},":person_playing_handball_tone5:":{"uc_base":"1f93e-1f3ff","uc_output":"1f93e-1f3ff","uc_match":"1f93e-1f3ff","uc_greedy":"1f93e-1f3ff","shortnames":[":handball_tone5:"],"category":"activity"},":person_playing_water_polo_tone1:":{"uc_base":"1f93d-1f3fb","uc_output":"1f93d-1f3fb","uc_match":"1f93d-1f3fb","uc_greedy":"1f93d-1f3fb","shortnames":[":water_polo_tone1:"],"category":"activity"},":person_playing_water_polo_tone2:":{"uc_base":"1f93d-1f3fc","uc_output":"1f93d-1f3fc","uc_match":"1f93d-1f3fc","uc_greedy":"1f93d-1f3fc","shortnames":[":water_polo_tone2:"],"category":"activity"},":person_playing_water_polo_tone3:":{"uc_base":"1f93d-1f3fd","uc_output":"1f93d-1f3fd","uc_match":"1f93d-1f3fd","uc_greedy":"1f93d-1f3fd","shortnames":[":water_polo_tone3:"],"category":"activity"},":person_playing_water_polo_tone4:":{"uc_base":"1f93d-1f3fe","uc_output":"1f93d-1f3fe","uc_match":"1f93d-1f3fe","uc_greedy":"1f93d-1f3fe","shortnames":[":water_polo_tone4:"],"category":"activity"},":person_playing_water_polo_tone5:":{"uc_base":"1f93d-1f3ff","uc_output":"1f93d-1f3ff","uc_match":"1f93d-1f3ff","uc_greedy":"1f93d-1f3ff","shortnames":[":water_polo_tone5:"],"category":"activity"},":person_pouting_tone1:":{"uc_base":"1f64e-1f3fb","uc_output":"1f64e-1f3fb","uc_match":"1f64e-1f3fb","uc_greedy":"1f64e-1f3fb","shortnames":[":person_with_pouting_face_tone1:"],"category":"people"},":person_pouting_tone2:":{"uc_base":"1f64e-1f3fc","uc_output":"1f64e-1f3fc","uc_match":"1f64e-1f3fc","uc_greedy":"1f64e-1f3fc","shortnames":[":person_with_pouting_face_tone2:"],"category":"people"},":person_pouting_tone3:":{"uc_base":"1f64e-1f3fd","uc_output":"1f64e-1f3fd","uc_match":"1f64e-1f3fd","uc_greedy":"1f64e-1f3fd","shortnames":[":person_with_pouting_face_tone3:"],"category":"people"},":person_pouting_tone4:":{"uc_base":"1f64e-1f3fe","uc_output":"1f64e-1f3fe","uc_match":"1f64e-1f3fe","uc_greedy":"1f64e-1f3fe","shortnames":[":person_with_pouting_face_tone4:"],"category":"people"},":person_pouting_tone5:":{"uc_base":"1f64e-1f3ff","uc_output":"1f64e-1f3ff","uc_match":"1f64e-1f3ff","uc_greedy":"1f64e-1f3ff","shortnames":[":person_with_pouting_face_tone5:"],"category":"people"},":person_raising_hand_tone1:":{"uc_base":"1f64b-1f3fb","uc_output":"1f64b-1f3fb","uc_match":"1f64b-1f3fb","uc_greedy":"1f64b-1f3fb","shortnames":[":raising_hand_tone1:"],"category":"people"},":person_raising_hand_tone2:":{"uc_base":"1f64b-1f3fc","uc_output":"1f64b-1f3fc","uc_match":"1f64b-1f3fc","uc_greedy":"1f64b-1f3fc","shortnames":[":raising_hand_tone2:"],"category":"people"},":person_raising_hand_tone3:":{"uc_base":"1f64b-1f3fd","uc_output":"1f64b-1f3fd","uc_match":"1f64b-1f3fd","uc_greedy":"1f64b-1f3fd","shortnames":[":raising_hand_tone3:"],"category":"people"},":person_raising_hand_tone4:":{"uc_base":"1f64b-1f3fe","uc_output":"1f64b-1f3fe","uc_match":"1f64b-1f3fe","uc_greedy":"1f64b-1f3fe","shortnames":[":raising_hand_tone4:"],"category":"people"},":person_raising_hand_tone5:":{"uc_base":"1f64b-1f3ff","uc_output":"1f64b-1f3ff","uc_match":"1f64b-1f3ff","uc_greedy":"1f64b-1f3ff","shortnames":[":raising_hand_tone5:"],"category":"people"},":person_rowing_boat_tone1:":{"uc_base":"1f6a3-1f3fb","uc_output":"1f6a3-1f3fb","uc_match":"1f6a3-1f3fb","uc_greedy":"1f6a3-1f3fb","shortnames":[":rowboat_tone1:"],"category":"activity"},":person_rowing_boat_tone2:":{"uc_base":"1f6a3-1f3fc","uc_output":"1f6a3-1f3fc","uc_match":"1f6a3-1f3fc","uc_greedy":"1f6a3-1f3fc","shortnames":[":rowboat_tone2:"],"category":"activity"},":person_rowing_boat_tone3:":{"uc_base":"1f6a3-1f3fd","uc_output":"1f6a3-1f3fd","uc_match":"1f6a3-1f3fd","uc_greedy":"1f6a3-1f3fd","shortnames":[":rowboat_tone3:"],"category":"activity"},":person_rowing_boat_tone4:":{"uc_base":"1f6a3-1f3fe","uc_output":"1f6a3-1f3fe","uc_match":"1f6a3-1f3fe","uc_greedy":"1f6a3-1f3fe","shortnames":[":rowboat_tone4:"],"category":"activity"},":person_rowing_boat_tone5:":{"uc_base":"1f6a3-1f3ff","uc_output":"1f6a3-1f3ff","uc_match":"1f6a3-1f3ff","uc_greedy":"1f6a3-1f3ff","shortnames":[":rowboat_tone5:"],"category":"activity"},":person_running_tone1:":{"uc_base":"1f3c3-1f3fb","uc_output":"1f3c3-1f3fb","uc_match":"1f3c3-1f3fb","uc_greedy":"1f3c3-1f3fb","shortnames":[":runner_tone1:"],"category":"people"},":person_running_tone2:":{"uc_base":"1f3c3-1f3fc","uc_output":"1f3c3-1f3fc","uc_match":"1f3c3-1f3fc","uc_greedy":"1f3c3-1f3fc","shortnames":[":runner_tone2:"],"category":"people"},":person_running_tone3:":{"uc_base":"1f3c3-1f3fd","uc_output":"1f3c3-1f3fd","uc_match":"1f3c3-1f3fd","uc_greedy":"1f3c3-1f3fd","shortnames":[":runner_tone3:"],"category":"people"},":person_running_tone4:":{"uc_base":"1f3c3-1f3fe","uc_output":"1f3c3-1f3fe","uc_match":"1f3c3-1f3fe","uc_greedy":"1f3c3-1f3fe","shortnames":[":runner_tone4:"],"category":"people"},":person_running_tone5:":{"uc_base":"1f3c3-1f3ff","uc_output":"1f3c3-1f3ff","uc_match":"1f3c3-1f3ff","uc_greedy":"1f3c3-1f3ff","shortnames":[":runner_tone5:"],"category":"people"},":person_shrugging_tone1:":{"uc_base":"1f937-1f3fb","uc_output":"1f937-1f3fb","uc_match":"1f937-1f3fb","uc_greedy":"1f937-1f3fb","shortnames":[":shrug_tone1:"],"category":"people"},":person_shrugging_tone2:":{"uc_base":"1f937-1f3fc","uc_output":"1f937-1f3fc","uc_match":"1f937-1f3fc","uc_greedy":"1f937-1f3fc","shortnames":[":shrug_tone2:"],"category":"people"},":person_shrugging_tone3:":{"uc_base":"1f937-1f3fd","uc_output":"1f937-1f3fd","uc_match":"1f937-1f3fd","uc_greedy":"1f937-1f3fd","shortnames":[":shrug_tone3:"],"category":"people"},":person_shrugging_tone4:":{"uc_base":"1f937-1f3fe","uc_output":"1f937-1f3fe","uc_match":"1f937-1f3fe","uc_greedy":"1f937-1f3fe","shortnames":[":shrug_tone4:"],"category":"people"},":person_shrugging_tone5:":{"uc_base":"1f937-1f3ff","uc_output":"1f937-1f3ff","uc_match":"1f937-1f3ff","uc_greedy":"1f937-1f3ff","shortnames":[":shrug_tone5:"],"category":"people"},":person_surfing_tone1:":{"uc_base":"1f3c4-1f3fb","uc_output":"1f3c4-1f3fb","uc_match":"1f3c4-1f3fb","uc_greedy":"1f3c4-1f3fb","shortnames":[":surfer_tone1:"],"category":"activity"},":person_surfing_tone2:":{"uc_base":"1f3c4-1f3fc","uc_output":"1f3c4-1f3fc","uc_match":"1f3c4-1f3fc","uc_greedy":"1f3c4-1f3fc","shortnames":[":surfer_tone2:"],"category":"activity"},":person_surfing_tone3:":{"uc_base":"1f3c4-1f3fd","uc_output":"1f3c4-1f3fd","uc_match":"1f3c4-1f3fd","uc_greedy":"1f3c4-1f3fd","shortnames":[":surfer_tone3:"],"category":"activity"},":person_surfing_tone4:":{"uc_base":"1f3c4-1f3fe","uc_output":"1f3c4-1f3fe","uc_match":"1f3c4-1f3fe","uc_greedy":"1f3c4-1f3fe","shortnames":[":surfer_tone4:"],"category":"activity"},":person_surfing_tone5:":{"uc_base":"1f3c4-1f3ff","uc_output":"1f3c4-1f3ff","uc_match":"1f3c4-1f3ff","uc_greedy":"1f3c4-1f3ff","shortnames":[":surfer_tone5:"],"category":"activity"},":person_swimming_tone1:":{"uc_base":"1f3ca-1f3fb","uc_output":"1f3ca-1f3fb","uc_match":"1f3ca-1f3fb","uc_greedy":"1f3ca-1f3fb","shortnames":[":swimmer_tone1:"],"category":"activity"},":person_swimming_tone2:":{"uc_base":"1f3ca-1f3fc","uc_output":"1f3ca-1f3fc","uc_match":"1f3ca-1f3fc","uc_greedy":"1f3ca-1f3fc","shortnames":[":swimmer_tone2:"],"category":"activity"},":person_swimming_tone3:":{"uc_base":"1f3ca-1f3fd","uc_output":"1f3ca-1f3fd","uc_match":"1f3ca-1f3fd","uc_greedy":"1f3ca-1f3fd","shortnames":[":swimmer_tone3:"],"category":"activity"},":person_swimming_tone4:":{"uc_base":"1f3ca-1f3fe","uc_output":"1f3ca-1f3fe","uc_match":"1f3ca-1f3fe","uc_greedy":"1f3ca-1f3fe","shortnames":[":swimmer_tone4:"],"category":"activity"},":person_swimming_tone5:":{"uc_base":"1f3ca-1f3ff","uc_output":"1f3ca-1f3ff","uc_match":"1f3ca-1f3ff","uc_greedy":"1f3ca-1f3ff","shortnames":[":swimmer_tone5:"],"category":"activity"},":person_tipping_hand_tone1:":{"uc_base":"1f481-1f3fb","uc_output":"1f481-1f3fb","uc_match":"1f481-1f3fb","uc_greedy":"1f481-1f3fb","shortnames":[":information_desk_person_tone1:"],"category":"people"},":person_tipping_hand_tone2:":{"uc_base":"1f481-1f3fc","uc_output":"1f481-1f3fc","uc_match":"1f481-1f3fc","uc_greedy":"1f481-1f3fc","shortnames":[":information_desk_person_tone2:"],"category":"people"},":person_tipping_hand_tone3:":{"uc_base":"1f481-1f3fd","uc_output":"1f481-1f3fd","uc_match":"1f481-1f3fd","uc_greedy":"1f481-1f3fd","shortnames":[":information_desk_person_tone3:"],"category":"people"},":person_tipping_hand_tone4:":{"uc_base":"1f481-1f3fe","uc_output":"1f481-1f3fe","uc_match":"1f481-1f3fe","uc_greedy":"1f481-1f3fe","shortnames":[":information_desk_person_tone4:"],"category":"people"},":person_tipping_hand_tone5:":{"uc_base":"1f481-1f3ff","uc_output":"1f481-1f3ff","uc_match":"1f481-1f3ff","uc_greedy":"1f481-1f3ff","shortnames":[":information_desk_person_tone5:"],"category":"people"},":person_walking_tone1:":{"uc_base":"1f6b6-1f3fb","uc_output":"1f6b6-1f3fb","uc_match":"1f6b6-1f3fb","uc_greedy":"1f6b6-1f3fb","shortnames":[":walking_tone1:"],"category":"people"},":person_walking_tone2:":{"uc_base":"1f6b6-1f3fc","uc_output":"1f6b6-1f3fc","uc_match":"1f6b6-1f3fc","uc_greedy":"1f6b6-1f3fc","shortnames":[":walking_tone2:"],"category":"people"},":person_walking_tone3:":{"uc_base":"1f6b6-1f3fd","uc_output":"1f6b6-1f3fd","uc_match":"1f6b6-1f3fd","uc_greedy":"1f6b6-1f3fd","shortnames":[":walking_tone3:"],"category":"people"},":person_walking_tone4:":{"uc_base":"1f6b6-1f3fe","uc_output":"1f6b6-1f3fe","uc_match":"1f6b6-1f3fe","uc_greedy":"1f6b6-1f3fe","shortnames":[":walking_tone4:"],"category":"people"},":person_walking_tone5:":{"uc_base":"1f6b6-1f3ff","uc_output":"1f6b6-1f3ff","uc_match":"1f6b6-1f3ff","uc_greedy":"1f6b6-1f3ff","shortnames":[":walking_tone5:"],"category":"people"},":person_wearing_turban_tone1:":{"uc_base":"1f473-1f3fb","uc_output":"1f473-1f3fb","uc_match":"1f473-1f3fb","uc_greedy":"1f473-1f3fb","shortnames":[":man_with_turban_tone1:"],"category":"people"},":person_wearing_turban_tone2:":{"uc_base":"1f473-1f3fc","uc_output":"1f473-1f3fc","uc_match":"1f473-1f3fc","uc_greedy":"1f473-1f3fc","shortnames":[":man_with_turban_tone2:"],"category":"people"},":person_wearing_turban_tone3:":{"uc_base":"1f473-1f3fd","uc_output":"1f473-1f3fd","uc_match":"1f473-1f3fd","uc_greedy":"1f473-1f3fd","shortnames":[":man_with_turban_tone3:"],"category":"people"},":person_wearing_turban_tone4:":{"uc_base":"1f473-1f3fe","uc_output":"1f473-1f3fe","uc_match":"1f473-1f3fe","uc_greedy":"1f473-1f3fe","shortnames":[":man_with_turban_tone4:"],"category":"people"},":person_wearing_turban_tone5:":{"uc_base":"1f473-1f3ff","uc_output":"1f473-1f3ff","uc_match":"1f473-1f3ff","uc_greedy":"1f473-1f3ff","shortnames":[":man_with_turban_tone5:"],"category":"people"},":point_down_tone1:":{"uc_base":"1f447-1f3fb","uc_output":"1f447-1f3fb","uc_match":"1f447-1f3fb","uc_greedy":"1f447-1f3fb","shortnames":[],"category":"people"},":point_down_tone2:":{"uc_base":"1f447-1f3fc","uc_output":"1f447-1f3fc","uc_match":"1f447-1f3fc","uc_greedy":"1f447-1f3fc","shortnames":[],"category":"people"},":point_down_tone3:":{"uc_base":"1f447-1f3fd","uc_output":"1f447-1f3fd","uc_match":"1f447-1f3fd","uc_greedy":"1f447-1f3fd","shortnames":[],"category":"people"},":point_down_tone4:":{"uc_base":"1f447-1f3fe","uc_output":"1f447-1f3fe","uc_match":"1f447-1f3fe","uc_greedy":"1f447-1f3fe","shortnames":[],"category":"people"},":point_down_tone5:":{"uc_base":"1f447-1f3ff","uc_output":"1f447-1f3ff","uc_match":"1f447-1f3ff","uc_greedy":"1f447-1f3ff","shortnames":[],"category":"people"},":point_left_tone1:":{"uc_base":"1f448-1f3fb","uc_output":"1f448-1f3fb","uc_match":"1f448-1f3fb","uc_greedy":"1f448-1f3fb","shortnames":[],"category":"people"},":point_left_tone2:":{"uc_base":"1f448-1f3fc","uc_output":"1f448-1f3fc","uc_match":"1f448-1f3fc","uc_greedy":"1f448-1f3fc","shortnames":[],"category":"people"},":point_left_tone3:":{"uc_base":"1f448-1f3fd","uc_output":"1f448-1f3fd","uc_match":"1f448-1f3fd","uc_greedy":"1f448-1f3fd","shortnames":[],"category":"people"},":point_left_tone4:":{"uc_base":"1f448-1f3fe","uc_output":"1f448-1f3fe","uc_match":"1f448-1f3fe","uc_greedy":"1f448-1f3fe","shortnames":[],"category":"people"},":point_left_tone5:":{"uc_base":"1f448-1f3ff","uc_output":"1f448-1f3ff","uc_match":"1f448-1f3ff","uc_greedy":"1f448-1f3ff","shortnames":[],"category":"people"},":point_right_tone1:":{"uc_base":"1f449-1f3fb","uc_output":"1f449-1f3fb","uc_match":"1f449-1f3fb","uc_greedy":"1f449-1f3fb","shortnames":[],"category":"people"},":point_right_tone2:":{"uc_base":"1f449-1f3fc","uc_output":"1f449-1f3fc","uc_match":"1f449-1f3fc","uc_greedy":"1f449-1f3fc","shortnames":[],"category":"people"},":point_right_tone3:":{"uc_base":"1f449-1f3fd","uc_output":"1f449-1f3fd","uc_match":"1f449-1f3fd","uc_greedy":"1f449-1f3fd","shortnames":[],"category":"people"},":point_right_tone4:":{"uc_base":"1f449-1f3fe","uc_output":"1f449-1f3fe","uc_match":"1f449-1f3fe","uc_greedy":"1f449-1f3fe","shortnames":[],"category":"people"},":point_right_tone5:":{"uc_base":"1f449-1f3ff","uc_output":"1f449-1f3ff","uc_match":"1f449-1f3ff","uc_greedy":"1f449-1f3ff","shortnames":[],"category":"people"},":point_up_2_tone1:":{"uc_base":"1f446-1f3fb","uc_output":"1f446-1f3fb","uc_match":"1f446-1f3fb","uc_greedy":"1f446-1f3fb","shortnames":[],"category":"people"},":point_up_2_tone2:":{"uc_base":"1f446-1f3fc","uc_output":"1f446-1f3fc","uc_match":"1f446-1f3fc","uc_greedy":"1f446-1f3fc","shortnames":[],"category":"people"},":point_up_2_tone3:":{"uc_base":"1f446-1f3fd","uc_output":"1f446-1f3fd","uc_match":"1f446-1f3fd","uc_greedy":"1f446-1f3fd","shortnames":[],"category":"people"},":point_up_2_tone4:":{"uc_base":"1f446-1f3fe","uc_output":"1f446-1f3fe","uc_match":"1f446-1f3fe","uc_greedy":"1f446-1f3fe","shortnames":[],"category":"people"},":point_up_2_tone5:":{"uc_base":"1f446-1f3ff","uc_output":"1f446-1f3ff","uc_match":"1f446-1f3ff","uc_greedy":"1f446-1f3ff","shortnames":[],"category":"people"},":police_officer_tone1:":{"uc_base":"1f46e-1f3fb","uc_output":"1f46e-1f3fb","uc_match":"1f46e-1f3fb","uc_greedy":"1f46e-1f3fb","shortnames":[":cop_tone1:"],"category":"people"},":police_officer_tone2:":{"uc_base":"1f46e-1f3fc","uc_output":"1f46e-1f3fc","uc_match":"1f46e-1f3fc","uc_greedy":"1f46e-1f3fc","shortnames":[":cop_tone2:"],"category":"people"},":police_officer_tone3:":{"uc_base":"1f46e-1f3fd","uc_output":"1f46e-1f3fd","uc_match":"1f46e-1f3fd","uc_greedy":"1f46e-1f3fd","shortnames":[":cop_tone3:"],"category":"people"},":police_officer_tone4:":{"uc_base":"1f46e-1f3fe","uc_output":"1f46e-1f3fe","uc_match":"1f46e-1f3fe","uc_greedy":"1f46e-1f3fe","shortnames":[":cop_tone4:"],"category":"people"},":police_officer_tone5:":{"uc_base":"1f46e-1f3ff","uc_output":"1f46e-1f3ff","uc_match":"1f46e-1f3ff","uc_greedy":"1f46e-1f3ff","shortnames":[":cop_tone5:"],"category":"people"},":pray_tone1:":{"uc_base":"1f64f-1f3fb","uc_output":"1f64f-1f3fb","uc_match":"1f64f-1f3fb","uc_greedy":"1f64f-1f3fb","shortnames":[],"category":"people"},":pray_tone2:":{"uc_base":"1f64f-1f3fc","uc_output":"1f64f-1f3fc","uc_match":"1f64f-1f3fc","uc_greedy":"1f64f-1f3fc","shortnames":[],"category":"people"},":pray_tone3:":{"uc_base":"1f64f-1f3fd","uc_output":"1f64f-1f3fd","uc_match":"1f64f-1f3fd","uc_greedy":"1f64f-1f3fd","shortnames":[],"category":"people"},":pray_tone4:":{"uc_base":"1f64f-1f3fe","uc_output":"1f64f-1f3fe","uc_match":"1f64f-1f3fe","uc_greedy":"1f64f-1f3fe","shortnames":[],"category":"people"},":pray_tone5:":{"uc_base":"1f64f-1f3ff","uc_output":"1f64f-1f3ff","uc_match":"1f64f-1f3ff","uc_greedy":"1f64f-1f3ff","shortnames":[],"category":"people"},":pregnant_woman_tone1:":{"uc_base":"1f930-1f3fb","uc_output":"1f930-1f3fb","uc_match":"1f930-1f3fb","uc_greedy":"1f930-1f3fb","shortnames":[":expecting_woman_tone1:"],"category":"people"},":pregnant_woman_tone2:":{"uc_base":"1f930-1f3fc","uc_output":"1f930-1f3fc","uc_match":"1f930-1f3fc","uc_greedy":"1f930-1f3fc","shortnames":[":expecting_woman_tone2:"],"category":"people"},":pregnant_woman_tone3:":{"uc_base":"1f930-1f3fd","uc_output":"1f930-1f3fd","uc_match":"1f930-1f3fd","uc_greedy":"1f930-1f3fd","shortnames":[":expecting_woman_tone3:"],"category":"people"},":pregnant_woman_tone4:":{"uc_base":"1f930-1f3fe","uc_output":"1f930-1f3fe","uc_match":"1f930-1f3fe","uc_greedy":"1f930-1f3fe","shortnames":[":expecting_woman_tone4:"],"category":"people"},":pregnant_woman_tone5:":{"uc_base":"1f930-1f3ff","uc_output":"1f930-1f3ff","uc_match":"1f930-1f3ff","uc_greedy":"1f930-1f3ff","shortnames":[":expecting_woman_tone5:"],"category":"people"},":prince_tone1:":{"uc_base":"1f934-1f3fb","uc_output":"1f934-1f3fb","uc_match":"1f934-1f3fb","uc_greedy":"1f934-1f3fb","shortnames":[],"category":"people"},":prince_tone2:":{"uc_base":"1f934-1f3fc","uc_output":"1f934-1f3fc","uc_match":"1f934-1f3fc","uc_greedy":"1f934-1f3fc","shortnames":[],"category":"people"},":prince_tone3:":{"uc_base":"1f934-1f3fd","uc_output":"1f934-1f3fd","uc_match":"1f934-1f3fd","uc_greedy":"1f934-1f3fd","shortnames":[],"category":"people"},":prince_tone4:":{"uc_base":"1f934-1f3fe","uc_output":"1f934-1f3fe","uc_match":"1f934-1f3fe","uc_greedy":"1f934-1f3fe","shortnames":[],"category":"people"},":prince_tone5:":{"uc_base":"1f934-1f3ff","uc_output":"1f934-1f3ff","uc_match":"1f934-1f3ff","uc_greedy":"1f934-1f3ff","shortnames":[],"category":"people"},":princess_tone1:":{"uc_base":"1f478-1f3fb","uc_output":"1f478-1f3fb","uc_match":"1f478-1f3fb","uc_greedy":"1f478-1f3fb","shortnames":[],"category":"people"},":princess_tone2:":{"uc_base":"1f478-1f3fc","uc_output":"1f478-1f3fc","uc_match":"1f478-1f3fc","uc_greedy":"1f478-1f3fc","shortnames":[],"category":"people"},":princess_tone3:":{"uc_base":"1f478-1f3fd","uc_output":"1f478-1f3fd","uc_match":"1f478-1f3fd","uc_greedy":"1f478-1f3fd","shortnames":[],"category":"people"},":princess_tone4:":{"uc_base":"1f478-1f3fe","uc_output":"1f478-1f3fe","uc_match":"1f478-1f3fe","uc_greedy":"1f478-1f3fe","shortnames":[],"category":"people"},":princess_tone5:":{"uc_base":"1f478-1f3ff","uc_output":"1f478-1f3ff","uc_match":"1f478-1f3ff","uc_greedy":"1f478-1f3ff","shortnames":[],"category":"people"},":punch_tone1:":{"uc_base":"1f44a-1f3fb","uc_output":"1f44a-1f3fb","uc_match":"1f44a-1f3fb","uc_greedy":"1f44a-1f3fb","shortnames":[],"category":"people"},":punch_tone2:":{"uc_base":"1f44a-1f3fc","uc_output":"1f44a-1f3fc","uc_match":"1f44a-1f3fc","uc_greedy":"1f44a-1f3fc","shortnames":[],"category":"people"},":punch_tone3:":{"uc_base":"1f44a-1f3fd","uc_output":"1f44a-1f3fd","uc_match":"1f44a-1f3fd","uc_greedy":"1f44a-1f3fd","shortnames":[],"category":"people"},":punch_tone4:":{"uc_base":"1f44a-1f3fe","uc_output":"1f44a-1f3fe","uc_match":"1f44a-1f3fe","uc_greedy":"1f44a-1f3fe","shortnames":[],"category":"people"},":punch_tone5:":{"uc_base":"1f44a-1f3ff","uc_output":"1f44a-1f3ff","uc_match":"1f44a-1f3ff","uc_greedy":"1f44a-1f3ff","shortnames":[],"category":"people"},":raised_back_of_hand_tone1:":{"uc_base":"1f91a-1f3fb","uc_output":"1f91a-1f3fb","uc_match":"1f91a-1f3fb","uc_greedy":"1f91a-1f3fb","shortnames":[":back_of_hand_tone1:"],"category":"people"},":raised_back_of_hand_tone2:":{"uc_base":"1f91a-1f3fc","uc_output":"1f91a-1f3fc","uc_match":"1f91a-1f3fc","uc_greedy":"1f91a-1f3fc","shortnames":[":back_of_hand_tone2:"],"category":"people"},":raised_back_of_hand_tone3:":{"uc_base":"1f91a-1f3fd","uc_output":"1f91a-1f3fd","uc_match":"1f91a-1f3fd","uc_greedy":"1f91a-1f3fd","shortnames":[":back_of_hand_tone3:"],"category":"people"},":raised_back_of_hand_tone4:":{"uc_base":"1f91a-1f3fe","uc_output":"1f91a-1f3fe","uc_match":"1f91a-1f3fe","uc_greedy":"1f91a-1f3fe","shortnames":[":back_of_hand_tone4:"],"category":"people"},":raised_back_of_hand_tone5:":{"uc_base":"1f91a-1f3ff","uc_output":"1f91a-1f3ff","uc_match":"1f91a-1f3ff","uc_greedy":"1f91a-1f3ff","shortnames":[":back_of_hand_tone5:"],"category":"people"},":raised_hands_tone1:":{"uc_base":"1f64c-1f3fb","uc_output":"1f64c-1f3fb","uc_match":"1f64c-1f3fb","uc_greedy":"1f64c-1f3fb","shortnames":[],"category":"people"},":raised_hands_tone2:":{"uc_base":"1f64c-1f3fc","uc_output":"1f64c-1f3fc","uc_match":"1f64c-1f3fc","uc_greedy":"1f64c-1f3fc","shortnames":[],"category":"people"},":raised_hands_tone3:":{"uc_base":"1f64c-1f3fd","uc_output":"1f64c-1f3fd","uc_match":"1f64c-1f3fd","uc_greedy":"1f64c-1f3fd","shortnames":[],"category":"people"},":raised_hands_tone4:":{"uc_base":"1f64c-1f3fe","uc_output":"1f64c-1f3fe","uc_match":"1f64c-1f3fe","uc_greedy":"1f64c-1f3fe","shortnames":[],"category":"people"},":raised_hands_tone5:":{"uc_base":"1f64c-1f3ff","uc_output":"1f64c-1f3ff","uc_match":"1f64c-1f3ff","uc_greedy":"1f64c-1f3ff","shortnames":[],"category":"people"},":right_facing_fist_tone1:":{"uc_base":"1f91c-1f3fb","uc_output":"1f91c-1f3fb","uc_match":"1f91c-1f3fb","uc_greedy":"1f91c-1f3fb","shortnames":[":right_fist_tone1:"],"category":"people"},":right_facing_fist_tone2:":{"uc_base":"1f91c-1f3fc","uc_output":"1f91c-1f3fc","uc_match":"1f91c-1f3fc","uc_greedy":"1f91c-1f3fc","shortnames":[":right_fist_tone2:"],"category":"people"},":right_facing_fist_tone3:":{"uc_base":"1f91c-1f3fd","uc_output":"1f91c-1f3fd","uc_match":"1f91c-1f3fd","uc_greedy":"1f91c-1f3fd","shortnames":[":right_fist_tone3:"],"category":"people"},":right_facing_fist_tone4:":{"uc_base":"1f91c-1f3fe","uc_output":"1f91c-1f3fe","uc_match":"1f91c-1f3fe","uc_greedy":"1f91c-1f3fe","shortnames":[":right_fist_tone4:"],"category":"people"},":right_facing_fist_tone5:":{"uc_base":"1f91c-1f3ff","uc_output":"1f91c-1f3ff","uc_match":"1f91c-1f3ff","uc_greedy":"1f91c-1f3ff","shortnames":[":right_fist_tone5:"],"category":"people"},":santa_tone1:":{"uc_base":"1f385-1f3fb","uc_output":"1f385-1f3fb","uc_match":"1f385-1f3fb","uc_greedy":"1f385-1f3fb","shortnames":[],"category":"people"},":santa_tone2:":{"uc_base":"1f385-1f3fc","uc_output":"1f385-1f3fc","uc_match":"1f385-1f3fc","uc_greedy":"1f385-1f3fc","shortnames":[],"category":"people"},":santa_tone3:":{"uc_base":"1f385-1f3fd","uc_output":"1f385-1f3fd","uc_match":"1f385-1f3fd","uc_greedy":"1f385-1f3fd","shortnames":[],"category":"people"},":santa_tone4:":{"uc_base":"1f385-1f3fe","uc_output":"1f385-1f3fe","uc_match":"1f385-1f3fe","uc_greedy":"1f385-1f3fe","shortnames":[],"category":"people"},":santa_tone5:":{"uc_base":"1f385-1f3ff","uc_output":"1f385-1f3ff","uc_match":"1f385-1f3ff","uc_greedy":"1f385-1f3ff","shortnames":[],"category":"people"},":selfie_tone1:":{"uc_base":"1f933-1f3fb","uc_output":"1f933-1f3fb","uc_match":"1f933-1f3fb","uc_greedy":"1f933-1f3fb","shortnames":[],"category":"people"},":selfie_tone2:":{"uc_base":"1f933-1f3fc","uc_output":"1f933-1f3fc","uc_match":"1f933-1f3fc","uc_greedy":"1f933-1f3fc","shortnames":[],"category":"people"},":selfie_tone3:":{"uc_base":"1f933-1f3fd","uc_output":"1f933-1f3fd","uc_match":"1f933-1f3fd","uc_greedy":"1f933-1f3fd","shortnames":[],"category":"people"},":selfie_tone4:":{"uc_base":"1f933-1f3fe","uc_output":"1f933-1f3fe","uc_match":"1f933-1f3fe","uc_greedy":"1f933-1f3fe","shortnames":[],"category":"people"},":selfie_tone5:":{"uc_base":"1f933-1f3ff","uc_output":"1f933-1f3ff","uc_match":"1f933-1f3ff","uc_greedy":"1f933-1f3ff","shortnames":[],"category":"people"},":snowboarder_tone1:":{"uc_base":"1f3c2-1f3fb","uc_output":"1f3c2-1f3fb","uc_match":"1f3c2-1f3fb","uc_greedy":"1f3c2-1f3fb","shortnames":[":snowboarder_light_skin_tone:"],"category":"activity"},":snowboarder_tone2:":{"uc_base":"1f3c2-1f3fc","uc_output":"1f3c2-1f3fc","uc_match":"1f3c2-1f3fc","uc_greedy":"1f3c2-1f3fc","shortnames":[":snowboarder_medium_light_skin_tone:"],"category":"activity"},":snowboarder_tone3:":{"uc_base":"1f3c2-1f3fd","uc_output":"1f3c2-1f3fd","uc_match":"1f3c2-1f3fd","uc_greedy":"1f3c2-1f3fd","shortnames":[":snowboarder_medium_skin_tone:"],"category":"activity"},":snowboarder_tone4:":{"uc_base":"1f3c2-1f3fe","uc_output":"1f3c2-1f3fe","uc_match":"1f3c2-1f3fe","uc_greedy":"1f3c2-1f3fe","shortnames":[":snowboarder_medium_dark_skin_tone:"],"category":"activity"},":snowboarder_tone5:":{"uc_base":"1f3c2-1f3ff","uc_output":"1f3c2-1f3ff","uc_match":"1f3c2-1f3ff","uc_greedy":"1f3c2-1f3ff","shortnames":[":snowboarder_dark_skin_tone:"],"category":"activity"},":thumbsdown_tone1:":{"uc_base":"1f44e-1f3fb","uc_output":"1f44e-1f3fb","uc_match":"1f44e-1f3fb","uc_greedy":"1f44e-1f3fb","shortnames":[":-1_tone1:",":thumbdown_tone1:"],"category":"people"},":thumbsdown_tone2:":{"uc_base":"1f44e-1f3fc","uc_output":"1f44e-1f3fc","uc_match":"1f44e-1f3fc","uc_greedy":"1f44e-1f3fc","shortnames":[":-1_tone2:",":thumbdown_tone2:"],"category":"people"},":thumbsdown_tone3:":{"uc_base":"1f44e-1f3fd","uc_output":"1f44e-1f3fd","uc_match":"1f44e-1f3fd","uc_greedy":"1f44e-1f3fd","shortnames":[":-1_tone3:",":thumbdown_tone3:"],"category":"people"},":thumbsdown_tone4:":{"uc_base":"1f44e-1f3fe","uc_output":"1f44e-1f3fe","uc_match":"1f44e-1f3fe","uc_greedy":"1f44e-1f3fe","shortnames":[":-1_tone4:",":thumbdown_tone4:"],"category":"people"},":thumbsdown_tone5:":{"uc_base":"1f44e-1f3ff","uc_output":"1f44e-1f3ff","uc_match":"1f44e-1f3ff","uc_greedy":"1f44e-1f3ff","shortnames":[":-1_tone5:",":thumbdown_tone5:"],"category":"people"},":thumbsup_tone1:":{"uc_base":"1f44d-1f3fb","uc_output":"1f44d-1f3fb","uc_match":"1f44d-1f3fb","uc_greedy":"1f44d-1f3fb","shortnames":[":+1_tone1:",":thumbup_tone1:"],"category":"people"},":thumbsup_tone2:":{"uc_base":"1f44d-1f3fc","uc_output":"1f44d-1f3fc","uc_match":"1f44d-1f3fc","uc_greedy":"1f44d-1f3fc","shortnames":[":+1_tone2:",":thumbup_tone2:"],"category":"people"},":thumbsup_tone3:":{"uc_base":"1f44d-1f3fd","uc_output":"1f44d-1f3fd","uc_match":"1f44d-1f3fd","uc_greedy":"1f44d-1f3fd","shortnames":[":+1_tone3:",":thumbup_tone3:"],"category":"people"},":thumbsup_tone4:":{"uc_base":"1f44d-1f3fe","uc_output":"1f44d-1f3fe","uc_match":"1f44d-1f3fe","uc_greedy":"1f44d-1f3fe","shortnames":[":+1_tone4:",":thumbup_tone4:"],"category":"people"},":thumbsup_tone5:":{"uc_base":"1f44d-1f3ff","uc_output":"1f44d-1f3ff","uc_match":"1f44d-1f3ff","uc_greedy":"1f44d-1f3ff","shortnames":[":+1_tone5:",":thumbup_tone5:"],"category":"people"},":united_nations:":{"uc_base":"1f1fa-1f1f3","uc_output":"1f1fa-1f1f3","uc_match":"1f1fa-1f1f3","uc_greedy":"1f1fa-1f1f3","shortnames":[],"category":"flags"},":vampire_tone1:":{"uc_base":"1f9db-1f3fb","uc_output":"1f9db-1f3fb","uc_match":"1f9db-1f3fb","uc_greedy":"1f9db-1f3fb","shortnames":[":vampire_light_skin_tone:"],"category":"people"},":vampire_tone2:":{"uc_base":"1f9db-1f3fc","uc_output":"1f9db-1f3fc","uc_match":"1f9db-1f3fc","uc_greedy":"1f9db-1f3fc","shortnames":[":vampire_medium_light_skin_tone:"],"category":"people"},":vampire_tone3:":{"uc_base":"1f9db-1f3fd","uc_output":"1f9db-1f3fd","uc_match":"1f9db-1f3fd","uc_greedy":"1f9db-1f3fd","shortnames":[":vampire_medium_skin_tone:"],"category":"people"},":vampire_tone4:":{"uc_base":"1f9db-1f3fe","uc_output":"1f9db-1f3fe","uc_match":"1f9db-1f3fe","uc_greedy":"1f9db-1f3fe","shortnames":[":vampire_medium_dark_skin_tone:"],"category":"people"},":vampire_tone5:":{"uc_base":"1f9db-1f3ff","uc_output":"1f9db-1f3ff","uc_match":"1f9db-1f3ff","uc_greedy":"1f9db-1f3ff","shortnames":[":vampire_dark_skin_tone:"],"category":"people"},":vulcan_tone1:":{"uc_base":"1f596-1f3fb","uc_output":"1f596-1f3fb","uc_match":"1f596-1f3fb","uc_greedy":"1f596-1f3fb","shortnames":[":raised_hand_with_part_between_middle_and_ring_fingers_tone1:"],"category":"people"},":vulcan_tone2:":{"uc_base":"1f596-1f3fc","uc_output":"1f596-1f3fc","uc_match":"1f596-1f3fc","uc_greedy":"1f596-1f3fc","shortnames":[":raised_hand_with_part_between_middle_and_ring_fingers_tone2:"],"category":"people"},":vulcan_tone3:":{"uc_base":"1f596-1f3fd","uc_output":"1f596-1f3fd","uc_match":"1f596-1f3fd","uc_greedy":"1f596-1f3fd","shortnames":[":raised_hand_with_part_between_middle_and_ring_fingers_tone3:"],"category":"people"},":vulcan_tone4:":{"uc_base":"1f596-1f3fe","uc_output":"1f596-1f3fe","uc_match":"1f596-1f3fe","uc_greedy":"1f596-1f3fe","shortnames":[":raised_hand_with_part_between_middle_and_ring_fingers_tone4:"],"category":"people"},":vulcan_tone5:":{"uc_base":"1f596-1f3ff","uc_output":"1f596-1f3ff","uc_match":"1f596-1f3ff","uc_greedy":"1f596-1f3ff","shortnames":[":raised_hand_with_part_between_middle_and_ring_fingers_tone5:"],"category":"people"},":wave_tone1:":{"uc_base":"1f44b-1f3fb","uc_output":"1f44b-1f3fb","uc_match":"1f44b-1f3fb","uc_greedy":"1f44b-1f3fb","shortnames":[],"category":"people"},":wave_tone2:":{"uc_base":"1f44b-1f3fc","uc_output":"1f44b-1f3fc","uc_match":"1f44b-1f3fc","uc_greedy":"1f44b-1f3fc","shortnames":[],"category":"people"},":wave_tone3:":{"uc_base":"1f44b-1f3fd","uc_output":"1f44b-1f3fd","uc_match":"1f44b-1f3fd","uc_greedy":"1f44b-1f3fd","shortnames":[],"category":"people"},":wave_tone4:":{"uc_base":"1f44b-1f3fe","uc_output":"1f44b-1f3fe","uc_match":"1f44b-1f3fe","uc_greedy":"1f44b-1f3fe","shortnames":[],"category":"people"},":wave_tone5:":{"uc_base":"1f44b-1f3ff","uc_output":"1f44b-1f3ff","uc_match":"1f44b-1f3ff","uc_greedy":"1f44b-1f3ff","shortnames":[],"category":"people"},":woman_tone1:":{"uc_base":"1f469-1f3fb","uc_output":"1f469-1f3fb","uc_match":"1f469-1f3fb","uc_greedy":"1f469-1f3fb","shortnames":[],"category":"people"},":woman_tone2:":{"uc_base":"1f469-1f3fc","uc_output":"1f469-1f3fc","uc_match":"1f469-1f3fc","uc_greedy":"1f469-1f3fc","shortnames":[],"category":"people"},":woman_tone3:":{"uc_base":"1f469-1f3fd","uc_output":"1f469-1f3fd","uc_match":"1f469-1f3fd","uc_greedy":"1f469-1f3fd","shortnames":[],"category":"people"},":woman_tone4:":{"uc_base":"1f469-1f3fe","uc_output":"1f469-1f3fe","uc_match":"1f469-1f3fe","uc_greedy":"1f469-1f3fe","shortnames":[],"category":"people"},":woman_tone5:":{"uc_base":"1f469-1f3ff","uc_output":"1f469-1f3ff","uc_match":"1f469-1f3ff","uc_greedy":"1f469-1f3ff","shortnames":[],"category":"people"},":woman_with_headscarf_tone1:":{"uc_base":"1f9d5-1f3fb","uc_output":"1f9d5-1f3fb","uc_match":"1f9d5-1f3fb","uc_greedy":"1f9d5-1f3fb","shortnames":[":woman_with_headscarf_light_skin_tone:"],"category":"people"},":woman_with_headscarf_tone2:":{"uc_base":"1f9d5-1f3fc","uc_output":"1f9d5-1f3fc","uc_match":"1f9d5-1f3fc","uc_greedy":"1f9d5-1f3fc","shortnames":[":woman_with_headscarf_medium_light_skin_tone:"],"category":"people"},":woman_with_headscarf_tone3:":{"uc_base":"1f9d5-1f3fd","uc_output":"1f9d5-1f3fd","uc_match":"1f9d5-1f3fd","uc_greedy":"1f9d5-1f3fd","shortnames":[":woman_with_headscarf_medium_skin_tone:"],"category":"people"},":woman_with_headscarf_tone4:":{"uc_base":"1f9d5-1f3fe","uc_output":"1f9d5-1f3fe","uc_match":"1f9d5-1f3fe","uc_greedy":"1f9d5-1f3fe","shortnames":[":woman_with_headscarf_medium_dark_skin_tone:"],"category":"people"},":woman_with_headscarf_tone5:":{"uc_base":"1f9d5-1f3ff","uc_output":"1f9d5-1f3ff","uc_match":"1f9d5-1f3ff","uc_greedy":"1f9d5-1f3ff","shortnames":[":woman_with_headscarf_dark_skin_tone:"],"category":"people"},":a:":{"uc_base":"1f170","uc_output":"1f170-fe0f","uc_match":"1f170-fe0f","uc_greedy":"1f170","shortnames":[],"category":"symbols"},":airplane_small:":{"uc_base":"1f6e9","uc_output":"1f6e9-fe0f","uc_match":"1f6e9-fe0f","uc_greedy":"1f6e9","shortnames":[":small_airplane:"],"category":"travel"},":anger_right:":{"uc_base":"1f5ef","uc_output":"1f5ef-fe0f","uc_match":"1f5ef-fe0f","uc_greedy":"1f5ef","shortnames":[":right_anger_bubble:"],"category":"symbols"},":b:":{"uc_base":"1f171","uc_output":"1f171-fe0f","uc_match":"1f171-fe0f","uc_greedy":"1f171","shortnames":[],"category":"symbols"},":ballot_box:":{"uc_base":"1f5f3","uc_output":"1f5f3-fe0f","uc_match":"1f5f3-fe0f","uc_greedy":"1f5f3","shortnames":[":ballot_box_with_ballot:"],"category":"objects"},":beach:":{"uc_base":"1f3d6","uc_output":"1f3d6-fe0f","uc_match":"1f3d6-fe0f","uc_greedy":"1f3d6","shortnames":[":beach_with_umbrella:"],"category":"travel"},":bed:":{"uc_base":"1f6cf","uc_output":"1f6cf-fe0f","uc_match":"1f6cf-fe0f","uc_greedy":"1f6cf","shortnames":[],"category":"objects"},":bellhop:":{"uc_base":"1f6ce","uc_output":"1f6ce-fe0f","uc_match":"1f6ce-fe0f","uc_greedy":"1f6ce","shortnames":[":bellhop_bell:"],"category":"objects"},":calendar_spiral:":{"uc_base":"1f5d3","uc_output":"1f5d3-fe0f","uc_match":"1f5d3-fe0f","uc_greedy":"1f5d3","shortnames":[":spiral_calendar_pad:"],"category":"objects"},":camping:":{"uc_base":"1f3d5","uc_output":"1f3d5-fe0f","uc_match":"1f3d5-fe0f","uc_greedy":"1f3d5","shortnames":[],"category":"travel"},":candle:":{"uc_base":"1f56f","uc_output":"1f56f-fe0f","uc_match":"1f56f-fe0f","uc_greedy":"1f56f","shortnames":[],"category":"objects"},":card_box:":{"uc_base":"1f5c3","uc_output":"1f5c3-fe0f","uc_match":"1f5c3-fe0f","uc_greedy":"1f5c3","shortnames":[":card_file_box:"],"category":"objects"},":chipmunk:":{"uc_base":"1f43f","uc_output":"1f43f-fe0f","uc_match":"1f43f-fe0f","uc_greedy":"1f43f","shortnames":[],"category":"nature"},":cityscape:":{"uc_base":"1f3d9","uc_output":"1f3d9-fe0f","uc_match":"1f3d9-fe0f","uc_greedy":"1f3d9","shortnames":[],"category":"travel"},":classical_building:":{"uc_base":"1f3db","uc_output":"1f3db-fe0f","uc_match":"1f3db-fe0f","uc_greedy":"1f3db","shortnames":[],"category":"travel"},":clock:":{"uc_base":"1f570","uc_output":"1f570-fe0f","uc_match":"1f570-fe0f","uc_greedy":"1f570","shortnames":[":mantlepiece_clock:"],"category":"objects"},":cloud_lightning:":{"uc_base":"1f329","uc_output":"1f329-fe0f","uc_match":"1f329-fe0f","uc_greedy":"1f329","shortnames":[":cloud_with_lightning:"],"category":"nature"},":cloud_rain:":{"uc_base":"1f327","uc_output":"1f327-fe0f","uc_match":"1f327-fe0f","uc_greedy":"1f327","shortnames":[":cloud_with_rain:"],"category":"nature"},":cloud_snow:":{"uc_base":"1f328","uc_output":"1f328-fe0f","uc_match":"1f328-fe0f","uc_greedy":"1f328","shortnames":[":cloud_with_snow:"],"category":"nature"},":cloud_tornado:":{"uc_base":"1f32a","uc_output":"1f32a-fe0f","uc_match":"1f32a-fe0f","uc_greedy":"1f32a","shortnames":[":cloud_with_tornado:"],"category":"nature"},":compression:":{"uc_base":"1f5dc","uc_output":"1f5dc-fe0f","uc_match":"1f5dc-fe0f","uc_greedy":"1f5dc","shortnames":[],"category":"objects"},":construction_site:":{"uc_base":"1f3d7","uc_output":"1f3d7-fe0f","uc_match":"1f3d7-fe0f","uc_greedy":"1f3d7","shortnames":[":building_construction:"],"category":"travel"},":control_knobs:":{"uc_base":"1f39b","uc_output":"1f39b-fe0f","uc_match":"1f39b-fe0f","uc_greedy":"1f39b","shortnames":[],"category":"objects"},":couch:":{"uc_base":"1f6cb","uc_output":"1f6cb-fe0f","uc_match":"1f6cb-fe0f","uc_greedy":"1f6cb","shortnames":[":couch_and_lamp:"],"category":"objects"},":crayon:":{"uc_base":"1f58d","uc_output":"1f58d-fe0f","uc_match":"1f58d-fe0f","uc_greedy":"1f58d","shortnames":[":lower_left_crayon:"],"category":"objects"},":cruise_ship:":{"uc_base":"1f6f3","uc_output":"1f6f3-fe0f","uc_match":"1f6f3-fe0f","uc_greedy":"1f6f3","shortnames":[":passenger_ship:"],"category":"travel"},":dagger:":{"uc_base":"1f5e1","uc_output":"1f5e1-fe0f","uc_match":"1f5e1-fe0f","uc_greedy":"1f5e1","shortnames":[":dagger_knife:"],"category":"objects"},":dark_sunglasses:":{"uc_base":"1f576","uc_output":"1f576-fe0f","uc_match":"1f576-fe0f","uc_greedy":"1f576","shortnames":[],"category":"people"},":desert:":{"uc_base":"1f3dc","uc_output":"1f3dc-fe0f","uc_match":"1f3dc-fe0f","uc_greedy":"1f3dc","shortnames":[],"category":"travel"},":desktop:":{"uc_base":"1f5a5","uc_output":"1f5a5-fe0f","uc_match":"1f5a5-fe0f","uc_greedy":"1f5a5","shortnames":[":desktop_computer:"],"category":"objects"},":detective:":{"uc_base":"1f575","uc_output":"1f575-fe0f","uc_match":"1f575-fe0f","uc_greedy":"1f575","shortnames":[":spy:",":sleuth_or_spy:"],"category":"people"},":dividers:":{"uc_base":"1f5c2","uc_output":"1f5c2-fe0f","uc_match":"1f5c2-fe0f","uc_greedy":"1f5c2","shortnames":[":card_index_dividers:"],"category":"objects"},":dove:":{"uc_base":"1f54a","uc_output":"1f54a-fe0f","uc_match":"1f54a-fe0f","uc_greedy":"1f54a","shortnames":[":dove_of_peace:"],"category":"nature"},":eye:":{"uc_base":"1f441","uc_output":"1f441-fe0f","uc_match":"1f441-fe0f","uc_greedy":"1f441","shortnames":[],"category":"people"},":file_cabinet:":{"uc_base":"1f5c4","uc_output":"1f5c4-fe0f","uc_match":"1f5c4-fe0f","uc_greedy":"1f5c4","shortnames":[],"category":"objects"},":film_frames:":{"uc_base":"1f39e","uc_output":"1f39e-fe0f","uc_match":"1f39e-fe0f","uc_greedy":"1f39e","shortnames":[],"category":"objects"},":fist_tone1:":{"uc_base":"270a-1f3fb","uc_output":"270a-1f3fb","uc_match":"270a-1f3fb","uc_greedy":"270a-1f3fb","shortnames":[],"category":"people"},":fist_tone2:":{"uc_base":"270a-1f3fc","uc_output":"270a-1f3fc","uc_match":"270a-1f3fc","uc_greedy":"270a-1f3fc","shortnames":[],"category":"people"},":fist_tone3:":{"uc_base":"270a-1f3fd","uc_output":"270a-1f3fd","uc_match":"270a-1f3fd","uc_greedy":"270a-1f3fd","shortnames":[],"category":"people"},":fist_tone4:":{"uc_base":"270a-1f3fe","uc_output":"270a-1f3fe","uc_match":"270a-1f3fe","uc_greedy":"270a-1f3fe","shortnames":[],"category":"people"},":fist_tone5:":{"uc_base":"270a-1f3ff","uc_output":"270a-1f3ff","uc_match":"270a-1f3ff","uc_greedy":"270a-1f3ff","shortnames":[],"category":"people"},":flag_white:":{"uc_base":"1f3f3","uc_output":"1f3f3-fe0f","uc_match":"1f3f3-fe0f","uc_greedy":"1f3f3","shortnames":[":waving_white_flag:"],"category":"flags"},":fog:":{"uc_base":"1f32b","uc_output":"1f32b-fe0f","uc_match":"1f32b-fe0f","uc_greedy":"1f32b","shortnames":[],"category":"nature"},":fork_knife_plate:":{"uc_base":"1f37d","uc_output":"1f37d-fe0f","uc_match":"1f37d-fe0f","uc_greedy":"1f37d","shortnames":[":fork_and_knife_with_plate:"],"category":"food"},":frame_photo:":{"uc_base":"1f5bc","uc_output":"1f5bc-fe0f","uc_match":"1f5bc-fe0f","uc_greedy":"1f5bc","shortnames":[":frame_with_picture:"],"category":"objects"},":hand_splayed:":{"uc_base":"1f590","uc_output":"1f590-fe0f","uc_match":"1f590-fe0f","uc_greedy":"1f590","shortnames":[":raised_hand_with_fingers_splayed:"],"category":"people"},":hole:":{"uc_base":"1f573","uc_output":"1f573-fe0f","uc_match":"1f573-fe0f","uc_greedy":"1f573","shortnames":[],"category":"objects"},":homes:":{"uc_base":"1f3d8","uc_output":"1f3d8-fe0f","uc_match":"1f3d8-fe0f","uc_greedy":"1f3d8","shortnames":[":house_buildings:"],"category":"travel"},":hot_pepper:":{"uc_base":"1f336","uc_output":"1f336-fe0f","uc_match":"1f336-fe0f","uc_greedy":"1f336","shortnames":[],"category":"food"},":house_abandoned:":{"uc_base":"1f3da","uc_output":"1f3da-fe0f","uc_match":"1f3da-fe0f","uc_greedy":"1f3da","shortnames":[":derelict_house_building:"],"category":"travel"},":island:":{"uc_base":"1f3dd","uc_output":"1f3dd-fe0f","uc_match":"1f3dd-fe0f","uc_greedy":"1f3dd","shortnames":[":desert_island:"],"category":"travel"},":joystick:":{"uc_base":"1f579","uc_output":"1f579-fe0f","uc_match":"1f579-fe0f","uc_greedy":"1f579","shortnames":[],"category":"objects"},":key2:":{"uc_base":"1f5dd","uc_output":"1f5dd-fe0f","uc_match":"1f5dd-fe0f","uc_greedy":"1f5dd","shortnames":[":old_key:"],"category":"objects"},":label:":{"uc_base":"1f3f7","uc_output":"1f3f7-fe0f","uc_match":"1f3f7-fe0f","uc_greedy":"1f3f7","shortnames":[],"category":"objects"},":level_slider:":{"uc_base":"1f39a","uc_output":"1f39a-fe0f","uc_match":"1f39a-fe0f","uc_greedy":"1f39a","shortnames":[],"category":"objects"},":man_in_business_suit_levitating:":{"uc_base":"1f574","uc_output":"1f574-fe0f","uc_match":"1f574-fe0f","uc_greedy":"1f574","shortnames":[],"category":"people"},":map:":{"uc_base":"1f5fa","uc_output":"1f5fa-fe0f","uc_match":"1f5fa-fe0f","uc_greedy":"1f5fa","shortnames":[":world_map:"],"category":"travel"},":microphone2:":{"uc_base":"1f399","uc_output":"1f399-fe0f","uc_match":"1f399-fe0f","uc_greedy":"1f399","shortnames":[":studio_microphone:"],"category":"objects"},":military_medal:":{"uc_base":"1f396","uc_output":"1f396-fe0f","uc_match":"1f396-fe0f","uc_greedy":"1f396","shortnames":[],"category":"activity"},":motorboat:":{"uc_base":"1f6e5","uc_output":"1f6e5-fe0f","uc_match":"1f6e5-fe0f","uc_greedy":"1f6e5","shortnames":[],"category":"travel"},":motorcycle:":{"uc_base":"1f3cd","uc_output":"1f3cd-fe0f","uc_match":"1f3cd-fe0f","uc_greedy":"1f3cd","shortnames":[":racing_motorcycle:"],"category":"travel"},":motorway:":{"uc_base":"1f6e3","uc_output":"1f6e3-fe0f","uc_match":"1f6e3-fe0f","uc_greedy":"1f6e3","shortnames":[],"category":"travel"},":mountain_snow:":{"uc_base":"1f3d4","uc_output":"1f3d4-fe0f","uc_match":"1f3d4-fe0f","uc_greedy":"1f3d4","shortnames":[":snow_capped_mountain:"],"category":"travel"},":mouse_three_button:":{"uc_base":"1f5b1","uc_output":"1f5b1-fe0f","uc_match":"1f5b1-fe0f","uc_greedy":"1f5b1","shortnames":[":three_button_mouse:"],"category":"objects"},":newspaper2:":{"uc_base":"1f5de","uc_output":"1f5de-fe0f","uc_match":"1f5de-fe0f","uc_greedy":"1f5de","shortnames":[":rolled_up_newspaper:"],"category":"objects"},":notepad_spiral:":{"uc_base":"1f5d2","uc_output":"1f5d2-fe0f","uc_match":"1f5d2-fe0f","uc_greedy":"1f5d2","shortnames":[":spiral_note_pad:"],"category":"objects"},":o2:":{"uc_base":"1f17e","uc_output":"1f17e-fe0f","uc_match":"1f17e-fe0f","uc_greedy":"1f17e","shortnames":[],"category":"symbols"},":oil:":{"uc_base":"1f6e2","uc_output":"1f6e2-fe0f","uc_match":"1f6e2-fe0f","uc_greedy":"1f6e2","shortnames":[":oil_drum:"],"category":"objects"},":om_symbol:":{"uc_base":"1f549","uc_output":"1f549-fe0f","uc_match":"1f549-fe0f","uc_greedy":"1f549","shortnames":[],"category":"symbols"},":paintbrush:":{"uc_base":"1f58c","uc_output":"1f58c-fe0f","uc_match":"1f58c-fe0f","uc_greedy":"1f58c","shortnames":[":lower_left_paintbrush:"],"category":"objects"},":paperclips:":{"uc_base":"1f587","uc_output":"1f587-fe0f","uc_match":"1f587-fe0f","uc_greedy":"1f587","shortnames":[":linked_paperclips:"],"category":"objects"},":park:":{"uc_base":"1f3de","uc_output":"1f3de-fe0f","uc_match":"1f3de-fe0f","uc_greedy":"1f3de","shortnames":[":national_park:"],"category":"travel"},":parking:":{"uc_base":"1f17f","uc_output":"1f17f-fe0f","uc_match":"1f17f-fe0f","uc_greedy":"1f17f","shortnames":[],"category":"symbols"},":pen_ballpoint:":{"uc_base":"1f58a","uc_output":"1f58a-fe0f","uc_match":"1f58a-fe0f","uc_greedy":"1f58a","shortnames":[":lower_left_ballpoint_pen:"],"category":"objects"},":pen_fountain:":{"uc_base":"1f58b","uc_output":"1f58b-fe0f","uc_match":"1f58b-fe0f","uc_greedy":"1f58b","shortnames":[":lower_left_fountain_pen:"],"category":"objects"},":person_bouncing_ball_tone1:":{"uc_base":"26f9-1f3fb","uc_output":"26f9-1f3fb","uc_match":"26f9-fe0f-1f3fb","uc_greedy":"26f9-fe0f-1f3fb","shortnames":[":basketball_player_tone1:",":person_with_ball_tone1:"],"category":"activity"},":person_bouncing_ball_tone2:":{"uc_base":"26f9-1f3fc","uc_output":"26f9-1f3fc","uc_match":"26f9-fe0f-1f3fc","uc_greedy":"26f9-fe0f-1f3fc","shortnames":[":basketball_player_tone2:",":person_with_ball_tone2:"],"category":"activity"},":person_bouncing_ball_tone3:":{"uc_base":"26f9-1f3fd","uc_output":"26f9-1f3fd","uc_match":"26f9-fe0f-1f3fd","uc_greedy":"26f9-fe0f-1f3fd","shortnames":[":basketball_player_tone3:",":person_with_ball_tone3:"],"category":"activity"},":person_bouncing_ball_tone4:":{"uc_base":"26f9-1f3fe","uc_output":"26f9-1f3fe","uc_match":"26f9-fe0f-1f3fe","uc_greedy":"26f9-fe0f-1f3fe","shortnames":[":basketball_player_tone4:",":person_with_ball_tone4:"],"category":"activity"},":person_bouncing_ball_tone5:":{"uc_base":"26f9-1f3ff","uc_output":"26f9-1f3ff","uc_match":"26f9-fe0f-1f3ff","uc_greedy":"26f9-fe0f-1f3ff","shortnames":[":basketball_player_tone5:",":person_with_ball_tone5:"],"category":"activity"},":person_golfing:":{"uc_base":"1f3cc","uc_output":"1f3cc-fe0f","uc_match":"1f3cc-fe0f","uc_greedy":"1f3cc","shortnames":[":golfer:"],"category":"activity"},":person_lifting_weights:":{"uc_base":"1f3cb","uc_output":"1f3cb-fe0f","uc_match":"1f3cb-fe0f","uc_greedy":"1f3cb","shortnames":[":lifter:",":weight_lifter:"],"category":"activity"},":point_up_tone1:":{"uc_base":"261d-1f3fb","uc_output":"261d-1f3fb","uc_match":"261d-fe0f-1f3fb","uc_greedy":"261d-fe0f-1f3fb","shortnames":[],"category":"people"},":point_up_tone2:":{"uc_base":"261d-1f3fc","uc_output":"261d-1f3fc","uc_match":"261d-fe0f-1f3fc","uc_greedy":"261d-fe0f-1f3fc","shortnames":[],"category":"people"},":point_up_tone3:":{"uc_base":"261d-1f3fd","uc_output":"261d-1f3fd","uc_match":"261d-fe0f-1f3fd","uc_greedy":"261d-fe0f-1f3fd","shortnames":[],"category":"people"},":point_up_tone4:":{"uc_base":"261d-1f3fe","uc_output":"261d-1f3fe","uc_match":"261d-fe0f-1f3fe","uc_greedy":"261d-fe0f-1f3fe","shortnames":[],"category":"people"},":point_up_tone5:":{"uc_base":"261d-1f3ff","uc_output":"261d-1f3ff","uc_match":"261d-fe0f-1f3ff","uc_greedy":"261d-fe0f-1f3ff","shortnames":[],"category":"people"},":printer:":{"uc_base":"1f5a8","uc_output":"1f5a8-fe0f","uc_match":"1f5a8-fe0f","uc_greedy":"1f5a8","shortnames":[],"category":"objects"},":projector:":{"uc_base":"1f4fd","uc_output":"1f4fd-fe0f","uc_match":"1f4fd-fe0f","uc_greedy":"1f4fd","shortnames":[":film_projector:"],"category":"objects"},":race_car:":{"uc_base":"1f3ce","uc_output":"1f3ce-fe0f","uc_match":"1f3ce-fe0f","uc_greedy":"1f3ce","shortnames":[":racing_car:"],"category":"travel"},":railway_track:":{"uc_base":"1f6e4","uc_output":"1f6e4-fe0f","uc_match":"1f6e4-fe0f","uc_greedy":"1f6e4","shortnames":[":railroad_track:"],"category":"travel"},":raised_hand_tone1:":{"uc_base":"270b-1f3fb","uc_output":"270b-1f3fb","uc_match":"270b-1f3fb","uc_greedy":"270b-1f3fb","shortnames":[],"category":"people"},":raised_hand_tone2:":{"uc_base":"270b-1f3fc","uc_output":"270b-1f3fc","uc_match":"270b-1f3fc","uc_greedy":"270b-1f3fc","shortnames":[],"category":"people"},":raised_hand_tone3:":{"uc_base":"270b-1f3fd","uc_output":"270b-1f3fd","uc_match":"270b-1f3fd","uc_greedy":"270b-1f3fd","shortnames":[],"category":"people"},":raised_hand_tone4:":{"uc_base":"270b-1f3fe","uc_output":"270b-1f3fe","uc_match":"270b-1f3fe","uc_greedy":"270b-1f3fe","shortnames":[],"category":"people"},":raised_hand_tone5:":{"uc_base":"270b-1f3ff","uc_output":"270b-1f3ff","uc_match":"270b-1f3ff","uc_greedy":"270b-1f3ff","shortnames":[],"category":"people"},":reminder_ribbon:":{"uc_base":"1f397","uc_output":"1f397-fe0f","uc_match":"1f397-fe0f","uc_greedy":"1f397","shortnames":[],"category":"activity"},":rosette:":{"uc_base":"1f3f5","uc_output":"1f3f5-fe0f","uc_match":"1f3f5-fe0f","uc_greedy":"1f3f5","shortnames":[],"category":"activity"},":sa:":{"uc_base":"1f202","uc_output":"1f202-fe0f","uc_match":"1f202-fe0f","uc_greedy":"1f202","shortnames":[],"category":"symbols"},":satellite_orbital:":{"uc_base":"1f6f0","uc_output":"1f6f0-fe0f","uc_match":"1f6f0-fe0f","uc_greedy":"1f6f0","shortnames":[],"category":"travel"},":shield:":{"uc_base":"1f6e1","uc_output":"1f6e1-fe0f","uc_match":"1f6e1-fe0f","uc_greedy":"1f6e1","shortnames":[],"category":"objects"},":shopping_bags:":{"uc_base":"1f6cd","uc_output":"1f6cd-fe0f","uc_match":"1f6cd-fe0f","uc_greedy":"1f6cd","shortnames":[],"category":"objects"},":speaking_head:":{"uc_base":"1f5e3","uc_output":"1f5e3-fe0f","uc_match":"1f5e3-fe0f","uc_greedy":"1f5e3","shortnames":[":speaking_head_in_silhouette:"],"category":"people"},":speech_left:":{"uc_base":"1f5e8","uc_output":"1f5e8-fe0f","uc_match":"1f5e8-fe0f","uc_greedy":"1f5e8","shortnames":[":left_speech_bubble:"],"category":"symbols"},":spider:":{"uc_base":"1f577","uc_output":"1f577-fe0f","uc_match":"1f577-fe0f","uc_greedy":"1f577","shortnames":[],"category":"nature"},":spider_web:":{"uc_base":"1f578","uc_output":"1f578-fe0f","uc_match":"1f578-fe0f","uc_greedy":"1f578","shortnames":[],"category":"nature"},":stadium:":{"uc_base":"1f3df","uc_output":"1f3df-fe0f","uc_match":"1f3df-fe0f","uc_greedy":"1f3df","shortnames":[],"category":"travel"},":thermometer:":{"uc_base":"1f321","uc_output":"1f321-fe0f","uc_match":"1f321-fe0f","uc_greedy":"1f321","shortnames":[],"category":"objects"},":tickets:":{"uc_base":"1f39f","uc_output":"1f39f-fe0f","uc_match":"1f39f-fe0f","uc_greedy":"1f39f","shortnames":[":admission_tickets:"],"category":"activity"},":tools:":{"uc_base":"1f6e0","uc_output":"1f6e0-fe0f","uc_match":"1f6e0-fe0f","uc_greedy":"1f6e0","shortnames":[":hammer_and_wrench:"],"category":"objects"},":trackball:":{"uc_base":"1f5b2","uc_output":"1f5b2-fe0f","uc_match":"1f5b2-fe0f","uc_greedy":"1f5b2","shortnames":[],"category":"objects"},":u6708:":{"uc_base":"1f237","uc_output":"1f237-fe0f","uc_match":"1f237-fe0f","uc_greedy":"1f237","shortnames":[],"category":"symbols"},":v_tone1:":{"uc_base":"270c-1f3fb","uc_output":"270c-1f3fb","uc_match":"270c-fe0f-1f3fb","uc_greedy":"270c-fe0f-1f3fb","shortnames":[],"category":"people"},":v_tone2:":{"uc_base":"270c-1f3fc","uc_output":"270c-1f3fc","uc_match":"270c-fe0f-1f3fc","uc_greedy":"270c-fe0f-1f3fc","shortnames":[],"category":"people"},":v_tone3:":{"uc_base":"270c-1f3fd","uc_output":"270c-1f3fd","uc_match":"270c-fe0f-1f3fd","uc_greedy":"270c-fe0f-1f3fd","shortnames":[],"category":"people"},":v_tone4:":{"uc_base":"270c-1f3fe","uc_output":"270c-1f3fe","uc_match":"270c-fe0f-1f3fe","uc_greedy":"270c-fe0f-1f3fe","shortnames":[],"category":"people"},":v_tone5:":{"uc_base":"270c-1f3ff","uc_output":"270c-1f3ff","uc_match":"270c-fe0f-1f3ff","uc_greedy":"270c-fe0f-1f3ff","shortnames":[],"category":"people"},":wastebasket:":{"uc_base":"1f5d1","uc_output":"1f5d1-fe0f","uc_match":"1f5d1-fe0f","uc_greedy":"1f5d1","shortnames":[],"category":"objects"},":white_sun_cloud:":{"uc_base":"1f325","uc_output":"1f325-fe0f","uc_match":"1f325-fe0f","uc_greedy":"1f325","shortnames":[":white_sun_behind_cloud:"],"category":"nature"},":white_sun_rain_cloud:":{"uc_base":"1f326","uc_output":"1f326-fe0f","uc_match":"1f326-fe0f","uc_greedy":"1f326","shortnames":[":white_sun_behind_cloud_with_rain:"],"category":"nature"},":white_sun_small_cloud:":{"uc_base":"1f324","uc_output":"1f324-fe0f","uc_match":"1f324-fe0f","uc_greedy":"1f324","shortnames":[":white_sun_with_small_cloud:"],"category":"nature"},":wind_blowing_face:":{"uc_base":"1f32c","uc_output":"1f32c-fe0f","uc_match":"1f32c-fe0f","uc_greedy":"1f32c","shortnames":[],"category":"nature"},":writing_hand_tone1:":{"uc_base":"270d-1f3fb","uc_output":"270d-1f3fb","uc_match":"270d-fe0f-1f3fb","uc_greedy":"270d-fe0f-1f3fb","shortnames":[],"category":"people"},":writing_hand_tone2:":{"uc_base":"270d-1f3fc","uc_output":"270d-1f3fc","uc_match":"270d-fe0f-1f3fc","uc_greedy":"270d-fe0f-1f3fc","shortnames":[],"category":"people"},":writing_hand_tone3:":{"uc_base":"270d-1f3fd","uc_output":"270d-1f3fd","uc_match":"270d-fe0f-1f3fd","uc_greedy":"270d-fe0f-1f3fd","shortnames":[],"category":"people"},":writing_hand_tone4:":{"uc_base":"270d-1f3fe","uc_output":"270d-1f3fe","uc_match":"270d-fe0f-1f3fe","uc_greedy":"270d-fe0f-1f3fe","shortnames":[],"category":"people"},":writing_hand_tone5:":{"uc_base":"270d-1f3ff","uc_output":"270d-1f3ff","uc_match":"270d-fe0f-1f3ff","uc_greedy":"270d-fe0f-1f3ff","shortnames":[],"category":"people"},":airplane:":{"uc_base":"2708","uc_output":"2708-fe0f","uc_match":"2708-fe0f","uc_greedy":"2708","shortnames":[],"category":"travel"},":alembic:":{"uc_base":"2697","uc_output":"2697-fe0f","uc_match":"2697-fe0f","uc_greedy":"2697","shortnames":[],"category":"objects"},":arrow_backward:":{"uc_base":"25c0","uc_output":"25c0-fe0f","uc_match":"25c0-fe0f","uc_greedy":"25c0","shortnames":[],"category":"symbols"},":arrow_down:":{"uc_base":"2b07","uc_output":"2b07-fe0f","uc_match":"2b07-fe0f","uc_greedy":"2b07","shortnames":[],"category":"symbols"},":arrow_forward:":{"uc_base":"25b6","uc_output":"25b6-fe0f","uc_match":"25b6-fe0f","uc_greedy":"25b6","shortnames":[],"category":"symbols"},":arrow_heading_down:":{"uc_base":"2935","uc_output":"2935-fe0f","uc_match":"2935-fe0f","uc_greedy":"2935","shortnames":[],"category":"symbols"},":arrow_heading_up:":{"uc_base":"2934","uc_output":"2934-fe0f","uc_match":"2934-fe0f","uc_greedy":"2934","shortnames":[],"category":"symbols"},":arrow_left:":{"uc_base":"2b05","uc_output":"2b05-fe0f","uc_match":"2b05-fe0f","uc_greedy":"2b05","shortnames":[],"category":"symbols"},":arrow_lower_left:":{"uc_base":"2199","uc_output":"2199-fe0f","uc_match":"2199-fe0f","uc_greedy":"2199","shortnames":[],"category":"symbols"},":arrow_lower_right:":{"uc_base":"2198","uc_output":"2198-fe0f","uc_match":"2198-fe0f","uc_greedy":"2198","shortnames":[],"category":"symbols"},":arrow_right:":{"uc_base":"27a1","uc_output":"27a1-fe0f","uc_match":"27a1-fe0f","uc_greedy":"27a1","shortnames":[],"category":"symbols"},":arrow_right_hook:":{"uc_base":"21aa","uc_output":"21aa-fe0f","uc_match":"21aa-fe0f","uc_greedy":"21aa","shortnames":[],"category":"symbols"},":arrow_up:":{"uc_base":"2b06","uc_output":"2b06-fe0f","uc_match":"2b06-fe0f","uc_greedy":"2b06","shortnames":[],"category":"symbols"},":arrow_up_down:":{"uc_base":"2195","uc_output":"2195-fe0f","uc_match":"2195-fe0f","uc_greedy":"2195","shortnames":[],"category":"symbols"},":arrow_upper_left:":{"uc_base":"2196","uc_output":"2196-fe0f","uc_match":"2196-fe0f","uc_greedy":"2196","shortnames":[],"category":"symbols"},":arrow_upper_right:":{"uc_base":"2197","uc_output":"2197-fe0f","uc_match":"2197-fe0f","uc_greedy":"2197","shortnames":[],"category":"symbols"},":asterisk_symbol:":{"uc_base":"002a","uc_output":"002a-fe0f","uc_match":"002a-fe0f","uc_greedy":"002a","shortnames":[],"category":"symbols"},":atom:":{"uc_base":"269b","uc_output":"269b-fe0f","uc_match":"269b-fe0f","uc_greedy":"269b","shortnames":[":atom_symbol:"],"category":"symbols"},":ballot_box_with_check:":{"uc_base":"2611","uc_output":"2611-fe0f","uc_match":"2611-fe0f","uc_greedy":"2611","shortnames":[],"category":"symbols"},":bangbang:":{"uc_base":"203c","uc_output":"203c-fe0f","uc_match":"203c-fe0f","uc_greedy":"203c","shortnames":[],"category":"symbols"},":beach_umbrella:":{"uc_base":"26f1","uc_output":"26f1-fe0f","uc_match":"26f1-fe0f","uc_greedy":"26f1","shortnames":[":umbrella_on_ground:"],"category":"travel"},":biohazard:":{"uc_base":"2623","uc_output":"2623-fe0f","uc_match":"2623-fe0f","uc_greedy":"2623","shortnames":[":biohazard_sign:"],"category":"symbols"},":black_medium_square:":{"uc_base":"25fc","uc_output":"25fc-fe0f","uc_match":"25fc-fe0f","uc_greedy":"25fc","shortnames":[],"category":"symbols"},":black_nib:":{"uc_base":"2712","uc_output":"2712-fe0f","uc_match":"2712-fe0f","uc_greedy":"2712","shortnames":[],"category":"objects"},":black_small_square:":{"uc_base":"25aa","uc_output":"25aa-fe0f","uc_match":"25aa-fe0f","uc_greedy":"25aa","shortnames":[],"category":"symbols"},":chains:":{"uc_base":"26d3","uc_output":"26d3-fe0f","uc_match":"26d3-fe0f","uc_greedy":"26d3","shortnames":[],"category":"objects"},":cloud:":{"uc_base":"2601","uc_output":"2601-fe0f","uc_match":"2601-fe0f","uc_greedy":"2601","shortnames":[],"category":"nature"},":clubs:":{"uc_base":"2663","uc_output":"2663-fe0f","uc_match":"2663-fe0f","uc_greedy":"2663","shortnames":[],"category":"symbols"},":coffin:":{"uc_base":"26b0","uc_output":"26b0-fe0f","uc_match":"26b0-fe0f","uc_greedy":"26b0","shortnames":[],"category":"objects"},":comet:":{"uc_base":"2604","uc_output":"2604-fe0f","uc_match":"2604-fe0f","uc_greedy":"2604","shortnames":[],"category":"nature"},":congratulations:":{"uc_base":"3297","uc_output":"3297-fe0f","uc_match":"3297-fe0f","uc_greedy":"3297","shortnames":[],"category":"symbols"},":copyright:":{"uc_base":"00a9","uc_output":"00a9-fe0f","uc_match":"00a9-fe0f","uc_greedy":"00a9","shortnames":[],"category":"symbols"},":cross:":{"uc_base":"271d","uc_output":"271d-fe0f","uc_match":"271d-fe0f","uc_greedy":"271d","shortnames":[":latin_cross:"],"category":"symbols"},":crossed_swords:":{"uc_base":"2694","uc_output":"2694-fe0f","uc_match":"2694-fe0f","uc_greedy":"2694","shortnames":[],"category":"objects"},":diamonds:":{"uc_base":"2666","uc_output":"2666-fe0f","uc_match":"2666-fe0f","uc_greedy":"2666","shortnames":[],"category":"symbols"},":digit_eight:":{"uc_base":"0038","uc_output":"0038-fe0f","uc_match":"0038-fe0f","uc_greedy":"0038","shortnames":[],"category":"symbols"},":digit_five:":{"uc_base":"0035","uc_output":"0035-fe0f","uc_match":"0035-fe0f","uc_greedy":"0035","shortnames":[],"category":"symbols"},":digit_four:":{"uc_base":"0034","uc_output":"0034-fe0f","uc_match":"0034-fe0f","uc_greedy":"0034","shortnames":[],"category":"symbols"},":digit_nine:":{"uc_base":"0039","uc_output":"0039-fe0f","uc_match":"0039-fe0f","uc_greedy":"0039","shortnames":[],"category":"symbols"},":digit_one:":{"uc_base":"0031","uc_output":"0031-fe0f","uc_match":"0031-fe0f","uc_greedy":"0031","shortnames":[],"category":"symbols"},":digit_seven:":{"uc_base":"0037","uc_output":"0037-fe0f","uc_match":"0037-fe0f","uc_greedy":"0037","shortnames":[],"category":"symbols"},":digit_six:":{"uc_base":"0036","uc_output":"0036-fe0f","uc_match":"0036-fe0f","uc_greedy":"0036","shortnames":[],"category":"symbols"},":digit_three:":{"uc_base":"0033","uc_output":"0033-fe0f","uc_match":"0033-fe0f","uc_greedy":"0033","shortnames":[],"category":"symbols"},":digit_two:":{"uc_base":"0032","uc_output":"0032-fe0f","uc_match":"0032-fe0f","uc_greedy":"0032","shortnames":[],"category":"symbols"},":digit_zero:":{"uc_base":"0030","uc_output":"0030-fe0f","uc_match":"0030-fe0f","uc_greedy":"0030","shortnames":[],"category":"symbols"},":eight_pointed_black_star:":{"uc_base":"2734","uc_output":"2734-fe0f","uc_match":"2734-fe0f","uc_greedy":"2734","shortnames":[],"category":"symbols"},":eight_spoked_asterisk:":{"uc_base":"2733","uc_output":"2733-fe0f","uc_match":"2733-fe0f","uc_greedy":"2733","shortnames":[],"category":"symbols"},":eject:":{"uc_base":"23cf","uc_output":"23cf-fe0f","uc_match":"23cf-fe0f","uc_greedy":"23cf","shortnames":[":eject_symbol:"],"category":"symbols"},":envelope:":{"uc_base":"2709","uc_output":"2709-fe0f","uc_match":"2709-fe0f","uc_greedy":"2709","shortnames":[],"category":"objects"},":female_sign:":{"uc_base":"2640","uc_output":"2640-fe0f","uc_match":"2640-fe0f","uc_greedy":"2640","shortnames":[],"category":"people"},":ferry:":{"uc_base":"26f4","uc_output":"26f4-fe0f","uc_match":"26f4-fe0f","uc_greedy":"26f4","shortnames":[],"category":"travel"},":fleur-de-lis:":{"uc_base":"269c","uc_output":"269c-fe0f","uc_match":"269c-fe0f","uc_greedy":"269c","shortnames":[],"category":"symbols"},":frowning2:":{"uc_base":"2639","uc_output":"2639-fe0f","uc_match":"2639-fe0f","uc_greedy":"2639","shortnames":[":white_frowning_face:"],"category":"people"},":gear:":{"uc_base":"2699","uc_output":"2699-fe0f","uc_match":"2699-fe0f","uc_greedy":"2699","shortnames":[],"category":"objects"},":hammer_pick:":{"uc_base":"2692","uc_output":"2692-fe0f","uc_match":"2692-fe0f","uc_greedy":"2692","shortnames":[":hammer_and_pick:"],"category":"objects"},":heart:":{"uc_base":"2764","uc_output":"2764-fe0f","uc_match":"2764-fe0f","uc_greedy":"2764","shortnames":[],"category":"symbols"},":heart_exclamation:":{"uc_base":"2763","uc_output":"2763-fe0f","uc_match":"2763-fe0f","uc_greedy":"2763","shortnames":[":heavy_heart_exclamation_mark_ornament:"],"category":"symbols"},":hearts:":{"uc_base":"2665","uc_output":"2665-fe0f","uc_match":"2665-fe0f","uc_greedy":"2665","shortnames":[],"category":"symbols"},":heavy_check_mark:":{"uc_base":"2714","uc_output":"2714-fe0f","uc_match":"2714-fe0f","uc_greedy":"2714","shortnames":[],"category":"symbols"},":heavy_multiplication_x:":{"uc_base":"2716","uc_output":"2716-fe0f","uc_match":"2716-fe0f","uc_greedy":"2716","shortnames":[],"category":"symbols"},":helmet_with_cross:":{"uc_base":"26d1","uc_output":"26d1-fe0f","uc_match":"26d1-fe0f","uc_greedy":"26d1","shortnames":[":helmet_with_white_cross:"],"category":"people"},":hotsprings:":{"uc_base":"2668","uc_output":"2668-fe0f","uc_match":"2668-fe0f","uc_greedy":"2668","shortnames":[],"category":"symbols"},":ice_skate:":{"uc_base":"26f8","uc_output":"26f8-fe0f","uc_match":"26f8-fe0f","uc_greedy":"26f8","shortnames":[],"category":"activity"},":information_source:":{"uc_base":"2139","uc_output":"2139-fe0f","uc_match":"2139-fe0f","uc_greedy":"2139","shortnames":[],"category":"symbols"},":interrobang:":{"uc_base":"2049","uc_output":"2049-fe0f","uc_match":"2049-fe0f","uc_greedy":"2049","shortnames":[],"category":"symbols"},":keyboard:":{"uc_base":"2328","uc_output":"2328-fe0f","uc_match":"2328-fe0f","uc_greedy":"2328","shortnames":[],"category":"objects"},":left_right_arrow:":{"uc_base":"2194","uc_output":"2194-fe0f","uc_match":"2194-fe0f","uc_greedy":"2194","shortnames":[],"category":"symbols"},":leftwards_arrow_with_hook:":{"uc_base":"21a9","uc_output":"21a9-fe0f","uc_match":"21a9-fe0f","uc_greedy":"21a9","shortnames":[],"category":"symbols"},":m:":{"uc_base":"24c2","uc_output":"24c2-fe0f","uc_match":"24c2-fe0f","uc_greedy":"24c2","shortnames":[],"category":"symbols"},":male_sign:":{"uc_base":"2642","uc_output":"2642-fe0f","uc_match":"2642-fe0f","uc_greedy":"2642","shortnames":[],"category":"people"},":medical_symbol:":{"uc_base":"2695","uc_output":"2695-fe0f","uc_match":"2695-fe0f","uc_greedy":"2695","shortnames":[],"category":"people"},":mountain:":{"uc_base":"26f0","uc_output":"26f0-fe0f","uc_match":"26f0-fe0f","uc_greedy":"26f0","shortnames":[],"category":"travel"},":orthodox_cross:":{"uc_base":"2626","uc_output":"2626-fe0f","uc_match":"2626-fe0f","uc_greedy":"2626","shortnames":[],"category":"symbols"},":part_alternation_mark:":{"uc_base":"303d","uc_output":"303d-fe0f","uc_match":"303d-fe0f","uc_greedy":"303d","shortnames":[],"category":"symbols"},":pause_button:":{"uc_base":"23f8","uc_output":"23f8-fe0f","uc_match":"23f8-fe0f","uc_greedy":"23f8","shortnames":[":double_vertical_bar:"],"category":"symbols"},":peace:":{"uc_base":"262e","uc_output":"262e-fe0f","uc_match":"262e-fe0f","uc_greedy":"262e","shortnames":[":peace_symbol:"],"category":"symbols"},":pencil2:":{"uc_base":"270f","uc_output":"270f-fe0f","uc_match":"270f-fe0f","uc_greedy":"270f","shortnames":[],"category":"objects"},":person_bouncing_ball:":{"uc_base":"26f9","uc_output":"26f9-fe0f","uc_match":"26f9-fe0f","uc_greedy":"26f9","shortnames":[":basketball_player:",":person_with_ball:"],"category":"activity"},":pick:":{"uc_base":"26cf","uc_output":"26cf-fe0f","uc_match":"26cf-fe0f","uc_greedy":"26cf","shortnames":[],"category":"objects"},":play_pause:":{"uc_base":"23ef","uc_output":"23ef-fe0f","uc_match":"23ef-fe0f","uc_greedy":"23ef","shortnames":[],"category":"symbols"},":point_up:":{"uc_base":"261d","uc_output":"261d-fe0f","uc_match":"261d-fe0f","uc_greedy":"261d","shortnames":[],"category":"people"},":pound_symbol:":{"uc_base":"0023","uc_output":"0023-fe0f","uc_match":"0023-fe0f","uc_greedy":"0023","shortnames":[],"category":"symbols"},":radioactive:":{"uc_base":"2622","uc_output":"2622-fe0f","uc_match":"2622-fe0f","uc_greedy":"2622","shortnames":[":radioactive_sign:"],"category":"symbols"},":record_button:":{"uc_base":"23fa","uc_output":"23fa-fe0f","uc_match":"23fa-fe0f","uc_greedy":"23fa","shortnames":[],"category":"symbols"},":recycle:":{"uc_base":"267b","uc_output":"267b-fe0f","uc_match":"267b-fe0f","uc_greedy":"267b","shortnames":[],"category":"symbols"},":registered:":{"uc_base":"00ae","uc_output":"00ae-fe0f","uc_match":"00ae-fe0f","uc_greedy":"00ae","shortnames":[],"category":"symbols"},":relaxed:":{"uc_base":"263a","uc_output":"263a-fe0f","uc_match":"263a-fe0f","uc_greedy":"263a","shortnames":[],"category":"people"},":scales:":{"uc_base":"2696","uc_output":"2696-fe0f","uc_match":"2696-fe0f","uc_greedy":"2696","shortnames":[],"category":"objects"},":scissors:":{"uc_base":"2702","uc_output":"2702-fe0f","uc_match":"2702-fe0f","uc_greedy":"2702","shortnames":[],"category":"objects"},":secret:":{"uc_base":"3299","uc_output":"3299-fe0f","uc_match":"3299-fe0f","uc_greedy":"3299","shortnames":[],"category":"symbols"},":shamrock:":{"uc_base":"2618","uc_output":"2618-fe0f","uc_match":"2618-fe0f","uc_greedy":"2618","shortnames":[],"category":"nature"},":shinto_shrine:":{"uc_base":"26e9","uc_output":"26e9-fe0f","uc_match":"26e9-fe0f","uc_greedy":"26e9","shortnames":[],"category":"travel"},":skier:":{"uc_base":"26f7","uc_output":"26f7-fe0f","uc_match":"26f7-fe0f","uc_greedy":"26f7","shortnames":[],"category":"activity"},":skull_crossbones:":{"uc_base":"2620","uc_output":"2620-fe0f","uc_match":"2620-fe0f","uc_greedy":"2620","shortnames":[":skull_and_crossbones:"],"category":"people"},":snowflake:":{"uc_base":"2744","uc_output":"2744-fe0f","uc_match":"2744-fe0f","uc_greedy":"2744","shortnames":[],"category":"nature"},":snowman2:":{"uc_base":"2603","uc_output":"2603-fe0f","uc_match":"2603-fe0f","uc_greedy":"2603","shortnames":[],"category":"nature"},":spades:":{"uc_base":"2660","uc_output":"2660-fe0f","uc_match":"2660-fe0f","uc_greedy":"2660","shortnames":[],"category":"symbols"},":sparkle:":{"uc_base":"2747","uc_output":"2747-fe0f","uc_match":"2747-fe0f","uc_greedy":"2747","shortnames":[],"category":"symbols"},":star_and_crescent:":{"uc_base":"262a","uc_output":"262a-fe0f","uc_match":"262a-fe0f","uc_greedy":"262a","shortnames":[],"category":"symbols"},":star_of_david:":{"uc_base":"2721","uc_output":"2721-fe0f","uc_match":"2721-fe0f","uc_greedy":"2721","shortnames":[],"category":"symbols"},":stop_button:":{"uc_base":"23f9","uc_output":"23f9-fe0f","uc_match":"23f9-fe0f","uc_greedy":"23f9","shortnames":[],"category":"symbols"},":stopwatch:":{"uc_base":"23f1","uc_output":"23f1-fe0f","uc_match":"23f1-fe0f","uc_greedy":"23f1","shortnames":[],"category":"objects"},":sunny:":{"uc_base":"2600","uc_output":"2600-fe0f","uc_match":"2600-fe0f","uc_greedy":"2600","shortnames":[],"category":"nature"},":telephone:":{"uc_base":"260e","uc_output":"260e-fe0f","uc_match":"260e-fe0f","uc_greedy":"260e","shortnames":[],"category":"objects"},":thunder_cloud_rain:":{"uc_base":"26c8","uc_output":"26c8-fe0f","uc_match":"26c8-fe0f","uc_greedy":"26c8","shortnames":[":thunder_cloud_and_rain:"],"category":"nature"},":timer:":{"uc_base":"23f2","uc_output":"23f2-fe0f","uc_match":"23f2-fe0f","uc_greedy":"23f2","shortnames":[":timer_clock:"],"category":"objects"},":tm:":{"uc_base":"2122","uc_output":"2122-fe0f","uc_match":"2122-fe0f","uc_greedy":"2122","shortnames":[],"category":"symbols"},":track_next:":{"uc_base":"23ed","uc_output":"23ed-fe0f","uc_match":"23ed-fe0f","uc_greedy":"23ed","shortnames":[":next_track:"],"category":"symbols"},":track_previous:":{"uc_base":"23ee","uc_output":"23ee-fe0f","uc_match":"23ee-fe0f","uc_greedy":"23ee","shortnames":[":previous_track:"],"category":"symbols"},":umbrella2:":{"uc_base":"2602","uc_output":"2602-fe0f","uc_match":"2602-fe0f","uc_greedy":"2602","shortnames":[],"category":"people"},":urn:":{"uc_base":"26b1","uc_output":"26b1-fe0f","uc_match":"26b1-fe0f","uc_greedy":"26b1","shortnames":[":funeral_urn:"],"category":"objects"},":v:":{"uc_base":"270c","uc_output":"270c-fe0f","uc_match":"270c-fe0f","uc_greedy":"270c","shortnames":[],"category":"people"},":warning:":{"uc_base":"26a0","uc_output":"26a0-fe0f","uc_match":"26a0-fe0f","uc_greedy":"26a0","shortnames":[],"category":"symbols"},":wavy_dash:":{"uc_base":"3030","uc_output":"3030-fe0f","uc_match":"3030-fe0f","uc_greedy":"3030","shortnames":[],"category":"symbols"},":wheel_of_dharma:":{"uc_base":"2638","uc_output":"2638-fe0f","uc_match":"2638-fe0f","uc_greedy":"2638","shortnames":[],"category":"symbols"},":white_medium_square:":{"uc_base":"25fb","uc_output":"25fb-fe0f","uc_match":"25fb-fe0f","uc_greedy":"25fb","shortnames":[],"category":"symbols"},":white_small_square:":{"uc_base":"25ab","uc_output":"25ab-fe0f","uc_match":"25ab-fe0f","uc_greedy":"25ab","shortnames":[],"category":"symbols"},":writing_hand:":{"uc_base":"270d","uc_output":"270d-fe0f","uc_match":"270d-fe0f","uc_greedy":"270d","shortnames":[],"category":"people"},":yin_yang:":{"uc_base":"262f","uc_output":"262f-fe0f","uc_match":"262f-fe0f","uc_greedy":"262f","shortnames":[],"category":"symbols"},":100:":{"uc_base":"1f4af","uc_output":"1f4af","uc_match":"1f4af","uc_greedy":"1f4af","shortnames":[],"category":"symbols"},":1234:":{"uc_base":"1f522","uc_output":"1f522","uc_match":"1f522","uc_greedy":"1f522","shortnames":[],"category":"symbols"},":8ball:":{"uc_base":"1f3b1","uc_output":"1f3b1","uc_match":"1f3b1","uc_greedy":"1f3b1","shortnames":[],"category":"activity"},":ab:":{"uc_base":"1f18e","uc_output":"1f18e","uc_match":"1f18e","uc_greedy":"1f18e","shortnames":[],"category":"symbols"},":abc:":{"uc_base":"1f524","uc_output":"1f524","uc_match":"1f524","uc_greedy":"1f524","shortnames":[],"category":"symbols"},":abcd:":{"uc_base":"1f521","uc_output":"1f521","uc_match":"1f521","uc_greedy":"1f521","shortnames":[],"category":"symbols"},":accept:":{"uc_base":"1f251","uc_output":"1f251","uc_match":"1f251","uc_greedy":"1f251","shortnames":[],"category":"symbols"},":adult:":{"uc_base":"1f9d1","uc_output":"1f9d1","uc_match":"1f9d1","uc_greedy":"1f9d1","shortnames":[],"category":"people"},":aerial_tramway:":{"uc_base":"1f6a1","uc_output":"1f6a1","uc_match":"1f6a1","uc_greedy":"1f6a1","shortnames":[],"category":"travel"},":airplane_arriving:":{"uc_base":"1f6ec","uc_output":"1f6ec","uc_match":"1f6ec","uc_greedy":"1f6ec","shortnames":[],"category":"travel"},":airplane_departure:":{"uc_base":"1f6eb","uc_output":"1f6eb","uc_match":"1f6eb","uc_greedy":"1f6eb","shortnames":[],"category":"travel"},":alien:":{"uc_base":"1f47d","uc_output":"1f47d","uc_match":"1f47d","uc_greedy":"1f47d","shortnames":[],"category":"people"},":ambulance:":{"uc_base":"1f691","uc_output":"1f691","uc_match":"1f691","uc_greedy":"1f691","shortnames":[],"category":"travel"},":amphora:":{"uc_base":"1f3fa","uc_output":"1f3fa","uc_match":"1f3fa","uc_greedy":"1f3fa","shortnames":[],"category":"objects"},":angel:":{"uc_base":"1f47c","uc_output":"1f47c","uc_match":"1f47c","uc_greedy":"1f47c","shortnames":[],"category":"people"},":anger:":{"uc_base":"1f4a2","uc_output":"1f4a2","uc_match":"1f4a2","uc_greedy":"1f4a2","shortnames":[],"category":"symbols"},":angry:":{"uc_base":"1f620","uc_output":"1f620","uc_match":"1f620","uc_greedy":"1f620","shortnames":[],"category":"people"},":anguished:":{"uc_base":"1f627","uc_output":"1f627","uc_match":"1f627","uc_greedy":"1f627","shortnames":[],"category":"people"},":ant:":{"uc_base":"1f41c","uc_output":"1f41c","uc_match":"1f41c","uc_greedy":"1f41c","shortnames":[],"category":"nature"},":apple:":{"uc_base":"1f34e","uc_output":"1f34e","uc_match":"1f34e","uc_greedy":"1f34e","shortnames":[],"category":"food"},":arrow_down_small:":{"uc_base":"1f53d","uc_output":"1f53d","uc_match":"1f53d","uc_greedy":"1f53d","shortnames":[],"category":"symbols"},":arrow_up_small:":{"uc_base":"1f53c","uc_output":"1f53c","uc_match":"1f53c","uc_greedy":"1f53c","shortnames":[],"category":"symbols"},":arrows_clockwise:":{"uc_base":"1f503","uc_output":"1f503","uc_match":"1f503","uc_greedy":"1f503","shortnames":[],"category":"symbols"},":arrows_counterclockwise:":{"uc_base":"1f504","uc_output":"1f504","uc_match":"1f504","uc_greedy":"1f504","shortnames":[],"category":"symbols"},":art:":{"uc_base":"1f3a8","uc_output":"1f3a8","uc_match":"1f3a8","uc_greedy":"1f3a8","shortnames":[],"category":"activity"},":articulated_lorry:":{"uc_base":"1f69b","uc_output":"1f69b","uc_match":"1f69b","uc_greedy":"1f69b","shortnames":[],"category":"travel"},":astonished:":{"uc_base":"1f632","uc_output":"1f632","uc_match":"1f632","uc_greedy":"1f632","shortnames":[],"category":"people"},":athletic_shoe:":{"uc_base":"1f45f","uc_output":"1f45f","uc_match":"1f45f","uc_greedy":"1f45f","shortnames":[],"category":"people"},":atm:":{"uc_base":"1f3e7","uc_output":"1f3e7","uc_match":"1f3e7","uc_greedy":"1f3e7","shortnames":[],"category":"symbols"},":avocado:":{"uc_base":"1f951","uc_output":"1f951","uc_match":"1f951","uc_greedy":"1f951","shortnames":[],"category":"food"},":baby:":{"uc_base":"1f476","uc_output":"1f476","uc_match":"1f476","uc_greedy":"1f476","shortnames":[],"category":"people"},":baby_bottle:":{"uc_base":"1f37c","uc_output":"1f37c","uc_match":"1f37c","uc_greedy":"1f37c","shortnames":[],"category":"food"},":baby_chick:":{"uc_base":"1f424","uc_output":"1f424","uc_match":"1f424","uc_greedy":"1f424","shortnames":[],"category":"nature"},":baby_symbol:":{"uc_base":"1f6bc","uc_output":"1f6bc","uc_match":"1f6bc","uc_greedy":"1f6bc","shortnames":[],"category":"symbols"},":back:":{"uc_base":"1f519","uc_output":"1f519","uc_match":"1f519","uc_greedy":"1f519","shortnames":[],"category":"symbols"},":bacon:":{"uc_base":"1f953","uc_output":"1f953","uc_match":"1f953","uc_greedy":"1f953","shortnames":[],"category":"food"},":badminton:":{"uc_base":"1f3f8","uc_output":"1f3f8","uc_match":"1f3f8","uc_greedy":"1f3f8","shortnames":[],"category":"activity"},":baggage_claim:":{"uc_base":"1f6c4","uc_output":"1f6c4","uc_match":"1f6c4","uc_greedy":"1f6c4","shortnames":[],"category":"symbols"},":balloon:":{"uc_base":"1f388","uc_output":"1f388","uc_match":"1f388","uc_greedy":"1f388","shortnames":[],"category":"objects"},":bamboo:":{"uc_base":"1f38d","uc_output":"1f38d","uc_match":"1f38d","uc_greedy":"1f38d","shortnames":[],"category":"nature"},":banana:":{"uc_base":"1f34c","uc_output":"1f34c","uc_match":"1f34c","uc_greedy":"1f34c","shortnames":[],"category":"food"},":bank:":{"uc_base":"1f3e6","uc_output":"1f3e6","uc_match":"1f3e6","uc_greedy":"1f3e6","shortnames":[],"category":"travel"},":bar_chart:":{"uc_base":"1f4ca","uc_output":"1f4ca","uc_match":"1f4ca","uc_greedy":"1f4ca","shortnames":[],"category":"objects"},":barber:":{"uc_base":"1f488","uc_output":"1f488","uc_match":"1f488","uc_greedy":"1f488","shortnames":[],"category":"objects"},":basketball:":{"uc_base":"1f3c0","uc_output":"1f3c0","uc_match":"1f3c0","uc_greedy":"1f3c0","shortnames":[],"category":"activity"},":bat:":{"uc_base":"1f987","uc_output":"1f987","uc_match":"1f987","uc_greedy":"1f987","shortnames":[],"category":"nature"},":bath:":{"uc_base":"1f6c0","uc_output":"1f6c0","uc_match":"1f6c0","uc_greedy":"1f6c0","shortnames":[],"category":"objects"},":bathtub:":{"uc_base":"1f6c1","uc_output":"1f6c1","uc_match":"1f6c1","uc_greedy":"1f6c1","shortnames":[],"category":"objects"},":battery:":{"uc_base":"1f50b","uc_output":"1f50b","uc_match":"1f50b","uc_greedy":"1f50b","shortnames":[],"category":"objects"},":bear:":{"uc_base":"1f43b","uc_output":"1f43b","uc_match":"1f43b","uc_greedy":"1f43b","shortnames":[],"category":"nature"},":bearded_person:":{"uc_base":"1f9d4","uc_output":"1f9d4","uc_match":"1f9d4","uc_greedy":"1f9d4","shortnames":[],"category":"people"},":bee:":{"uc_base":"1f41d","uc_output":"1f41d","uc_match":"1f41d","uc_greedy":"1f41d","shortnames":[],"category":"nature"},":beer:":{"uc_base":"1f37a","uc_output":"1f37a","uc_match":"1f37a","uc_greedy":"1f37a","shortnames":[],"category":"food"},":beers:":{"uc_base":"1f37b","uc_output":"1f37b","uc_match":"1f37b","uc_greedy":"1f37b","shortnames":[],"category":"food"},":beetle:":{"uc_base":"1f41e","uc_output":"1f41e","uc_match":"1f41e","uc_greedy":"1f41e","shortnames":[],"category":"nature"},":beginner:":{"uc_base":"1f530","uc_output":"1f530","uc_match":"1f530","uc_greedy":"1f530","shortnames":[],"category":"symbols"},":bell:":{"uc_base":"1f514","uc_output":"1f514","uc_match":"1f514","uc_greedy":"1f514","shortnames":[],"category":"symbols"},":bento:":{"uc_base":"1f371","uc_output":"1f371","uc_match":"1f371","uc_greedy":"1f371","shortnames":[],"category":"food"},":bike:":{"uc_base":"1f6b2","uc_output":"1f6b2","uc_match":"1f6b2","uc_greedy":"1f6b2","shortnames":[],"category":"travel"},":bikini:":{"uc_base":"1f459","uc_output":"1f459","uc_match":"1f459","uc_greedy":"1f459","shortnames":[],"category":"people"},":billed_cap:":{"uc_base":"1f9e2","uc_output":"1f9e2","uc_match":"1f9e2","uc_greedy":"1f9e2","shortnames":[],"category":"people"},":bird:":{"uc_base":"1f426","uc_output":"1f426","uc_match":"1f426","uc_greedy":"1f426","shortnames":[],"category":"nature"},":birthday:":{"uc_base":"1f382","uc_output":"1f382","uc_match":"1f382","uc_greedy":"1f382","shortnames":[],"category":"food"},":black_heart:":{"uc_base":"1f5a4","uc_output":"1f5a4","uc_match":"1f5a4","uc_greedy":"1f5a4","shortnames":[],"category":"symbols"},":black_joker:":{"uc_base":"1f0cf","uc_output":"1f0cf","uc_match":"1f0cf","uc_greedy":"1f0cf","shortnames":[],"category":"symbols"},":black_square_button:":{"uc_base":"1f532","uc_output":"1f532","uc_match":"1f532","uc_greedy":"1f532","shortnames":[],"category":"symbols"},":blond_haired_person:":{"uc_base":"1f471","uc_output":"1f471","uc_match":"1f471","uc_greedy":"1f471","shortnames":[":person_with_blond_hair:"],"category":"people"},":blossom:":{"uc_base":"1f33c","uc_output":"1f33c","uc_match":"1f33c","uc_greedy":"1f33c","shortnames":[],"category":"nature"},":blowfish:":{"uc_base":"1f421","uc_output":"1f421","uc_match":"1f421","uc_greedy":"1f421","shortnames":[],"category":"nature"},":blue_book:":{"uc_base":"1f4d8","uc_output":"1f4d8","uc_match":"1f4d8","uc_greedy":"1f4d8","shortnames":[],"category":"objects"},":blue_car:":{"uc_base":"1f699","uc_output":"1f699","uc_match":"1f699","uc_greedy":"1f699","shortnames":[],"category":"travel"},":blue_circle:":{"uc_base":"1f535","uc_output":"1f535","uc_match":"1f535","uc_greedy":"1f535","shortnames":[],"category":"symbols"},":blue_heart:":{"uc_base":"1f499","uc_output":"1f499","uc_match":"1f499","uc_greedy":"1f499","shortnames":[],"category":"symbols"},":blush:":{"uc_base":"1f60a","uc_output":"1f60a","uc_match":"1f60a","uc_greedy":"1f60a","shortnames":[],"category":"people"},":boar:":{"uc_base":"1f417","uc_output":"1f417","uc_match":"1f417","uc_greedy":"1f417","shortnames":[],"category":"nature"},":bomb:":{"uc_base":"1f4a3","uc_output":"1f4a3","uc_match":"1f4a3","uc_greedy":"1f4a3","shortnames":[],"category":"objects"},":book:":{"uc_base":"1f4d6","uc_output":"1f4d6","uc_match":"1f4d6","uc_greedy":"1f4d6","shortnames":[],"category":"objects"},":bookmark:":{"uc_base":"1f516","uc_output":"1f516","uc_match":"1f516","uc_greedy":"1f516","shortnames":[],"category":"objects"},":bookmark_tabs:":{"uc_base":"1f4d1","uc_output":"1f4d1","uc_match":"1f4d1","uc_greedy":"1f4d1","shortnames":[],"category":"objects"},":books:":{"uc_base":"1f4da","uc_output":"1f4da","uc_match":"1f4da","uc_greedy":"1f4da","shortnames":[],"category":"objects"},":boom:":{"uc_base":"1f4a5","uc_output":"1f4a5","uc_match":"1f4a5","uc_greedy":"1f4a5","shortnames":[],"category":"nature"},":boot:":{"uc_base":"1f462","uc_output":"1f462","uc_match":"1f462","uc_greedy":"1f462","shortnames":[],"category":"people"},":bouquet:":{"uc_base":"1f490","uc_output":"1f490","uc_match":"1f490","uc_greedy":"1f490","shortnames":[],"category":"nature"},":bow_and_arrow:":{"uc_base":"1f3f9","uc_output":"1f3f9","uc_match":"1f3f9","uc_greedy":"1f3f9","shortnames":[":archery:"],"category":"activity"},":bowl_with_spoon:":{"uc_base":"1f963","uc_output":"1f963","uc_match":"1f963","uc_greedy":"1f963","shortnames":[],"category":"food"},":bowling:":{"uc_base":"1f3b3","uc_output":"1f3b3","uc_match":"1f3b3","uc_greedy":"1f3b3","shortnames":[],"category":"activity"},":boxing_glove:":{"uc_base":"1f94a","uc_output":"1f94a","uc_match":"1f94a","uc_greedy":"1f94a","shortnames":[":boxing_gloves:"],"category":"activity"},":boy:":{"uc_base":"1f466","uc_output":"1f466","uc_match":"1f466","uc_greedy":"1f466","shortnames":[],"category":"people"},":brain:":{"uc_base":"1f9e0","uc_output":"1f9e0","uc_match":"1f9e0","uc_greedy":"1f9e0","shortnames":[],"category":"people"},":bread:":{"uc_base":"1f35e","uc_output":"1f35e","uc_match":"1f35e","uc_greedy":"1f35e","shortnames":[],"category":"food"},":breast_feeding:":{"uc_base":"1f931","uc_output":"1f931","uc_match":"1f931","uc_greedy":"1f931","shortnames":[],"category":"activity"},":bride_with_veil:":{"uc_base":"1f470","uc_output":"1f470","uc_match":"1f470","uc_greedy":"1f470","shortnames":[],"category":"people"},":bridge_at_night:":{"uc_base":"1f309","uc_output":"1f309","uc_match":"1f309","uc_greedy":"1f309","shortnames":[],"category":"travel"},":briefcase:":{"uc_base":"1f4bc","uc_output":"1f4bc","uc_match":"1f4bc","uc_greedy":"1f4bc","shortnames":[],"category":"people"},":broccoli:":{"uc_base":"1f966","uc_output":"1f966","uc_match":"1f966","uc_greedy":"1f966","shortnames":[],"category":"food"},":broken_heart:":{"uc_base":"1f494","uc_output":"1f494","uc_match":"1f494","uc_greedy":"1f494","shortnames":[],"category":"symbols"},":bug:":{"uc_base":"1f41b","uc_output":"1f41b","uc_match":"1f41b","uc_greedy":"1f41b","shortnames":[],"category":"nature"},":bulb:":{"uc_base":"1f4a1","uc_output":"1f4a1","uc_match":"1f4a1","uc_greedy":"1f4a1","shortnames":[],"category":"objects"},":bullettrain_front:":{"uc_base":"1f685","uc_output":"1f685","uc_match":"1f685","uc_greedy":"1f685","shortnames":[],"category":"travel"},":bullettrain_side:":{"uc_base":"1f684","uc_output":"1f684","uc_match":"1f684","uc_greedy":"1f684","shortnames":[],"category":"travel"},":burrito:":{"uc_base":"1f32f","uc_output":"1f32f","uc_match":"1f32f","uc_greedy":"1f32f","shortnames":[],"category":"food"},":bus:":{"uc_base":"1f68c","uc_output":"1f68c","uc_match":"1f68c","uc_greedy":"1f68c","shortnames":[],"category":"travel"},":busstop:":{"uc_base":"1f68f","uc_output":"1f68f","uc_match":"1f68f","uc_greedy":"1f68f","shortnames":[],"category":"travel"},":bust_in_silhouette:":{"uc_base":"1f464","uc_output":"1f464","uc_match":"1f464","uc_greedy":"1f464","shortnames":[],"category":"people"},":busts_in_silhouette:":{"uc_base":"1f465","uc_output":"1f465","uc_match":"1f465","uc_greedy":"1f465","shortnames":[],"category":"people"},":butterfly:":{"uc_base":"1f98b","uc_output":"1f98b","uc_match":"1f98b","uc_greedy":"1f98b","shortnames":[],"category":"nature"},":cactus:":{"uc_base":"1f335","uc_output":"1f335","uc_match":"1f335","uc_greedy":"1f335","shortnames":[],"category":"nature"},":cake:":{"uc_base":"1f370","uc_output":"1f370","uc_match":"1f370","uc_greedy":"1f370","shortnames":[],"category":"food"},":calendar:":{"uc_base":"1f4c6","uc_output":"1f4c6","uc_match":"1f4c6","uc_greedy":"1f4c6","shortnames":[],"category":"objects"},":call_me:":{"uc_base":"1f919","uc_output":"1f919","uc_match":"1f919","uc_greedy":"1f919","shortnames":[":call_me_hand:"],"category":"people"},":calling:":{"uc_base":"1f4f2","uc_output":"1f4f2","uc_match":"1f4f2","uc_greedy":"1f4f2","shortnames":[],"category":"objects"},":camel:":{"uc_base":"1f42b","uc_output":"1f42b","uc_match":"1f42b","uc_greedy":"1f42b","shortnames":[],"category":"nature"},":camera:":{"uc_base":"1f4f7","uc_output":"1f4f7","uc_match":"1f4f7","uc_greedy":"1f4f7","shortnames":[],"category":"objects"},":camera_with_flash:":{"uc_base":"1f4f8","uc_output":"1f4f8","uc_match":"1f4f8","uc_greedy":"1f4f8","shortnames":[],"category":"objects"},":candy:":{"uc_base":"1f36c","uc_output":"1f36c","uc_match":"1f36c","uc_greedy":"1f36c","shortnames":[],"category":"food"},":canned_food:":{"uc_base":"1f96b","uc_output":"1f96b","uc_match":"1f96b","uc_greedy":"1f96b","shortnames":[],"category":"food"},":canoe:":{"uc_base":"1f6f6","uc_output":"1f6f6","uc_match":"1f6f6","uc_greedy":"1f6f6","shortnames":[":kayak:"],"category":"travel"},":capital_abcd:":{"uc_base":"1f520","uc_output":"1f520","uc_match":"1f520","uc_greedy":"1f520","shortnames":[],"category":"symbols"},":card_index:":{"uc_base":"1f4c7","uc_output":"1f4c7","uc_match":"1f4c7","uc_greedy":"1f4c7","shortnames":[],"category":"objects"},":carousel_horse:":{"uc_base":"1f3a0","uc_output":"1f3a0","uc_match":"1f3a0","uc_greedy":"1f3a0","shortnames":[],"category":"travel"},":carrot:":{"uc_base":"1f955","uc_output":"1f955","uc_match":"1f955","uc_greedy":"1f955","shortnames":[],"category":"food"},":cat2:":{"uc_base":"1f408","uc_output":"1f408","uc_match":"1f408","uc_greedy":"1f408","shortnames":[],"category":"nature"},":cat:":{"uc_base":"1f431","uc_output":"1f431","uc_match":"1f431","uc_greedy":"1f431","shortnames":[],"category":"nature"},":cd:":{"uc_base":"1f4bf","uc_output":"1f4bf","uc_match":"1f4bf","uc_greedy":"1f4bf","shortnames":[],"category":"objects"},":champagne:":{"uc_base":"1f37e","uc_output":"1f37e","uc_match":"1f37e","uc_greedy":"1f37e","shortnames":[":bottle_with_popping_cork:"],"category":"food"},":champagne_glass:":{"uc_base":"1f942","uc_output":"1f942","uc_match":"1f942","uc_greedy":"1f942","shortnames":[":clinking_glass:"],"category":"food"},":chart:":{"uc_base":"1f4b9","uc_output":"1f4b9","uc_match":"1f4b9","uc_greedy":"1f4b9","shortnames":[],"category":"symbols"},":chart_with_downwards_trend:":{"uc_base":"1f4c9","uc_output":"1f4c9","uc_match":"1f4c9","uc_greedy":"1f4c9","shortnames":[],"category":"objects"},":chart_with_upwards_trend:":{"uc_base":"1f4c8","uc_output":"1f4c8","uc_match":"1f4c8","uc_greedy":"1f4c8","shortnames":[],"category":"objects"},":checkered_flag:":{"uc_base":"1f3c1","uc_output":"1f3c1","uc_match":"1f3c1","uc_greedy":"1f3c1","shortnames":[],"category":"flags"},":cheese:":{"uc_base":"1f9c0","uc_output":"1f9c0","uc_match":"1f9c0","uc_greedy":"1f9c0","shortnames":[":cheese_wedge:"],"category":"food"},":cherries:":{"uc_base":"1f352","uc_output":"1f352","uc_match":"1f352","uc_greedy":"1f352","shortnames":[],"category":"food"},":cherry_blossom:":{"uc_base":"1f338","uc_output":"1f338","uc_match":"1f338","uc_greedy":"1f338","shortnames":[],"category":"nature"},":chestnut:":{"uc_base":"1f330","uc_output":"1f330","uc_match":"1f330","uc_greedy":"1f330","shortnames":[],"category":"food"},":chicken:":{"uc_base":"1f414","uc_output":"1f414","uc_match":"1f414","uc_greedy":"1f414","shortnames":[],"category":"nature"},":child:":{"uc_base":"1f9d2","uc_output":"1f9d2","uc_match":"1f9d2","uc_greedy":"1f9d2","shortnames":[],"category":"people"},":children_crossing:":{"uc_base":"1f6b8","uc_output":"1f6b8","uc_match":"1f6b8","uc_greedy":"1f6b8","shortnames":[],"category":"symbols"},":chocolate_bar:":{"uc_base":"1f36b","uc_output":"1f36b","uc_match":"1f36b","uc_greedy":"1f36b","shortnames":[],"category":"food"},":chopsticks:":{"uc_base":"1f962","uc_output":"1f962","uc_match":"1f962","uc_greedy":"1f962","shortnames":[],"category":"food"},":christmas_tree:":{"uc_base":"1f384","uc_output":"1f384","uc_match":"1f384","uc_greedy":"1f384","shortnames":[],"category":"nature"},":cinema:":{"uc_base":"1f3a6","uc_output":"1f3a6","uc_match":"1f3a6","uc_greedy":"1f3a6","shortnames":[],"category":"symbols"},":circus_tent:":{"uc_base":"1f3aa","uc_output":"1f3aa","uc_match":"1f3aa","uc_greedy":"1f3aa","shortnames":[],"category":"activity"},":city_dusk:":{"uc_base":"1f306","uc_output":"1f306","uc_match":"1f306","uc_greedy":"1f306","shortnames":[],"category":"travel"},":city_sunset:":{"uc_base":"1f307","uc_output":"1f307","uc_match":"1f307","uc_greedy":"1f307","shortnames":[":city_sunrise:"],"category":"travel"},":cl:":{"uc_base":"1f191","uc_output":"1f191","uc_match":"1f191","uc_greedy":"1f191","shortnames":[],"category":"symbols"},":clap:":{"uc_base":"1f44f","uc_output":"1f44f","uc_match":"1f44f","uc_greedy":"1f44f","shortnames":[],"category":"people"},":clapper:":{"uc_base":"1f3ac","uc_output":"1f3ac","uc_match":"1f3ac","uc_greedy":"1f3ac","shortnames":[],"category":"activity"},":clipboard:":{"uc_base":"1f4cb","uc_output":"1f4cb","uc_match":"1f4cb","uc_greedy":"1f4cb","shortnames":[],"category":"objects"},":clock1030:":{"uc_base":"1f565","uc_output":"1f565","uc_match":"1f565","uc_greedy":"1f565","shortnames":[],"category":"symbols"},":clock10:":{"uc_base":"1f559","uc_output":"1f559","uc_match":"1f559","uc_greedy":"1f559","shortnames":[],"category":"symbols"},":clock1130:":{"uc_base":"1f566","uc_output":"1f566","uc_match":"1f566","uc_greedy":"1f566","shortnames":[],"category":"symbols"},":clock11:":{"uc_base":"1f55a","uc_output":"1f55a","uc_match":"1f55a","uc_greedy":"1f55a","shortnames":[],"category":"symbols"},":clock1230:":{"uc_base":"1f567","uc_output":"1f567","uc_match":"1f567","uc_greedy":"1f567","shortnames":[],"category":"symbols"},":clock12:":{"uc_base":"1f55b","uc_output":"1f55b","uc_match":"1f55b","uc_greedy":"1f55b","shortnames":[],"category":"symbols"},":clock130:":{"uc_base":"1f55c","uc_output":"1f55c","uc_match":"1f55c","uc_greedy":"1f55c","shortnames":[],"category":"symbols"},":clock1:":{"uc_base":"1f550","uc_output":"1f550","uc_match":"1f550","uc_greedy":"1f550","shortnames":[],"category":"symbols"},":clock230:":{"uc_base":"1f55d","uc_output":"1f55d","uc_match":"1f55d","uc_greedy":"1f55d","shortnames":[],"category":"symbols"},":clock2:":{"uc_base":"1f551","uc_output":"1f551","uc_match":"1f551","uc_greedy":"1f551","shortnames":[],"category":"symbols"},":clock330:":{"uc_base":"1f55e","uc_output":"1f55e","uc_match":"1f55e","uc_greedy":"1f55e","shortnames":[],"category":"symbols"},":clock3:":{"uc_base":"1f552","uc_output":"1f552","uc_match":"1f552","uc_greedy":"1f552","shortnames":[],"category":"symbols"},":clock430:":{"uc_base":"1f55f","uc_output":"1f55f","uc_match":"1f55f","uc_greedy":"1f55f","shortnames":[],"category":"symbols"},":clock4:":{"uc_base":"1f553","uc_output":"1f553","uc_match":"1f553","uc_greedy":"1f553","shortnames":[],"category":"symbols"},":clock530:":{"uc_base":"1f560","uc_output":"1f560","uc_match":"1f560","uc_greedy":"1f560","shortnames":[],"category":"symbols"},":clock5:":{"uc_base":"1f554","uc_output":"1f554","uc_match":"1f554","uc_greedy":"1f554","shortnames":[],"category":"symbols"},":clock630:":{"uc_base":"1f561","uc_output":"1f561","uc_match":"1f561","uc_greedy":"1f561","shortnames":[],"category":"symbols"},":clock6:":{"uc_base":"1f555","uc_output":"1f555","uc_match":"1f555","uc_greedy":"1f555","shortnames":[],"category":"symbols"},":clock730:":{"uc_base":"1f562","uc_output":"1f562","uc_match":"1f562","uc_greedy":"1f562","shortnames":[],"category":"symbols"},":clock7:":{"uc_base":"1f556","uc_output":"1f556","uc_match":"1f556","uc_greedy":"1f556","shortnames":[],"category":"symbols"},":clock830:":{"uc_base":"1f563","uc_output":"1f563","uc_match":"1f563","uc_greedy":"1f563","shortnames":[],"category":"symbols"},":clock8:":{"uc_base":"1f557","uc_output":"1f557","uc_match":"1f557","uc_greedy":"1f557","shortnames":[],"category":"symbols"},":clock930:":{"uc_base":"1f564","uc_output":"1f564","uc_match":"1f564","uc_greedy":"1f564","shortnames":[],"category":"symbols"},":clock9:":{"uc_base":"1f558","uc_output":"1f558","uc_match":"1f558","uc_greedy":"1f558","shortnames":[],"category":"symbols"},":closed_book:":{"uc_base":"1f4d5","uc_output":"1f4d5","uc_match":"1f4d5","uc_greedy":"1f4d5","shortnames":[],"category":"objects"},":closed_lock_with_key:":{"uc_base":"1f510","uc_output":"1f510","uc_match":"1f510","uc_greedy":"1f510","shortnames":[],"category":"objects"},":closed_umbrella:":{"uc_base":"1f302","uc_output":"1f302","uc_match":"1f302","uc_greedy":"1f302","shortnames":[],"category":"people"},":clown:":{"uc_base":"1f921","uc_output":"1f921","uc_match":"1f921","uc_greedy":"1f921","shortnames":[":clown_face:"],"category":"people"},":coat:":{"uc_base":"1f9e5","uc_output":"1f9e5","uc_match":"1f9e5","uc_greedy":"1f9e5","shortnames":[],"category":"people"},":cocktail:":{"uc_base":"1f378","uc_output":"1f378","uc_match":"1f378","uc_greedy":"1f378","shortnames":[],"category":"food"},":coconut:":{"uc_base":"1f965","uc_output":"1f965","uc_match":"1f965","uc_greedy":"1f965","shortnames":[],"category":"food"},":cold_sweat:":{"uc_base":"1f630","uc_output":"1f630","uc_match":"1f630","uc_greedy":"1f630","shortnames":[],"category":"people"},":computer:":{"uc_base":"1f4bb","uc_output":"1f4bb","uc_match":"1f4bb","uc_greedy":"1f4bb","shortnames":[],"category":"objects"},":confetti_ball:":{"uc_base":"1f38a","uc_output":"1f38a","uc_match":"1f38a","uc_greedy":"1f38a","shortnames":[],"category":"objects"},":confounded:":{"uc_base":"1f616","uc_output":"1f616","uc_match":"1f616","uc_greedy":"1f616","shortnames":[],"category":"people"},":confused:":{"uc_base":"1f615","uc_output":"1f615","uc_match":"1f615","uc_greedy":"1f615","shortnames":[],"category":"people"},":construction:":{"uc_base":"1f6a7","uc_output":"1f6a7","uc_match":"1f6a7","uc_greedy":"1f6a7","shortnames":[],"category":"travel"},":construction_worker:":{"uc_base":"1f477","uc_output":"1f477","uc_match":"1f477","uc_greedy":"1f477","shortnames":[],"category":"people"},":convenience_store:":{"uc_base":"1f3ea","uc_output":"1f3ea","uc_match":"1f3ea","uc_greedy":"1f3ea","shortnames":[],"category":"travel"},":cookie:":{"uc_base":"1f36a","uc_output":"1f36a","uc_match":"1f36a","uc_greedy":"1f36a","shortnames":[],"category":"food"},":cooking:":{"uc_base":"1f373","uc_output":"1f373","uc_match":"1f373","uc_greedy":"1f373","shortnames":[],"category":"food"},":cool:":{"uc_base":"1f192","uc_output":"1f192","uc_match":"1f192","uc_greedy":"1f192","shortnames":[],"category":"symbols"},":corn:":{"uc_base":"1f33d","uc_output":"1f33d","uc_match":"1f33d","uc_greedy":"1f33d","shortnames":[],"category":"food"},":couple:":{"uc_base":"1f46b","uc_output":"1f46b","uc_match":"1f46b","uc_greedy":"1f46b","shortnames":[],"category":"people"},":couple_with_heart:":{"uc_base":"1f491","uc_output":"1f491","uc_match":"1f491","uc_greedy":"1f491","shortnames":[],"category":"people"},":couplekiss:":{"uc_base":"1f48f","uc_output":"1f48f","uc_match":"1f48f","uc_greedy":"1f48f","shortnames":[],"category":"people"},":cow2:":{"uc_base":"1f404","uc_output":"1f404","uc_match":"1f404","uc_greedy":"1f404","shortnames":[],"category":"nature"},":cow:":{"uc_base":"1f42e","uc_output":"1f42e","uc_match":"1f42e","uc_greedy":"1f42e","shortnames":[],"category":"nature"},":cowboy:":{"uc_base":"1f920","uc_output":"1f920","uc_match":"1f920","uc_greedy":"1f920","shortnames":[":face_with_cowboy_hat:"],"category":"people"},":crab:":{"uc_base":"1f980","uc_output":"1f980","uc_match":"1f980","uc_greedy":"1f980","shortnames":[],"category":"nature"},":crazy_face:":{"uc_base":"1f92a","uc_output":"1f92a","uc_match":"1f92a","uc_greedy":"1f92a","shortnames":[],"category":"people"},":credit_card:":{"uc_base":"1f4b3","uc_output":"1f4b3","uc_match":"1f4b3","uc_greedy":"1f4b3","shortnames":[],"category":"objects"},":crescent_moon:":{"uc_base":"1f319","uc_output":"1f319","uc_match":"1f319","uc_greedy":"1f319","shortnames":[],"category":"nature"},":cricket:":{"uc_base":"1f997","uc_output":"1f997","uc_match":"1f997","uc_greedy":"1f997","shortnames":[],"category":"nature"},":cricket_game:":{"uc_base":"1f3cf","uc_output":"1f3cf","uc_match":"1f3cf","uc_greedy":"1f3cf","shortnames":[":cricket_bat_ball:"],"category":"activity"},":crocodile:":{"uc_base":"1f40a","uc_output":"1f40a","uc_match":"1f40a","uc_greedy":"1f40a","shortnames":[],"category":"nature"},":croissant:":{"uc_base":"1f950","uc_output":"1f950","uc_match":"1f950","uc_greedy":"1f950","shortnames":[],"category":"food"},":crossed_flags:":{"uc_base":"1f38c","uc_output":"1f38c","uc_match":"1f38c","uc_greedy":"1f38c","shortnames":[],"category":"flags"},":crown:":{"uc_base":"1f451","uc_output":"1f451","uc_match":"1f451","uc_greedy":"1f451","shortnames":[],"category":"people"},":cry:":{"uc_base":"1f622","uc_output":"1f622","uc_match":"1f622","uc_greedy":"1f622","shortnames":[],"category":"people"},":crying_cat_face:":{"uc_base":"1f63f","uc_output":"1f63f","uc_match":"1f63f","uc_greedy":"1f63f","shortnames":[],"category":"people"},":crystal_ball:":{"uc_base":"1f52e","uc_output":"1f52e","uc_match":"1f52e","uc_greedy":"1f52e","shortnames":[],"category":"objects"},":cucumber:":{"uc_base":"1f952","uc_output":"1f952","uc_match":"1f952","uc_greedy":"1f952","shortnames":[],"category":"food"},":cup_with_straw:":{"uc_base":"1f964","uc_output":"1f964","uc_match":"1f964","uc_greedy":"1f964","shortnames":[],"category":"food"},":cupid:":{"uc_base":"1f498","uc_output":"1f498","uc_match":"1f498","uc_greedy":"1f498","shortnames":[],"category":"symbols"},":curling_stone:":{"uc_base":"1f94c","uc_output":"1f94c","uc_match":"1f94c","uc_greedy":"1f94c","shortnames":[],"category":"activity"},":currency_exchange:":{"uc_base":"1f4b1","uc_output":"1f4b1","uc_match":"1f4b1","uc_greedy":"1f4b1","shortnames":[],"category":"symbols"},":curry:":{"uc_base":"1f35b","uc_output":"1f35b","uc_match":"1f35b","uc_greedy":"1f35b","shortnames":[],"category":"food"},":custard:":{"uc_base":"1f36e","uc_output":"1f36e","uc_match":"1f36e","uc_greedy":"1f36e","shortnames":[":pudding:",":flan:"],"category":"food"},":customs:":{"uc_base":"1f6c3","uc_output":"1f6c3","uc_match":"1f6c3","uc_greedy":"1f6c3","shortnames":[],"category":"symbols"},":cut_of_meat:":{"uc_base":"1f969","uc_output":"1f969","uc_match":"1f969","uc_greedy":"1f969","shortnames":[],"category":"food"},":cyclone:":{"uc_base":"1f300","uc_output":"1f300","uc_match":"1f300","uc_greedy":"1f300","shortnames":[],"category":"symbols"},":dancer:":{"uc_base":"1f483","uc_output":"1f483","uc_match":"1f483","uc_greedy":"1f483","shortnames":[],"category":"people"},":dango:":{"uc_base":"1f361","uc_output":"1f361","uc_match":"1f361","uc_greedy":"1f361","shortnames":[],"category":"food"},":dart:":{"uc_base":"1f3af","uc_output":"1f3af","uc_match":"1f3af","uc_greedy":"1f3af","shortnames":[],"category":"activity"},":dash:":{"uc_base":"1f4a8","uc_output":"1f4a8","uc_match":"1f4a8","uc_greedy":"1f4a8","shortnames":[],"category":"nature"},":date:":{"uc_base":"1f4c5","uc_output":"1f4c5","uc_match":"1f4c5","uc_greedy":"1f4c5","shortnames":[],"category":"objects"},":deciduous_tree:":{"uc_base":"1f333","uc_output":"1f333","uc_match":"1f333","uc_greedy":"1f333","shortnames":[],"category":"nature"},":deer:":{"uc_base":"1f98c","uc_output":"1f98c","uc_match":"1f98c","uc_greedy":"1f98c","shortnames":[],"category":"nature"},":department_store:":{"uc_base":"1f3ec","uc_output":"1f3ec","uc_match":"1f3ec","uc_greedy":"1f3ec","shortnames":[],"category":"travel"},":diamond_shape_with_a_dot_inside:":{"uc_base":"1f4a0","uc_output":"1f4a0","uc_match":"1f4a0","uc_greedy":"1f4a0","shortnames":[],"category":"symbols"},":disappointed:":{"uc_base":"1f61e","uc_output":"1f61e","uc_match":"1f61e","uc_greedy":"1f61e","shortnames":[],"category":"people"},":disappointed_relieved:":{"uc_base":"1f625","uc_output":"1f625","uc_match":"1f625","uc_greedy":"1f625","shortnames":[],"category":"people"},":dizzy:":{"uc_base":"1f4ab","uc_output":"1f4ab","uc_match":"1f4ab","uc_greedy":"1f4ab","shortnames":[],"category":"nature"},":dizzy_face:":{"uc_base":"1f635","uc_output":"1f635","uc_match":"1f635","uc_greedy":"1f635","shortnames":[],"category":"people"},":do_not_litter:":{"uc_base":"1f6af","uc_output":"1f6af","uc_match":"1f6af","uc_greedy":"1f6af","shortnames":[],"category":"symbols"},":dog2:":{"uc_base":"1f415","uc_output":"1f415","uc_match":"1f415","uc_greedy":"1f415","shortnames":[],"category":"nature"},":dog:":{"uc_base":"1f436","uc_output":"1f436","uc_match":"1f436","uc_greedy":"1f436","shortnames":[],"category":"nature"},":dollar:":{"uc_base":"1f4b5","uc_output":"1f4b5","uc_match":"1f4b5","uc_greedy":"1f4b5","shortnames":[],"category":"objects"},":dolls:":{"uc_base":"1f38e","uc_output":"1f38e","uc_match":"1f38e","uc_greedy":"1f38e","shortnames":[],"category":"objects"},":dolphin:":{"uc_base":"1f42c","uc_output":"1f42c","uc_match":"1f42c","uc_greedy":"1f42c","shortnames":[],"category":"nature"},":door:":{"uc_base":"1f6aa","uc_output":"1f6aa","uc_match":"1f6aa","uc_greedy":"1f6aa","shortnames":[],"category":"objects"},":doughnut:":{"uc_base":"1f369","uc_output":"1f369","uc_match":"1f369","uc_greedy":"1f369","shortnames":[],"category":"food"},":dragon:":{"uc_base":"1f409","uc_output":"1f409","uc_match":"1f409","uc_greedy":"1f409","shortnames":[],"category":"nature"},":dragon_face:":{"uc_base":"1f432","uc_output":"1f432","uc_match":"1f432","uc_greedy":"1f432","shortnames":[],"category":"nature"},":dress:":{"uc_base":"1f457","uc_output":"1f457","uc_match":"1f457","uc_greedy":"1f457","shortnames":[],"category":"people"},":dromedary_camel:":{"uc_base":"1f42a","uc_output":"1f42a","uc_match":"1f42a","uc_greedy":"1f42a","shortnames":[],"category":"nature"},":drooling_face:":{"uc_base":"1f924","uc_output":"1f924","uc_match":"1f924","uc_greedy":"1f924","shortnames":[":drool:"],"category":"people"},":droplet:":{"uc_base":"1f4a7","uc_output":"1f4a7","uc_match":"1f4a7","uc_greedy":"1f4a7","shortnames":[],"category":"nature"},":drum:":{"uc_base":"1f941","uc_output":"1f941","uc_match":"1f941","uc_greedy":"1f941","shortnames":[":drum_with_drumsticks:"],"category":"activity"},":duck:":{"uc_base":"1f986","uc_output":"1f986","uc_match":"1f986","uc_greedy":"1f986","shortnames":[],"category":"nature"},":dumpling:":{"uc_base":"1f95f","uc_output":"1f95f","uc_match":"1f95f","uc_greedy":"1f95f","shortnames":[],"category":"food"},":dvd:":{"uc_base":"1f4c0","uc_output":"1f4c0","uc_match":"1f4c0","uc_greedy":"1f4c0","shortnames":[],"category":"objects"},":e-mail:":{"uc_base":"1f4e7","uc_output":"1f4e7","uc_match":"1f4e7","uc_greedy":"1f4e7","shortnames":[":email:"],"category":"objects"},":eagle:":{"uc_base":"1f985","uc_output":"1f985","uc_match":"1f985","uc_greedy":"1f985","shortnames":[],"category":"nature"},":ear:":{"uc_base":"1f442","uc_output":"1f442","uc_match":"1f442","uc_greedy":"1f442","shortnames":[],"category":"people"},":ear_of_rice:":{"uc_base":"1f33e","uc_output":"1f33e","uc_match":"1f33e","uc_greedy":"1f33e","shortnames":[],"category":"nature"},":earth_africa:":{"uc_base":"1f30d","uc_output":"1f30d","uc_match":"1f30d","uc_greedy":"1f30d","shortnames":[],"category":"nature"},":earth_americas:":{"uc_base":"1f30e","uc_output":"1f30e","uc_match":"1f30e","uc_greedy":"1f30e","shortnames":[],"category":"nature"},":earth_asia:":{"uc_base":"1f30f","uc_output":"1f30f","uc_match":"1f30f","uc_greedy":"1f30f","shortnames":[],"category":"nature"},":egg:":{"uc_base":"1f95a","uc_output":"1f95a","uc_match":"1f95a","uc_greedy":"1f95a","shortnames":[],"category":"food"},":eggplant:":{"uc_base":"1f346","uc_output":"1f346","uc_match":"1f346","uc_greedy":"1f346","shortnames":[],"category":"food"},":electric_plug:":{"uc_base":"1f50c","uc_output":"1f50c","uc_match":"1f50c","uc_greedy":"1f50c","shortnames":[],"category":"objects"},":elephant:":{"uc_base":"1f418","uc_output":"1f418","uc_match":"1f418","uc_greedy":"1f418","shortnames":[],"category":"nature"},":elf:":{"uc_base":"1f9dd","uc_output":"1f9dd","uc_match":"1f9dd","uc_greedy":"1f9dd","shortnames":[],"category":"people"},":end:":{"uc_base":"1f51a","uc_output":"1f51a","uc_match":"1f51a","uc_greedy":"1f51a","shortnames":[],"category":"symbols"},":envelope_with_arrow:":{"uc_base":"1f4e9","uc_output":"1f4e9","uc_match":"1f4e9","uc_greedy":"1f4e9","shortnames":[],"category":"objects"},":euro:":{"uc_base":"1f4b6","uc_output":"1f4b6","uc_match":"1f4b6","uc_greedy":"1f4b6","shortnames":[],"category":"objects"},":european_castle:":{"uc_base":"1f3f0","uc_output":"1f3f0","uc_match":"1f3f0","uc_greedy":"1f3f0","shortnames":[],"category":"travel"},":european_post_office:":{"uc_base":"1f3e4","uc_output":"1f3e4","uc_match":"1f3e4","uc_greedy":"1f3e4","shortnames":[],"category":"travel"},":evergreen_tree:":{"uc_base":"1f332","uc_output":"1f332","uc_match":"1f332","uc_greedy":"1f332","shortnames":[],"category":"nature"},":exploding_head:":{"uc_base":"1f92f","uc_output":"1f92f","uc_match":"1f92f","uc_greedy":"1f92f","shortnames":[],"category":"people"},":expressionless:":{"uc_base":"1f611","uc_output":"1f611","uc_match":"1f611","uc_greedy":"1f611","shortnames":[],"category":"people"},":eyeglasses:":{"uc_base":"1f453","uc_output":"1f453","uc_match":"1f453","uc_greedy":"1f453","shortnames":[],"category":"people"},":eyes:":{"uc_base":"1f440","uc_output":"1f440","uc_match":"1f440","uc_greedy":"1f440","shortnames":[],"category":"people"},":face_vomiting:":{"uc_base":"1f92e","uc_output":"1f92e","uc_match":"1f92e","uc_greedy":"1f92e","shortnames":[],"category":"people"},":face_with_hand_over_mouth:":{"uc_base":"1f92d","uc_output":"1f92d","uc_match":"1f92d","uc_greedy":"1f92d","shortnames":[],"category":"people"},":face_with_monocle:":{"uc_base":"1f9d0","uc_output":"1f9d0","uc_match":"1f9d0","uc_greedy":"1f9d0","shortnames":[],"category":"people"},":face_with_raised_eyebrow:":{"uc_base":"1f928","uc_output":"1f928","uc_match":"1f928","uc_greedy":"1f928","shortnames":[],"category":"people"},":face_with_symbols_over_mouth:":{"uc_base":"1f92c","uc_output":"1f92c","uc_match":"1f92c","uc_greedy":"1f92c","shortnames":[],"category":"people"},":factory:":{"uc_base":"1f3ed","uc_output":"1f3ed","uc_match":"1f3ed","uc_greedy":"1f3ed","shortnames":[],"category":"travel"},":fairy:":{"uc_base":"1f9da","uc_output":"1f9da","uc_match":"1f9da","uc_greedy":"1f9da","shortnames":[],"category":"people"},":fallen_leaf:":{"uc_base":"1f342","uc_output":"1f342","uc_match":"1f342","uc_greedy":"1f342","shortnames":[],"category":"nature"},":family:":{"uc_base":"1f46a","uc_output":"1f46a","uc_match":"1f46a","uc_greedy":"1f46a","shortnames":[],"category":"people"},":fax:":{"uc_base":"1f4e0","uc_output":"1f4e0","uc_match":"1f4e0","uc_greedy":"1f4e0","shortnames":[],"category":"objects"},":fearful:":{"uc_base":"1f628","uc_output":"1f628","uc_match":"1f628","uc_greedy":"1f628","shortnames":[],"category":"people"},":feet:":{"uc_base":"1f43e","uc_output":"1f43e","uc_match":"1f43e","uc_greedy":"1f43e","shortnames":[":paw_prints:"],"category":"nature"},":ferris_wheel:":{"uc_base":"1f3a1","uc_output":"1f3a1","uc_match":"1f3a1","uc_greedy":"1f3a1","shortnames":[],"category":"travel"},":field_hockey:":{"uc_base":"1f3d1","uc_output":"1f3d1","uc_match":"1f3d1","uc_greedy":"1f3d1","shortnames":[],"category":"activity"},":file_folder:":{"uc_base":"1f4c1","uc_output":"1f4c1","uc_match":"1f4c1","uc_greedy":"1f4c1","shortnames":[],"category":"objects"},":fingers_crossed:":{"uc_base":"1f91e","uc_output":"1f91e","uc_match":"1f91e","uc_greedy":"1f91e","shortnames":[":hand_with_index_and_middle_finger_crossed:"],"category":"people"},":fire:":{"uc_base":"1f525","uc_output":"1f525","uc_match":"1f525","uc_greedy":"1f525","shortnames":[":flame:"],"category":"nature"},":fire_engine:":{"uc_base":"1f692","uc_output":"1f692","uc_match":"1f692","uc_greedy":"1f692","shortnames":[],"category":"travel"},":fireworks:":{"uc_base":"1f386","uc_output":"1f386","uc_match":"1f386","uc_greedy":"1f386","shortnames":[],"category":"travel"},":first_place:":{"uc_base":"1f947","uc_output":"1f947","uc_match":"1f947","uc_greedy":"1f947","shortnames":[":first_place_medal:"],"category":"activity"},":first_quarter_moon:":{"uc_base":"1f313","uc_output":"1f313","uc_match":"1f313","uc_greedy":"1f313","shortnames":[],"category":"nature"},":first_quarter_moon_with_face:":{"uc_base":"1f31b","uc_output":"1f31b","uc_match":"1f31b","uc_greedy":"1f31b","shortnames":[],"category":"nature"},":fish:":{"uc_base":"1f41f","uc_output":"1f41f","uc_match":"1f41f","uc_greedy":"1f41f","shortnames":[],"category":"nature"},":fish_cake:":{"uc_base":"1f365","uc_output":"1f365","uc_match":"1f365","uc_greedy":"1f365","shortnames":[],"category":"food"},":fishing_pole_and_fish:":{"uc_base":"1f3a3","uc_output":"1f3a3","uc_match":"1f3a3","uc_greedy":"1f3a3","shortnames":[],"category":"activity"},":flag_black:":{"uc_base":"1f3f4","uc_output":"1f3f4","uc_match":"1f3f4","uc_greedy":"1f3f4","shortnames":[":waving_black_flag:"],"category":"flags"},":flags:":{"uc_base":"1f38f","uc_output":"1f38f","uc_match":"1f38f","uc_greedy":"1f38f","shortnames":[],"category":"objects"},":flashlight:":{"uc_base":"1f526","uc_output":"1f526","uc_match":"1f526","uc_greedy":"1f526","shortnames":[],"category":"objects"},":floppy_disk:":{"uc_base":"1f4be","uc_output":"1f4be","uc_match":"1f4be","uc_greedy":"1f4be","shortnames":[],"category":"objects"},":flower_playing_cards:":{"uc_base":"1f3b4","uc_output":"1f3b4","uc_match":"1f3b4","uc_greedy":"1f3b4","shortnames":[],"category":"symbols"},":flushed:":{"uc_base":"1f633","uc_output":"1f633","uc_match":"1f633","uc_greedy":"1f633","shortnames":[],"category":"people"},":flying_saucer:":{"uc_base":"1f6f8","uc_output":"1f6f8","uc_match":"1f6f8","uc_greedy":"1f6f8","shortnames":[],"category":"travel"},":foggy:":{"uc_base":"1f301","uc_output":"1f301","uc_match":"1f301","uc_greedy":"1f301","shortnames":[],"category":"travel"},":football:":{"uc_base":"1f3c8","uc_output":"1f3c8","uc_match":"1f3c8","uc_greedy":"1f3c8","shortnames":[],"category":"activity"},":footprints:":{"uc_base":"1f463","uc_output":"1f463","uc_match":"1f463","uc_greedy":"1f463","shortnames":[],"category":"people"},":fork_and_knife:":{"uc_base":"1f374","uc_output":"1f374","uc_match":"1f374","uc_greedy":"1f374","shortnames":[],"category":"food"},":fortune_cookie:":{"uc_base":"1f960","uc_output":"1f960","uc_match":"1f960","uc_greedy":"1f960","shortnames":[],"category":"food"},":four_leaf_clover:":{"uc_base":"1f340","uc_output":"1f340","uc_match":"1f340","uc_greedy":"1f340","shortnames":[],"category":"nature"},":fox:":{"uc_base":"1f98a","uc_output":"1f98a","uc_match":"1f98a","uc_greedy":"1f98a","shortnames":[":fox_face:"],"category":"nature"},":free:":{"uc_base":"1f193","uc_output":"1f193","uc_match":"1f193","uc_greedy":"1f193","shortnames":[],"category":"symbols"},":french_bread:":{"uc_base":"1f956","uc_output":"1f956","uc_match":"1f956","uc_greedy":"1f956","shortnames":[":baguette_bread:"],"category":"food"},":fried_shrimp:":{"uc_base":"1f364","uc_output":"1f364","uc_match":"1f364","uc_greedy":"1f364","shortnames":[],"category":"food"},":fries:":{"uc_base":"1f35f","uc_output":"1f35f","uc_match":"1f35f","uc_greedy":"1f35f","shortnames":[],"category":"food"},":frog:":{"uc_base":"1f438","uc_output":"1f438","uc_match":"1f438","uc_greedy":"1f438","shortnames":[],"category":"nature"},":frowning:":{"uc_base":"1f626","uc_output":"1f626","uc_match":"1f626","uc_greedy":"1f626","shortnames":[],"category":"people"},":full_moon:":{"uc_base":"1f315","uc_output":"1f315","uc_match":"1f315","uc_greedy":"1f315","shortnames":[],"category":"nature"},":full_moon_with_face:":{"uc_base":"1f31d","uc_output":"1f31d","uc_match":"1f31d","uc_greedy":"1f31d","shortnames":[],"category":"nature"},":game_die:":{"uc_base":"1f3b2","uc_output":"1f3b2","uc_match":"1f3b2","uc_greedy":"1f3b2","shortnames":[],"category":"activity"},":gem:":{"uc_base":"1f48e","uc_output":"1f48e","uc_match":"1f48e","uc_greedy":"1f48e","shortnames":[],"category":"objects"},":genie:":{"uc_base":"1f9de","uc_output":"1f9de","uc_match":"1f9de","uc_greedy":"1f9de","shortnames":[],"category":"people"},":ghost:":{"uc_base":"1f47b","uc_output":"1f47b","uc_match":"1f47b","uc_greedy":"1f47b","shortnames":[],"category":"people"},":gift:":{"uc_base":"1f381","uc_output":"1f381","uc_match":"1f381","uc_greedy":"1f381","shortnames":[],"category":"objects"},":gift_heart:":{"uc_base":"1f49d","uc_output":"1f49d","uc_match":"1f49d","uc_greedy":"1f49d","shortnames":[],"category":"symbols"},":giraffe:":{"uc_base":"1f992","uc_output":"1f992","uc_match":"1f992","uc_greedy":"1f992","shortnames":[],"category":"nature"},":girl:":{"uc_base":"1f467","uc_output":"1f467","uc_match":"1f467","uc_greedy":"1f467","shortnames":[],"category":"people"},":globe_with_meridians:":{"uc_base":"1f310","uc_output":"1f310","uc_match":"1f310","uc_greedy":"1f310","shortnames":[],"category":"symbols"},":gloves:":{"uc_base":"1f9e4","uc_output":"1f9e4","uc_match":"1f9e4","uc_greedy":"1f9e4","shortnames":[],"category":"people"},":goal:":{"uc_base":"1f945","uc_output":"1f945","uc_match":"1f945","uc_greedy":"1f945","shortnames":[":goal_net:"],"category":"activity"},":goat:":{"uc_base":"1f410","uc_output":"1f410","uc_match":"1f410","uc_greedy":"1f410","shortnames":[],"category":"nature"},":gorilla:":{"uc_base":"1f98d","uc_output":"1f98d","uc_match":"1f98d","uc_greedy":"1f98d","shortnames":[],"category":"nature"},":grapes:":{"uc_base":"1f347","uc_output":"1f347","uc_match":"1f347","uc_greedy":"1f347","shortnames":[],"category":"food"},":green_apple:":{"uc_base":"1f34f","uc_output":"1f34f","uc_match":"1f34f","uc_greedy":"1f34f","shortnames":[],"category":"food"},":green_book:":{"uc_base":"1f4d7","uc_output":"1f4d7","uc_match":"1f4d7","uc_greedy":"1f4d7","shortnames":[],"category":"objects"},":green_heart:":{"uc_base":"1f49a","uc_output":"1f49a","uc_match":"1f49a","uc_greedy":"1f49a","shortnames":[],"category":"symbols"},":grimacing:":{"uc_base":"1f62c","uc_output":"1f62c","uc_match":"1f62c","uc_greedy":"1f62c","shortnames":[],"category":"people"},":grin:":{"uc_base":"1f601","uc_output":"1f601","uc_match":"1f601","uc_greedy":"1f601","shortnames":[],"category":"people"},":grinning:":{"uc_base":"1f600","uc_output":"1f600","uc_match":"1f600","uc_greedy":"1f600","shortnames":[],"category":"people"},":guard:":{"uc_base":"1f482","uc_output":"1f482","uc_match":"1f482","uc_greedy":"1f482","shortnames":[":guardsman:"],"category":"people"},":guitar:":{"uc_base":"1f3b8","uc_output":"1f3b8","uc_match":"1f3b8","uc_greedy":"1f3b8","shortnames":[],"category":"activity"},":gun:":{"uc_base":"1f52b","uc_output":"1f52b","uc_match":"1f52b","uc_greedy":"1f52b","shortnames":[],"category":"objects"},":hamburger:":{"uc_base":"1f354","uc_output":"1f354","uc_match":"1f354","uc_greedy":"1f354","shortnames":[],"category":"food"},":hammer:":{"uc_base":"1f528","uc_output":"1f528","uc_match":"1f528","uc_greedy":"1f528","shortnames":[],"category":"objects"},":hamster:":{"uc_base":"1f439","uc_output":"1f439","uc_match":"1f439","uc_greedy":"1f439","shortnames":[],"category":"nature"},":handbag:":{"uc_base":"1f45c","uc_output":"1f45c","uc_match":"1f45c","uc_greedy":"1f45c","shortnames":[],"category":"people"},":handshake:":{"uc_base":"1f91d","uc_output":"1f91d","uc_match":"1f91d","uc_greedy":"1f91d","shortnames":[":shaking_hands:"],"category":"people"},":hatched_chick:":{"uc_base":"1f425","uc_output":"1f425","uc_match":"1f425","uc_greedy":"1f425","shortnames":[],"category":"nature"},":hatching_chick:":{"uc_base":"1f423","uc_output":"1f423","uc_match":"1f423","uc_greedy":"1f423","shortnames":[],"category":"nature"},":head_bandage:":{"uc_base":"1f915","uc_output":"1f915","uc_match":"1f915","uc_greedy":"1f915","shortnames":[":face_with_head_bandage:"],"category":"people"},":headphones:":{"uc_base":"1f3a7","uc_output":"1f3a7","uc_match":"1f3a7","uc_greedy":"1f3a7","shortnames":[],"category":"activity"},":hear_no_evil:":{"uc_base":"1f649","uc_output":"1f649","uc_match":"1f649","uc_greedy":"1f649","shortnames":[],"category":"nature"},":heart_decoration:":{"uc_base":"1f49f","uc_output":"1f49f","uc_match":"1f49f","uc_greedy":"1f49f","shortnames":[],"category":"symbols"},":heart_eyes:":{"uc_base":"1f60d","uc_output":"1f60d","uc_match":"1f60d","uc_greedy":"1f60d","shortnames":[],"category":"people"},":heart_eyes_cat:":{"uc_base":"1f63b","uc_output":"1f63b","uc_match":"1f63b","uc_greedy":"1f63b","shortnames":[],"category":"people"},":heartbeat:":{"uc_base":"1f493","uc_output":"1f493","uc_match":"1f493","uc_greedy":"1f493","shortnames":[],"category":"symbols"},":heartpulse:":{"uc_base":"1f497","uc_output":"1f497","uc_match":"1f497","uc_greedy":"1f497","shortnames":[],"category":"symbols"},":heavy_dollar_sign:":{"uc_base":"1f4b2","uc_output":"1f4b2","uc_match":"1f4b2","uc_greedy":"1f4b2","shortnames":[],"category":"symbols"},":hedgehog:":{"uc_base":"1f994","uc_output":"1f994","uc_match":"1f994","uc_greedy":"1f994","shortnames":[],"category":"nature"},":helicopter:":{"uc_base":"1f681","uc_output":"1f681","uc_match":"1f681","uc_greedy":"1f681","shortnames":[],"category":"travel"},":herb:":{"uc_base":"1f33f","uc_output":"1f33f","uc_match":"1f33f","uc_greedy":"1f33f","shortnames":[],"category":"nature"},":hibiscus:":{"uc_base":"1f33a","uc_output":"1f33a","uc_match":"1f33a","uc_greedy":"1f33a","shortnames":[],"category":"nature"},":high_brightness:":{"uc_base":"1f506","uc_output":"1f506","uc_match":"1f506","uc_greedy":"1f506","shortnames":[],"category":"symbols"},":high_heel:":{"uc_base":"1f460","uc_output":"1f460","uc_match":"1f460","uc_greedy":"1f460","shortnames":[],"category":"people"},":hockey:":{"uc_base":"1f3d2","uc_output":"1f3d2","uc_match":"1f3d2","uc_greedy":"1f3d2","shortnames":[],"category":"activity"},":honey_pot:":{"uc_base":"1f36f","uc_output":"1f36f","uc_match":"1f36f","uc_greedy":"1f36f","shortnames":[],"category":"food"},":horse:":{"uc_base":"1f434","uc_output":"1f434","uc_match":"1f434","uc_greedy":"1f434","shortnames":[],"category":"nature"},":horse_racing:":{"uc_base":"1f3c7","uc_output":"1f3c7","uc_match":"1f3c7","uc_greedy":"1f3c7","shortnames":[],"category":"activity"},":hospital:":{"uc_base":"1f3e5","uc_output":"1f3e5","uc_match":"1f3e5","uc_greedy":"1f3e5","shortnames":[],"category":"travel"},":hotdog:":{"uc_base":"1f32d","uc_output":"1f32d","uc_match":"1f32d","uc_greedy":"1f32d","shortnames":[":hot_dog:"],"category":"food"},":hotel:":{"uc_base":"1f3e8","uc_output":"1f3e8","uc_match":"1f3e8","uc_greedy":"1f3e8","shortnames":[],"category":"travel"},":house:":{"uc_base":"1f3e0","uc_output":"1f3e0","uc_match":"1f3e0","uc_greedy":"1f3e0","shortnames":[],"category":"travel"},":house_with_garden:":{"uc_base":"1f3e1","uc_output":"1f3e1","uc_match":"1f3e1","uc_greedy":"1f3e1","shortnames":[],"category":"travel"},":hugging:":{"uc_base":"1f917","uc_output":"1f917","uc_match":"1f917","uc_greedy":"1f917","shortnames":[":hugging_face:"],"category":"people"},":hushed:":{"uc_base":"1f62f","uc_output":"1f62f","uc_match":"1f62f","uc_greedy":"1f62f","shortnames":[],"category":"people"},":ice_cream:":{"uc_base":"1f368","uc_output":"1f368","uc_match":"1f368","uc_greedy":"1f368","shortnames":[],"category":"food"},":icecream:":{"uc_base":"1f366","uc_output":"1f366","uc_match":"1f366","uc_greedy":"1f366","shortnames":[],"category":"food"},":id:":{"uc_base":"1f194","uc_output":"1f194","uc_match":"1f194","uc_greedy":"1f194","shortnames":[],"category":"symbols"},":ideograph_advantage:":{"uc_base":"1f250","uc_output":"1f250","uc_match":"1f250","uc_greedy":"1f250","shortnames":[],"category":"symbols"},":imp:":{"uc_base":"1f47f","uc_output":"1f47f","uc_match":"1f47f","uc_greedy":"1f47f","shortnames":[],"category":"people"},":inbox_tray:":{"uc_base":"1f4e5","uc_output":"1f4e5","uc_match":"1f4e5","uc_greedy":"1f4e5","shortnames":[],"category":"objects"},":incoming_envelope:":{"uc_base":"1f4e8","uc_output":"1f4e8","uc_match":"1f4e8","uc_greedy":"1f4e8","shortnames":[],"category":"objects"},":innocent:":{"uc_base":"1f607","uc_output":"1f607","uc_match":"1f607","uc_greedy":"1f607","shortnames":[],"category":"people"},":iphone:":{"uc_base":"1f4f1","uc_output":"1f4f1","uc_match":"1f4f1","uc_greedy":"1f4f1","shortnames":[],"category":"objects"},":izakaya_lantern:":{"uc_base":"1f3ee","uc_output":"1f3ee","uc_match":"1f3ee","uc_greedy":"1f3ee","shortnames":[],"category":"objects"},":jack_o_lantern:":{"uc_base":"1f383","uc_output":"1f383","uc_match":"1f383","uc_greedy":"1f383","shortnames":[],"category":"people"},":japan:":{"uc_base":"1f5fe","uc_output":"1f5fe","uc_match":"1f5fe","uc_greedy":"1f5fe","shortnames":[],"category":"travel"},":japanese_castle:":{"uc_base":"1f3ef","uc_output":"1f3ef","uc_match":"1f3ef","uc_greedy":"1f3ef","shortnames":[],"category":"travel"},":japanese_goblin:":{"uc_base":"1f47a","uc_output":"1f47a","uc_match":"1f47a","uc_greedy":"1f47a","shortnames":[],"category":"people"},":japanese_ogre:":{"uc_base":"1f479","uc_output":"1f479","uc_match":"1f479","uc_greedy":"1f479","shortnames":[],"category":"people"},":jeans:":{"uc_base":"1f456","uc_output":"1f456","uc_match":"1f456","uc_greedy":"1f456","shortnames":[],"category":"people"},":joy:":{"uc_base":"1f602","uc_output":"1f602","uc_match":"1f602","uc_greedy":"1f602","shortnames":[],"category":"people"},":joy_cat:":{"uc_base":"1f639","uc_output":"1f639","uc_match":"1f639","uc_greedy":"1f639","shortnames":[],"category":"people"},":kaaba:":{"uc_base":"1f54b","uc_output":"1f54b","uc_match":"1f54b","uc_greedy":"1f54b","shortnames":[],"category":"travel"},":key:":{"uc_base":"1f511","uc_output":"1f511","uc_match":"1f511","uc_greedy":"1f511","shortnames":[],"category":"objects"},":keycap_ten:":{"uc_base":"1f51f","uc_output":"1f51f","uc_match":"1f51f","uc_greedy":"1f51f","shortnames":[],"category":"symbols"},":kimono:":{"uc_base":"1f458","uc_output":"1f458","uc_match":"1f458","uc_greedy":"1f458","shortnames":[],"category":"people"},":kiss:":{"uc_base":"1f48b","uc_output":"1f48b","uc_match":"1f48b","uc_greedy":"1f48b","shortnames":[],"category":"people"},":kissing:":{"uc_base":"1f617","uc_output":"1f617","uc_match":"1f617","uc_greedy":"1f617","shortnames":[],"category":"people"},":kissing_cat:":{"uc_base":"1f63d","uc_output":"1f63d","uc_match":"1f63d","uc_greedy":"1f63d","shortnames":[],"category":"people"},":kissing_closed_eyes:":{"uc_base":"1f61a","uc_output":"1f61a","uc_match":"1f61a","uc_greedy":"1f61a","shortnames":[],"category":"people"},":kissing_heart:":{"uc_base":"1f618","uc_output":"1f618","uc_match":"1f618","uc_greedy":"1f618","shortnames":[],"category":"people"},":kissing_smiling_eyes:":{"uc_base":"1f619","uc_output":"1f619","uc_match":"1f619","uc_greedy":"1f619","shortnames":[],"category":"people"},":kiwi:":{"uc_base":"1f95d","uc_output":"1f95d","uc_match":"1f95d","uc_greedy":"1f95d","shortnames":[":kiwifruit:"],"category":"food"},":knife:":{"uc_base":"1f52a","uc_output":"1f52a","uc_match":"1f52a","uc_greedy":"1f52a","shortnames":[],"category":"objects"},":koala:":{"uc_base":"1f428","uc_output":"1f428","uc_match":"1f428","uc_greedy":"1f428","shortnames":[],"category":"nature"},":koko:":{"uc_base":"1f201","uc_output":"1f201","uc_match":"1f201","uc_greedy":"1f201","shortnames":[],"category":"symbols"},":large_blue_diamond:":{"uc_base":"1f537","uc_output":"1f537","uc_match":"1f537","uc_greedy":"1f537","shortnames":[],"category":"symbols"},":large_orange_diamond:":{"uc_base":"1f536","uc_output":"1f536","uc_match":"1f536","uc_greedy":"1f536","shortnames":[],"category":"symbols"},":last_quarter_moon:":{"uc_base":"1f317","uc_output":"1f317","uc_match":"1f317","uc_greedy":"1f317","shortnames":[],"category":"nature"},":last_quarter_moon_with_face:":{"uc_base":"1f31c","uc_output":"1f31c","uc_match":"1f31c","uc_greedy":"1f31c","shortnames":[],"category":"nature"},":laughing:":{"uc_base":"1f606","uc_output":"1f606","uc_match":"1f606","uc_greedy":"1f606","shortnames":[":satisfied:"],"category":"people"},":leaves:":{"uc_base":"1f343","uc_output":"1f343","uc_match":"1f343","uc_greedy":"1f343","shortnames":[],"category":"nature"},":ledger:":{"uc_base":"1f4d2","uc_output":"1f4d2","uc_match":"1f4d2","uc_greedy":"1f4d2","shortnames":[],"category":"objects"},":left_facing_fist:":{"uc_base":"1f91b","uc_output":"1f91b","uc_match":"1f91b","uc_greedy":"1f91b","shortnames":[":left_fist:"],"category":"people"},":left_luggage:":{"uc_base":"1f6c5","uc_output":"1f6c5","uc_match":"1f6c5","uc_greedy":"1f6c5","shortnames":[],"category":"symbols"},":lemon:":{"uc_base":"1f34b","uc_output":"1f34b","uc_match":"1f34b","uc_greedy":"1f34b","shortnames":[],"category":"food"},":leopard:":{"uc_base":"1f406","uc_output":"1f406","uc_match":"1f406","uc_greedy":"1f406","shortnames":[],"category":"nature"},":light_rail:":{"uc_base":"1f688","uc_output":"1f688","uc_match":"1f688","uc_greedy":"1f688","shortnames":[],"category":"travel"},":link:":{"uc_base":"1f517","uc_output":"1f517","uc_match":"1f517","uc_greedy":"1f517","shortnames":[],"category":"objects"},":lion_face:":{"uc_base":"1f981","uc_output":"1f981","uc_match":"1f981","uc_greedy":"1f981","shortnames":[":lion:"],"category":"nature"},":lips:":{"uc_base":"1f444","uc_output":"1f444","uc_match":"1f444","uc_greedy":"1f444","shortnames":[],"category":"people"},":lipstick:":{"uc_base":"1f484","uc_output":"1f484","uc_match":"1f484","uc_greedy":"1f484","shortnames":[],"category":"people"},":lizard:":{"uc_base":"1f98e","uc_output":"1f98e","uc_match":"1f98e","uc_greedy":"1f98e","shortnames":[],"category":"nature"},":lock:":{"uc_base":"1f512","uc_output":"1f512","uc_match":"1f512","uc_greedy":"1f512","shortnames":[],"category":"objects"},":lock_with_ink_pen:":{"uc_base":"1f50f","uc_output":"1f50f","uc_match":"1f50f","uc_greedy":"1f50f","shortnames":[],"category":"objects"},":lollipop:":{"uc_base":"1f36d","uc_output":"1f36d","uc_match":"1f36d","uc_greedy":"1f36d","shortnames":[],"category":"food"},":loud_sound:":{"uc_base":"1f50a","uc_output":"1f50a","uc_match":"1f50a","uc_greedy":"1f50a","shortnames":[],"category":"symbols"},":loudspeaker:":{"uc_base":"1f4e2","uc_output":"1f4e2","uc_match":"1f4e2","uc_greedy":"1f4e2","shortnames":[],"category":"symbols"},":love_hotel:":{"uc_base":"1f3e9","uc_output":"1f3e9","uc_match":"1f3e9","uc_greedy":"1f3e9","shortnames":[],"category":"travel"},":love_letter:":{"uc_base":"1f48c","uc_output":"1f48c","uc_match":"1f48c","uc_greedy":"1f48c","shortnames":[],"category":"objects"},":love_you_gesture:":{"uc_base":"1f91f","uc_output":"1f91f","uc_match":"1f91f","uc_greedy":"1f91f","shortnames":[],"category":"people"},":low_brightness:":{"uc_base":"1f505","uc_output":"1f505","uc_match":"1f505","uc_greedy":"1f505","shortnames":[],"category":"symbols"},":lying_face:":{"uc_base":"1f925","uc_output":"1f925","uc_match":"1f925","uc_greedy":"1f925","shortnames":[":liar:"],"category":"people"},":mag:":{"uc_base":"1f50d","uc_output":"1f50d","uc_match":"1f50d","uc_greedy":"1f50d","shortnames":[],"category":"objects"},":mag_right:":{"uc_base":"1f50e","uc_output":"1f50e","uc_match":"1f50e","uc_greedy":"1f50e","shortnames":[],"category":"objects"},":mage:":{"uc_base":"1f9d9","uc_output":"1f9d9","uc_match":"1f9d9","uc_greedy":"1f9d9","shortnames":[],"category":"people"},":mahjong:":{"uc_base":"1f004","uc_output":"1f004","uc_match":"1f004","uc_greedy":"1f004","shortnames":[],"category":"symbols"},":mailbox:":{"uc_base":"1f4eb","uc_output":"1f4eb","uc_match":"1f4eb","uc_greedy":"1f4eb","shortnames":[],"category":"objects"},":mailbox_closed:":{"uc_base":"1f4ea","uc_output":"1f4ea","uc_match":"1f4ea","uc_greedy":"1f4ea","shortnames":[],"category":"objects"},":mailbox_with_mail:":{"uc_base":"1f4ec","uc_output":"1f4ec","uc_match":"1f4ec","uc_greedy":"1f4ec","shortnames":[],"category":"objects"},":mailbox_with_no_mail:":{"uc_base":"1f4ed","uc_output":"1f4ed","uc_match":"1f4ed","uc_greedy":"1f4ed","shortnames":[],"category":"objects"},":man:":{"uc_base":"1f468","uc_output":"1f468","uc_match":"1f468","uc_greedy":"1f468","shortnames":[],"category":"people"},":man_dancing:":{"uc_base":"1f57a","uc_output":"1f57a","uc_match":"1f57a","uc_greedy":"1f57a","shortnames":[":male_dancer:"],"category":"people"},":man_in_tuxedo:":{"uc_base":"1f935","uc_output":"1f935","uc_match":"1f935","uc_greedy":"1f935","shortnames":[],"category":"people"},":man_with_chinese_cap:":{"uc_base":"1f472","uc_output":"1f472","uc_match":"1f472","uc_greedy":"1f472","shortnames":[":man_with_gua_pi_mao:"],"category":"people"},":mans_shoe:":{"uc_base":"1f45e","uc_output":"1f45e","uc_match":"1f45e","uc_greedy":"1f45e","shortnames":[],"category":"people"},":maple_leaf:":{"uc_base":"1f341","uc_output":"1f341","uc_match":"1f341","uc_greedy":"1f341","shortnames":[],"category":"nature"},":martial_arts_uniform:":{"uc_base":"1f94b","uc_output":"1f94b","uc_match":"1f94b","uc_greedy":"1f94b","shortnames":[":karate_uniform:"],"category":"activity"},":mask:":{"uc_base":"1f637","uc_output":"1f637","uc_match":"1f637","uc_greedy":"1f637","shortnames":[],"category":"people"},":meat_on_bone:":{"uc_base":"1f356","uc_output":"1f356","uc_match":"1f356","uc_greedy":"1f356","shortnames":[],"category":"food"},":medal:":{"uc_base":"1f3c5","uc_output":"1f3c5","uc_match":"1f3c5","uc_greedy":"1f3c5","shortnames":[":sports_medal:"],"category":"activity"},":mega:":{"uc_base":"1f4e3","uc_output":"1f4e3","uc_match":"1f4e3","uc_greedy":"1f4e3","shortnames":[],"category":"symbols"},":melon:":{"uc_base":"1f348","uc_output":"1f348","uc_match":"1f348","uc_greedy":"1f348","shortnames":[],"category":"food"},":menorah:":{"uc_base":"1f54e","uc_output":"1f54e","uc_match":"1f54e","uc_greedy":"1f54e","shortnames":[],"category":"symbols"},":mens:":{"uc_base":"1f6b9","uc_output":"1f6b9","uc_match":"1f6b9","uc_greedy":"1f6b9","shortnames":[],"category":"symbols"},":merperson:":{"uc_base":"1f9dc","uc_output":"1f9dc","uc_match":"1f9dc","uc_greedy":"1f9dc","shortnames":[],"category":"people"},":metal:":{"uc_base":"1f918","uc_output":"1f918","uc_match":"1f918","uc_greedy":"1f918","shortnames":[":sign_of_the_horns:"],"category":"people"},":metro:":{"uc_base":"1f687","uc_output":"1f687","uc_match":"1f687","uc_greedy":"1f687","shortnames":[],"category":"travel"},":microphone:":{"uc_base":"1f3a4","uc_output":"1f3a4","uc_match":"1f3a4","uc_greedy":"1f3a4","shortnames":[],"category":"activity"},":microscope:":{"uc_base":"1f52c","uc_output":"1f52c","uc_match":"1f52c","uc_greedy":"1f52c","shortnames":[],"category":"objects"},":middle_finger:":{"uc_base":"1f595","uc_output":"1f595","uc_match":"1f595","uc_greedy":"1f595","shortnames":[":reversed_hand_with_middle_finger_extended:"],"category":"people"},":milk:":{"uc_base":"1f95b","uc_output":"1f95b","uc_match":"1f95b","uc_greedy":"1f95b","shortnames":[":glass_of_milk:"],"category":"food"},":milky_way:":{"uc_base":"1f30c","uc_output":"1f30c","uc_match":"1f30c","uc_greedy":"1f30c","shortnames":[],"category":"travel"},":minibus:":{"uc_base":"1f690","uc_output":"1f690","uc_match":"1f690","uc_greedy":"1f690","shortnames":[],"category":"travel"},":minidisc:":{"uc_base":"1f4bd","uc_output":"1f4bd","uc_match":"1f4bd","uc_greedy":"1f4bd","shortnames":[],"category":"objects"},":mobile_phone_off:":{"uc_base":"1f4f4","uc_output":"1f4f4","uc_match":"1f4f4","uc_greedy":"1f4f4","shortnames":[],"category":"symbols"},":money_mouth:":{"uc_base":"1f911","uc_output":"1f911","uc_match":"1f911","uc_greedy":"1f911","shortnames":[":money_mouth_face:"],"category":"people"},":money_with_wings:":{"uc_base":"1f4b8","uc_output":"1f4b8","uc_match":"1f4b8","uc_greedy":"1f4b8","shortnames":[],"category":"objects"},":moneybag:":{"uc_base":"1f4b0","uc_output":"1f4b0","uc_match":"1f4b0","uc_greedy":"1f4b0","shortnames":[],"category":"objects"},":monkey:":{"uc_base":"1f412","uc_output":"1f412","uc_match":"1f412","uc_greedy":"1f412","shortnames":[],"category":"nature"},":monkey_face:":{"uc_base":"1f435","uc_output":"1f435","uc_match":"1f435","uc_greedy":"1f435","shortnames":[],"category":"nature"},":monorail:":{"uc_base":"1f69d","uc_output":"1f69d","uc_match":"1f69d","uc_greedy":"1f69d","shortnames":[],"category":"travel"},":mortar_board:":{"uc_base":"1f393","uc_output":"1f393","uc_match":"1f393","uc_greedy":"1f393","shortnames":[],"category":"people"},":mosque:":{"uc_base":"1f54c","uc_output":"1f54c","uc_match":"1f54c","uc_greedy":"1f54c","shortnames":[],"category":"travel"},":motor_scooter:":{"uc_base":"1f6f5","uc_output":"1f6f5","uc_match":"1f6f5","uc_greedy":"1f6f5","shortnames":[":motorbike:"],"category":"travel"},":mount_fuji:":{"uc_base":"1f5fb","uc_output":"1f5fb","uc_match":"1f5fb","uc_greedy":"1f5fb","shortnames":[],"category":"travel"},":mountain_cableway:":{"uc_base":"1f6a0","uc_output":"1f6a0","uc_match":"1f6a0","uc_greedy":"1f6a0","shortnames":[],"category":"travel"},":mountain_railway:":{"uc_base":"1f69e","uc_output":"1f69e","uc_match":"1f69e","uc_greedy":"1f69e","shortnames":[],"category":"travel"},":mouse2:":{"uc_base":"1f401","uc_output":"1f401","uc_match":"1f401","uc_greedy":"1f401","shortnames":[],"category":"nature"},":mouse:":{"uc_base":"1f42d","uc_output":"1f42d","uc_match":"1f42d","uc_greedy":"1f42d","shortnames":[],"category":"nature"},":movie_camera:":{"uc_base":"1f3a5","uc_output":"1f3a5","uc_match":"1f3a5","uc_greedy":"1f3a5","shortnames":[],"category":"objects"},":moyai:":{"uc_base":"1f5ff","uc_output":"1f5ff","uc_match":"1f5ff","uc_greedy":"1f5ff","shortnames":[],"category":"travel"},":mrs_claus:":{"uc_base":"1f936","uc_output":"1f936","uc_match":"1f936","uc_greedy":"1f936","shortnames":[":mother_christmas:"],"category":"people"},":muscle:":{"uc_base":"1f4aa","uc_output":"1f4aa","uc_match":"1f4aa","uc_greedy":"1f4aa","shortnames":[],"category":"people"},":mushroom:":{"uc_base":"1f344","uc_output":"1f344","uc_match":"1f344","uc_greedy":"1f344","shortnames":[],"category":"nature"},":musical_keyboard:":{"uc_base":"1f3b9","uc_output":"1f3b9","uc_match":"1f3b9","uc_greedy":"1f3b9","shortnames":[],"category":"activity"},":musical_note:":{"uc_base":"1f3b5","uc_output":"1f3b5","uc_match":"1f3b5","uc_greedy":"1f3b5","shortnames":[],"category":"symbols"},":musical_score:":{"uc_base":"1f3bc","uc_output":"1f3bc","uc_match":"1f3bc","uc_greedy":"1f3bc","shortnames":[],"category":"activity"},":mute:":{"uc_base":"1f507","uc_output":"1f507","uc_match":"1f507","uc_greedy":"1f507","shortnames":[],"category":"symbols"},":nail_care:":{"uc_base":"1f485","uc_output":"1f485","uc_match":"1f485","uc_greedy":"1f485","shortnames":[],"category":"people"},":name_badge:":{"uc_base":"1f4db","uc_output":"1f4db","uc_match":"1f4db","uc_greedy":"1f4db","shortnames":[],"category":"symbols"},":nauseated_face:":{"uc_base":"1f922","uc_output":"1f922","uc_match":"1f922","uc_greedy":"1f922","shortnames":[":sick:"],"category":"people"},":necktie:":{"uc_base":"1f454","uc_output":"1f454","uc_match":"1f454","uc_greedy":"1f454","shortnames":[],"category":"people"},":nerd:":{"uc_base":"1f913","uc_output":"1f913","uc_match":"1f913","uc_greedy":"1f913","shortnames":[":nerd_face:"],"category":"people"},":neutral_face:":{"uc_base":"1f610","uc_output":"1f610","uc_match":"1f610","uc_greedy":"1f610","shortnames":[],"category":"people"},":new:":{"uc_base":"1f195","uc_output":"1f195","uc_match":"1f195","uc_greedy":"1f195","shortnames":[],"category":"symbols"},":new_moon:":{"uc_base":"1f311","uc_output":"1f311","uc_match":"1f311","uc_greedy":"1f311","shortnames":[],"category":"nature"},":new_moon_with_face:":{"uc_base":"1f31a","uc_output":"1f31a","uc_match":"1f31a","uc_greedy":"1f31a","shortnames":[],"category":"nature"},":newspaper:":{"uc_base":"1f4f0","uc_output":"1f4f0","uc_match":"1f4f0","uc_greedy":"1f4f0","shortnames":[],"category":"objects"},":ng:":{"uc_base":"1f196","uc_output":"1f196","uc_match":"1f196","uc_greedy":"1f196","shortnames":[],"category":"symbols"},":night_with_stars:":{"uc_base":"1f303","uc_output":"1f303","uc_match":"1f303","uc_greedy":"1f303","shortnames":[],"category":"travel"},":no_bell:":{"uc_base":"1f515","uc_output":"1f515","uc_match":"1f515","uc_greedy":"1f515","shortnames":[],"category":"symbols"},":no_bicycles:":{"uc_base":"1f6b3","uc_output":"1f6b3","uc_match":"1f6b3","uc_greedy":"1f6b3","shortnames":[],"category":"symbols"},":no_entry_sign:":{"uc_base":"1f6ab","uc_output":"1f6ab","uc_match":"1f6ab","uc_greedy":"1f6ab","shortnames":[],"category":"symbols"},":no_mobile_phones:":{"uc_base":"1f4f5","uc_output":"1f4f5","uc_match":"1f4f5","uc_greedy":"1f4f5","shortnames":[],"category":"symbols"},":no_mouth:":{"uc_base":"1f636","uc_output":"1f636","uc_match":"1f636","uc_greedy":"1f636","shortnames":[],"category":"people"},":no_pedestrians:":{"uc_base":"1f6b7","uc_output":"1f6b7","uc_match":"1f6b7","uc_greedy":"1f6b7","shortnames":[],"category":"symbols"},":no_smoking:":{"uc_base":"1f6ad","uc_output":"1f6ad","uc_match":"1f6ad","uc_greedy":"1f6ad","shortnames":[],"category":"symbols"},":non-potable_water:":{"uc_base":"1f6b1","uc_output":"1f6b1","uc_match":"1f6b1","uc_greedy":"1f6b1","shortnames":[],"category":"symbols"},":nose:":{"uc_base":"1f443","uc_output":"1f443","uc_match":"1f443","uc_greedy":"1f443","shortnames":[],"category":"people"},":notebook:":{"uc_base":"1f4d3","uc_output":"1f4d3","uc_match":"1f4d3","uc_greedy":"1f4d3","shortnames":[],"category":"objects"},":notebook_with_decorative_cover:":{"uc_base":"1f4d4","uc_output":"1f4d4","uc_match":"1f4d4","uc_greedy":"1f4d4","shortnames":[],"category":"objects"},":notes:":{"uc_base":"1f3b6","uc_output":"1f3b6","uc_match":"1f3b6","uc_greedy":"1f3b6","shortnames":[],"category":"symbols"},":nut_and_bolt:":{"uc_base":"1f529","uc_output":"1f529","uc_match":"1f529","uc_greedy":"1f529","shortnames":[],"category":"objects"},":ocean:":{"uc_base":"1f30a","uc_output":"1f30a","uc_match":"1f30a","uc_greedy":"1f30a","shortnames":[],"category":"nature"},":octagonal_sign:":{"uc_base":"1f6d1","uc_output":"1f6d1","uc_match":"1f6d1","uc_greedy":"1f6d1","shortnames":[":stop_sign:"],"category":"symbols"},":octopus:":{"uc_base":"1f419","uc_output":"1f419","uc_match":"1f419","uc_greedy":"1f419","shortnames":[],"category":"nature"},":oden:":{"uc_base":"1f362","uc_output":"1f362","uc_match":"1f362","uc_greedy":"1f362","shortnames":[],"category":"food"},":office:":{"uc_base":"1f3e2","uc_output":"1f3e2","uc_match":"1f3e2","uc_greedy":"1f3e2","shortnames":[],"category":"travel"},":ok:":{"uc_base":"1f197","uc_output":"1f197","uc_match":"1f197","uc_greedy":"1f197","shortnames":[],"category":"symbols"},":ok_hand:":{"uc_base":"1f44c","uc_output":"1f44c","uc_match":"1f44c","uc_greedy":"1f44c","shortnames":[],"category":"people"},":older_adult:":{"uc_base":"1f9d3","uc_output":"1f9d3","uc_match":"1f9d3","uc_greedy":"1f9d3","shortnames":[],"category":"people"},":older_man:":{"uc_base":"1f474","uc_output":"1f474","uc_match":"1f474","uc_greedy":"1f474","shortnames":[],"category":"people"},":older_woman:":{"uc_base":"1f475","uc_output":"1f475","uc_match":"1f475","uc_greedy":"1f475","shortnames":[":grandma:"],"category":"people"},":on:":{"uc_base":"1f51b","uc_output":"1f51b","uc_match":"1f51b","uc_greedy":"1f51b","shortnames":[],"category":"symbols"},":oncoming_automobile:":{"uc_base":"1f698","uc_output":"1f698","uc_match":"1f698","uc_greedy":"1f698","shortnames":[],"category":"travel"},":oncoming_bus:":{"uc_base":"1f68d","uc_output":"1f68d","uc_match":"1f68d","uc_greedy":"1f68d","shortnames":[],"category":"travel"},":oncoming_police_car:":{"uc_base":"1f694","uc_output":"1f694","uc_match":"1f694","uc_greedy":"1f694","shortnames":[],"category":"travel"},":oncoming_taxi:":{"uc_base":"1f696","uc_output":"1f696","uc_match":"1f696","uc_greedy":"1f696","shortnames":[],"category":"travel"},":open_file_folder:":{"uc_base":"1f4c2","uc_output":"1f4c2","uc_match":"1f4c2","uc_greedy":"1f4c2","shortnames":[],"category":"objects"},":open_hands:":{"uc_base":"1f450","uc_output":"1f450","uc_match":"1f450","uc_greedy":"1f450","shortnames":[],"category":"people"},":open_mouth:":{"uc_base":"1f62e","uc_output":"1f62e","uc_match":"1f62e","uc_greedy":"1f62e","shortnames":[],"category":"people"},":orange_book:":{"uc_base":"1f4d9","uc_output":"1f4d9","uc_match":"1f4d9","uc_greedy":"1f4d9","shortnames":[],"category":"objects"},":orange_heart:":{"uc_base":"1f9e1","uc_output":"1f9e1","uc_match":"1f9e1","uc_greedy":"1f9e1","shortnames":[],"category":"objects"},":outbox_tray:":{"uc_base":"1f4e4","uc_output":"1f4e4","uc_match":"1f4e4","uc_greedy":"1f4e4","shortnames":[],"category":"objects"},":owl:":{"uc_base":"1f989","uc_output":"1f989","uc_match":"1f989","uc_greedy":"1f989","shortnames":[],"category":"nature"},":ox:":{"uc_base":"1f402","uc_output":"1f402","uc_match":"1f402","uc_greedy":"1f402","shortnames":[],"category":"nature"},":package:":{"uc_base":"1f4e6","uc_output":"1f4e6","uc_match":"1f4e6","uc_greedy":"1f4e6","shortnames":[],"category":"objects"},":page_facing_up:":{"uc_base":"1f4c4","uc_output":"1f4c4","uc_match":"1f4c4","uc_greedy":"1f4c4","shortnames":[],"category":"objects"},":page_with_curl:":{"uc_base":"1f4c3","uc_output":"1f4c3","uc_match":"1f4c3","uc_greedy":"1f4c3","shortnames":[],"category":"objects"},":pager:":{"uc_base":"1f4df","uc_output":"1f4df","uc_match":"1f4df","uc_greedy":"1f4df","shortnames":[],"category":"objects"},":palm_tree:":{"uc_base":"1f334","uc_output":"1f334","uc_match":"1f334","uc_greedy":"1f334","shortnames":[],"category":"nature"},":palms_up_together:":{"uc_base":"1f932","uc_output":"1f932","uc_match":"1f932","uc_greedy":"1f932","shortnames":[],"category":"people"},":pancakes:":{"uc_base":"1f95e","uc_output":"1f95e","uc_match":"1f95e","uc_greedy":"1f95e","shortnames":[],"category":"food"},":panda_face:":{"uc_base":"1f43c","uc_output":"1f43c","uc_match":"1f43c","uc_greedy":"1f43c","shortnames":[],"category":"nature"},":paperclip:":{"uc_base":"1f4ce","uc_output":"1f4ce","uc_match":"1f4ce","uc_greedy":"1f4ce","shortnames":[],"category":"objects"},":passport_control:":{"uc_base":"1f6c2","uc_output":"1f6c2","uc_match":"1f6c2","uc_greedy":"1f6c2","shortnames":[],"category":"symbols"},":peach:":{"uc_base":"1f351","uc_output":"1f351","uc_match":"1f351","uc_greedy":"1f351","shortnames":[],"category":"food"},":peanuts:":{"uc_base":"1f95c","uc_output":"1f95c","uc_match":"1f95c","uc_greedy":"1f95c","shortnames":[":shelled_peanut:"],"category":"food"},":pear:":{"uc_base":"1f350","uc_output":"1f350","uc_match":"1f350","uc_greedy":"1f350","shortnames":[],"category":"food"},":pencil:":{"uc_base":"1f4dd","uc_output":"1f4dd","uc_match":"1f4dd","uc_greedy":"1f4dd","shortnames":[":memo:"],"category":"objects"},":penguin:":{"uc_base":"1f427","uc_output":"1f427","uc_match":"1f427","uc_greedy":"1f427","shortnames":[],"category":"nature"},":pensive:":{"uc_base":"1f614","uc_output":"1f614","uc_match":"1f614","uc_greedy":"1f614","shortnames":[],"category":"people"},":people_with_bunny_ears_partying:":{"uc_base":"1f46f","uc_output":"1f46f","uc_match":"1f46f","uc_greedy":"1f46f","shortnames":[":dancers:"],"category":"people"},":people_wrestling:":{"uc_base":"1f93c","uc_output":"1f93c","uc_match":"1f93c","uc_greedy":"1f93c","shortnames":[":wrestlers:",":wrestling:"],"category":"activity"},":performing_arts:":{"uc_base":"1f3ad","uc_output":"1f3ad","uc_match":"1f3ad","uc_greedy":"1f3ad","shortnames":[],"category":"activity"},":persevere:":{"uc_base":"1f623","uc_output":"1f623","uc_match":"1f623","uc_greedy":"1f623","shortnames":[],"category":"people"},":person_biking:":{"uc_base":"1f6b4","uc_output":"1f6b4","uc_match":"1f6b4","uc_greedy":"1f6b4","shortnames":[":bicyclist:"],"category":"activity"},":person_bowing:":{"uc_base":"1f647","uc_output":"1f647","uc_match":"1f647","uc_greedy":"1f647","shortnames":[":bow:"],"category":"people"},":person_climbing:":{"uc_base":"1f9d7","uc_output":"1f9d7","uc_match":"1f9d7","uc_greedy":"1f9d7","shortnames":[],"category":"activity"},":person_doing_cartwheel:":{"uc_base":"1f938","uc_output":"1f938","uc_match":"1f938","uc_greedy":"1f938","shortnames":[":cartwheel:"],"category":"activity"},":person_facepalming:":{"uc_base":"1f926","uc_output":"1f926","uc_match":"1f926","uc_greedy":"1f926","shortnames":[":face_palm:",":facepalm:"],"category":"people"},":person_fencing:":{"uc_base":"1f93a","uc_output":"1f93a","uc_match":"1f93a","uc_greedy":"1f93a","shortnames":[":fencer:",":fencing:"],"category":"activity"},":person_frowning:":{"uc_base":"1f64d","uc_output":"1f64d","uc_match":"1f64d","uc_greedy":"1f64d","shortnames":[],"category":"people"},":person_gesturing_no:":{"uc_base":"1f645","uc_output":"1f645","uc_match":"1f645","uc_greedy":"1f645","shortnames":[":no_good:"],"category":"people"},":person_gesturing_ok:":{"uc_base":"1f646","uc_output":"1f646","uc_match":"1f646","uc_greedy":"1f646","shortnames":[":ok_woman:"],"category":"people"},":person_getting_haircut:":{"uc_base":"1f487","uc_output":"1f487","uc_match":"1f487","uc_greedy":"1f487","shortnames":[":haircut:"],"category":"people"},":person_getting_massage:":{"uc_base":"1f486","uc_output":"1f486","uc_match":"1f486","uc_greedy":"1f486","shortnames":[":massage:"],"category":"people"},":person_in_lotus_position:":{"uc_base":"1f9d8","uc_output":"1f9d8","uc_match":"1f9d8","uc_greedy":"1f9d8","shortnames":[],"category":"activity"},":person_in_steamy_room:":{"uc_base":"1f9d6","uc_output":"1f9d6","uc_match":"1f9d6","uc_greedy":"1f9d6","shortnames":[],"category":"activity"},":person_juggling:":{"uc_base":"1f939","uc_output":"1f939","uc_match":"1f939","uc_greedy":"1f939","shortnames":[":juggling:",":juggler:"],"category":"activity"},":person_mountain_biking:":{"uc_base":"1f6b5","uc_output":"1f6b5","uc_match":"1f6b5","uc_greedy":"1f6b5","shortnames":[":mountain_bicyclist:"],"category":"activity"},":person_playing_handball:":{"uc_base":"1f93e","uc_output":"1f93e","uc_match":"1f93e","uc_greedy":"1f93e","shortnames":[":handball:"],"category":"activity"},":person_playing_water_polo:":{"uc_base":"1f93d","uc_output":"1f93d","uc_match":"1f93d","uc_greedy":"1f93d","shortnames":[":water_polo:"],"category":"activity"},":person_pouting:":{"uc_base":"1f64e","uc_output":"1f64e","uc_match":"1f64e","uc_greedy":"1f64e","shortnames":[":person_with_pouting_face:"],"category":"people"},":person_raising_hand:":{"uc_base":"1f64b","uc_output":"1f64b","uc_match":"1f64b","uc_greedy":"1f64b","shortnames":[":raising_hand:"],"category":"people"},":person_rowing_boat:":{"uc_base":"1f6a3","uc_output":"1f6a3","uc_match":"1f6a3","uc_greedy":"1f6a3","shortnames":[":rowboat:"],"category":"activity"},":person_running:":{"uc_base":"1f3c3","uc_output":"1f3c3","uc_match":"1f3c3","uc_greedy":"1f3c3","shortnames":[":runner:"],"category":"people"},":person_shrugging:":{"uc_base":"1f937","uc_output":"1f937","uc_match":"1f937","uc_greedy":"1f937","shortnames":[":shrug:"],"category":"people"},":person_surfing:":{"uc_base":"1f3c4","uc_output":"1f3c4","uc_match":"1f3c4","uc_greedy":"1f3c4","shortnames":[":surfer:"],"category":"activity"},":person_swimming:":{"uc_base":"1f3ca","uc_output":"1f3ca","uc_match":"1f3ca","uc_greedy":"1f3ca","shortnames":[":swimmer:"],"category":"activity"},":person_tipping_hand:":{"uc_base":"1f481","uc_output":"1f481","uc_match":"1f481","uc_greedy":"1f481","shortnames":[":information_desk_person:"],"category":"people"},":person_walking:":{"uc_base":"1f6b6","uc_output":"1f6b6","uc_match":"1f6b6","uc_greedy":"1f6b6","shortnames":[":walking:"],"category":"people"},":person_wearing_turban:":{"uc_base":"1f473","uc_output":"1f473","uc_match":"1f473","uc_greedy":"1f473","shortnames":[":man_with_turban:"],"category":"people"},":pie:":{"uc_base":"1f967","uc_output":"1f967","uc_match":"1f967","uc_greedy":"1f967","shortnames":[],"category":"food"},":pig2:":{"uc_base":"1f416","uc_output":"1f416","uc_match":"1f416","uc_greedy":"1f416","shortnames":[],"category":"nature"},":pig:":{"uc_base":"1f437","uc_output":"1f437","uc_match":"1f437","uc_greedy":"1f437","shortnames":[],"category":"nature"},":pig_nose:":{"uc_base":"1f43d","uc_output":"1f43d","uc_match":"1f43d","uc_greedy":"1f43d","shortnames":[],"category":"nature"},":pill:":{"uc_base":"1f48a","uc_output":"1f48a","uc_match":"1f48a","uc_greedy":"1f48a","shortnames":[],"category":"objects"},":pineapple:":{"uc_base":"1f34d","uc_output":"1f34d","uc_match":"1f34d","uc_greedy":"1f34d","shortnames":[],"category":"food"},":ping_pong:":{"uc_base":"1f3d3","uc_output":"1f3d3","uc_match":"1f3d3","uc_greedy":"1f3d3","shortnames":[":table_tennis:"],"category":"activity"},":pizza:":{"uc_base":"1f355","uc_output":"1f355","uc_match":"1f355","uc_greedy":"1f355","shortnames":[],"category":"food"},":place_of_worship:":{"uc_base":"1f6d0","uc_output":"1f6d0","uc_match":"1f6d0","uc_greedy":"1f6d0","shortnames":[":worship_symbol:"],"category":"symbols"},":point_down:":{"uc_base":"1f447","uc_output":"1f447","uc_match":"1f447","uc_greedy":"1f447","shortnames":[],"category":"people"},":point_left:":{"uc_base":"1f448","uc_output":"1f448","uc_match":"1f448","uc_greedy":"1f448","shortnames":[],"category":"people"},":point_right:":{"uc_base":"1f449","uc_output":"1f449","uc_match":"1f449","uc_greedy":"1f449","shortnames":[],"category":"people"},":point_up_2:":{"uc_base":"1f446","uc_output":"1f446","uc_match":"1f446","uc_greedy":"1f446","shortnames":[],"category":"people"},":police_car:":{"uc_base":"1f693","uc_output":"1f693","uc_match":"1f693","uc_greedy":"1f693","shortnames":[],"category":"travel"},":police_officer:":{"uc_base":"1f46e","uc_output":"1f46e","uc_match":"1f46e","uc_greedy":"1f46e","shortnames":[":cop:"],"category":"people"},":poodle:":{"uc_base":"1f429","uc_output":"1f429","uc_match":"1f429","uc_greedy":"1f429","shortnames":[],"category":"nature"},":poop:":{"uc_base":"1f4a9","uc_output":"1f4a9","uc_match":"1f4a9","uc_greedy":"1f4a9","shortnames":[":shit:",":hankey:",":poo:"],"category":"people"},":popcorn:":{"uc_base":"1f37f","uc_output":"1f37f","uc_match":"1f37f","uc_greedy":"1f37f","shortnames":[],"category":"food"},":post_office:":{"uc_base":"1f3e3","uc_output":"1f3e3","uc_match":"1f3e3","uc_greedy":"1f3e3","shortnames":[],"category":"travel"},":postal_horn:":{"uc_base":"1f4ef","uc_output":"1f4ef","uc_match":"1f4ef","uc_greedy":"1f4ef","shortnames":[],"category":"objects"},":postbox:":{"uc_base":"1f4ee","uc_output":"1f4ee","uc_match":"1f4ee","uc_greedy":"1f4ee","shortnames":[],"category":"objects"},":potable_water:":{"uc_base":"1f6b0","uc_output":"1f6b0","uc_match":"1f6b0","uc_greedy":"1f6b0","shortnames":[],"category":"objects"},":potato:":{"uc_base":"1f954","uc_output":"1f954","uc_match":"1f954","uc_greedy":"1f954","shortnames":[],"category":"food"},":pouch:":{"uc_base":"1f45d","uc_output":"1f45d","uc_match":"1f45d","uc_greedy":"1f45d","shortnames":[],"category":"people"},":poultry_leg:":{"uc_base":"1f357","uc_output":"1f357","uc_match":"1f357","uc_greedy":"1f357","shortnames":[],"category":"food"},":pound:":{"uc_base":"1f4b7","uc_output":"1f4b7","uc_match":"1f4b7","uc_greedy":"1f4b7","shortnames":[],"category":"objects"},":pouting_cat:":{"uc_base":"1f63e","uc_output":"1f63e","uc_match":"1f63e","uc_greedy":"1f63e","shortnames":[],"category":"people"},":pray:":{"uc_base":"1f64f","uc_output":"1f64f","uc_match":"1f64f","uc_greedy":"1f64f","shortnames":[],"category":"people"},":prayer_beads:":{"uc_base":"1f4ff","uc_output":"1f4ff","uc_match":"1f4ff","uc_greedy":"1f4ff","shortnames":[],"category":"objects"},":pregnant_woman:":{"uc_base":"1f930","uc_output":"1f930","uc_match":"1f930","uc_greedy":"1f930","shortnames":[":expecting_woman:"],"category":"people"},":pretzel:":{"uc_base":"1f968","uc_output":"1f968","uc_match":"1f968","uc_greedy":"1f968","shortnames":[],"category":"food"},":prince:":{"uc_base":"1f934","uc_output":"1f934","uc_match":"1f934","uc_greedy":"1f934","shortnames":[],"category":"people"},":princess:":{"uc_base":"1f478","uc_output":"1f478","uc_match":"1f478","uc_greedy":"1f478","shortnames":[],"category":"people"},":punch:":{"uc_base":"1f44a","uc_output":"1f44a","uc_match":"1f44a","uc_greedy":"1f44a","shortnames":[],"category":"people"},":purple_heart:":{"uc_base":"1f49c","uc_output":"1f49c","uc_match":"1f49c","uc_greedy":"1f49c","shortnames":[],"category":"symbols"},":purse:":{"uc_base":"1f45b","uc_output":"1f45b","uc_match":"1f45b","uc_greedy":"1f45b","shortnames":[],"category":"people"},":pushpin:":{"uc_base":"1f4cc","uc_output":"1f4cc","uc_match":"1f4cc","uc_greedy":"1f4cc","shortnames":[],"category":"objects"},":put_litter_in_its_place:":{"uc_base":"1f6ae","uc_output":"1f6ae","uc_match":"1f6ae","uc_greedy":"1f6ae","shortnames":[],"category":"symbols"},":rabbit2:":{"uc_base":"1f407","uc_output":"1f407","uc_match":"1f407","uc_greedy":"1f407","shortnames":[],"category":"nature"},":rabbit:":{"uc_base":"1f430","uc_output":"1f430","uc_match":"1f430","uc_greedy":"1f430","shortnames":[],"category":"nature"},":racehorse:":{"uc_base":"1f40e","uc_output":"1f40e","uc_match":"1f40e","uc_greedy":"1f40e","shortnames":[],"category":"nature"},":radio:":{"uc_base":"1f4fb","uc_output":"1f4fb","uc_match":"1f4fb","uc_greedy":"1f4fb","shortnames":[],"category":"objects"},":radio_button:":{"uc_base":"1f518","uc_output":"1f518","uc_match":"1f518","uc_greedy":"1f518","shortnames":[],"category":"symbols"},":rage:":{"uc_base":"1f621","uc_output":"1f621","uc_match":"1f621","uc_greedy":"1f621","shortnames":[],"category":"people"},":railway_car:":{"uc_base":"1f683","uc_output":"1f683","uc_match":"1f683","uc_greedy":"1f683","shortnames":[],"category":"travel"},":rainbow:":{"uc_base":"1f308","uc_output":"1f308","uc_match":"1f308","uc_greedy":"1f308","shortnames":[],"category":"nature"},":raised_back_of_hand:":{"uc_base":"1f91a","uc_output":"1f91a","uc_match":"1f91a","uc_greedy":"1f91a","shortnames":[":back_of_hand:"],"category":"people"},":raised_hands:":{"uc_base":"1f64c","uc_output":"1f64c","uc_match":"1f64c","uc_greedy":"1f64c","shortnames":[],"category":"people"},":ram:":{"uc_base":"1f40f","uc_output":"1f40f","uc_match":"1f40f","uc_greedy":"1f40f","shortnames":[],"category":"nature"},":ramen:":{"uc_base":"1f35c","uc_output":"1f35c","uc_match":"1f35c","uc_greedy":"1f35c","shortnames":[],"category":"food"},":rat:":{"uc_base":"1f400","uc_output":"1f400","uc_match":"1f400","uc_greedy":"1f400","shortnames":[],"category":"nature"},":red_car:":{"uc_base":"1f697","uc_output":"1f697","uc_match":"1f697","uc_greedy":"1f697","shortnames":[],"category":"travel"},":red_circle:":{"uc_base":"1f534","uc_output":"1f534","uc_match":"1f534","uc_greedy":"1f534","shortnames":[],"category":"symbols"},":regional_indicator_a:":{"uc_base":"1f1e6","uc_output":"1f1e6","uc_match":"1f1e6","uc_greedy":"1f1e6","shortnames":[],"category":"regional"},":regional_indicator_b:":{"uc_base":"1f1e7","uc_output":"1f1e7","uc_match":"1f1e7","uc_greedy":"1f1e7","shortnames":[],"category":"regional"},":regional_indicator_c:":{"uc_base":"1f1e8","uc_output":"1f1e8","uc_match":"1f1e8","uc_greedy":"1f1e8","shortnames":[],"category":"regional"},":regional_indicator_d:":{"uc_base":"1f1e9","uc_output":"1f1e9","uc_match":"1f1e9","uc_greedy":"1f1e9","shortnames":[],"category":"regional"},":regional_indicator_e:":{"uc_base":"1f1ea","uc_output":"1f1ea","uc_match":"1f1ea","uc_greedy":"1f1ea","shortnames":[],"category":"regional"},":regional_indicator_f:":{"uc_base":"1f1eb","uc_output":"1f1eb","uc_match":"1f1eb","uc_greedy":"1f1eb","shortnames":[],"category":"regional"},":regional_indicator_g:":{"uc_base":"1f1ec","uc_output":"1f1ec","uc_match":"1f1ec","uc_greedy":"1f1ec","shortnames":[],"category":"regional"},":regional_indicator_h:":{"uc_base":"1f1ed","uc_output":"1f1ed","uc_match":"1f1ed","uc_greedy":"1f1ed","shortnames":[],"category":"regional"},":regional_indicator_i:":{"uc_base":"1f1ee","uc_output":"1f1ee","uc_match":"1f1ee","uc_greedy":"1f1ee","shortnames":[],"category":"regional"},":regional_indicator_j:":{"uc_base":"1f1ef","uc_output":"1f1ef","uc_match":"1f1ef","uc_greedy":"1f1ef","shortnames":[],"category":"regional"},":regional_indicator_k:":{"uc_base":"1f1f0","uc_output":"1f1f0","uc_match":"1f1f0","uc_greedy":"1f1f0","shortnames":[],"category":"regional"},":regional_indicator_l:":{"uc_base":"1f1f1","uc_output":"1f1f1","uc_match":"1f1f1","uc_greedy":"1f1f1","shortnames":[],"category":"regional"},":regional_indicator_m:":{"uc_base":"1f1f2","uc_output":"1f1f2","uc_match":"1f1f2","uc_greedy":"1f1f2","shortnames":[],"category":"regional"},":regional_indicator_n:":{"uc_base":"1f1f3","uc_output":"1f1f3","uc_match":"1f1f3","uc_greedy":"1f1f3","shortnames":[],"category":"regional"},":regional_indicator_o:":{"uc_base":"1f1f4","uc_output":"1f1f4","uc_match":"1f1f4","uc_greedy":"1f1f4","shortnames":[],"category":"regional"},":regional_indicator_p:":{"uc_base":"1f1f5","uc_output":"1f1f5","uc_match":"1f1f5","uc_greedy":"1f1f5","shortnames":[],"category":"regional"},":regional_indicator_q:":{"uc_base":"1f1f6","uc_output":"1f1f6","uc_match":"1f1f6","uc_greedy":"1f1f6","shortnames":[],"category":"regional"},":regional_indicator_r:":{"uc_base":"1f1f7","uc_output":"1f1f7","uc_match":"1f1f7","uc_greedy":"1f1f7","shortnames":[],"category":"regional"},":regional_indicator_s:":{"uc_base":"1f1f8","uc_output":"1f1f8","uc_match":"1f1f8","uc_greedy":"1f1f8","shortnames":[],"category":"regional"},":regional_indicator_t:":{"uc_base":"1f1f9","uc_output":"1f1f9","uc_match":"1f1f9","uc_greedy":"1f1f9","shortnames":[],"category":"regional"},":regional_indicator_u:":{"uc_base":"1f1fa","uc_output":"1f1fa","uc_match":"1f1fa","uc_greedy":"1f1fa","shortnames":[],"category":"regional"},":regional_indicator_v:":{"uc_base":"1f1fb","uc_output":"1f1fb","uc_match":"1f1fb","uc_greedy":"1f1fb","shortnames":[],"category":"regional"},":regional_indicator_w:":{"uc_base":"1f1fc","uc_output":"1f1fc","uc_match":"1f1fc","uc_greedy":"1f1fc","shortnames":[],"category":"regional"},":regional_indicator_x:":{"uc_base":"1f1fd","uc_output":"1f1fd","uc_match":"1f1fd","uc_greedy":"1f1fd","shortnames":[],"category":"regional"},":regional_indicator_y:":{"uc_base":"1f1fe","uc_output":"1f1fe","uc_match":"1f1fe","uc_greedy":"1f1fe","shortnames":[],"category":"regional"},":regional_indicator_z:":{"uc_base":"1f1ff","uc_output":"1f1ff","uc_match":"1f1ff","uc_greedy":"1f1ff","shortnames":[],"category":"regional"},":relieved:":{"uc_base":"1f60c","uc_output":"1f60c","uc_match":"1f60c","uc_greedy":"1f60c","shortnames":[],"category":"people"},":repeat:":{"uc_base":"1f501","uc_output":"1f501","uc_match":"1f501","uc_greedy":"1f501","shortnames":[],"category":"symbols"},":repeat_one:":{"uc_base":"1f502","uc_output":"1f502","uc_match":"1f502","uc_greedy":"1f502","shortnames":[],"category":"symbols"},":restroom:":{"uc_base":"1f6bb","uc_output":"1f6bb","uc_match":"1f6bb","uc_greedy":"1f6bb","shortnames":[],"category":"symbols"},":revolving_hearts:":{"uc_base":"1f49e","uc_output":"1f49e","uc_match":"1f49e","uc_greedy":"1f49e","shortnames":[],"category":"symbols"},":rhino:":{"uc_base":"1f98f","uc_output":"1f98f","uc_match":"1f98f","uc_greedy":"1f98f","shortnames":[":rhinoceros:"],"category":"nature"},":ribbon:":{"uc_base":"1f380","uc_output":"1f380","uc_match":"1f380","uc_greedy":"1f380","shortnames":[],"category":"objects"},":rice:":{"uc_base":"1f35a","uc_output":"1f35a","uc_match":"1f35a","uc_greedy":"1f35a","shortnames":[],"category":"food"},":rice_ball:":{"uc_base":"1f359","uc_output":"1f359","uc_match":"1f359","uc_greedy":"1f359","shortnames":[],"category":"food"},":rice_cracker:":{"uc_base":"1f358","uc_output":"1f358","uc_match":"1f358","uc_greedy":"1f358","shortnames":[],"category":"food"},":rice_scene:":{"uc_base":"1f391","uc_output":"1f391","uc_match":"1f391","uc_greedy":"1f391","shortnames":[],"category":"travel"},":right_facing_fist:":{"uc_base":"1f91c","uc_output":"1f91c","uc_match":"1f91c","uc_greedy":"1f91c","shortnames":[":right_fist:"],"category":"people"},":ring:":{"uc_base":"1f48d","uc_output":"1f48d","uc_match":"1f48d","uc_greedy":"1f48d","shortnames":[],"category":"people"},":robot:":{"uc_base":"1f916","uc_output":"1f916","uc_match":"1f916","uc_greedy":"1f916","shortnames":[":robot_face:"],"category":"people"},":rocket:":{"uc_base":"1f680","uc_output":"1f680","uc_match":"1f680","uc_greedy":"1f680","shortnames":[],"category":"travel"},":rofl:":{"uc_base":"1f923","uc_output":"1f923","uc_match":"1f923","uc_greedy":"1f923","shortnames":[":rolling_on_the_floor_laughing:"],"category":"people"},":roller_coaster:":{"uc_base":"1f3a2","uc_output":"1f3a2","uc_match":"1f3a2","uc_greedy":"1f3a2","shortnames":[],"category":"travel"},":rolling_eyes:":{"uc_base":"1f644","uc_output":"1f644","uc_match":"1f644","uc_greedy":"1f644","shortnames":[":face_with_rolling_eyes:"],"category":"people"},":rooster:":{"uc_base":"1f413","uc_output":"1f413","uc_match":"1f413","uc_greedy":"1f413","shortnames":[],"category":"nature"},":rose:":{"uc_base":"1f339","uc_output":"1f339","uc_match":"1f339","uc_greedy":"1f339","shortnames":[],"category":"nature"},":rotating_light:":{"uc_base":"1f6a8","uc_output":"1f6a8","uc_match":"1f6a8","uc_greedy":"1f6a8","shortnames":[],"category":"travel"},":round_pushpin:":{"uc_base":"1f4cd","uc_output":"1f4cd","uc_match":"1f4cd","uc_greedy":"1f4cd","shortnames":[],"category":"objects"},":rugby_football:":{"uc_base":"1f3c9","uc_output":"1f3c9","uc_match":"1f3c9","uc_greedy":"1f3c9","shortnames":[],"category":"activity"},":running_shirt_with_sash:":{"uc_base":"1f3bd","uc_output":"1f3bd","uc_match":"1f3bd","uc_greedy":"1f3bd","shortnames":[],"category":"activity"},":sake:":{"uc_base":"1f376","uc_output":"1f376","uc_match":"1f376","uc_greedy":"1f376","shortnames":[],"category":"food"},":salad:":{"uc_base":"1f957","uc_output":"1f957","uc_match":"1f957","uc_greedy":"1f957","shortnames":[":green_salad:"],"category":"food"},":sandal:":{"uc_base":"1f461","uc_output":"1f461","uc_match":"1f461","uc_greedy":"1f461","shortnames":[],"category":"people"},":sandwich:":{"uc_base":"1f96a","uc_output":"1f96a","uc_match":"1f96a","uc_greedy":"1f96a","shortnames":[],"category":"food"},":santa:":{"uc_base":"1f385","uc_output":"1f385","uc_match":"1f385","uc_greedy":"1f385","shortnames":[],"category":"people"},":satellite:":{"uc_base":"1f4e1","uc_output":"1f4e1","uc_match":"1f4e1","uc_greedy":"1f4e1","shortnames":[],"category":"objects"},":sauropod:":{"uc_base":"1f995","uc_output":"1f995","uc_match":"1f995","uc_greedy":"1f995","shortnames":[],"category":"nature"},":saxophone:":{"uc_base":"1f3b7","uc_output":"1f3b7","uc_match":"1f3b7","uc_greedy":"1f3b7","shortnames":[],"category":"activity"},":scarf:":{"uc_base":"1f9e3","uc_output":"1f9e3","uc_match":"1f9e3","uc_greedy":"1f9e3","shortnames":[],"category":"people"},":school:":{"uc_base":"1f3eb","uc_output":"1f3eb","uc_match":"1f3eb","uc_greedy":"1f3eb","shortnames":[],"category":"travel"},":school_satchel:":{"uc_base":"1f392","uc_output":"1f392","uc_match":"1f392","uc_greedy":"1f392","shortnames":[],"category":"people"},":scooter:":{"uc_base":"1f6f4","uc_output":"1f6f4","uc_match":"1f6f4","uc_greedy":"1f6f4","shortnames":[],"category":"travel"},":scorpion:":{"uc_base":"1f982","uc_output":"1f982","uc_match":"1f982","uc_greedy":"1f982","shortnames":[],"category":"nature"},":scream:":{"uc_base":"1f631","uc_output":"1f631","uc_match":"1f631","uc_greedy":"1f631","shortnames":[],"category":"people"},":scream_cat:":{"uc_base":"1f640","uc_output":"1f640","uc_match":"1f640","uc_greedy":"1f640","shortnames":[],"category":"people"},":scroll:":{"uc_base":"1f4dc","uc_output":"1f4dc","uc_match":"1f4dc","uc_greedy":"1f4dc","shortnames":[],"category":"objects"},":seat:":{"uc_base":"1f4ba","uc_output":"1f4ba","uc_match":"1f4ba","uc_greedy":"1f4ba","shortnames":[],"category":"travel"},":second_place:":{"uc_base":"1f948","uc_output":"1f948","uc_match":"1f948","uc_greedy":"1f948","shortnames":[":second_place_medal:"],"category":"activity"},":see_no_evil:":{"uc_base":"1f648","uc_output":"1f648","uc_match":"1f648","uc_greedy":"1f648","shortnames":[],"category":"nature"},":seedling:":{"uc_base":"1f331","uc_output":"1f331","uc_match":"1f331","uc_greedy":"1f331","shortnames":[],"category":"nature"},":selfie:":{"uc_base":"1f933","uc_output":"1f933","uc_match":"1f933","uc_greedy":"1f933","shortnames":[],"category":"people"},":shallow_pan_of_food:":{"uc_base":"1f958","uc_output":"1f958","uc_match":"1f958","uc_greedy":"1f958","shortnames":[":paella:"],"category":"food"},":shark:":{"uc_base":"1f988","uc_output":"1f988","uc_match":"1f988","uc_greedy":"1f988","shortnames":[],"category":"nature"},":shaved_ice:":{"uc_base":"1f367","uc_output":"1f367","uc_match":"1f367","uc_greedy":"1f367","shortnames":[],"category":"food"},":sheep:":{"uc_base":"1f411","uc_output":"1f411","uc_match":"1f411","uc_greedy":"1f411","shortnames":[],"category":"nature"},":shell:":{"uc_base":"1f41a","uc_output":"1f41a","uc_match":"1f41a","uc_greedy":"1f41a","shortnames":[],"category":"nature"},":ship:":{"uc_base":"1f6a2","uc_output":"1f6a2","uc_match":"1f6a2","uc_greedy":"1f6a2","shortnames":[],"category":"travel"},":shirt:":{"uc_base":"1f455","uc_output":"1f455","uc_match":"1f455","uc_greedy":"1f455","shortnames":[],"category":"people"},":shopping_cart:":{"uc_base":"1f6d2","uc_output":"1f6d2","uc_match":"1f6d2","uc_greedy":"1f6d2","shortnames":[":shopping_trolley:"],"category":"objects"},":shower:":{"uc_base":"1f6bf","uc_output":"1f6bf","uc_match":"1f6bf","uc_greedy":"1f6bf","shortnames":[],"category":"objects"},":shrimp:":{"uc_base":"1f990","uc_output":"1f990","uc_match":"1f990","uc_greedy":"1f990","shortnames":[],"category":"nature"},":shushing_face:":{"uc_base":"1f92b","uc_output":"1f92b","uc_match":"1f92b","uc_greedy":"1f92b","shortnames":[],"category":"people"},":signal_strength:":{"uc_base":"1f4f6","uc_output":"1f4f6","uc_match":"1f4f6","uc_greedy":"1f4f6","shortnames":[],"category":"symbols"},":six_pointed_star:":{"uc_base":"1f52f","uc_output":"1f52f","uc_match":"1f52f","uc_greedy":"1f52f","shortnames":[],"category":"symbols"},":ski:":{"uc_base":"1f3bf","uc_output":"1f3bf","uc_match":"1f3bf","uc_greedy":"1f3bf","shortnames":[],"category":"activity"},":skull:":{"uc_base":"1f480","uc_output":"1f480","uc_match":"1f480","uc_greedy":"1f480","shortnames":[":skeleton:"],"category":"people"},":sled:":{"uc_base":"1f6f7","uc_output":"1f6f7","uc_match":"1f6f7","uc_greedy":"1f6f7","shortnames":[],"category":"activity"},":sleeping:":{"uc_base":"1f634","uc_output":"1f634","uc_match":"1f634","uc_greedy":"1f634","shortnames":[],"category":"people"},":sleeping_accommodation:":{"uc_base":"1f6cc","uc_output":"1f6cc","uc_match":"1f6cc","uc_greedy":"1f6cc","shortnames":[],"category":"objects"},":sleepy:":{"uc_base":"1f62a","uc_output":"1f62a","uc_match":"1f62a","uc_greedy":"1f62a","shortnames":[],"category":"people"},":slight_frown:":{"uc_base":"1f641","uc_output":"1f641","uc_match":"1f641","uc_greedy":"1f641","shortnames":[":slightly_frowning_face:"],"category":"people"},":slight_smile:":{"uc_base":"1f642","uc_output":"1f642","uc_match":"1f642","uc_greedy":"1f642","shortnames":[":slightly_smiling_face:"],"category":"people"},":slot_machine:":{"uc_base":"1f3b0","uc_output":"1f3b0","uc_match":"1f3b0","uc_greedy":"1f3b0","shortnames":[],"category":"activity"},":small_blue_diamond:":{"uc_base":"1f539","uc_output":"1f539","uc_match":"1f539","uc_greedy":"1f539","shortnames":[],"category":"symbols"},":small_orange_diamond:":{"uc_base":"1f538","uc_output":"1f538","uc_match":"1f538","uc_greedy":"1f538","shortnames":[],"category":"symbols"},":small_red_triangle:":{"uc_base":"1f53a","uc_output":"1f53a","uc_match":"1f53a","uc_greedy":"1f53a","shortnames":[],"category":"symbols"},":small_red_triangle_down:":{"uc_base":"1f53b","uc_output":"1f53b","uc_match":"1f53b","uc_greedy":"1f53b","shortnames":[],"category":"symbols"},":smile:":{"uc_base":"1f604","uc_output":"1f604","uc_match":"1f604","uc_greedy":"1f604","shortnames":[],"category":"people"},":smile_cat:":{"uc_base":"1f638","uc_output":"1f638","uc_match":"1f638","uc_greedy":"1f638","shortnames":[],"category":"people"},":smiley:":{"uc_base":"1f603","uc_output":"1f603","uc_match":"1f603","uc_greedy":"1f603","shortnames":[],"category":"people"},":smiley_cat:":{"uc_base":"1f63a","uc_output":"1f63a","uc_match":"1f63a","uc_greedy":"1f63a","shortnames":[],"category":"people"},":smiling_imp:":{"uc_base":"1f608","uc_output":"1f608","uc_match":"1f608","uc_greedy":"1f608","shortnames":[],"category":"people"},":smirk:":{"uc_base":"1f60f","uc_output":"1f60f","uc_match":"1f60f","uc_greedy":"1f60f","shortnames":[],"category":"people"},":smirk_cat:":{"uc_base":"1f63c","uc_output":"1f63c","uc_match":"1f63c","uc_greedy":"1f63c","shortnames":[],"category":"people"},":smoking:":{"uc_base":"1f6ac","uc_output":"1f6ac","uc_match":"1f6ac","uc_greedy":"1f6ac","shortnames":[],"category":"objects"},":snail:":{"uc_base":"1f40c","uc_output":"1f40c","uc_match":"1f40c","uc_greedy":"1f40c","shortnames":[],"category":"nature"},":snake:":{"uc_base":"1f40d","uc_output":"1f40d","uc_match":"1f40d","uc_greedy":"1f40d","shortnames":[],"category":"nature"},":sneezing_face:":{"uc_base":"1f927","uc_output":"1f927","uc_match":"1f927","uc_greedy":"1f927","shortnames":[":sneeze:"],"category":"people"},":snowboarder:":{"uc_base":"1f3c2","uc_output":"1f3c2","uc_match":"1f3c2","uc_greedy":"1f3c2","shortnames":[],"category":"activity"},":sob:":{"uc_base":"1f62d","uc_output":"1f62d","uc_match":"1f62d","uc_greedy":"1f62d","shortnames":[],"category":"people"},":socks:":{"uc_base":"1f9e6","uc_output":"1f9e6","uc_match":"1f9e6","uc_greedy":"1f9e6","shortnames":[],"category":"people"},":soon:":{"uc_base":"1f51c","uc_output":"1f51c","uc_match":"1f51c","uc_greedy":"1f51c","shortnames":[],"category":"symbols"},":sos:":{"uc_base":"1f198","uc_output":"1f198","uc_match":"1f198","uc_greedy":"1f198","shortnames":[],"category":"symbols"},":sound:":{"uc_base":"1f509","uc_output":"1f509","uc_match":"1f509","uc_greedy":"1f509","shortnames":[],"category":"symbols"},":space_invader:":{"uc_base":"1f47e","uc_output":"1f47e","uc_match":"1f47e","uc_greedy":"1f47e","shortnames":[],"category":"people"},":spaghetti:":{"uc_base":"1f35d","uc_output":"1f35d","uc_match":"1f35d","uc_greedy":"1f35d","shortnames":[],"category":"food"},":sparkler:":{"uc_base":"1f387","uc_output":"1f387","uc_match":"1f387","uc_greedy":"1f387","shortnames":[],"category":"travel"},":sparkling_heart:":{"uc_base":"1f496","uc_output":"1f496","uc_match":"1f496","uc_greedy":"1f496","shortnames":[],"category":"symbols"},":speak_no_evil:":{"uc_base":"1f64a","uc_output":"1f64a","uc_match":"1f64a","uc_greedy":"1f64a","shortnames":[],"category":"nature"},":speaker:":{"uc_base":"1f508","uc_output":"1f508","uc_match":"1f508","uc_greedy":"1f508","shortnames":[],"category":"symbols"},":speech_balloon:":{"uc_base":"1f4ac","uc_output":"1f4ac","uc_match":"1f4ac","uc_greedy":"1f4ac","shortnames":[],"category":"symbols"},":speedboat:":{"uc_base":"1f6a4","uc_output":"1f6a4","uc_match":"1f6a4","uc_greedy":"1f6a4","shortnames":[],"category":"travel"},":spoon:":{"uc_base":"1f944","uc_output":"1f944","uc_match":"1f944","uc_greedy":"1f944","shortnames":[],"category":"food"},":squid:":{"uc_base":"1f991","uc_output":"1f991","uc_match":"1f991","uc_greedy":"1f991","shortnames":[],"category":"nature"},":star2:":{"uc_base":"1f31f","uc_output":"1f31f","uc_match":"1f31f","uc_greedy":"1f31f","shortnames":[],"category":"nature"},":star_struck:":{"uc_base":"1f929","uc_output":"1f929","uc_match":"1f929","uc_greedy":"1f929","shortnames":[],"category":"people"},":stars:":{"uc_base":"1f320","uc_output":"1f320","uc_match":"1f320","uc_greedy":"1f320","shortnames":[],"category":"travel"},":station:":{"uc_base":"1f689","uc_output":"1f689","uc_match":"1f689","uc_greedy":"1f689","shortnames":[],"category":"travel"},":statue_of_liberty:":{"uc_base":"1f5fd","uc_output":"1f5fd","uc_match":"1f5fd","uc_greedy":"1f5fd","shortnames":[],"category":"travel"},":steam_locomotive:":{"uc_base":"1f682","uc_output":"1f682","uc_match":"1f682","uc_greedy":"1f682","shortnames":[],"category":"travel"},":stew:":{"uc_base":"1f372","uc_output":"1f372","uc_match":"1f372","uc_greedy":"1f372","shortnames":[],"category":"food"},":straight_ruler:":{"uc_base":"1f4cf","uc_output":"1f4cf","uc_match":"1f4cf","uc_greedy":"1f4cf","shortnames":[],"category":"objects"},":strawberry:":{"uc_base":"1f353","uc_output":"1f353","uc_match":"1f353","uc_greedy":"1f353","shortnames":[],"category":"food"},":stuck_out_tongue:":{"uc_base":"1f61b","uc_output":"1f61b","uc_match":"1f61b","uc_greedy":"1f61b","shortnames":[],"category":"people"},":stuck_out_tongue_closed_eyes:":{"uc_base":"1f61d","uc_output":"1f61d","uc_match":"1f61d","uc_greedy":"1f61d","shortnames":[],"category":"people"},":stuck_out_tongue_winking_eye:":{"uc_base":"1f61c","uc_output":"1f61c","uc_match":"1f61c","uc_greedy":"1f61c","shortnames":[],"category":"people"},":stuffed_flatbread:":{"uc_base":"1f959","uc_output":"1f959","uc_match":"1f959","uc_greedy":"1f959","shortnames":[":stuffed_pita:"],"category":"food"},":sun_with_face:":{"uc_base":"1f31e","uc_output":"1f31e","uc_match":"1f31e","uc_greedy":"1f31e","shortnames":[],"category":"nature"},":sunflower:":{"uc_base":"1f33b","uc_output":"1f33b","uc_match":"1f33b","uc_greedy":"1f33b","shortnames":[],"category":"nature"},":sunglasses:":{"uc_base":"1f60e","uc_output":"1f60e","uc_match":"1f60e","uc_greedy":"1f60e","shortnames":[],"category":"people"},":sunrise:":{"uc_base":"1f305","uc_output":"1f305","uc_match":"1f305","uc_greedy":"1f305","shortnames":[],"category":"travel"},":sunrise_over_mountains:":{"uc_base":"1f304","uc_output":"1f304","uc_match":"1f304","uc_greedy":"1f304","shortnames":[],"category":"travel"},":sushi:":{"uc_base":"1f363","uc_output":"1f363","uc_match":"1f363","uc_greedy":"1f363","shortnames":[],"category":"food"},":suspension_railway:":{"uc_base":"1f69f","uc_output":"1f69f","uc_match":"1f69f","uc_greedy":"1f69f","shortnames":[],"category":"travel"},":sweat:":{"uc_base":"1f613","uc_output":"1f613","uc_match":"1f613","uc_greedy":"1f613","shortnames":[],"category":"people"},":sweat_drops:":{"uc_base":"1f4a6","uc_output":"1f4a6","uc_match":"1f4a6","uc_greedy":"1f4a6","shortnames":[],"category":"nature"},":sweat_smile:":{"uc_base":"1f605","uc_output":"1f605","uc_match":"1f605","uc_greedy":"1f605","shortnames":[],"category":"people"},":sweet_potato:":{"uc_base":"1f360","uc_output":"1f360","uc_match":"1f360","uc_greedy":"1f360","shortnames":[],"category":"food"},":symbols:":{"uc_base":"1f523","uc_output":"1f523","uc_match":"1f523","uc_greedy":"1f523","shortnames":[],"category":"symbols"},":synagogue:":{"uc_base":"1f54d","uc_output":"1f54d","uc_match":"1f54d","uc_greedy":"1f54d","shortnames":[],"category":"travel"},":syringe:":{"uc_base":"1f489","uc_output":"1f489","uc_match":"1f489","uc_greedy":"1f489","shortnames":[],"category":"objects"},":t_rex:":{"uc_base":"1f996","uc_output":"1f996","uc_match":"1f996","uc_greedy":"1f996","shortnames":[],"category":"nature"},":taco:":{"uc_base":"1f32e","uc_output":"1f32e","uc_match":"1f32e","uc_greedy":"1f32e","shortnames":[],"category":"food"},":tada:":{"uc_base":"1f389","uc_output":"1f389","uc_match":"1f389","uc_greedy":"1f389","shortnames":[],"category":"objects"},":takeout_box:":{"uc_base":"1f961","uc_output":"1f961","uc_match":"1f961","uc_greedy":"1f961","shortnames":[],"category":"food"},":tanabata_tree:":{"uc_base":"1f38b","uc_output":"1f38b","uc_match":"1f38b","uc_greedy":"1f38b","shortnames":[],"category":"nature"},":tangerine:":{"uc_base":"1f34a","uc_output":"1f34a","uc_match":"1f34a","uc_greedy":"1f34a","shortnames":[],"category":"food"},":taxi:":{"uc_base":"1f695","uc_output":"1f695","uc_match":"1f695","uc_greedy":"1f695","shortnames":[],"category":"travel"},":tea:":{"uc_base":"1f375","uc_output":"1f375","uc_match":"1f375","uc_greedy":"1f375","shortnames":[],"category":"food"},":telephone_receiver:":{"uc_base":"1f4de","uc_output":"1f4de","uc_match":"1f4de","uc_greedy":"1f4de","shortnames":[],"category":"objects"},":telescope:":{"uc_base":"1f52d","uc_output":"1f52d","uc_match":"1f52d","uc_greedy":"1f52d","shortnames":[],"category":"objects"},":tennis:":{"uc_base":"1f3be","uc_output":"1f3be","uc_match":"1f3be","uc_greedy":"1f3be","shortnames":[],"category":"activity"},":thermometer_face:":{"uc_base":"1f912","uc_output":"1f912","uc_match":"1f912","uc_greedy":"1f912","shortnames":[":face_with_thermometer:"],"category":"people"},":thinking:":{"uc_base":"1f914","uc_output":"1f914","uc_match":"1f914","uc_greedy":"1f914","shortnames":[":thinking_face:"],"category":"people"},":third_place:":{"uc_base":"1f949","uc_output":"1f949","uc_match":"1f949","uc_greedy":"1f949","shortnames":[":third_place_medal:"],"category":"activity"},":thought_balloon:":{"uc_base":"1f4ad","uc_output":"1f4ad","uc_match":"1f4ad","uc_greedy":"1f4ad","shortnames":[],"category":"symbols"},":thumbsdown:":{"uc_base":"1f44e","uc_output":"1f44e","uc_match":"1f44e","uc_greedy":"1f44e","shortnames":[":-1:",":thumbdown:"],"category":"people"},":thumbsup:":{"uc_base":"1f44d","uc_output":"1f44d","uc_match":"1f44d","uc_greedy":"1f44d","shortnames":[":+1:",":thumbup:"],"category":"people"},":ticket:":{"uc_base":"1f3ab","uc_output":"1f3ab","uc_match":"1f3ab","uc_greedy":"1f3ab","shortnames":[],"category":"activity"},":tiger2:":{"uc_base":"1f405","uc_output":"1f405","uc_match":"1f405","uc_greedy":"1f405","shortnames":[],"category":"nature"},":tiger:":{"uc_base":"1f42f","uc_output":"1f42f","uc_match":"1f42f","uc_greedy":"1f42f","shortnames":[],"category":"nature"},":tired_face:":{"uc_base":"1f62b","uc_output":"1f62b","uc_match":"1f62b","uc_greedy":"1f62b","shortnames":[],"category":"people"},":toilet:":{"uc_base":"1f6bd","uc_output":"1f6bd","uc_match":"1f6bd","uc_greedy":"1f6bd","shortnames":[],"category":"objects"},":tokyo_tower:":{"uc_base":"1f5fc","uc_output":"1f5fc","uc_match":"1f5fc","uc_greedy":"1f5fc","shortnames":[],"category":"travel"},":tomato:":{"uc_base":"1f345","uc_output":"1f345","uc_match":"1f345","uc_greedy":"1f345","shortnames":[],"category":"food"},":tone1:":{"uc_base":"1f3fb","uc_output":"1f3fb","uc_match":"1f3fb","uc_greedy":"1f3fb","shortnames":[],"category":"modifier"},":tone2:":{"uc_base":"1f3fc","uc_output":"1f3fc","uc_match":"1f3fc","uc_greedy":"1f3fc","shortnames":[],"category":"modifier"},":tone3:":{"uc_base":"1f3fd","uc_output":"1f3fd","uc_match":"1f3fd","uc_greedy":"1f3fd","shortnames":[],"category":"modifier"},":tone4:":{"uc_base":"1f3fe","uc_output":"1f3fe","uc_match":"1f3fe","uc_greedy":"1f3fe","shortnames":[],"category":"modifier"},":tone5:":{"uc_base":"1f3ff","uc_output":"1f3ff","uc_match":"1f3ff","uc_greedy":"1f3ff","shortnames":[],"category":"modifier"},":tongue:":{"uc_base":"1f445","uc_output":"1f445","uc_match":"1f445","uc_greedy":"1f445","shortnames":[],"category":"people"},":top:":{"uc_base":"1f51d","uc_output":"1f51d","uc_match":"1f51d","uc_greedy":"1f51d","shortnames":[],"category":"symbols"},":tophat:":{"uc_base":"1f3a9","uc_output":"1f3a9","uc_match":"1f3a9","uc_greedy":"1f3a9","shortnames":[],"category":"people"},":tractor:":{"uc_base":"1f69c","uc_output":"1f69c","uc_match":"1f69c","uc_greedy":"1f69c","shortnames":[],"category":"travel"},":traffic_light:":{"uc_base":"1f6a5","uc_output":"1f6a5","uc_match":"1f6a5","uc_greedy":"1f6a5","shortnames":[],"category":"travel"},":train2:":{"uc_base":"1f686","uc_output":"1f686","uc_match":"1f686","uc_greedy":"1f686","shortnames":[],"category":"travel"},":train:":{"uc_base":"1f68b","uc_output":"1f68b","uc_match":"1f68b","uc_greedy":"1f68b","shortnames":[],"category":"travel"},":tram:":{"uc_base":"1f68a","uc_output":"1f68a","uc_match":"1f68a","uc_greedy":"1f68a","shortnames":[],"category":"travel"},":triangular_flag_on_post:":{"uc_base":"1f6a9","uc_output":"1f6a9","uc_match":"1f6a9","uc_greedy":"1f6a9","shortnames":[],"category":"flags"},":triangular_ruler:":{"uc_base":"1f4d0","uc_output":"1f4d0","uc_match":"1f4d0","uc_greedy":"1f4d0","shortnames":[],"category":"objects"},":trident:":{"uc_base":"1f531","uc_output":"1f531","uc_match":"1f531","uc_greedy":"1f531","shortnames":[],"category":"symbols"},":triumph:":{"uc_base":"1f624","uc_output":"1f624","uc_match":"1f624","uc_greedy":"1f624","shortnames":[],"category":"people"},":trolleybus:":{"uc_base":"1f68e","uc_output":"1f68e","uc_match":"1f68e","uc_greedy":"1f68e","shortnames":[],"category":"travel"},":trophy:":{"uc_base":"1f3c6","uc_output":"1f3c6","uc_match":"1f3c6","uc_greedy":"1f3c6","shortnames":[],"category":"activity"},":tropical_drink:":{"uc_base":"1f379","uc_output":"1f379","uc_match":"1f379","uc_greedy":"1f379","shortnames":[],"category":"food"},":tropical_fish:":{"uc_base":"1f420","uc_output":"1f420","uc_match":"1f420","uc_greedy":"1f420","shortnames":[],"category":"nature"},":truck:":{"uc_base":"1f69a","uc_output":"1f69a","uc_match":"1f69a","uc_greedy":"1f69a","shortnames":[],"category":"travel"},":trumpet:":{"uc_base":"1f3ba","uc_output":"1f3ba","uc_match":"1f3ba","uc_greedy":"1f3ba","shortnames":[],"category":"activity"},":tulip:":{"uc_base":"1f337","uc_output":"1f337","uc_match":"1f337","uc_greedy":"1f337","shortnames":[],"category":"nature"},":tumbler_glass:":{"uc_base":"1f943","uc_output":"1f943","uc_match":"1f943","uc_greedy":"1f943","shortnames":[":whisky:"],"category":"food"},":turkey:":{"uc_base":"1f983","uc_output":"1f983","uc_match":"1f983","uc_greedy":"1f983","shortnames":[],"category":"nature"},":turtle:":{"uc_base":"1f422","uc_output":"1f422","uc_match":"1f422","uc_greedy":"1f422","shortnames":[],"category":"nature"},":tv:":{"uc_base":"1f4fa","uc_output":"1f4fa","uc_match":"1f4fa","uc_greedy":"1f4fa","shortnames":[],"category":"objects"},":twisted_rightwards_arrows:":{"uc_base":"1f500","uc_output":"1f500","uc_match":"1f500","uc_greedy":"1f500","shortnames":[],"category":"symbols"},":two_hearts:":{"uc_base":"1f495","uc_output":"1f495","uc_match":"1f495","uc_greedy":"1f495","shortnames":[],"category":"symbols"},":two_men_holding_hands:":{"uc_base":"1f46c","uc_output":"1f46c","uc_match":"1f46c","uc_greedy":"1f46c","shortnames":[],"category":"people"},":two_women_holding_hands:":{"uc_base":"1f46d","uc_output":"1f46d","uc_match":"1f46d","uc_greedy":"1f46d","shortnames":[],"category":"people"},":u5272:":{"uc_base":"1f239","uc_output":"1f239","uc_match":"1f239","uc_greedy":"1f239","shortnames":[],"category":"symbols"},":u5408:":{"uc_base":"1f234","uc_output":"1f234","uc_match":"1f234","uc_greedy":"1f234","shortnames":[],"category":"symbols"},":u55b6:":{"uc_base":"1f23a","uc_output":"1f23a","uc_match":"1f23a","uc_greedy":"1f23a","shortnames":[],"category":"symbols"},":u6307:":{"uc_base":"1f22f","uc_output":"1f22f","uc_match":"1f22f","uc_greedy":"1f22f","shortnames":[],"category":"symbols"},":u6709:":{"uc_base":"1f236","uc_output":"1f236","uc_match":"1f236","uc_greedy":"1f236","shortnames":[],"category":"symbols"},":u6e80:":{"uc_base":"1f235","uc_output":"1f235","uc_match":"1f235","uc_greedy":"1f235","shortnames":[],"category":"symbols"},":u7121:":{"uc_base":"1f21a","uc_output":"1f21a","uc_match":"1f21a","uc_greedy":"1f21a","shortnames":[],"category":"symbols"},":u7533:":{"uc_base":"1f238","uc_output":"1f238","uc_match":"1f238","uc_greedy":"1f238","shortnames":[],"category":"symbols"},":u7981:":{"uc_base":"1f232","uc_output":"1f232","uc_match":"1f232","uc_greedy":"1f232","shortnames":[],"category":"symbols"},":u7a7a:":{"uc_base":"1f233","uc_output":"1f233","uc_match":"1f233","uc_greedy":"1f233","shortnames":[],"category":"symbols"},":unamused:":{"uc_base":"1f612","uc_output":"1f612","uc_match":"1f612","uc_greedy":"1f612","shortnames":[],"category":"people"},":underage:":{"uc_base":"1f51e","uc_output":"1f51e","uc_match":"1f51e","uc_greedy":"1f51e","shortnames":[],"category":"symbols"},":unicorn:":{"uc_base":"1f984","uc_output":"1f984","uc_match":"1f984","uc_greedy":"1f984","shortnames":[":unicorn_face:"],"category":"nature"},":unlock:":{"uc_base":"1f513","uc_output":"1f513","uc_match":"1f513","uc_greedy":"1f513","shortnames":[],"category":"objects"},":up:":{"uc_base":"1f199","uc_output":"1f199","uc_match":"1f199","uc_greedy":"1f199","shortnames":[],"category":"symbols"},":upside_down:":{"uc_base":"1f643","uc_output":"1f643","uc_match":"1f643","uc_greedy":"1f643","shortnames":[":upside_down_face:"],"category":"people"},":vampire:":{"uc_base":"1f9db","uc_output":"1f9db","uc_match":"1f9db","uc_greedy":"1f9db","shortnames":[],"category":"people"},":vertical_traffic_light:":{"uc_base":"1f6a6","uc_output":"1f6a6","uc_match":"1f6a6","uc_greedy":"1f6a6","shortnames":[],"category":"travel"},":vhs:":{"uc_base":"1f4fc","uc_output":"1f4fc","uc_match":"1f4fc","uc_greedy":"1f4fc","shortnames":[],"category":"objects"},":vibration_mode:":{"uc_base":"1f4f3","uc_output":"1f4f3","uc_match":"1f4f3","uc_greedy":"1f4f3","shortnames":[],"category":"symbols"},":video_camera:":{"uc_base":"1f4f9","uc_output":"1f4f9","uc_match":"1f4f9","uc_greedy":"1f4f9","shortnames":[],"category":"objects"},":video_game:":{"uc_base":"1f3ae","uc_output":"1f3ae","uc_match":"1f3ae","uc_greedy":"1f3ae","shortnames":[],"category":"activity"},":violin:":{"uc_base":"1f3bb","uc_output":"1f3bb","uc_match":"1f3bb","uc_greedy":"1f3bb","shortnames":[],"category":"activity"},":volcano:":{"uc_base":"1f30b","uc_output":"1f30b","uc_match":"1f30b","uc_greedy":"1f30b","shortnames":[],"category":"travel"},":volleyball:":{"uc_base":"1f3d0","uc_output":"1f3d0","uc_match":"1f3d0","uc_greedy":"1f3d0","shortnames":[],"category":"activity"},":vs:":{"uc_base":"1f19a","uc_output":"1f19a","uc_match":"1f19a","uc_greedy":"1f19a","shortnames":[],"category":"symbols"},":vulcan:":{"uc_base":"1f596","uc_output":"1f596","uc_match":"1f596","uc_greedy":"1f596","shortnames":[":raised_hand_with_part_between_middle_and_ring_fingers:"],"category":"people"},":waning_crescent_moon:":{"uc_base":"1f318","uc_output":"1f318","uc_match":"1f318","uc_greedy":"1f318","shortnames":[],"category":"nature"},":waning_gibbous_moon:":{"uc_base":"1f316","uc_output":"1f316","uc_match":"1f316","uc_greedy":"1f316","shortnames":[],"category":"nature"},":water_buffalo:":{"uc_base":"1f403","uc_output":"1f403","uc_match":"1f403","uc_greedy":"1f403","shortnames":[],"category":"nature"},":watermelon:":{"uc_base":"1f349","uc_output":"1f349","uc_match":"1f349","uc_greedy":"1f349","shortnames":[],"category":"food"},":wave:":{"uc_base":"1f44b","uc_output":"1f44b","uc_match":"1f44b","uc_greedy":"1f44b","shortnames":[],"category":"people"},":waxing_crescent_moon:":{"uc_base":"1f312","uc_output":"1f312","uc_match":"1f312","uc_greedy":"1f312","shortnames":[],"category":"nature"},":waxing_gibbous_moon:":{"uc_base":"1f314","uc_output":"1f314","uc_match":"1f314","uc_greedy":"1f314","shortnames":[],"category":"nature"},":wc:":{"uc_base":"1f6be","uc_output":"1f6be","uc_match":"1f6be","uc_greedy":"1f6be","shortnames":[],"category":"symbols"},":weary:":{"uc_base":"1f629","uc_output":"1f629","uc_match":"1f629","uc_greedy":"1f629","shortnames":[],"category":"people"},":wedding:":{"uc_base":"1f492","uc_output":"1f492","uc_match":"1f492","uc_greedy":"1f492","shortnames":[],"category":"travel"},":whale2:":{"uc_base":"1f40b","uc_output":"1f40b","uc_match":"1f40b","uc_greedy":"1f40b","shortnames":[],"category":"nature"},":whale:":{"uc_base":"1f433","uc_output":"1f433","uc_match":"1f433","uc_greedy":"1f433","shortnames":[],"category":"nature"},":white_flower:":{"uc_base":"1f4ae","uc_output":"1f4ae","uc_match":"1f4ae","uc_greedy":"1f4ae","shortnames":[],"category":"symbols"},":white_square_button:":{"uc_base":"1f533","uc_output":"1f533","uc_match":"1f533","uc_greedy":"1f533","shortnames":[],"category":"symbols"},":wilted_rose:":{"uc_base":"1f940","uc_output":"1f940","uc_match":"1f940","uc_greedy":"1f940","shortnames":[":wilted_flower:"],"category":"nature"},":wind_chime:":{"uc_base":"1f390","uc_output":"1f390","uc_match":"1f390","uc_greedy":"1f390","shortnames":[],"category":"objects"},":wine_glass:":{"uc_base":"1f377","uc_output":"1f377","uc_match":"1f377","uc_greedy":"1f377","shortnames":[],"category":"food"},":wink:":{"uc_base":"1f609","uc_output":"1f609","uc_match":"1f609","uc_greedy":"1f609","shortnames":[],"category":"people"},":wolf:":{"uc_base":"1f43a","uc_output":"1f43a","uc_match":"1f43a","uc_greedy":"1f43a","shortnames":[],"category":"nature"},":woman:":{"uc_base":"1f469","uc_output":"1f469","uc_match":"1f469","uc_greedy":"1f469","shortnames":[],"category":"people"},":woman_with_headscarf:":{"uc_base":"1f9d5","uc_output":"1f9d5","uc_match":"1f9d5","uc_greedy":"1f9d5","shortnames":[],"category":"people"},":womans_clothes:":{"uc_base":"1f45a","uc_output":"1f45a","uc_match":"1f45a","uc_greedy":"1f45a","shortnames":[],"category":"people"},":womans_hat:":{"uc_base":"1f452","uc_output":"1f452","uc_match":"1f452","uc_greedy":"1f452","shortnames":[],"category":"people"},":womens:":{"uc_base":"1f6ba","uc_output":"1f6ba","uc_match":"1f6ba","uc_greedy":"1f6ba","shortnames":[],"category":"symbols"},":worried:":{"uc_base":"1f61f","uc_output":"1f61f","uc_match":"1f61f","uc_greedy":"1f61f","shortnames":[],"category":"people"},":wrench:":{"uc_base":"1f527","uc_output":"1f527","uc_match":"1f527","uc_greedy":"1f527","shortnames":[],"category":"objects"},":yellow_heart:":{"uc_base":"1f49b","uc_output":"1f49b","uc_match":"1f49b","uc_greedy":"1f49b","shortnames":[],"category":"symbols"},":yen:":{"uc_base":"1f4b4","uc_output":"1f4b4","uc_match":"1f4b4","uc_greedy":"1f4b4","shortnames":[],"category":"objects"},":yum:":{"uc_base":"1f60b","uc_output":"1f60b","uc_match":"1f60b","uc_greedy":"1f60b","shortnames":[],"category":"people"},":zebra:":{"uc_base":"1f993","uc_output":"1f993","uc_match":"1f993","uc_greedy":"1f993","shortnames":[],"category":"nature"},":zipper_mouth:":{"uc_base":"1f910","uc_output":"1f910","uc_match":"1f910","uc_greedy":"1f910","shortnames":[":zipper_mouth_face:"],"category":"people"},":zombie:":{"uc_base":"1f9df","uc_output":"1f9df","uc_match":"1f9df","uc_greedy":"1f9df","shortnames":[],"category":"people"},":zzz:":{"uc_base":"1f4a4","uc_output":"1f4a4","uc_match":"1f4a4","uc_greedy":"1f4a4","shortnames":[],"category":"symbols"},":alarm_clock:":{"uc_base":"23f0","uc_output":"23f0","uc_match":"23f0","uc_greedy":"23f0","shortnames":[],"category":"objects"},":anchor:":{"uc_base":"2693","uc_output":"2693","uc_match":"2693","uc_greedy":"2693","shortnames":[],"category":"travel"},":aquarius:":{"uc_base":"2652","uc_output":"2652","uc_match":"2652","uc_greedy":"2652","shortnames":[],"category":"symbols"},":aries:":{"uc_base":"2648","uc_output":"2648","uc_match":"2648","uc_greedy":"2648","shortnames":[],"category":"symbols"},":arrow_double_down:":{"uc_base":"23ec","uc_output":"23ec","uc_match":"23ec","uc_greedy":"23ec","shortnames":[],"category":"symbols"},":arrow_double_up:":{"uc_base":"23eb","uc_output":"23eb","uc_match":"23eb","uc_greedy":"23eb","shortnames":[],"category":"symbols"},":baseball:":{"uc_base":"26be","uc_output":"26be","uc_match":"26be","uc_greedy":"26be","shortnames":[],"category":"activity"},":black_circle:":{"uc_base":"26ab","uc_output":"26ab","uc_match":"26ab","uc_greedy":"26ab","shortnames":[],"category":"symbols"},":black_large_square:":{"uc_base":"2b1b","uc_output":"2b1b","uc_match":"2b1b","uc_greedy":"2b1b","shortnames":[],"category":"symbols"},":black_medium_small_square:":{"uc_base":"25fe","uc_output":"25fe","uc_match":"25fe","uc_greedy":"25fe","shortnames":[],"category":"symbols"},":cancer:":{"uc_base":"264b","uc_output":"264b","uc_match":"264b","uc_greedy":"264b","shortnames":[],"category":"symbols"},":capricorn:":{"uc_base":"2651","uc_output":"2651","uc_match":"2651","uc_greedy":"2651","shortnames":[],"category":"symbols"},":church:":{"uc_base":"26ea","uc_output":"26ea","uc_match":"26ea","uc_greedy":"26ea","shortnames":[],"category":"travel"},":coffee:":{"uc_base":"2615","uc_output":"2615","uc_match":"2615","uc_greedy":"2615","shortnames":[],"category":"food"},":curly_loop:":{"uc_base":"27b0","uc_output":"27b0","uc_match":"27b0","uc_greedy":"27b0","shortnames":[],"category":"symbols"},":exclamation:":{"uc_base":"2757","uc_output":"2757","uc_match":"2757","uc_greedy":"2757","shortnames":[],"category":"symbols"},":fast_forward:":{"uc_base":"23e9","uc_output":"23e9","uc_match":"23e9","uc_greedy":"23e9","shortnames":[],"category":"symbols"},":fist:":{"uc_base":"270a","uc_output":"270a","uc_match":"270a","uc_greedy":"270a","shortnames":[],"category":"people"},":fountain:":{"uc_base":"26f2","uc_output":"26f2","uc_match":"26f2","uc_greedy":"26f2","shortnames":[],"category":"travel"},":fuelpump:":{"uc_base":"26fd","uc_output":"26fd","uc_match":"26fd","uc_greedy":"26fd","shortnames":[],"category":"travel"},":gemini:":{"uc_base":"264a","uc_output":"264a","uc_match":"264a","uc_greedy":"264a","shortnames":[],"category":"symbols"},":golf:":{"uc_base":"26f3","uc_output":"26f3","uc_match":"26f3","uc_greedy":"26f3","shortnames":[],"category":"activity"},":grey_exclamation:":{"uc_base":"2755","uc_output":"2755","uc_match":"2755","uc_greedy":"2755","shortnames":[],"category":"symbols"},":grey_question:":{"uc_base":"2754","uc_output":"2754","uc_match":"2754","uc_greedy":"2754","shortnames":[],"category":"symbols"},":heavy_division_sign:":{"uc_base":"2797","uc_output":"2797","uc_match":"2797","uc_greedy":"2797","shortnames":[],"category":"symbols"},":heavy_minus_sign:":{"uc_base":"2796","uc_output":"2796","uc_match":"2796","uc_greedy":"2796","shortnames":[],"category":"symbols"},":heavy_plus_sign:":{"uc_base":"2795","uc_output":"2795","uc_match":"2795","uc_greedy":"2795","shortnames":[],"category":"symbols"},":hourglass:":{"uc_base":"231b","uc_output":"231b","uc_match":"231b","uc_greedy":"231b","shortnames":[],"category":"objects"},":hourglass_flowing_sand:":{"uc_base":"23f3","uc_output":"23f3","uc_match":"23f3","uc_greedy":"23f3","shortnames":[],"category":"objects"},":leo:":{"uc_base":"264c","uc_output":"264c","uc_match":"264c","uc_greedy":"264c","shortnames":[],"category":"symbols"},":libra:":{"uc_base":"264e","uc_output":"264e","uc_match":"264e","uc_greedy":"264e","shortnames":[],"category":"symbols"},":loop:":{"uc_base":"27bf","uc_output":"27bf","uc_match":"27bf","uc_greedy":"27bf","shortnames":[],"category":"symbols"},":negative_squared_cross_mark:":{"uc_base":"274e","uc_output":"274e","uc_match":"274e","uc_greedy":"274e","shortnames":[],"category":"symbols"},":no_entry:":{"uc_base":"26d4","uc_output":"26d4","uc_match":"26d4","uc_greedy":"26d4","shortnames":[],"category":"symbols"},":o:":{"uc_base":"2b55","uc_output":"2b55","uc_match":"2b55","uc_greedy":"2b55","shortnames":[],"category":"symbols"},":ophiuchus:":{"uc_base":"26ce","uc_output":"26ce","uc_match":"26ce","uc_greedy":"26ce","shortnames":[],"category":"symbols"},":partly_sunny:":{"uc_base":"26c5","uc_output":"26c5","uc_match":"26c5","uc_greedy":"26c5","shortnames":[],"category":"nature"},":pisces:":{"uc_base":"2653","uc_output":"2653","uc_match":"2653","uc_greedy":"2653","shortnames":[],"category":"symbols"},":question:":{"uc_base":"2753","uc_output":"2753","uc_match":"2753","uc_greedy":"2753","shortnames":[],"category":"symbols"},":raised_hand:":{"uc_base":"270b","uc_output":"270b","uc_match":"270b","uc_greedy":"270b","shortnames":[],"category":"people"},":rewind:":{"uc_base":"23ea","uc_output":"23ea","uc_match":"23ea","uc_greedy":"23ea","shortnames":[],"category":"symbols"},":sagittarius:":{"uc_base":"2650","uc_output":"2650","uc_match":"2650","uc_greedy":"2650","shortnames":[],"category":"symbols"},":sailboat:":{"uc_base":"26f5","uc_output":"26f5","uc_match":"26f5","uc_greedy":"26f5","shortnames":[],"category":"travel"},":scorpius:":{"uc_base":"264f","uc_output":"264f","uc_match":"264f","uc_greedy":"264f","shortnames":[],"category":"symbols"},":snowman:":{"uc_base":"26c4","uc_output":"26c4","uc_match":"26c4","uc_greedy":"26c4","shortnames":[],"category":"nature"},":soccer:":{"uc_base":"26bd","uc_output":"26bd","uc_match":"26bd","uc_greedy":"26bd","shortnames":[],"category":"activity"},":sparkles:":{"uc_base":"2728","uc_output":"2728","uc_match":"2728","uc_greedy":"2728","shortnames":[],"category":"nature"},":star:":{"uc_base":"2b50","uc_output":"2b50","uc_match":"2b50","uc_greedy":"2b50","shortnames":[],"category":"nature"},":taurus:":{"uc_base":"2649","uc_output":"2649","uc_match":"2649","uc_greedy":"2649","shortnames":[],"category":"symbols"},":tent:":{"uc_base":"26fa","uc_output":"26fa","uc_match":"26fa","uc_greedy":"26fa","shortnames":[],"category":"travel"},":umbrella:":{"uc_base":"2614","uc_output":"2614","uc_match":"2614","uc_greedy":"2614","shortnames":[],"category":"nature"},":virgo:":{"uc_base":"264d","uc_output":"264d","uc_match":"264d","uc_greedy":"264d","shortnames":[],"category":"symbols"},":watch:":{"uc_base":"231a","uc_output":"231a","uc_match":"231a","uc_greedy":"231a","shortnames":[],"category":"objects"},":wheelchair:":{"uc_base":"267f","uc_output":"267f","uc_match":"267f","uc_greedy":"267f","shortnames":[],"category":"symbols"},":white_check_mark:":{"uc_base":"2705","uc_output":"2705","uc_match":"2705","uc_greedy":"2705","shortnames":[],"category":"symbols"},":white_circle:":{"uc_base":"26aa","uc_output":"26aa","uc_match":"26aa","uc_greedy":"26aa","shortnames":[],"category":"symbols"},":white_large_square:":{"uc_base":"2b1c","uc_output":"2b1c","uc_match":"2b1c","uc_greedy":"2b1c","shortnames":[],"category":"symbols"},":white_medium_small_square:":{"uc_base":"25fd","uc_output":"25fd","uc_match":"25fd","uc_greedy":"25fd","shortnames":[],"category":"symbols"},":x:":{"uc_base":"274c","uc_output":"274c","uc_match":"274c","uc_greedy":"274c","shortnames":[],"category":"symbols"},":zap:":{"uc_base":"26a1","uc_output":"26a1","uc_match":"26a1","uc_greedy":"26a1","shortnames":[],"category":"nature"}}; var tmpShortNames = [], emoji; for (emoji in ns.emojioneList) { if (!ns.emojioneList.hasOwnProperty(emoji) || (emoji === '')) continue; tmpShortNames.push(emoji.replace(/[+]/g, "\\$&")); for (var i = 0; i < ns.emojioneList[emoji].shortnames.length; i++) { tmpShortNames.push(ns.emojioneList[emoji].shortnames[i].replace(/[+]/g, "\\$&")); } } ns.shortnames = tmpShortNames.join('|'); // javascript escapes here must be ordered from largest length to shortest ns.jsEscapeMap = {"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69":"1f469-2764-1f48b-1f469","\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68":"1f468-2764-1f48b-1f468","\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68":"1f469-2764-1f48b-1f468","\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74\uDB40\uDC7F":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73\uDB40\uDC7F":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66":"1f468-1f468-1f466-1f466","\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66":"1f468-1f468-1f467-1f466","\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67":"1f468-1f468-1f467-1f467","\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66":"1f468-1f469-1f466-1f466","\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66":"1f468-1f469-1f467-1f466","\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67":"1f468-1f469-1f467-1f467","\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66":"1f469-1f469-1f466-1f466","\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66":"1f469-1f469-1f467-1f466","\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67":"1f469-1f469-1f467-1f467","\uD83D\uDC68\u200D\u2764\u200D\uD83D\uDC8B\u200D\uD83D\uDC68":"1f468-2764-1f48b-1f468","\uD83D\uDC69\u200D\u2764\u200D\uD83D\uDC8B\u200D\uD83D\uDC68":"1f469-2764-1f48b-1f468","\uD83D\uDC69\u200D\u2764\u200D\uD83D\uDC8B\u200D\uD83D\uDC69":"1f469-2764-1f48b-1f469","\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69":"1f469-2764-1f469","\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC68":"1f468-2764-1f468","\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC68":"1f469-2764-1f468","\uD83D\uDD75\uFE0F\uD83C\uDFFB\u200D\u2640\uFE0F":"1f575-1f3fb-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFB\u200D\u2642\uFE0F":"1f575-1f3fb-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFC\u200D\u2640\uFE0F":"1f575-1f3fc-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFC\u200D\u2642\uFE0F":"1f575-1f3fc-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFD\u200D\u2640\uFE0F":"1f575-1f3fd-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFD\u200D\u2642\uFE0F":"1f575-1f3fd-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFE\u200D\u2640\uFE0F":"1f575-1f3fe-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFE\u200D\u2642\uFE0F":"1f575-1f3fe-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFF\u200D\u2640\uFE0F":"1f575-1f3ff-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFF\u200D\u2642\uFE0F":"1f575-1f3ff-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFB\u200D\u2640\uFE0F":"1f3cb-1f3fb-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFB\u200D\u2642\uFE0F":"1f3cb-1f3fb-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFC\u200D\u2640\uFE0F":"1f3cb-1f3fc-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFC\u200D\u2642\uFE0F":"1f3cb-1f3fc-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFD\u200D\u2640\uFE0F":"1f3cb-1f3fd-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFD\u200D\u2642\uFE0F":"1f3cb-1f3fd-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFE\u200D\u2640\uFE0F":"1f3cb-1f3fe-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFE\u200D\u2642\uFE0F":"1f3cb-1f3fe-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFF\u200D\u2640\uFE0F":"1f3cb-1f3ff-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFF\u200D\u2642\uFE0F":"1f3cb-1f3ff-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFB\u200D\u2640\uFE0F":"1f3cc-1f3fb-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFB\u200D\u2642\uFE0F":"1f3cc-1f3fb-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFC\u200D\u2640\uFE0F":"1f3cc-1f3fc-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFC\u200D\u2642\uFE0F":"1f3cc-1f3fc-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFD\u200D\u2640\uFE0F":"1f3cc-1f3fd-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFD\u200D\u2642\uFE0F":"1f3cc-1f3fd-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFE\u200D\u2640\uFE0F":"1f3cc-1f3fe-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFE\u200D\u2642\uFE0F":"1f3cc-1f3fe-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFF\u200D\u2640\uFE0F":"1f3cc-1f3ff-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFF\u200D\u2642\uFE0F":"1f3cc-1f3ff-2642","\u26F9\uFE0F\uD83C\uDFFB\u200D\u2640\uFE0F":"26f9-1f3fb-2640","\u26F9\uFE0F\uD83C\uDFFB\u200D\u2642\uFE0F":"26f9-1f3fb-2642","\u26F9\uFE0F\uD83C\uDFFC\u200D\u2640\uFE0F":"26f9-1f3fc-2640","\u26F9\uFE0F\uD83C\uDFFC\u200D\u2642\uFE0F":"26f9-1f3fc-2642","\u26F9\uFE0F\uD83C\uDFFD\u200D\u2640\uFE0F":"26f9-1f3fd-2640","\u26F9\uFE0F\uD83C\uDFFD\u200D\u2642\uFE0F":"26f9-1f3fd-2642","\u26F9\uFE0F\uD83C\uDFFE\u200D\u2640\uFE0F":"26f9-1f3fe-2640","\u26F9\uFE0F\uD83C\uDFFE\u200D\u2642\uFE0F":"26f9-1f3fe-2642","\u26F9\uFE0F\uD83C\uDFFF\u200D\u2640\uFE0F":"26f9-1f3ff-2640","\u26F9\uFE0F\uD83C\uDFFF\u200D\u2642\uFE0F":"26f9-1f3ff-2642","\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66":"1f468-1f468-1f466","\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67":"1f468-1f468-1f467","\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67":"1f468-1f469-1f467","\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66":"1f469-1f469-1f466","\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67":"1f469-1f469-1f467","\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66":"1f468-1f466-1f466","\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66":"1f468-1f467-1f466","\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66":"1f469-1f466-1f466","\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66":"1f469-1f467-1f466","\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67":"1f469-1f467-1f467","\uD83D\uDC68\u2764\uFE0F\uD83D\uDC8B\uD83D\uDC68":"1f468-2764-1f48b-1f468","\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67":"1f468-1f467-1f467","\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66":"1f468-1f469-1f466","\uD83D\uDC69\u2764\uFE0F\uD83D\uDC8B\uD83D\uDC68":"1f469-2764-1f48b-1f468","\uD83D\uDC69\u2764\uFE0F\uD83D\uDC8B\uD83D\uDC69":"1f469-2764-1f48b-1f469","\uD83D\uDC68\u200D\u2764\u200D\uD83D\uDC68":"1f468-2764-1f468","\uD83D\uDC69\u200D\u2764\u200D\uD83D\uDC68":"1f469-2764-1f468","\uD83D\uDC69\u200D\u2764\u200D\uD83D\uDC69":"1f469-2764-1f469","\uD83D\uDC68\uD83C\uDFFB\u200D\u2695\uFE0F":"1f468-1f3fb-2695","\uD83D\uDC68\uD83C\uDFFB\u200D\u2696\uFE0F":"1f468-1f3fb-2696","\uD83D\uDC68\uD83C\uDFFB\u200D\u2708\uFE0F":"1f468-1f3fb-2708","\uD83D\uDC68\uD83C\uDFFC\u200D\u2695\uFE0F":"1f468-1f3fc-2695","\uD83D\uDC68\uD83C\uDFFC\u200D\u2696\uFE0F":"1f468-1f3fc-2696","\uD83D\uDC68\uD83C\uDFFC\u200D\u2708\uFE0F":"1f468-1f3fc-2708","\uD83D\uDC68\uD83C\uDFFD\u200D\u2695\uFE0F":"1f468-1f3fd-2695","\uD83D\uDC68\uD83C\uDFFD\u200D\u2696\uFE0F":"1f468-1f3fd-2696","\uD83D\uDC68\uD83C\uDFFD\u200D\u2708\uFE0F":"1f468-1f3fd-2708","\uD83D\uDC68\uD83C\uDFFE\u200D\u2695\uFE0F":"1f468-1f3fe-2695","\uD83D\uDC68\uD83C\uDFFE\u200D\u2696\uFE0F":"1f468-1f3fe-2696","\uD83D\uDC68\uD83C\uDFFE\u200D\u2708\uFE0F":"1f468-1f3fe-2708","\uD83D\uDC68\uD83C\uDFFF\u200D\u2695\uFE0F":"1f468-1f3ff-2695","\uD83D\uDC68\uD83C\uDFFF\u200D\u2696\uFE0F":"1f468-1f3ff-2696","\uD83D\uDC68\uD83C\uDFFF\u200D\u2708\uFE0F":"1f468-1f3ff-2708","\uD83D\uDC69\uD83C\uDFFB\u200D\u2695\uFE0F":"1f469-1f3fb-2695","\uD83D\uDC69\uD83C\uDFFB\u200D\u2696\uFE0F":"1f469-1f3fb-2696","\uD83D\uDC69\uD83C\uDFFB\u200D\u2708\uFE0F":"1f469-1f3fb-2708","\uD83D\uDC69\uD83C\uDFFC\u200D\u2695\uFE0F":"1f469-1f3fc-2695","\uD83D\uDC69\uD83C\uDFFC\u200D\u2696\uFE0F":"1f469-1f3fc-2696","\uD83D\uDC69\uD83C\uDFFC\u200D\u2708\uFE0F":"1f469-1f3fc-2708","\uD83D\uDC69\uD83C\uDFFD\u200D\u2695\uFE0F":"1f469-1f3fd-2695","\uD83D\uDC69\uD83C\uDFFD\u200D\u2696\uFE0F":"1f469-1f3fd-2696","\uD83D\uDC69\uD83C\uDFFD\u200D\u2708\uFE0F":"1f469-1f3fd-2708","\uD83D\uDC69\uD83C\uDFFE\u200D\u2695\uFE0F":"1f469-1f3fe-2695","\uD83D\uDC69\uD83C\uDFFE\u200D\u2696\uFE0F":"1f469-1f3fe-2696","\uD83D\uDC69\uD83C\uDFFE\u200D\u2708\uFE0F":"1f469-1f3fe-2708","\uD83D\uDC69\uD83C\uDFFF\u200D\u2695\uFE0F":"1f469-1f3ff-2695","\uD83D\uDC69\uD83C\uDFFF\u200D\u2696\uFE0F":"1f469-1f3ff-2696","\uD83D\uDC69\uD83C\uDFFF\u200D\u2708\uFE0F":"1f469-1f3ff-2708","\uD83D\uDC6E\uD83C\uDFFB\u200D\u2640\uFE0F":"1f46e-1f3fb-2640","\uD83D\uDC6E\uD83C\uDFFB\u200D\u2642\uFE0F":"1f46e-1f3fb-2642","\uD83D\uDC6E\uD83C\uDFFC\u200D\u2640\uFE0F":"1f46e-1f3fc-2640","\uD83D\uDC6E\uD83C\uDFFC\u200D\u2642\uFE0F":"1f46e-1f3fc-2642","\uD83D\uDC6E\uD83C\uDFFD\u200D\u2640\uFE0F":"1f46e-1f3fd-2640","\uD83D\uDC6E\uD83C\uDFFD\u200D\u2642\uFE0F":"1f46e-1f3fd-2642","\uD83D\uDC6E\uD83C\uDFFE\u200D\u2640\uFE0F":"1f46e-1f3fe-2640","\uD83D\uDC6E\uD83C\uDFFE\u200D\u2642\uFE0F":"1f46e-1f3fe-2642","\uD83D\uDC6E\uD83C\uDFFF\u200D\u2640\uFE0F":"1f46e-1f3ff-2640","\uD83D\uDC6E\uD83C\uDFFF\u200D\u2642\uFE0F":"1f46e-1f3ff-2642","\uD83D\uDC71\uD83C\uDFFB\u200D\u2640\uFE0F":"1f471-1f3fb-2640","\uD83D\uDC71\uD83C\uDFFB\u200D\u2642\uFE0F":"1f471-1f3fb-2642","\uD83D\uDC71\uD83C\uDFFC\u200D\u2640\uFE0F":"1f471-1f3fc-2640","\uD83D\uDC71\uD83C\uDFFC\u200D\u2642\uFE0F":"1f471-1f3fc-2642","\uD83D\uDC71\uD83C\uDFFD\u200D\u2640\uFE0F":"1f471-1f3fd-2640","\uD83D\uDC71\uD83C\uDFFD\u200D\u2642\uFE0F":"1f471-1f3fd-2642","\uD83D\uDC71\uD83C\uDFFE\u200D\u2640\uFE0F":"1f471-1f3fe-2640","\uD83D\uDC71\uD83C\uDFFE\u200D\u2642\uFE0F":"1f471-1f3fe-2642","\uD83D\uDC71\uD83C\uDFFF\u200D\u2640\uFE0F":"1f471-1f3ff-2640","\uD83D\uDC71\uD83C\uDFFF\u200D\u2642\uFE0F":"1f471-1f3ff-2642","\uD83D\uDC73\uD83C\uDFFB\u200D\u2640\uFE0F":"1f473-1f3fb-2640","\uD83D\uDC73\uD83C\uDFFB\u200D\u2642\uFE0F":"1f473-1f3fb-2642","\uD83D\uDC73\uD83C\uDFFC\u200D\u2640\uFE0F":"1f473-1f3fc-2640","\uD83D\uDC73\uD83C\uDFFC\u200D\u2642\uFE0F":"1f473-1f3fc-2642","\uD83D\uDC73\uD83C\uDFFD\u200D\u2640\uFE0F":"1f473-1f3fd-2640","\uD83D\uDC73\uD83C\uDFFD\u200D\u2642\uFE0F":"1f473-1f3fd-2642","\uD83D\uDC73\uD83C\uDFFE\u200D\u2640\uFE0F":"1f473-1f3fe-2640","\uD83D\uDC73\uD83C\uDFFE\u200D\u2642\uFE0F":"1f473-1f3fe-2642","\uD83D\uDC73\uD83C\uDFFF\u200D\u2640\uFE0F":"1f473-1f3ff-2640","\uD83D\uDC73\uD83C\uDFFF\u200D\u2642\uFE0F":"1f473-1f3ff-2642","\uD83D\uDC77\uD83C\uDFFB\u200D\u2640\uFE0F":"1f477-1f3fb-2640","\uD83D\uDC77\uD83C\uDFFB\u200D\u2642\uFE0F":"1f477-1f3fb-2642","\uD83D\uDC77\uD83C\uDFFC\u200D\u2640\uFE0F":"1f477-1f3fc-2640","\uD83D\uDC77\uD83C\uDFFC\u200D\u2642\uFE0F":"1f477-1f3fc-2642","\uD83D\uDC77\uD83C\uDFFD\u200D\u2640\uFE0F":"1f477-1f3fd-2640","\uD83D\uDC77\uD83C\uDFFD\u200D\u2642\uFE0F":"1f477-1f3fd-2642","\uD83D\uDC77\uD83C\uDFFE\u200D\u2640\uFE0F":"1f477-1f3fe-2640","\uD83D\uDC77\uD83C\uDFFE\u200D\u2642\uFE0F":"1f477-1f3fe-2642","\uD83D\uDC77\uD83C\uDFFF\u200D\u2640\uFE0F":"1f477-1f3ff-2640","\uD83D\uDC77\uD83C\uDFFF\u200D\u2642\uFE0F":"1f477-1f3ff-2642","\uD83D\uDC82\uD83C\uDFFB\u200D\u2640\uFE0F":"1f482-1f3fb-2640","\uD83D\uDC82\uD83C\uDFFB\u200D\u2642\uFE0F":"1f482-1f3fb-2642","\uD83D\uDC82\uD83C\uDFFC\u200D\u2640\uFE0F":"1f482-1f3fc-2640","\uD83D\uDC82\uD83C\uDFFC\u200D\u2642\uFE0F":"1f482-1f3fc-2642","\uD83D\uDC82\uD83C\uDFFD\u200D\u2640\uFE0F":"1f482-1f3fd-2640","\uD83D\uDC82\uD83C\uDFFD\u200D\u2642\uFE0F":"1f482-1f3fd-2642","\uD83D\uDC82\uD83C\uDFFE\u200D\u2640\uFE0F":"1f482-1f3fe-2640","\uD83D\uDC82\uD83C\uDFFE\u200D\u2642\uFE0F":"1f482-1f3fe-2642","\uD83D\uDC82\uD83C\uDFFF\u200D\u2640\uFE0F":"1f482-1f3ff-2640","\uD83D\uDC82\uD83C\uDFFF\u200D\u2642\uFE0F":"1f482-1f3ff-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFB\u2640\uFE0F":"1f575-1f3fb-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFB\u2642\uFE0F":"1f575-1f3fb-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFC\u2640\uFE0F":"1f575-1f3fc-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFC\u2642\uFE0F":"1f575-1f3fc-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFD\u2640\uFE0F":"1f575-1f3fd-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFD\u2642\uFE0F":"1f575-1f3fd-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFE\u2640\uFE0F":"1f575-1f3fe-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFE\u2642\uFE0F":"1f575-1f3fe-2642","\uD83D\uDD75\uFE0F\uD83C\uDFFF\u2640\uFE0F":"1f575-1f3ff-2640","\uD83D\uDD75\uFE0F\uD83C\uDFFF\u2642\uFE0F":"1f575-1f3ff-2642","\uD83C\uDFC3\uD83C\uDFFB\u200D\u2640\uFE0F":"1f3c3-1f3fb-2640","\uD83C\uDFC3\uD83C\uDFFB\u200D\u2642\uFE0F":"1f3c3-1f3fb-2642","\uD83C\uDFC3\uD83C\uDFFC\u200D\u2640\uFE0F":"1f3c3-1f3fc-2640","\uD83C\uDFC3\uD83C\uDFFC\u200D\u2642\uFE0F":"1f3c3-1f3fc-2642","\uD83C\uDFC3\uD83C\uDFFD\u200D\u2640\uFE0F":"1f3c3-1f3fd-2640","\uD83C\uDFC3\uD83C\uDFFD\u200D\u2642\uFE0F":"1f3c3-1f3fd-2642","\uD83C\uDFC3\uD83C\uDFFE\u200D\u2640\uFE0F":"1f3c3-1f3fe-2640","\uD83C\uDFC3\uD83C\uDFFE\u200D\u2642\uFE0F":"1f3c3-1f3fe-2642","\uD83C\uDFC3\uD83C\uDFFF\u200D\u2640\uFE0F":"1f3c3-1f3ff-2640","\uD83C\uDFC3\uD83C\uDFFF\u200D\u2642\uFE0F":"1f3c3-1f3ff-2642","\uD83C\uDFC4\uD83C\uDFFB\u200D\u2640\uFE0F":"1f3c4-1f3fb-2640","\uD83C\uDFC4\uD83C\uDFFB\u200D\u2642\uFE0F":"1f3c4-1f3fb-2642","\uD83C\uDFC4\uD83C\uDFFC\u200D\u2640\uFE0F":"1f3c4-1f3fc-2640","\uD83C\uDFC4\uD83C\uDFFC\u200D\u2642\uFE0F":"1f3c4-1f3fc-2642","\uD83C\uDFC4\uD83C\uDFFD\u200D\u2640\uFE0F":"1f3c4-1f3fd-2640","\uD83C\uDFC4\uD83C\uDFFD\u200D\u2642\uFE0F":"1f3c4-1f3fd-2642","\uD83C\uDFC4\uD83C\uDFFE\u200D\u2640\uFE0F":"1f3c4-1f3fe-2640","\uD83C\uDFC4\uD83C\uDFFE\u200D\u2642\uFE0F":"1f3c4-1f3fe-2642","\uD83C\uDFC4\uD83C\uDFFF\u200D\u2640\uFE0F":"1f3c4-1f3ff-2640","\uD83C\uDFC4\uD83C\uDFFF\u200D\u2642\uFE0F":"1f3c4-1f3ff-2642","\uD83C\uDFCA\uD83C\uDFFB\u200D\u2640\uFE0F":"1f3ca-1f3fb-2640","\uD83C\uDFCA\uD83C\uDFFB\u200D\u2642\uFE0F":"1f3ca-1f3fb-2642","\uD83C\uDFCA\uD83C\uDFFC\u200D\u2640\uFE0F":"1f3ca-1f3fc-2640","\uD83C\uDFCA\uD83C\uDFFC\u200D\u2642\uFE0F":"1f3ca-1f3fc-2642","\uD83C\uDFCA\uD83C\uDFFD\u200D\u2640\uFE0F":"1f3ca-1f3fd-2640","\uD83C\uDFCA\uD83C\uDFFD\u200D\u2642\uFE0F":"1f3ca-1f3fd-2642","\uD83C\uDFCA\uD83C\uDFFE\u200D\u2640\uFE0F":"1f3ca-1f3fe-2640","\uD83C\uDFCA\uD83C\uDFFE\u200D\u2642\uFE0F":"1f3ca-1f3fe-2642","\uD83C\uDFCA\uD83C\uDFFF\u200D\u2640\uFE0F":"1f3ca-1f3ff-2640","\uD83C\uDFCA\uD83C\uDFFF\u200D\u2642\uFE0F":"1f3ca-1f3ff-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFB\u2640\uFE0F":"1f3cb-1f3fb-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFB\u2642\uFE0F":"1f3cb-1f3fb-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFC\u2640\uFE0F":"1f3cb-1f3fc-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFC\u2642\uFE0F":"1f3cb-1f3fc-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFD\u2640\uFE0F":"1f3cb-1f3fd-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFD\u2642\uFE0F":"1f3cb-1f3fd-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFE\u2640\uFE0F":"1f3cb-1f3fe-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFE\u2642\uFE0F":"1f3cb-1f3fe-2642","\uD83C\uDFCB\uFE0F\uD83C\uDFFF\u2640\uFE0F":"1f3cb-1f3ff-2640","\uD83C\uDFCB\uFE0F\uD83C\uDFFF\u2642\uFE0F":"1f3cb-1f3ff-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFB\u2640\uFE0F":"1f3cc-1f3fb-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFB\u2642\uFE0F":"1f3cc-1f3fb-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFC\u2640\uFE0F":"1f3cc-1f3fc-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFC\u2642\uFE0F":"1f3cc-1f3fc-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFD\u2640\uFE0F":"1f3cc-1f3fd-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFD\u2642\uFE0F":"1f3cc-1f3fd-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFE\u2640\uFE0F":"1f3cc-1f3fe-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFE\u2642\uFE0F":"1f3cc-1f3fe-2642","\uD83C\uDFCC\uFE0F\uD83C\uDFFF\u2640\uFE0F":"1f3cc-1f3ff-2640","\uD83C\uDFCC\uFE0F\uD83C\uDFFF\u2642\uFE0F":"1f3cc-1f3ff-2642","\uD83D\uDC86\uD83C\uDFFB\u200D\u2640\uFE0F":"1f486-1f3fb-2640","\uD83D\uDC86\uD83C\uDFFB\u200D\u2642\uFE0F":"1f486-1f3fb-2642","\uD83D\uDC86\uD83C\uDFFC\u200D\u2640\uFE0F":"1f486-1f3fc-2640","\uD83D\uDC86\uD83C\uDFFC\u200D\u2642\uFE0F":"1f486-1f3fc-2642","\uD83D\uDC86\uD83C\uDFFD\u200D\u2640\uFE0F":"1f486-1f3fd-2640","\uD83D\uDC86\uD83C\uDFFD\u200D\u2642\uFE0F":"1f486-1f3fd-2642","\uD83D\uDC86\uD83C\uDFFE\u200D\u2640\uFE0F":"1f486-1f3fe-2640","\uD83D\uDC86\uD83C\uDFFE\u200D\u2642\uFE0F":"1f486-1f3fe-2642","\uD83D\uDC86\uD83C\uDFFF\u200D\u2640\uFE0F":"1f486-1f3ff-2640","\uD83D\uDC86\uD83C\uDFFF\u200D\u2642\uFE0F":"1f486-1f3ff-2642","\uD83D\uDC87\uD83C\uDFFB\u200D\u2640\uFE0F":"1f487-1f3fb-2640","\uD83D\uDC87\uD83C\uDFFB\u200D\u2642\uFE0F":"1f487-1f3fb-2642","\uD83D\uDC87\uD83C\uDFFC\u200D\u2640\uFE0F":"1f487-1f3fc-2640","\uD83D\uDC87\uD83C\uDFFC\u200D\u2642\uFE0F":"1f487-1f3fc-2642","\uD83D\uDC87\uD83C\uDFFD\u200D\u2640\uFE0F":"1f487-1f3fd-2640","\uD83D\uDC87\uD83C\uDFFD\u200D\u2642\uFE0F":"1f487-1f3fd-2642","\uD83D\uDC87\uD83C\uDFFE\u200D\u2640\uFE0F":"1f487-1f3fe-2640","\uD83D\uDC87\uD83C\uDFFE\u200D\u2642\uFE0F":"1f487-1f3fe-2642","\uD83D\uDC87\uD83C\uDFFF\u200D\u2640\uFE0F":"1f487-1f3ff-2640","\uD83D\uDC87\uD83C\uDFFF\u200D\u2642\uFE0F":"1f487-1f3ff-2642","\uD83D\uDEA3\uD83C\uDFFB\u200D\u2640\uFE0F":"1f6a3-1f3fb-2640","\uD83D\uDEA3\uD83C\uDFFB\u200D\u2642\uFE0F":"1f6a3-1f3fb-2642","\uD83D\uDEA3\uD83C\uDFFC\u200D\u2640\uFE0F":"1f6a3-1f3fc-2640","\uD83D\uDEA3\uD83C\uDFFC\u200D\u2642\uFE0F":"1f6a3-1f3fc-2642","\uD83D\uDEA3\uD83C\uDFFD\u200D\u2640\uFE0F":"1f6a3-1f3fd-2640","\uD83D\uDEA3\uD83C\uDFFD\u200D\u2642\uFE0F":"1f6a3-1f3fd-2642","\uD83D\uDEA3\uD83C\uDFFE\u200D\u2640\uFE0F":"1f6a3-1f3fe-2640","\uD83D\uDEA3\uD83C\uDFFE\u200D\u2642\uFE0F":"1f6a3-1f3fe-2642","\uD83D\uDEA3\uD83C\uDFFF\u200D\u2640\uFE0F":"1f6a3-1f3ff-2640","\uD83D\uDEA3\uD83C\uDFFF\u200D\u2642\uFE0F":"1f6a3-1f3ff-2642","\uD83D\uDEB4\uD83C\uDFFB\u200D\u2640\uFE0F":"1f6b4-1f3fb-2640","\uD83D\uDEB4\uD83C\uDFFB\u200D\u2642\uFE0F":"1f6b4-1f3fb-2642","\uD83D\uDEB4\uD83C\uDFFC\u200D\u2640\uFE0F":"1f6b4-1f3fc-2640","\uD83D\uDEB4\uD83C\uDFFC\u200D\u2642\uFE0F":"1f6b4-1f3fc-2642","\uD83D\uDEB4\uD83C\uDFFD\u200D\u2640\uFE0F":"1f6b4-1f3fd-2640","\uD83D\uDEB4\uD83C\uDFFD\u200D\u2642\uFE0F":"1f6b4-1f3fd-2642","\uD83D\uDEB4\uD83C\uDFFE\u200D\u2640\uFE0F":"1f6b4-1f3fe-2640","\uD83D\uDEB4\uD83C\uDFFE\u200D\u2642\uFE0F":"1f6b4-1f3fe-2642","\uD83D\uDEB4\uD83C\uDFFF\u200D\u2640\uFE0F":"1f6b4-1f3ff-2640","\uD83D\uDEB4\uD83C\uDFFF\u200D\u2642\uFE0F":"1f6b4-1f3ff-2642","\uD83D\uDEB5\uD83C\uDFFB\u200D\u2640\uFE0F":"1f6b5-1f3fb-2640","\uD83D\uDEB5\uD83C\uDFFB\u200D\u2642\uFE0F":"1f6b5-1f3fb-2642","\uD83D\uDEB5\uD83C\uDFFC\u200D\u2640\uFE0F":"1f6b5-1f3fc-2640","\uD83D\uDEB5\uD83C\uDFFC\u200D\u2642\uFE0F":"1f6b5-1f3fc-2642","\uD83D\uDEB5\uD83C\uDFFD\u200D\u2640\uFE0F":"1f6b5-1f3fd-2640","\uD83D\uDEB5\uD83C\uDFFD\u200D\u2642\uFE0F":"1f6b5-1f3fd-2642","\uD83D\uDEB5\uD83C\uDFFE\u200D\u2640\uFE0F":"1f6b5-1f3fe-2640","\uD83D\uDEB5\uD83C\uDFFE\u200D\u2642\uFE0F":"1f6b5-1f3fe-2642","\uD83D\uDEB5\uD83C\uDFFF\u200D\u2640\uFE0F":"1f6b5-1f3ff-2640","\uD83D\uDEB5\uD83C\uDFFF\u200D\u2642\uFE0F":"1f6b5-1f3ff-2642","\uD83D\uDEB6\uD83C\uDFFB\u200D\u2640\uFE0F":"1f6b6-1f3fb-2640","\uD83D\uDEB6\uD83C\uDFFB\u200D\u2642\uFE0F":"1f6b6-1f3fb-2642","\uD83D\uDEB6\uD83C\uDFFC\u200D\u2640\uFE0F":"1f6b6-1f3fc-2640","\uD83D\uDEB6\uD83C\uDFFC\u200D\u2642\uFE0F":"1f6b6-1f3fc-2642","\uD83D\uDEB6\uD83C\uDFFD\u200D\u2640\uFE0F":"1f6b6-1f3fd-2640","\uD83D\uDEB6\uD83C\uDFFD\u200D\u2642\uFE0F":"1f6b6-1f3fd-2642","\uD83D\uDEB6\uD83C\uDFFE\u200D\u2640\uFE0F":"1f6b6-1f3fe-2640","\uD83D\uDEB6\uD83C\uDFFE\u200D\u2642\uFE0F":"1f6b6-1f3fe-2642","\uD83D\uDEB6\uD83C\uDFFF\u200D\u2640\uFE0F":"1f6b6-1f3ff-2640","\uD83D\uDEB6\uD83C\uDFFF\u200D\u2642\uFE0F":"1f6b6-1f3ff-2642","\uD83E\uDD38\uD83C\uDFFB\u200D\u2640\uFE0F":"1f938-1f3fb-2640","\uD83E\uDD38\uD83C\uDFFB\u200D\u2642\uFE0F":"1f938-1f3fb-2642","\uD83E\uDD38\uD83C\uDFFC\u200D\u2640\uFE0F":"1f938-1f3fc-2640","\uD83E\uDD38\uD83C\uDFFC\u200D\u2642\uFE0F":"1f938-1f3fc-2642","\uD83E\uDD38\uD83C\uDFFD\u200D\u2640\uFE0F":"1f938-1f3fd-2640","\uD83E\uDD38\uD83C\uDFFD\u200D\u2642\uFE0F":"1f938-1f3fd-2642","\uD83E\uDD38\uD83C\uDFFE\u200D\u2640\uFE0F":"1f938-1f3fe-2640","\uD83E\uDD38\uD83C\uDFFE\u200D\u2642\uFE0F":"1f938-1f3fe-2642","\uD83E\uDD38\uD83C\uDFFF\u200D\u2640\uFE0F":"1f938-1f3ff-2640","\uD83E\uDD38\uD83C\uDFFF\u200D\u2642\uFE0F":"1f938-1f3ff-2642","\uD83E\uDD39\uD83C\uDFFB\u200D\u2640\uFE0F":"1f939-1f3fb-2640","\uD83E\uDD39\uD83C\uDFFB\u200D\u2642\uFE0F":"1f939-1f3fb-2642","\uD83E\uDD39\uD83C\uDFFC\u200D\u2640\uFE0F":"1f939-1f3fc-2640","\uD83E\uDD39\uD83C\uDFFC\u200D\u2642\uFE0F":"1f939-1f3fc-2642","\uD83E\uDD39\uD83C\uDFFD\u200D\u2640\uFE0F":"1f939-1f3fd-2640","\uD83E\uDD39\uD83C\uDFFD\u200D\u2642\uFE0F":"1f939-1f3fd-2642","\uD83E\uDD39\uD83C\uDFFE\u200D\u2640\uFE0F":"1f939-1f3fe-2640","\uD83E\uDD39\uD83C\uDFFE\u200D\u2642\uFE0F":"1f939-1f3fe-2642","\uD83E\uDD39\uD83C\uDFFF\u200D\u2640\uFE0F":"1f939-1f3ff-2640","\uD83E\uDD39\uD83C\uDFFF\u200D\u2642\uFE0F":"1f939-1f3ff-2642","\uD83E\uDD3D\uD83C\uDFFB\u200D\u2640\uFE0F":"1f93d-1f3fb-2640","\uD83E\uDD3D\uD83C\uDFFB\u200D\u2642\uFE0F":"1f93d-1f3fb-2642","\uD83E\uDD3D\uD83C\uDFFC\u200D\u2640\uFE0F":"1f93d-1f3fc-2640","\uD83E\uDD3D\uD83C\uDFFC\u200D\u2642\uFE0F":"1f93d-1f3fc-2642","\uD83E\uDD3D\uD83C\uDFFD\u200D\u2640\uFE0F":"1f93d-1f3fd-2640","\uD83E\uDD3D\uD83C\uDFFD\u200D\u2642\uFE0F":"1f93d-1f3fd-2642","\uD83E\uDD3D\uD83C\uDFFE\u200D\u2640\uFE0F":"1f93d-1f3fe-2640","\uD83E\uDD3D\uD83C\uDFFE\u200D\u2642\uFE0F":"1f93d-1f3fe-2642","\uD83E\uDD3D\uD83C\uDFFF\u200D\u2640\uFE0F":"1f93d-1f3ff-2640","\uD83E\uDD3D\uD83C\uDFFF\u200D\u2642\uFE0F":"1f93d-1f3ff-2642","\uD83E\uDD3E\uD83C\uDFFB\u200D\u2640\uFE0F":"1f93e-1f3fb-2640","\uD83E\uDD3E\uD83C\uDFFB\u200D\u2642\uFE0F":"1f93e-1f3fb-2642","\uD83E\uDD3E\uD83C\uDFFC\u200D\u2640\uFE0F":"1f93e-1f3fc-2640","\uD83E\uDD3E\uD83C\uDFFC\u200D\u2642\uFE0F":"1f93e-1f3fc-2642","\uD83E\uDD3E\uD83C\uDFFD\u200D\u2640\uFE0F":"1f93e-1f3fd-2640","\uD83E\uDD3E\uD83C\uDFFD\u200D\u2642\uFE0F":"1f93e-1f3fd-2642","\uD83E\uDD3E\uD83C\uDFFE\u200D\u2640\uFE0F":"1f93e-1f3fe-2640","\uD83E\uDD3E\uD83C\uDFFE\u200D\u2642\uFE0F":"1f93e-1f3fe-2642","\uD83E\uDD3E\uD83C\uDFFF\u200D\u2640\uFE0F":"1f93e-1f3ff-2640","\uD83E\uDD3E\uD83C\uDFFF\u200D\u2642\uFE0F":"1f93e-1f3ff-2642","\uD83D\uDC81\uD83C\uDFFB\u200D\u2640\uFE0F":"1f481-1f3fb-2640","\uD83D\uDC81\uD83C\uDFFB\u200D\u2642\uFE0F":"1f481-1f3fb-2642","\uD83D\uDC81\uD83C\uDFFC\u200D\u2640\uFE0F":"1f481-1f3fc-2640","\uD83D\uDC81\uD83C\uDFFC\u200D\u2642\uFE0F":"1f481-1f3fc-2642","\uD83D\uDC81\uD83C\uDFFD\u200D\u2640\uFE0F":"1f481-1f3fd-2640","\uD83D\uDC81\uD83C\uDFFD\u200D\u2642\uFE0F":"1f481-1f3fd-2642","\uD83D\uDC81\uD83C\uDFFE\u200D\u2640\uFE0F":"1f481-1f3fe-2640","\uD83D\uDC81\uD83C\uDFFE\u200D\u2642\uFE0F":"1f481-1f3fe-2642","\uD83D\uDC81\uD83C\uDFFF\u200D\u2640\uFE0F":"1f481-1f3ff-2640","\uD83D\uDC81\uD83C\uDFFF\u200D\u2642\uFE0F":"1f481-1f3ff-2642","\uD83D\uDE45\uD83C\uDFFB\u200D\u2640\uFE0F":"1f645-1f3fb-2640","\uD83D\uDE45\uD83C\uDFFB\u200D\u2642\uFE0F":"1f645-1f3fb-2642","\uD83D\uDE45\uD83C\uDFFC\u200D\u2640\uFE0F":"1f645-1f3fc-2640","\uD83D\uDE45\uD83C\uDFFC\u200D\u2642\uFE0F":"1f645-1f3fc-2642","\uD83D\uDE45\uD83C\uDFFD\u200D\u2640\uFE0F":"1f645-1f3fd-2640","\uD83D\uDE45\uD83C\uDFFD\u200D\u2642\uFE0F":"1f645-1f3fd-2642","\uD83D\uDE45\uD83C\uDFFE\u200D\u2640\uFE0F":"1f645-1f3fe-2640","\uD83D\uDE45\uD83C\uDFFE\u200D\u2642\uFE0F":"1f645-1f3fe-2642","\uD83D\uDE45\uD83C\uDFFF\u200D\u2640\uFE0F":"1f645-1f3ff-2640","\uD83D\uDE45\uD83C\uDFFF\u200D\u2642\uFE0F":"1f645-1f3ff-2642","\uD83D\uDE46\uD83C\uDFFB\u200D\u2640\uFE0F":"1f646-1f3fb-2640","\uD83D\uDE46\uD83C\uDFFB\u200D\u2642\uFE0F":"1f646-1f3fb-2642","\uD83D\uDE46\uD83C\uDFFC\u200D\u2640\uFE0F":"1f646-1f3fc-2640","\uD83D\uDE46\uD83C\uDFFC\u200D\u2642\uFE0F":"1f646-1f3fc-2642","\uD83D\uDE46\uD83C\uDFFD\u200D\u2640\uFE0F":"1f646-1f3fd-2640","\uD83D\uDE46\uD83C\uDFFD\u200D\u2642\uFE0F":"1f646-1f3fd-2642","\uD83D\uDE46\uD83C\uDFFE\u200D\u2640\uFE0F":"1f646-1f3fe-2640","\uD83D\uDE46\uD83C\uDFFE\u200D\u2642\uFE0F":"1f646-1f3fe-2642","\uD83D\uDE46\uD83C\uDFFF\u200D\u2640\uFE0F":"1f646-1f3ff-2640","\uD83D\uDE46\uD83C\uDFFF\u200D\u2642\uFE0F":"1f646-1f3ff-2642","\uD83D\uDE47\uD83C\uDFFB\u200D\u2640\uFE0F":"1f647-1f3fb-2640","\uD83D\uDE47\uD83C\uDFFB\u200D\u2642\uFE0F":"1f647-1f3fb-2642","\uD83D\uDE47\uD83C\uDFFC\u200D\u2640\uFE0F":"1f647-1f3fc-2640","\uD83D\uDE47\uD83C\uDFFC\u200D\u2642\uFE0F":"1f647-1f3fc-2642","\uD83D\uDE47\uD83C\uDFFD\u200D\u2640\uFE0F":"1f647-1f3fd-2640","\uD83D\uDE47\uD83C\uDFFD\u200D\u2642\uFE0F":"1f647-1f3fd-2642","\uD83D\uDE47\uD83C\uDFFE\u200D\u2640\uFE0F":"1f647-1f3fe-2640","\uD83D\uDE47\uD83C\uDFFE\u200D\u2642\uFE0F":"1f647-1f3fe-2642","\uD83D\uDE47\uD83C\uDFFF\u200D\u2640\uFE0F":"1f647-1f3ff-2640","\uD83D\uDE47\uD83C\uDFFF\u200D\u2642\uFE0F":"1f647-1f3ff-2642","\uD83D\uDE4B\uD83C\uDFFB\u200D\u2640\uFE0F":"1f64b-1f3fb-2640","\uD83D\uDE4B\uD83C\uDFFB\u200D\u2642\uFE0F":"1f64b-1f3fb-2642","\uD83D\uDE4B\uD83C\uDFFC\u200D\u2640\uFE0F":"1f64b-1f3fc-2640","\uD83D\uDE4B\uD83C\uDFFC\u200D\u2642\uFE0F":"1f64b-1f3fc-2642","\uD83D\uDE4B\uD83C\uDFFD\u200D\u2640\uFE0F":"1f64b-1f3fd-2640","\uD83D\uDE4B\uD83C\uDFFD\u200D\u2642\uFE0F":"1f64b-1f3fd-2642","\uD83D\uDE4B\uD83C\uDFFE\u200D\u2640\uFE0F":"1f64b-1f3fe-2640","\uD83D\uDE4B\uD83C\uDFFE\u200D\u2642\uFE0F":"1f64b-1f3fe-2642","\uD83D\uDE4B\uD83C\uDFFF\u200D\u2640\uFE0F":"1f64b-1f3ff-2640","\uD83D\uDE4B\uD83C\uDFFF\u200D\u2642\uFE0F":"1f64b-1f3ff-2642","\uD83D\uDE4D\uD83C\uDFFB\u200D\u2640\uFE0F":"1f64d-1f3fb-2640","\uD83D\uDE4D\uD83C\uDFFB\u200D\u2642\uFE0F":"1f64d-1f3fb-2642","\uD83D\uDE4D\uD83C\uDFFC\u200D\u2640\uFE0F":"1f64d-1f3fc-2640","\uD83D\uDE4D\uD83C\uDFFC\u200D\u2642\uFE0F":"1f64d-1f3fc-2642","\uD83D\uDE4D\uD83C\uDFFD\u200D\u2640\uFE0F":"1f64d-1f3fd-2640","\uD83D\uDE4D\uD83C\uDFFD\u200D\u2642\uFE0F":"1f64d-1f3fd-2642","\uD83D\uDE4D\uD83C\uDFFE\u200D\u2640\uFE0F":"1f64d-1f3fe-2640","\uD83D\uDE4D\uD83C\uDFFE\u200D\u2642\uFE0F":"1f64d-1f3fe-2642","\uD83D\uDE4D\uD83C\uDFFF\u200D\u2640\uFE0F":"1f64d-1f3ff-2640","\uD83D\uDE4D\uD83C\uDFFF\u200D\u2642\uFE0F":"1f64d-1f3ff-2642","\uD83D\uDE4E\uD83C\uDFFB\u200D\u2640\uFE0F":"1f64e-1f3fb-2640","\uD83D\uDE4E\uD83C\uDFFB\u200D\u2642\uFE0F":"1f64e-1f3fb-2642","\uD83D\uDE4E\uD83C\uDFFC\u200D\u2640\uFE0F":"1f64e-1f3fc-2640","\uD83D\uDE4E\uD83C\uDFFC\u200D\u2642\uFE0F":"1f64e-1f3fc-2642","\uD83D\uDE4E\uD83C\uDFFD\u200D\u2640\uFE0F":"1f64e-1f3fd-2640","\uD83D\uDE4E\uD83C\uDFFD\u200D\u2642\uFE0F":"1f64e-1f3fd-2642","\uD83D\uDE4E\uD83C\uDFFE\u200D\u2640\uFE0F":"1f64e-1f3fe-2640","\uD83D\uDE4E\uD83C\uDFFE\u200D\u2642\uFE0F":"1f64e-1f3fe-2642","\uD83D\uDE4E\uD83C\uDFFF\u200D\u2640\uFE0F":"1f64e-1f3ff-2640","\uD83D\uDE4E\uD83C\uDFFF\u200D\u2642\uFE0F":"1f64e-1f3ff-2642","\uD83E\uDD26\uD83C\uDFFB\u200D\u2640\uFE0F":"1f926-1f3fb-2640","\uD83E\uDD26\uD83C\uDFFB\u200D\u2642\uFE0F":"1f926-1f3fb-2642","\uD83E\uDD26\uD83C\uDFFC\u200D\u2640\uFE0F":"1f926-1f3fc-2640","\uD83E\uDD26\uD83C\uDFFC\u200D\u2642\uFE0F":"1f926-1f3fc-2642","\uD83E\uDD26\uD83C\uDFFD\u200D\u2640\uFE0F":"1f926-1f3fd-2640","\uD83E\uDD26\uD83C\uDFFD\u200D\u2642\uFE0F":"1f926-1f3fd-2642","\uD83E\uDD26\uD83C\uDFFE\u200D\u2640\uFE0F":"1f926-1f3fe-2640","\uD83E\uDD26\uD83C\uDFFE\u200D\u2642\uFE0F":"1f926-1f3fe-2642","\uD83E\uDD26\uD83C\uDFFF\u200D\u2640\uFE0F":"1f926-1f3ff-2640","\uD83E\uDD26\uD83C\uDFFF\u200D\u2642\uFE0F":"1f926-1f3ff-2642","\uD83E\uDD37\uD83C\uDFFB\u200D\u2640\uFE0F":"1f937-1f3fb-2640","\uD83E\uDD37\uD83C\uDFFB\u200D\u2642\uFE0F":"1f937-1f3fb-2642","\uD83E\uDD37\uD83C\uDFFC\u200D\u2640\uFE0F":"1f937-1f3fc-2640","\uD83E\uDD37\uD83C\uDFFC\u200D\u2642\uFE0F":"1f937-1f3fc-2642","\uD83E\uDD37\uD83C\uDFFD\u200D\u2640\uFE0F":"1f937-1f3fd-2640","\uD83E\uDD37\uD83C\uDFFD\u200D\u2642\uFE0F":"1f937-1f3fd-2642","\uD83E\uDD37\uD83C\uDFFE\u200D\u2640\uFE0F":"1f937-1f3fe-2640","\uD83E\uDD37\uD83C\uDFFE\u200D\u2642\uFE0F":"1f937-1f3fe-2642","\uD83E\uDD37\uD83C\uDFFF\u200D\u2640\uFE0F":"1f937-1f3ff-2640","\uD83E\uDD37\uD83C\uDFFF\u200D\u2642\uFE0F":"1f937-1f3ff-2642","\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8\uFE0F":"1f441-1f5e8","\uD83D\uDD75\uD83C\uDFFB\u200D\u2640\uFE0F":"1f575-1f3fb-2640","\uD83D\uDD75\uD83C\uDFFB\u200D\u2642\uFE0F":"1f575-1f3fb-2642","\uD83D\uDD75\uD83C\uDFFC\u200D\u2640\uFE0F":"1f575-1f3fc-2640","\uD83D\uDD75\uD83C\uDFFC\u200D\u2642\uFE0F":"1f575-1f3fc-2642","\uD83D\uDD75\uD83C\uDFFD\u200D\u2640\uFE0F":"1f575-1f3fd-2640","\uD83D\uDD75\uD83C\uDFFD\u200D\u2642\uFE0F":"1f575-1f3fd-2642","\uD83D\uDD75\uD83C\uDFFE\u200D\u2640\uFE0F":"1f575-1f3fe-2640","\uD83D\uDD75\uD83C\uDFFE\u200D\u2642\uFE0F":"1f575-1f3fe-2642","\uD83D\uDD75\uD83C\uDFFF\u200D\u2640\uFE0F":"1f575-1f3ff-2640","\uD83D\uDD75\uD83C\uDFFF\u200D\u2642\uFE0F":"1f575-1f3ff-2642","\uD83C\uDFCB\uD83C\uDFFB\u200D\u2640\uFE0F":"1f3cb-1f3fb-2640","\uD83C\uDFCB\uD83C\uDFFB\u200D\u2642\uFE0F":"1f3cb-1f3fb-2642","\uD83C\uDFCB\uD83C\uDFFC\u200D\u2640\uFE0F":"1f3cb-1f3fc-2640","\uD83C\uDFCB\uD83C\uDFFC\u200D\u2642\uFE0F":"1f3cb-1f3fc-2642","\uD83C\uDFCB\uD83C\uDFFD\u200D\u2640\uFE0F":"1f3cb-1f3fd-2640","\uD83C\uDFCB\uD83C\uDFFD\u200D\u2642\uFE0F":"1f3cb-1f3fd-2642","\uD83C\uDFCB\uD83C\uDFFE\u200D\u2640\uFE0F":"1f3cb-1f3fe-2640","\uD83C\uDFCB\uD83C\uDFFE\u200D\u2642\uFE0F":"1f3cb-1f3fe-2642","\uD83C\uDFCB\uD83C\uDFFF\u200D\u2640\uFE0F":"1f3cb-1f3ff-2640","\uD83C\uDFCB\uD83C\uDFFF\u200D\u2642\uFE0F":"1f3cb-1f3ff-2642","\uD83C\uDFCC\uD83C\uDFFB\u200D\u2640\uFE0F":"1f3cc-1f3fb-2640","\uD83C\uDFCC\uD83C\uDFFB\u200D\u2642\uFE0F":"1f3cc-1f3fb-2642","\uD83C\uDFCC\uD83C\uDFFC\u200D\u2640\uFE0F":"1f3cc-1f3fc-2640","\uD83C\uDFCC\uD83C\uDFFC\u200D\u2642\uFE0F":"1f3cc-1f3fc-2642","\uD83C\uDFCC\uD83C\uDFFD\u200D\u2640\uFE0F":"1f3cc-1f3fd-2640","\uD83C\uDFCC\uD83C\uDFFD\u200D\u2642\uFE0F":"1f3cc-1f3fd-2642","\uD83C\uDFCC\uD83C\uDFFE\u200D\u2640\uFE0F":"1f3cc-1f3fe-2640","\uD83C\uDFCC\uD83C\uDFFE\u200D\u2642\uFE0F":"1f3cc-1f3fe-2642","\uD83C\uDFCC\uD83C\uDFFF\u200D\u2640\uFE0F":"1f3cc-1f3ff-2640","\uD83C\uDFCC\uD83C\uDFFF\u200D\u2642\uFE0F":"1f3cc-1f3ff-2642","\uD83E\uDDD9\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9d9-1f3fb-2640","\uD83E\uDDD9\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9d9-1f3fb-2642","\uD83E\uDDD9\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9d9-1f3fc-2640","\uD83E\uDDD9\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9d9-1f3fc-2642","\uD83E\uDDD9\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9d9-1f3fd-2640","\uD83E\uDDD9\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9d9-1f3fd-2642","\uD83E\uDDD9\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9d9-1f3fe-2640","\uD83E\uDDD9\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9d9-1f3fe-2642","\uD83E\uDDD9\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9d9-1f3ff-2640","\uD83E\uDDD9\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9d9-1f3ff-2642","\uD83E\uDDDA\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9da-1f3fb-2640","\uD83E\uDDDA\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9da-1f3fb-2642","\uD83E\uDDDA\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9da-1f3fc-2640","\uD83E\uDDDA\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9da-1f3fc-2642","\uD83E\uDDDA\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9da-1f3fd-2640","\uD83E\uDDDA\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9da-1f3fd-2642","\uD83E\uDDDA\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9da-1f3fe-2640","\uD83E\uDDDA\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9da-1f3fe-2642","\uD83E\uDDDA\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9da-1f3ff-2640","\uD83E\uDDDA\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9da-1f3ff-2642","\uD83E\uDDDB\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9db-1f3fb-2640","\uD83E\uDDDB\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9db-1f3fb-2642","\uD83E\uDDDB\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9db-1f3fc-2640","\uD83E\uDDDB\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9db-1f3fc-2642","\uD83E\uDDDB\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9db-1f3fd-2640","\uD83E\uDDDB\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9db-1f3fd-2642","\uD83E\uDDDB\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9db-1f3fe-2640","\uD83E\uDDDB\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9db-1f3fe-2642","\uD83E\uDDDB\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9db-1f3ff-2640","\uD83E\uDDDB\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9db-1f3ff-2642","\uD83E\uDDDC\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9dc-1f3fb-2640","\uD83E\uDDDC\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9dc-1f3fb-2642","\uD83E\uDDDC\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9dc-1f3fc-2640","\uD83E\uDDDC\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9dc-1f3fc-2642","\uD83E\uDDDC\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9dc-1f3fd-2640","\uD83E\uDDDC\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9dc-1f3fd-2642","\uD83E\uDDDC\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9dc-1f3fe-2640","\uD83E\uDDDC\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9dc-1f3fe-2642","\uD83E\uDDDC\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9dc-1f3ff-2640","\uD83E\uDDDC\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9dc-1f3ff-2642","\uD83E\uDDDD\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9dd-1f3fb-2640","\uD83E\uDDDD\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9dd-1f3fb-2642","\uD83E\uDDDD\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9dd-1f3fc-2640","\uD83E\uDDDD\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9dd-1f3fc-2642","\uD83E\uDDDD\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9dd-1f3fd-2640","\uD83E\uDDDD\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9dd-1f3fd-2642","\uD83E\uDDDD\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9dd-1f3fe-2640","\uD83E\uDDDD\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9dd-1f3fe-2642","\uD83E\uDDDD\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9dd-1f3ff-2640","\uD83E\uDDDD\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9dd-1f3ff-2642","\uD83E\uDDD6\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9d6-1f3fb-2640","\uD83E\uDDD6\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9d6-1f3fb-2642","\uD83E\uDDD6\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9d6-1f3fc-2640","\uD83E\uDDD6\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9d6-1f3fc-2642","\uD83E\uDDD6\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9d6-1f3fd-2640","\uD83E\uDDD6\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9d6-1f3fd-2642","\uD83E\uDDD6\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9d6-1f3fe-2640","\uD83E\uDDD6\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9d6-1f3fe-2642","\uD83E\uDDD6\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9d6-1f3ff-2640","\uD83E\uDDD6\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9d6-1f3ff-2642","\uD83E\uDDD7\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9d7-1f3fb-2640","\uD83E\uDDD7\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9d7-1f3fb-2642","\uD83E\uDDD7\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9d7-1f3fc-2640","\uD83E\uDDD7\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9d7-1f3fc-2642","\uD83E\uDDD7\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9d7-1f3fd-2640","\uD83E\uDDD7\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9d7-1f3fd-2642","\uD83E\uDDD7\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9d7-1f3fe-2640","\uD83E\uDDD7\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9d7-1f3fe-2642","\uD83E\uDDD7\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9d7-1f3ff-2640","\uD83E\uDDD7\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9d7-1f3ff-2642","\uD83E\uDDD8\uD83C\uDFFB\u200D\u2640\uFE0F":"1f9d8-1f3fb-2640","\uD83E\uDDD8\uD83C\uDFFB\u200D\u2642\uFE0F":"1f9d8-1f3fb-2642","\uD83E\uDDD8\uD83C\uDFFC\u200D\u2640\uFE0F":"1f9d8-1f3fc-2640","\uD83E\uDDD8\uD83C\uDFFC\u200D\u2642\uFE0F":"1f9d8-1f3fc-2642","\uD83E\uDDD8\uD83C\uDFFD\u200D\u2640\uFE0F":"1f9d8-1f3fd-2640","\uD83E\uDDD8\uD83C\uDFFD\u200D\u2642\uFE0F":"1f9d8-1f3fd-2642","\uD83E\uDDD8\uD83C\uDFFE\u200D\u2640\uFE0F":"1f9d8-1f3fe-2640","\uD83E\uDDD8\uD83C\uDFFE\u200D\u2642\uFE0F":"1f9d8-1f3fe-2642","\uD83E\uDDD8\uD83C\uDFFF\u200D\u2640\uFE0F":"1f9d8-1f3ff-2640","\uD83E\uDDD8\uD83C\uDFFF\u200D\u2642\uFE0F":"1f9d8-1f3ff-2642","\uD83D\uDD75\uFE0F\u200D\u2640\uFE0F":"1f575-2640","\uD83D\uDD75\uFE0F\u200D\u2642\uFE0F":"1f575-2642","\u26F9\uFE0F\uD83C\uDFFB\u2640\uFE0F":"26f9-1f3fb-2640","\u26F9\uFE0F\uD83C\uDFFB\u2642\uFE0F":"26f9-1f3fb-2642","\u26F9\uFE0F\uD83C\uDFFC\u2640\uFE0F":"26f9-1f3fc-2640","\u26F9\uFE0F\uD83C\uDFFC\u2642\uFE0F":"26f9-1f3fc-2642","\u26F9\uFE0F\uD83C\uDFFD\u2640\uFE0F":"26f9-1f3fd-2640","\u26F9\uFE0F\uD83C\uDFFD\u2642\uFE0F":"26f9-1f3fd-2642","\u26F9\uFE0F\uD83C\uDFFE\u2640\uFE0F":"26f9-1f3fe-2640","\u26F9\uFE0F\uD83C\uDFFE\u2642\uFE0F":"26f9-1f3fe-2642","\u26F9\uFE0F\uD83C\uDFFF\u2640\uFE0F":"26f9-1f3ff-2640","\u26F9\uFE0F\uD83C\uDFFF\u2642\uFE0F":"26f9-1f3ff-2642","\uD83C\uDFCB\uFE0F\u200D\u2640\uFE0F":"1f3cb-2640","\uD83C\uDFCB\uFE0F\u200D\u2642\uFE0F":"1f3cb-2642","\uD83C\uDFCC\uFE0F\u200D\u2640\uFE0F":"1f3cc-2640","\uD83C\uDFCC\uFE0F\u200D\u2642\uFE0F":"1f3cc-2642","\u26F9\uD83C\uDFFB\u200D\u2640\uFE0F":"26f9-1f3fb-2640","\u26F9\uD83C\uDFFB\u200D\u2642\uFE0F":"26f9-1f3fb-2642","\u26F9\uD83C\uDFFC\u200D\u2640\uFE0F":"26f9-1f3fc-2640","\u26F9\uD83C\uDFFC\u200D\u2642\uFE0F":"26f9-1f3fc-2642","\u26F9\uD83C\uDFFD\u200D\u2640\uFE0F":"26f9-1f3fd-2640","\u26F9\uD83C\uDFFD\u200D\u2642\uFE0F":"26f9-1f3fd-2642","\u26F9\uD83C\uDFFE\u200D\u2640\uFE0F":"26f9-1f3fe-2640","\u26F9\uD83C\uDFFE\u200D\u2642\uFE0F":"26f9-1f3fe-2642","\u26F9\uD83C\uDFFF\u200D\u2640\uFE0F":"26f9-1f3ff-2640","\u26F9\uD83C\uDFFF\u200D\u2642\uFE0F":"26f9-1f3ff-2642","\u26F9\uFE0F\u200D\u2640\uFE0F":"26f9-2640","\u26F9\uFE0F\u200D\u2642\uFE0F":"26f9-2642","\uD83D\uDC68\uD83D\uDC68\uD83D\uDC66\uD83D\uDC66":"1f468-1f468-1f466-1f466","\uD83D\uDC68\uD83D\uDC68\uD83D\uDC67\uD83D\uDC66":"1f468-1f468-1f467-1f466","\uD83D\uDC68\uD83D\uDC68\uD83D\uDC67\uD83D\uDC67":"1f468-1f468-1f467-1f467","\uD83D\uDC68\uD83D\uDC69\uD83D\uDC66\uD83D\uDC66":"1f468-1f469-1f466-1f466","\uD83D\uDC68\uD83D\uDC69\uD83D\uDC67\uD83D\uDC66":"1f468-1f469-1f467-1f466","\uD83D\uDC68\uD83D\uDC69\uD83D\uDC67\uD83D\uDC67":"1f468-1f469-1f467-1f467","\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66\uD83D\uDC66":"1f469-1f469-1f466-1f466","\uD83D\uDC69\uD83D\uDC69\uD83D\uDC67\uD83D\uDC66":"1f469-1f469-1f467-1f466","\uD83D\uDC69\uD83D\uDC69\uD83D\uDC67\uD83D\uDC67":"1f469-1f469-1f467-1f467","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDCBB":"1f468-1f3ff-1f4bb","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDCBB":"1f468-1f3fe-1f4bb","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDCBB":"1f468-1f3fd-1f4bb","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDCBB":"1f468-1f3fc-1f4bb","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDCBB":"1f468-1f3fb-1f4bb","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDCBB":"1f469-1f3ff-1f4bb","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDCBB":"1f469-1f3fe-1f4bb","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDCBB":"1f469-1f3fd-1f4bb","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDCBB":"1f469-1f3fc-1f4bb","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDCBB":"1f469-1f3fb-1f4bb","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFEB":"1f468-1f3ff-1f3eb","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFEB":"1f468-1f3fe-1f3eb","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFEB":"1f468-1f3fd-1f3eb","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFEB":"1f468-1f3fc-1f3eb","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFEB":"1f468-1f3fb-1f3eb","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFEB":"1f469-1f3ff-1f3eb","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFEB":"1f469-1f3fe-1f3eb","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFEB":"1f469-1f3fd-1f3eb","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFEB":"1f469-1f3fc-1f3eb","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFEB":"1f469-1f3fb-1f3eb","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDF93":"1f468-1f3ff-1f393","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDF93":"1f468-1f3fe-1f393","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDF93":"1f468-1f3fd-1f393","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDF93":"1f468-1f3fc-1f393","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDF93":"1f468-1f3fb-1f393","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDF93":"1f469-1f3ff-1f393","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDF93":"1f469-1f3fe-1f393","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF93":"1f469-1f3fd-1f393","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDF93":"1f469-1f3fc-1f393","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDF93":"1f469-1f3fb-1f393","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFA4":"1f468-1f3ff-1f3a4","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFA4":"1f468-1f3fe-1f3a4","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFA4":"1f468-1f3fd-1f3a4","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFA4":"1f468-1f3fc-1f3a4","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFA4":"1f468-1f3fb-1f3a4","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFA4":"1f469-1f3ff-1f3a4","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFA4":"1f469-1f3fe-1f3a4","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFA4":"1f469-1f3fd-1f3a4","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFA4":"1f469-1f3fc-1f3a4","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFA4":"1f469-1f3fb-1f3a4","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDD2C":"1f468-1f3ff-1f52c","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDD2C":"1f468-1f3fe-1f52c","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDD2C":"1f468-1f3fd-1f52c","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDD2C":"1f468-1f3fc-1f52c","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDD2C":"1f468-1f3fb-1f52c","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDD2C":"1f469-1f3ff-1f52c","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDD2C":"1f469-1f3fe-1f52c","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDD2C":"1f469-1f3fd-1f52c","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDD2C":"1f469-1f3fc-1f52c","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDD2C":"1f469-1f3fb-1f52c","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDCBC":"1f468-1f3ff-1f4bc","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDCBC":"1f468-1f3fe-1f4bc","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDCBC":"1f468-1f3fd-1f4bc","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDCBC":"1f468-1f3fc-1f4bc","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDCBC":"1f468-1f3fb-1f4bc","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDCBC":"1f469-1f3ff-1f4bc","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDCBC":"1f469-1f3fe-1f4bc","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDCBC":"1f469-1f3fd-1f4bc","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDCBC":"1f469-1f3fc-1f4bc","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDCBC":"1f469-1f3fb-1f4bc","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDD27":"1f468-1f3ff-1f527","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDD27":"1f468-1f3fe-1f527","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDD27":"1f468-1f3fd-1f527","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDD27":"1f468-1f3fc-1f527","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDD27":"1f468-1f3fb-1f527","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDD27":"1f469-1f3ff-1f527","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDD27":"1f469-1f3fe-1f527","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDD27":"1f469-1f3fd-1f527","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDD27":"1f469-1f3fc-1f527","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDD27":"1f469-1f3fb-1f527","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFED":"1f468-1f3ff-1f3ed","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFED":"1f468-1f3fe-1f3ed","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFED":"1f468-1f3fd-1f3ed","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFED":"1f468-1f3fc-1f3ed","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFED":"1f468-1f3fb-1f3ed","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFED":"1f469-1f3ff-1f3ed","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFED":"1f469-1f3fe-1f3ed","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFED":"1f469-1f3fd-1f3ed","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFED":"1f469-1f3fc-1f3ed","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFED":"1f469-1f3fb-1f3ed","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDF73":"1f468-1f3ff-1f373","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDF73":"1f468-1f3fe-1f373","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDF73":"1f468-1f3fd-1f373","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDF73":"1f468-1f3fc-1f373","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDF73":"1f468-1f3fb-1f373","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDF73":"1f469-1f3ff-1f373","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDF73":"1f469-1f3fe-1f373","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF73":"1f469-1f3fd-1f373","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDF73":"1f469-1f3fc-1f373","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDF73":"1f469-1f3fb-1f373","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDF3E":"1f468-1f3ff-1f33e","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDF3E":"1f468-1f3fe-1f33e","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDF3E":"1f468-1f3fd-1f33e","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDF3E":"1f468-1f3fc-1f33e","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDF3E":"1f468-1f3fb-1f33e","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDF3E":"1f469-1f3ff-1f33e","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDF3E":"1f469-1f3fe-1f33e","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF3E":"1f469-1f3fd-1f33e","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDF3E":"1f469-1f3fc-1f33e","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDF3E":"1f469-1f3fb-1f33e","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFA8":"1f468-1f3fb-1f3a8","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFA8":"1f468-1f3fc-1f3a8","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFA8":"1f468-1f3fd-1f3a8","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFA8":"1f468-1f3fe-1f3a8","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFA8":"1f468-1f3ff-1f3a8","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFA8":"1f469-1f3fb-1f3a8","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFA8":"1f469-1f3fc-1f3a8","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFA8":"1f469-1f3fd-1f3a8","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFA8":"1f469-1f3fe-1f3a8","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFA8":"1f469-1f3ff-1f3a8","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDE80":"1f468-1f3fb-1f680","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDE80":"1f468-1f3fc-1f680","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDE80":"1f468-1f3fd-1f680","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDE80":"1f468-1f3fe-1f680","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDE80":"1f468-1f3ff-1f680","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDE80":"1f469-1f3fb-1f680","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDE80":"1f469-1f3fc-1f680","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDE80":"1f469-1f3fd-1f680","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDE80":"1f469-1f3fe-1f680","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDE80":"1f469-1f3ff-1f680","\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDE92":"1f468-1f3fb-1f692","\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDE92":"1f468-1f3fc-1f692","\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDE92":"1f468-1f3fd-1f692","\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDE92":"1f468-1f3fe-1f692","\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDE92":"1f468-1f3ff-1f692","\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDE92":"1f469-1f3fb-1f692","\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDE92":"1f469-1f3fc-1f692","\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDE92":"1f469-1f3fd-1f692","\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDE92":"1f469-1f3fe-1f692","\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDE92":"1f469-1f3ff-1f692","\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08":"1f3f3-1f308","\uD83C\uDFCC\uD83C\uDFFB\u200D\u2642":"1f3cc-1f3fb-2642","\uD83C\uDFCC\uD83C\uDFFC\u200D\u2642":"1f3cc-1f3fc-2642","\uD83C\uDFCC\uD83C\uDFFD\u200D\u2642":"1f3cc-1f3fd-2642","\uD83C\uDFCC\uD83C\uDFFE\u200D\u2642":"1f3cc-1f3fe-2642","\uD83C\uDFCC\uD83C\uDFFF\u200D\u2642":"1f3cc-1f3ff-2642","\uD83C\uDFCC\uD83C\uDFFB\u200D\u2640":"1f3cc-1f3fb-2640","\uD83C\uDFCC\uD83C\uDFFC\u200D\u2640":"1f3cc-1f3fc-2640","\uD83C\uDFCC\uD83C\uDFFD\u200D\u2640":"1f3cc-1f3fd-2640","\uD83C\uDFCC\uD83C\uDFFE\u200D\u2640":"1f3cc-1f3fe-2640","\uD83C\uDFCC\uD83C\uDFFF\u200D\u2640":"1f3cc-1f3ff-2640","\uD83E\uDD39\uD83C\uDFFF\u200D\u2642":"1f939-1f3ff-2642","\uD83E\uDD39\uD83C\uDFFE\u200D\u2642":"1f939-1f3fe-2642","\uD83E\uDD39\uD83C\uDFFD\u200D\u2642":"1f939-1f3fd-2642","\uD83E\uDD39\uD83C\uDFFC\u200D\u2642":"1f939-1f3fc-2642","\uD83E\uDD39\uD83C\uDFFB\u200D\u2642":"1f939-1f3fb-2642","\uD83E\uDD39\uD83C\uDFFF\u200D\u2640":"1f939-1f3ff-2640","\uD83E\uDD39\uD83C\uDFFE\u200D\u2640":"1f939-1f3fe-2640","\uD83E\uDD39\uD83C\uDFFD\u200D\u2640":"1f939-1f3fd-2640","\uD83E\uDD39\uD83C\uDFFC\u200D\u2640":"1f939-1f3fc-2640","\uD83E\uDD39\uD83C\uDFFB\u200D\u2640":"1f939-1f3fb-2640","\uD83E\uDD3E\uD83C\uDFFF\u200D\u2642":"1f93e-1f3ff-2642","\uD83E\uDD3E\uD83C\uDFFE\u200D\u2642":"1f93e-1f3fe-2642","\uD83E\uDD3E\uD83C\uDFFD\u200D\u2642":"1f93e-1f3fd-2642","\uD83E\uDD3E\uD83C\uDFFC\u200D\u2642":"1f93e-1f3fc-2642","\uD83E\uDD3E\uD83C\uDFFB\u200D\u2642":"1f93e-1f3fb-2642","\uD83E\uDD3E\uD83C\uDFFF\u200D\u2640":"1f93e-1f3ff-2640","\uD83E\uDD3E\uD83C\uDFFE\u200D\u2640":"1f93e-1f3fe-2640","\uD83E\uDD3E\uD83C\uDFFD\u200D\u2640":"1f93e-1f3fd-2640","\uD83E\uDD3E\uD83C\uDFFC\u200D\u2640":"1f93e-1f3fc-2640","\uD83E\uDD3E\uD83C\uDFFB\u200D\u2640":"1f93e-1f3fb-2640","\uD83E\uDD3D\uD83C\uDFFF\u200D\u2642":"1f93d-1f3ff-2642","\uD83E\uDD3D\uD83C\uDFFE\u200D\u2642":"1f93d-1f3fe-2642","\uD83E\uDD3D\uD83C\uDFFD\u200D\u2642":"1f93d-1f3fd-2642","\uD83E\uDD3D\uD83C\uDFFC\u200D\u2642":"1f93d-1f3fc-2642","\uD83E\uDD3D\uD83C\uDFFB\u200D\u2642":"1f93d-1f3fb-2642","\uD83E\uDD3D\uD83C\uDFFF\u200D\u2640":"1f93d-1f3ff-2640","\uD83E\uDD3D\uD83C\uDFFE\u200D\u2640":"1f93d-1f3fe-2640","\uD83E\uDD3D\uD83C\uDFFD\u200D\u2640":"1f93d-1f3fd-2640","\uD83E\uDD3D\uD83C\uDFFC\u200D\u2640":"1f93d-1f3fc-2640","\uD83E\uDD3D\uD83C\uDFFB\u200D\u2640":"1f93d-1f3fb-2640","\uD83E\uDD38\uD83C\uDFFF\u200D\u2642":"1f938-1f3ff-2642","\uD83E\uDD38\uD83C\uDFFE\u200D\u2642":"1f938-1f3fe-2642","\uD83E\uDD38\uD83C\uDFFD\u200D\u2642":"1f938-1f3fd-2642","\uD83E\uDD38\uD83C\uDFFC\u200D\u2642":"1f938-1f3fc-2642","\uD83E\uDD38\uD83C\uDFFB\u200D\u2642":"1f938-1f3fb-2642","\uD83E\uDD38\uD83C\uDFFF\u200D\u2640":"1f938-1f3ff-2640","\uD83E\uDD38\uD83C\uDFFE\u200D\u2640":"1f938-1f3fe-2640","\uD83E\uDD38\uD83C\uDFFD\u200D\u2640":"1f938-1f3fd-2640","\uD83E\uDD38\uD83C\uDFFC\u200D\u2640":"1f938-1f3fc-2640","\uD83E\uDD38\uD83C\uDFFB\u200D\u2640":"1f938-1f3fb-2640","\uD83D\uDEB6\uD83C\uDFFF\u200D\u2642":"1f6b6-1f3ff-2642","\uD83D\uDEB6\uD83C\uDFFE\u200D\u2642":"1f6b6-1f3fe-2642","\uD83D\uDEB6\uD83C\uDFFD\u200D\u2642":"1f6b6-1f3fd-2642","\uD83D\uDEB6\uD83C\uDFFC\u200D\u2642":"1f6b6-1f3fc-2642","\uD83D\uDEB6\uD83C\uDFFB\u200D\u2642":"1f6b6-1f3fb-2642","\uD83D\uDEB6\uD83C\uDFFF\u200D\u2640":"1f6b6-1f3ff-2640","\uD83D\uDEB6\uD83C\uDFFE\u200D\u2640":"1f6b6-1f3fe-2640","\uD83D\uDEB6\uD83C\uDFFD\u200D\u2640":"1f6b6-1f3fd-2640","\uD83D\uDEB6\uD83C\uDFFC\u200D\u2640":"1f6b6-1f3fc-2640","\uD83D\uDEB6\uD83C\uDFFB\u200D\u2640":"1f6b6-1f3fb-2640","\uD83D\uDEB5\uD83C\uDFFF\u200D\u2642":"1f6b5-1f3ff-2642","\uD83D\uDEB5\uD83C\uDFFE\u200D\u2642":"1f6b5-1f3fe-2642","\uD83D\uDEB5\uD83C\uDFFD\u200D\u2642":"1f6b5-1f3fd-2642","\uD83D\uDEB5\uD83C\uDFFC\u200D\u2642":"1f6b5-1f3fc-2642","\uD83D\uDEB5\uD83C\uDFFB\u200D\u2642":"1f6b5-1f3fb-2642","\uD83D\uDEB5\uD83C\uDFFF\u200D\u2640":"1f6b5-1f3ff-2640","\uD83D\uDEB5\uD83C\uDFFE\u200D\u2640":"1f6b5-1f3fe-2640","\uD83D\uDEB5\uD83C\uDFFD\u200D\u2640":"1f6b5-1f3fd-2640","\uD83D\uDEB5\uD83C\uDFFC\u200D\u2640":"1f6b5-1f3fc-2640","\uD83D\uDEB5\uD83C\uDFFB\u200D\u2640":"1f6b5-1f3fb-2640","\uD83D\uDEB4\uD83C\uDFFF\u200D\u2642":"1f6b4-1f3ff-2642","\uD83D\uDEB4\uD83C\uDFFE\u200D\u2642":"1f6b4-1f3fe-2642","\uD83D\uDEB4\uD83C\uDFFD\u200D\u2642":"1f6b4-1f3fd-2642","\uD83D\uDEB4\uD83C\uDFFC\u200D\u2642":"1f6b4-1f3fc-2642","\uD83D\uDEB4\uD83C\uDFFB\u200D\u2642":"1f6b4-1f3fb-2642","\uD83D\uDEB4\uD83C\uDFFF\u200D\u2640":"1f6b4-1f3ff-2640","\uD83D\uDEB4\uD83C\uDFFE\u200D\u2640":"1f6b4-1f3fe-2640","\uD83D\uDEB4\uD83C\uDFFD\u200D\u2640":"1f6b4-1f3fd-2640","\uD83D\uDEB4\uD83C\uDFFC\u200D\u2640":"1f6b4-1f3fc-2640","\uD83D\uDEB4\uD83C\uDFFB\u200D\u2640":"1f6b4-1f3fb-2640","\uD83D\uDEA3\uD83C\uDFFF\u200D\u2642":"1f6a3-1f3ff-2642","\uD83D\uDEA3\uD83C\uDFFE\u200D\u2642":"1f6a3-1f3fe-2642","\uD83D\uDEA3\uD83C\uDFFD\u200D\u2642":"1f6a3-1f3fd-2642","\uD83D\uDEA3\uD83C\uDFFC\u200D\u2642":"1f6a3-1f3fc-2642","\uD83D\uDEA3\uD83C\uDFFB\u200D\u2642":"1f6a3-1f3fb-2642","\uD83D\uDEA3\uD83C\uDFFF\u200D\u2640":"1f6a3-1f3ff-2640","\uD83D\uDEA3\uD83C\uDFFE\u200D\u2640":"1f6a3-1f3fe-2640","\uD83D\uDEA3\uD83C\uDFFD\u200D\u2640":"1f6a3-1f3fd-2640","\uD83D\uDEA3\uD83C\uDFFC\u200D\u2640":"1f6a3-1f3fc-2640","\uD83D\uDEA3\uD83C\uDFFB\u200D\u2640":"1f6a3-1f3fb-2640","\uD83C\uDFCB\uD83C\uDFFF\u200D\u2642":"1f3cb-1f3ff-2642","\uD83C\uDFCB\uD83C\uDFFE\u200D\u2642":"1f3cb-1f3fe-2642","\uD83C\uDFCB\uD83C\uDFFD\u200D\u2642":"1f3cb-1f3fd-2642","\uD83C\uDFCB\uD83C\uDFFC\u200D\u2642":"1f3cb-1f3fc-2642","\uD83C\uDFCB\uD83C\uDFFB\u200D\u2642":"1f3cb-1f3fb-2642","\uD83C\uDFCB\uD83C\uDFFF\u200D\u2640":"1f3cb-1f3ff-2640","\uD83C\uDFCB\uD83C\uDFFE\u200D\u2640":"1f3cb-1f3fe-2640","\uD83C\uDFCB\uD83C\uDFFD\u200D\u2640":"1f3cb-1f3fd-2640","\uD83C\uDFCB\uD83C\uDFFC\u200D\u2640":"1f3cb-1f3fc-2640","\uD83C\uDFCB\uD83C\uDFFB\u200D\u2640":"1f3cb-1f3fb-2640","\uD83C\uDFCA\uD83C\uDFFF\u200D\u2642":"1f3ca-1f3ff-2642","\uD83C\uDFCA\uD83C\uDFFE\u200D\u2642":"1f3ca-1f3fe-2642","\uD83C\uDFCA\uD83C\uDFFD\u200D\u2642":"1f3ca-1f3fd-2642","\uD83C\uDFCA\uD83C\uDFFC\u200D\u2642":"1f3ca-1f3fc-2642","\uD83C\uDFCA\uD83C\uDFFB\u200D\u2642":"1f3ca-1f3fb-2642","\uD83C\uDFCA\uD83C\uDFFF\u200D\u2640":"1f3ca-1f3ff-2640","\uD83C\uDFCA\uD83C\uDFFE\u200D\u2640":"1f3ca-1f3fe-2640","\uD83C\uDFCA\uD83C\uDFFD\u200D\u2640":"1f3ca-1f3fd-2640","\uD83C\uDFCA\uD83C\uDFFC\u200D\u2640":"1f3ca-1f3fc-2640","\uD83C\uDFCA\uD83C\uDFFB\u200D\u2640":"1f3ca-1f3fb-2640","\uD83C\uDFC4\uD83C\uDFFF\u200D\u2642":"1f3c4-1f3ff-2642","\uD83C\uDFC4\uD83C\uDFFE\u200D\u2642":"1f3c4-1f3fe-2642","\uD83C\uDFC4\uD83C\uDFFD\u200D\u2642":"1f3c4-1f3fd-2642","\uD83C\uDFC4\uD83C\uDFFC\u200D\u2642":"1f3c4-1f3fc-2642","\uD83C\uDFC4\uD83C\uDFFB\u200D\u2642":"1f3c4-1f3fb-2642","\uD83C\uDFC4\uD83C\uDFFF\u200D\u2640":"1f3c4-1f3ff-2640","\uD83C\uDFC4\uD83C\uDFFE\u200D\u2640":"1f3c4-1f3fe-2640","\uD83C\uDFC4\uD83C\uDFFD\u200D\u2640":"1f3c4-1f3fd-2640","\uD83C\uDFC4\uD83C\uDFFC\u200D\u2640":"1f3c4-1f3fc-2640","\uD83C\uDFC4\uD83C\uDFFB\u200D\u2640":"1f3c4-1f3fb-2640","\uD83C\uDFC3\uD83C\uDFFF\u200D\u2642":"1f3c3-1f3ff-2642","\uD83C\uDFC3\uD83C\uDFFE\u200D\u2642":"1f3c3-1f3fe-2642","\uD83C\uDFC3\uD83C\uDFFD\u200D\u2642":"1f3c3-1f3fd-2642","\uD83C\uDFC3\uD83C\uDFFC\u200D\u2642":"1f3c3-1f3fc-2642","\uD83C\uDFC3\uD83C\uDFFB\u200D\u2642":"1f3c3-1f3fb-2642","\uD83C\uDFC3\uD83C\uDFFF\u200D\u2640":"1f3c3-1f3ff-2640","\uD83C\uDFC3\uD83C\uDFFE\u200D\u2640":"1f3c3-1f3fe-2640","\uD83C\uDFC3\uD83C\uDFFD\u200D\u2640":"1f3c3-1f3fd-2640","\uD83C\uDFC3\uD83C\uDFFC\u200D\u2640":"1f3c3-1f3fc-2640","\uD83C\uDFC3\uD83C\uDFFB\u200D\u2640":"1f3c3-1f3fb-2640","\uD83E\uDD37\uD83C\uDFFF\u200D\u2642":"1f937-1f3ff-2642","\uD83E\uDD37\uD83C\uDFFE\u200D\u2642":"1f937-1f3fe-2642","\uD83E\uDD37\uD83C\uDFFD\u200D\u2642":"1f937-1f3fd-2642","\uD83E\uDD37\uD83C\uDFFC\u200D\u2642":"1f937-1f3fc-2642","\uD83E\uDD37\uD83C\uDFFB\u200D\u2642":"1f937-1f3fb-2642","\uD83E\uDD37\uD83C\uDFFF\u200D\u2640":"1f937-1f3ff-2640","\uD83E\uDD37\uD83C\uDFFE\u200D\u2640":"1f937-1f3fe-2640","\uD83E\uDD37\uD83C\uDFFD\u200D\u2640":"1f937-1f3fd-2640","\uD83E\uDD37\uD83C\uDFFC\u200D\u2640":"1f937-1f3fc-2640","\uD83E\uDD37\uD83C\uDFFB\u200D\u2640":"1f937-1f3fb-2640","\uD83E\uDD26\uD83C\uDFFF\u200D\u2642":"1f926-1f3ff-2642","\uD83E\uDD26\uD83C\uDFFE\u200D\u2642":"1f926-1f3fe-2642","\uD83E\uDD26\uD83C\uDFFD\u200D\u2642":"1f926-1f3fd-2642","\uD83E\uDD26\uD83C\uDFFC\u200D\u2642":"1f926-1f3fc-2642","\uD83E\uDD26\uD83C\uDFFB\u200D\u2642":"1f926-1f3fb-2642","\uD83E\uDD26\uD83C\uDFFF\u200D\u2640":"1f926-1f3ff-2640","\uD83E\uDD26\uD83C\uDFFE\u200D\u2640":"1f926-1f3fe-2640","\uD83E\uDD26\uD83C\uDFFD\u200D\u2640":"1f926-1f3fd-2640","\uD83E\uDD26\uD83C\uDFFC\u200D\u2640":"1f926-1f3fc-2640","\uD83E\uDD26\uD83C\uDFFB\u200D\u2640":"1f926-1f3fb-2640","\uD83D\uDE4E\uD83C\uDFFF\u200D\u2642":"1f64e-1f3ff-2642","\uD83D\uDE4E\uD83C\uDFFE\u200D\u2642":"1f64e-1f3fe-2642","\uD83D\uDE4E\uD83C\uDFFD\u200D\u2642":"1f64e-1f3fd-2642","\uD83D\uDE4E\uD83C\uDFFC\u200D\u2642":"1f64e-1f3fc-2642","\uD83D\uDE4E\uD83C\uDFFB\u200D\u2642":"1f64e-1f3fb-2642","\uD83D\uDE4E\uD83C\uDFFF\u200D\u2640":"1f64e-1f3ff-2640","\uD83D\uDE4E\uD83C\uDFFE\u200D\u2640":"1f64e-1f3fe-2640","\uD83D\uDE4E\uD83C\uDFFD\u200D\u2640":"1f64e-1f3fd-2640","\uD83D\uDE4E\uD83C\uDFFC\u200D\u2640":"1f64e-1f3fc-2640","\uD83D\uDE4E\uD83C\uDFFB\u200D\u2640":"1f64e-1f3fb-2640","\uD83D\uDE4D\uD83C\uDFFF\u200D\u2642":"1f64d-1f3ff-2642","\uD83D\uDE4D\uD83C\uDFFE\u200D\u2642":"1f64d-1f3fe-2642","\uD83D\uDE4D\uD83C\uDFFD\u200D\u2642":"1f64d-1f3fd-2642","\uD83D\uDE4D\uD83C\uDFFC\u200D\u2642":"1f64d-1f3fc-2642","\uD83D\uDE4D\uD83C\uDFFB\u200D\u2642":"1f64d-1f3fb-2642","\uD83D\uDE4D\uD83C\uDFFF\u200D\u2640":"1f64d-1f3ff-2640","\uD83D\uDE4D\uD83C\uDFFE\u200D\u2640":"1f64d-1f3fe-2640","\uD83D\uDE4D\uD83C\uDFFD\u200D\u2640":"1f64d-1f3fd-2640","\uD83D\uDE4D\uD83C\uDFFC\u200D\u2640":"1f64d-1f3fc-2640","\uD83D\uDE4D\uD83C\uDFFB\u200D\u2640":"1f64d-1f3fb-2640","\uD83D\uDE4B\uD83C\uDFFF\u200D\u2642":"1f64b-1f3ff-2642","\uD83D\uDE4B\uD83C\uDFFE\u200D\u2642":"1f64b-1f3fe-2642","\uD83D\uDE4B\uD83C\uDFFD\u200D\u2642":"1f64b-1f3fd-2642","\uD83D\uDE4B\uD83C\uDFFC\u200D\u2642":"1f64b-1f3fc-2642","\uD83D\uDE4B\uD83C\uDFFB\u200D\u2642":"1f64b-1f3fb-2642","\uD83D\uDE4B\uD83C\uDFFF\u200D\u2640":"1f64b-1f3ff-2640","\uD83D\uDE4B\uD83C\uDFFE\u200D\u2640":"1f64b-1f3fe-2640","\uD83D\uDE4B\uD83C\uDFFD\u200D\u2640":"1f64b-1f3fd-2640","\uD83D\uDE4B\uD83C\uDFFC\u200D\u2640":"1f64b-1f3fc-2640","\uD83D\uDE4B\uD83C\uDFFB\u200D\u2640":"1f64b-1f3fb-2640","\uD83D\uDE47\uD83C\uDFFF\u200D\u2642":"1f647-1f3ff-2642","\uD83D\uDE47\uD83C\uDFFE\u200D\u2642":"1f647-1f3fe-2642","\uD83D\uDE47\uD83C\uDFFD\u200D\u2642":"1f647-1f3fd-2642","\uD83D\uDE47\uD83C\uDFFC\u200D\u2642":"1f647-1f3fc-2642","\uD83D\uDE47\uD83C\uDFFB\u200D\u2642":"1f647-1f3fb-2642","\uD83D\uDE47\uD83C\uDFFF\u200D\u2640":"1f647-1f3ff-2640","\uD83D\uDE47\uD83C\uDFFE\u200D\u2640":"1f647-1f3fe-2640","\uD83D\uDE47\uD83C\uDFFD\u200D\u2640":"1f647-1f3fd-2640","\uD83D\uDE47\uD83C\uDFFC\u200D\u2640":"1f647-1f3fc-2640","\uD83D\uDE47\uD83C\uDFFB\u200D\u2640":"1f647-1f3fb-2640","\uD83D\uDE46\uD83C\uDFFF\u200D\u2642":"1f646-1f3ff-2642","\uD83D\uDE46\uD83C\uDFFE\u200D\u2642":"1f646-1f3fe-2642","\uD83D\uDE46\uD83C\uDFFD\u200D\u2642":"1f646-1f3fd-2642","\uD83D\uDE46\uD83C\uDFFC\u200D\u2642":"1f646-1f3fc-2642","\uD83D\uDE46\uD83C\uDFFB\u200D\u2642":"1f646-1f3fb-2642","\uD83D\uDE46\uD83C\uDFFF\u200D\u2640":"1f646-1f3ff-2640","\uD83D\uDE46\uD83C\uDFFE\u200D\u2640":"1f646-1f3fe-2640","\uD83D\uDE46\uD83C\uDFFD\u200D\u2640":"1f646-1f3fd-2640","\uD83D\uDE46\uD83C\uDFFC\u200D\u2640":"1f646-1f3fc-2640","\uD83D\uDE46\uD83C\uDFFB\u200D\u2640":"1f646-1f3fb-2640","\uD83D\uDE45\uD83C\uDFFF\u200D\u2642":"1f645-1f3ff-2642","\uD83D\uDE45\uD83C\uDFFE\u200D\u2642":"1f645-1f3fe-2642","\uD83D\uDE45\uD83C\uDFFD\u200D\u2642":"1f645-1f3fd-2642","\uD83D\uDE45\uD83C\uDFFC\u200D\u2642":"1f645-1f3fc-2642","\uD83D\uDE45\uD83C\uDFFB\u200D\u2642":"1f645-1f3fb-2642","\uD83D\uDE45\uD83C\uDFFF\u200D\u2640":"1f645-1f3ff-2640","\uD83D\uDE45\uD83C\uDFFE\u200D\u2640":"1f645-1f3fe-2640","\uD83D\uDE45\uD83C\uDFFD\u200D\u2640":"1f645-1f3fd-2640","\uD83D\uDE45\uD83C\uDFFC\u200D\u2640":"1f645-1f3fc-2640","\uD83D\uDE45\uD83C\uDFFB\u200D\u2640":"1f645-1f3fb-2640","\uD83D\uDC87\uD83C\uDFFF\u200D\u2642":"1f487-1f3ff-2642","\uD83D\uDC87\uD83C\uDFFE\u200D\u2642":"1f487-1f3fe-2642","\uD83D\uDC87\uD83C\uDFFD\u200D\u2642":"1f487-1f3fd-2642","\uD83D\uDC87\uD83C\uDFFC\u200D\u2642":"1f487-1f3fc-2642","\uD83D\uDC87\uD83C\uDFFB\u200D\u2642":"1f487-1f3fb-2642","\uD83D\uDC87\uD83C\uDFFF\u200D\u2640":"1f487-1f3ff-2640","\uD83D\uDC87\uD83C\uDFFE\u200D\u2640":"1f487-1f3fe-2640","\uD83D\uDC87\uD83C\uDFFD\u200D\u2640":"1f487-1f3fd-2640","\uD83D\uDC87\uD83C\uDFFC\u200D\u2640":"1f487-1f3fc-2640","\uD83D\uDC87\uD83C\uDFFB\u200D\u2640":"1f487-1f3fb-2640","\uD83D\uDC86\uD83C\uDFFF\u200D\u2642":"1f486-1f3ff-2642","\uD83D\uDC86\uD83C\uDFFE\u200D\u2642":"1f486-1f3fe-2642","\uD83D\uDC86\uD83C\uDFFD\u200D\u2642":"1f486-1f3fd-2642","\uD83D\uDC86\uD83C\uDFFC\u200D\u2642":"1f486-1f3fc-2642","\uD83D\uDC86\uD83C\uDFFB\u200D\u2642":"1f486-1f3fb-2642","\uD83D\uDC86\uD83C\uDFFF\u200D\u2640":"1f486-1f3ff-2640","\uD83D\uDC86\uD83C\uDFFE\u200D\u2640":"1f486-1f3fe-2640","\uD83D\uDC86\uD83C\uDFFD\u200D\u2640":"1f486-1f3fd-2640","\uD83D\uDC86\uD83C\uDFFC\u200D\u2640":"1f486-1f3fc-2640","\uD83D\uDC86\uD83C\uDFFB\u200D\u2640":"1f486-1f3fb-2640","\uD83D\uDC81\uD83C\uDFFF\u200D\u2642":"1f481-1f3ff-2642","\uD83D\uDC81\uD83C\uDFFE\u200D\u2642":"1f481-1f3fe-2642","\uD83D\uDC81\uD83C\uDFFD\u200D\u2642":"1f481-1f3fd-2642","\uD83D\uDC81\uD83C\uDFFC\u200D\u2642":"1f481-1f3fc-2642","\uD83D\uDC81\uD83C\uDFFB\u200D\u2642":"1f481-1f3fb-2642","\uD83D\uDC81\uD83C\uDFFF\u200D\u2640":"1f481-1f3ff-2640","\uD83D\uDC81\uD83C\uDFFE\u200D\u2640":"1f481-1f3fe-2640","\uD83D\uDC81\uD83C\uDFFD\u200D\u2640":"1f481-1f3fd-2640","\uD83D\uDC81\uD83C\uDFFC\u200D\u2640":"1f481-1f3fc-2640","\uD83D\uDC81\uD83C\uDFFB\u200D\u2640":"1f481-1f3fb-2640","\uD83D\uDC71\uD83C\uDFFF\u200D\u2642":"1f471-1f3ff-2642","\uD83D\uDC71\uD83C\uDFFE\u200D\u2642":"1f471-1f3fe-2642","\uD83D\uDC71\uD83C\uDFFD\u200D\u2642":"1f471-1f3fd-2642","\uD83D\uDC71\uD83C\uDFFC\u200D\u2642":"1f471-1f3fc-2642","\uD83D\uDC71\uD83C\uDFFB\u200D\u2642":"1f471-1f3fb-2642","\uD83D\uDC71\uD83C\uDFFF\u200D\u2640":"1f471-1f3ff-2640","\uD83D\uDC71\uD83C\uDFFE\u200D\u2640":"1f471-1f3fe-2640","\uD83D\uDC71\uD83C\uDFFD\u200D\u2640":"1f471-1f3fd-2640","\uD83D\uDC71\uD83C\uDFFC\u200D\u2640":"1f471-1f3fc-2640","\uD83D\uDC71\uD83C\uDFFB\u200D\u2640":"1f471-1f3fb-2640","\uD83D\uDC73\uD83C\uDFFF\u200D\u2642":"1f473-1f3ff-2642","\uD83D\uDC73\uD83C\uDFFE\u200D\u2642":"1f473-1f3fe-2642","\uD83D\uDC73\uD83C\uDFFD\u200D\u2642":"1f473-1f3fd-2642","\uD83D\uDC73\uD83C\uDFFC\u200D\u2642":"1f473-1f3fc-2642","\uD83D\uDC73\uD83C\uDFFB\u200D\u2642":"1f473-1f3fb-2642","\uD83D\uDC73\uD83C\uDFFF\u200D\u2640":"1f473-1f3ff-2640","\uD83D\uDC73\uD83C\uDFFE\u200D\u2640":"1f473-1f3fe-2640","\uD83D\uDC73\uD83C\uDFFD\u200D\u2640":"1f473-1f3fd-2640","\uD83D\uDC73\uD83C\uDFFC\u200D\u2640":"1f473-1f3fc-2640","\uD83D\uDC73\uD83C\uDFFB\u200D\u2640":"1f473-1f3fb-2640","\uD83D\uDC82\uD83C\uDFFF\u200D\u2642":"1f482-1f3ff-2642","\uD83D\uDC82\uD83C\uDFFE\u200D\u2642":"1f482-1f3fe-2642","\uD83D\uDC82\uD83C\uDFFD\u200D\u2642":"1f482-1f3fd-2642","\uD83D\uDC82\uD83C\uDFFC\u200D\u2642":"1f482-1f3fc-2642","\uD83D\uDC82\uD83C\uDFFB\u200D\u2642":"1f482-1f3fb-2642","\uD83D\uDC82\uD83C\uDFFF\u200D\u2640":"1f482-1f3ff-2640","\uD83D\uDC82\uD83C\uDFFE\u200D\u2640":"1f482-1f3fe-2640","\uD83D\uDC82\uD83C\uDFFD\u200D\u2640":"1f482-1f3fd-2640","\uD83D\uDC82\uD83C\uDFFC\u200D\u2640":"1f482-1f3fc-2640","\uD83D\uDC82\uD83C\uDFFB\u200D\u2640":"1f482-1f3fb-2640","\uD83D\uDD75\uD83C\uDFFF\u200D\u2642":"1f575-1f3ff-2642","\uD83D\uDD75\uD83C\uDFFE\u200D\u2642":"1f575-1f3fe-2642","\uD83D\uDD75\uD83C\uDFFD\u200D\u2642":"1f575-1f3fd-2642","\uD83D\uDD75\uD83C\uDFFC\u200D\u2642":"1f575-1f3fc-2642","\uD83D\uDD75\uD83C\uDFFB\u200D\u2642":"1f575-1f3fb-2642","\uD83D\uDD75\uD83C\uDFFF\u200D\u2640":"1f575-1f3ff-2640","\uD83D\uDD75\uD83C\uDFFE\u200D\u2640":"1f575-1f3fe-2640","\uD83D\uDD75\uD83C\uDFFD\u200D\u2640":"1f575-1f3fd-2640","\uD83D\uDD75\uD83C\uDFFC\u200D\u2640":"1f575-1f3fc-2640","\uD83D\uDD75\uD83C\uDFFB\u200D\u2640":"1f575-1f3fb-2640","\uD83D\uDC77\uD83C\uDFFF\u200D\u2642":"1f477-1f3ff-2642","\uD83D\uDC77\uD83C\uDFFE\u200D\u2642":"1f477-1f3fe-2642","\uD83D\uDC77\uD83C\uDFFD\u200D\u2642":"1f477-1f3fd-2642","\uD83D\uDC77\uD83C\uDFFC\u200D\u2642":"1f477-1f3fc-2642","\uD83D\uDC77\uD83C\uDFFB\u200D\u2642":"1f477-1f3fb-2642","\uD83D\uDC77\uD83C\uDFFF\u200D\u2640":"1f477-1f3ff-2640","\uD83D\uDC77\uD83C\uDFFE\u200D\u2640":"1f477-1f3fe-2640","\uD83D\uDC77\uD83C\uDFFD\u200D\u2640":"1f477-1f3fd-2640","\uD83D\uDC77\uD83C\uDFFC\u200D\u2640":"1f477-1f3fc-2640","\uD83D\uDC77\uD83C\uDFFB\u200D\u2640":"1f477-1f3fb-2640","\uD83D\uDC6E\uD83C\uDFFF\u200D\u2642":"1f46e-1f3ff-2642","\uD83D\uDC6E\uD83C\uDFFE\u200D\u2642":"1f46e-1f3fe-2642","\uD83D\uDC6E\uD83C\uDFFD\u200D\u2642":"1f46e-1f3fd-2642","\uD83D\uDC6E\uD83C\uDFFC\u200D\u2642":"1f46e-1f3fc-2642","\uD83D\uDC6E\uD83C\uDFFB\u200D\u2642":"1f46e-1f3fb-2642","\uD83D\uDC6E\uD83C\uDFFF\u200D\u2640":"1f46e-1f3ff-2640","\uD83D\uDC6E\uD83C\uDFFE\u200D\u2640":"1f46e-1f3fe-2640","\uD83D\uDC6E\uD83C\uDFFD\u200D\u2640":"1f46e-1f3fd-2640","\uD83D\uDC6E\uD83C\uDFFC\u200D\u2640":"1f46e-1f3fc-2640","\uD83D\uDC6E\uD83C\uDFFB\u200D\u2640":"1f46e-1f3fb-2640","\uD83D\uDC68\uD83C\uDFFF\u200D\u2695":"1f468-1f3ff-2695","\uD83D\uDC68\uD83C\uDFFE\u200D\u2695":"1f468-1f3fe-2695","\uD83D\uDC68\uD83C\uDFFD\u200D\u2695":"1f468-1f3fd-2695","\uD83D\uDC68\uD83C\uDFFC\u200D\u2695":"1f468-1f3fc-2695","\uD83D\uDC68\uD83C\uDFFB\u200D\u2695":"1f468-1f3fb-2695","\uD83D\uDC69\uD83C\uDFFF\u200D\u2695":"1f469-1f3ff-2695","\uD83D\uDC69\uD83C\uDFFE\u200D\u2695":"1f469-1f3fe-2695","\uD83D\uDC69\uD83C\uDFFD\u200D\u2695":"1f469-1f3fd-2695","\uD83D\uDC69\uD83C\uDFFC\u200D\u2695":"1f469-1f3fc-2695","\uD83D\uDC69\uD83C\uDFFB\u200D\u2695":"1f469-1f3fb-2695","\uD83D\uDC68\uD83C\uDFFB\u200D\u2696":"1f468-1f3fb-2696","\uD83D\uDC68\uD83C\uDFFC\u200D\u2696":"1f468-1f3fc-2696","\uD83D\uDC68\uD83C\uDFFD\u200D\u2696":"1f468-1f3fd-2696","\uD83D\uDC68\uD83C\uDFFE\u200D\u2696":"1f468-1f3fe-2696","\uD83D\uDC68\uD83C\uDFFF\u200D\u2696":"1f468-1f3ff-2696","\uD83D\uDC69\uD83C\uDFFB\u200D\u2696":"1f469-1f3fb-2696","\uD83D\uDC69\uD83C\uDFFC\u200D\u2696":"1f469-1f3fc-2696","\uD83D\uDC69\uD83C\uDFFD\u200D\u2696":"1f469-1f3fd-2696","\uD83D\uDC69\uD83C\uDFFE\u200D\u2696":"1f469-1f3fe-2696","\uD83D\uDC69\uD83C\uDFFF\u200D\u2696":"1f469-1f3ff-2696","\uD83D\uDC68\uD83C\uDFFB\u200D\u2708":"1f468-1f3fb-2708","\uD83D\uDC68\uD83C\uDFFC\u200D\u2708":"1f468-1f3fc-2708","\uD83D\uDC68\uD83C\uDFFD\u200D\u2708":"1f468-1f3fd-2708","\uD83D\uDC68\uD83C\uDFFE\u200D\u2708":"1f468-1f3fe-2708","\uD83D\uDC68\uD83C\uDFFF\u200D\u2708":"1f468-1f3ff-2708","\uD83D\uDC69\uD83C\uDFFB\u200D\u2708":"1f469-1f3fb-2708","\uD83D\uDC69\uD83C\uDFFC\u200D\u2708":"1f469-1f3fc-2708","\uD83D\uDC69\uD83C\uDFFD\u200D\u2708":"1f469-1f3fd-2708","\uD83D\uDC69\uD83C\uDFFE\u200D\u2708":"1f469-1f3fe-2708","\uD83D\uDC69\uD83C\uDFFF\u200D\u2708":"1f469-1f3ff-2708","\uD83D\uDC68\u2764\uFE0F\uD83D\uDC68":"1f468-2764-1f468","\uD83D\uDC69\u2764\uFE0F\uD83D\uDC68":"1f469-2764-1f468","\uD83D\uDC69\u2764\uFE0F\uD83D\uDC69":"1f469-2764-1f469","\uD83D\uDC68\uD83C\uDFFB\u2695\uFE0F":"1f468-1f3fb-2695","\uD83D\uDC68\uD83C\uDFFB\u2696\uFE0F":"1f468-1f3fb-2696","\uD83D\uDC68\uD83C\uDFFB\u2708\uFE0F":"1f468-1f3fb-2708","\uD83D\uDC68\uD83C\uDFFC\u2695\uFE0F":"1f468-1f3fc-2695","\uD83D\uDC68\uD83C\uDFFC\u2696\uFE0F":"1f468-1f3fc-2696","\uD83D\uDC68\uD83C\uDFFC\u2708\uFE0F":"1f468-1f3fc-2708","\uD83D\uDC68\uD83C\uDFFD\u2695\uFE0F":"1f468-1f3fd-2695","\uD83D\uDC68\uD83C\uDFFD\u2696\uFE0F":"1f468-1f3fd-2696","\uD83D\uDC68\uD83C\uDFFD\u2708\uFE0F":"1f468-1f3fd-2708","\uD83D\uDC68\uD83C\uDFFE\u2695\uFE0F":"1f468-1f3fe-2695","\uD83D\uDC68\uD83C\uDFFE\u2696\uFE0F":"1f468-1f3fe-2696","\uD83D\uDC68\uD83C\uDFFE\u2708\uFE0F":"1f468-1f3fe-2708","\uD83D\uDC68\uD83C\uDFFF\u2695\uFE0F":"1f468-1f3ff-2695","\uD83D\uDC68\uD83C\uDFFF\u2696\uFE0F":"1f468-1f3ff-2696","\uD83D\uDC68\uD83C\uDFFF\u2708\uFE0F":"1f468-1f3ff-2708","\uD83D\uDC69\uD83C\uDFFB\u2695\uFE0F":"1f469-1f3fb-2695","\uD83D\uDC69\uD83C\uDFFB\u2696\uFE0F":"1f469-1f3fb-2696","\uD83D\uDC69\uD83C\uDFFB\u2708\uFE0F":"1f469-1f3fb-2708","\uD83D\uDC69\uD83C\uDFFC\u2695\uFE0F":"1f469-1f3fc-2695","\uD83D\uDC69\uD83C\uDFFC\u2696\uFE0F":"1f469-1f3fc-2696","\uD83D\uDC69\uD83C\uDFFC\u2708\uFE0F":"1f469-1f3fc-2708","\uD83D\uDC69\uD83C\uDFFD\u2695\uFE0F":"1f469-1f3fd-2695","\uD83D\uDC69\uD83C\uDFFD\u2696\uFE0F":"1f469-1f3fd-2696","\uD83D\uDC69\uD83C\uDFFD\u2708\uFE0F":"1f469-1f3fd-2708","\uD83D\uDC69\uD83C\uDFFE\u2695\uFE0F":"1f469-1f3fe-2695","\uD83D\uDC69\uD83C\uDFFE\u2696\uFE0F":"1f469-1f3fe-2696","\uD83D\uDC69\uD83C\uDFFE\u2708\uFE0F":"1f469-1f3fe-2708","\uD83D\uDC69\uD83C\uDFFF\u2695\uFE0F":"1f469-1f3ff-2695","\uD83D\uDC69\uD83C\uDFFF\u2696\uFE0F":"1f469-1f3ff-2696","\uD83D\uDC69\uD83C\uDFFF\u2708\uFE0F":"1f469-1f3ff-2708","\uD83D\uDC6E\uD83C\uDFFB\u2640\uFE0F":"1f46e-1f3fb-2640","\uD83D\uDC6E\uD83C\uDFFB\u2642\uFE0F":"1f46e-1f3fb-2642","\uD83D\uDC6E\uD83C\uDFFC\u2640\uFE0F":"1f46e-1f3fc-2640","\uD83D\uDC6E\uD83C\uDFFC\u2642\uFE0F":"1f46e-1f3fc-2642","\uD83D\uDC6E\uD83C\uDFFD\u2640\uFE0F":"1f46e-1f3fd-2640","\uD83D\uDC6E\uD83C\uDFFD\u2642\uFE0F":"1f46e-1f3fd-2642","\uD83D\uDC6E\uD83C\uDFFE\u2640\uFE0F":"1f46e-1f3fe-2640","\uD83D\uDC6E\uD83C\uDFFE\u2642\uFE0F":"1f46e-1f3fe-2642","\uD83D\uDC6E\uD83C\uDFFF\u2640\uFE0F":"1f46e-1f3ff-2640","\uD83D\uDC6E\uD83C\uDFFF\u2642\uFE0F":"1f46e-1f3ff-2642","\uD83D\uDC71\uD83C\uDFFB\u2640\uFE0F":"1f471-1f3fb-2640","\uD83D\uDC71\uD83C\uDFFB\u2642\uFE0F":"1f471-1f3fb-2642","\uD83D\uDC71\uD83C\uDFFC\u2640\uFE0F":"1f471-1f3fc-2640","\uD83D\uDC71\uD83C\uDFFC\u2642\uFE0F":"1f471-1f3fc-2642","\uD83D\uDC71\uD83C\uDFFD\u2640\uFE0F":"1f471-1f3fd-2640","\uD83D\uDC71\uD83C\uDFFD\u2642\uFE0F":"1f471-1f3fd-2642","\uD83D\uDC71\uD83C\uDFFE\u2640\uFE0F":"1f471-1f3fe-2640","\uD83D\uDC71\uD83C\uDFFE\u2642\uFE0F":"1f471-1f3fe-2642","\uD83D\uDC71\uD83C\uDFFF\u2640\uFE0F":"1f471-1f3ff-2640","\uD83D\uDC71\uD83C\uDFFF\u2642\uFE0F":"1f471-1f3ff-2642","\uD83D\uDC73\uD83C\uDFFB\u2640\uFE0F":"1f473-1f3fb-2640","\uD83D\uDC73\uD83C\uDFFB\u2642\uFE0F":"1f473-1f3fb-2642","\uD83D\uDC73\uD83C\uDFFC\u2640\uFE0F":"1f473-1f3fc-2640","\uD83D\uDC73\uD83C\uDFFC\u2642\uFE0F":"1f473-1f3fc-2642","\uD83D\uDC73\uD83C\uDFFD\u2640\uFE0F":"1f473-1f3fd-2640","\uD83D\uDC73\uD83C\uDFFD\u2642\uFE0F":"1f473-1f3fd-2642","\uD83D\uDC73\uD83C\uDFFE\u2640\uFE0F":"1f473-1f3fe-2640","\uD83D\uDC73\uD83C\uDFFE\u2642\uFE0F":"1f473-1f3fe-2642","\uD83D\uDC73\uD83C\uDFFF\u2640\uFE0F":"1f473-1f3ff-2640","\uD83D\uDC73\uD83C\uDFFF\u2642\uFE0F":"1f473-1f3ff-2642","\uD83D\uDC77\uD83C\uDFFB\u2640\uFE0F":"1f477-1f3fb-2640","\uD83D\uDC77\uD83C\uDFFB\u2642\uFE0F":"1f477-1f3fb-2642","\uD83D\uDC77\uD83C\uDFFC\u2640\uFE0F":"1f477-1f3fc-2640","\uD83D\uDC77\uD83C\uDFFC\u2642\uFE0F":"1f477-1f3fc-2642","\uD83D\uDC77\uD83C\uDFFD\u2640\uFE0F":"1f477-1f3fd-2640","\uD83D\uDC77\uD83C\uDFFD\u2642\uFE0F":"1f477-1f3fd-2642","\uD83D\uDC77\uD83C\uDFFE\u2640\uFE0F":"1f477-1f3fe-2640","\uD83D\uDC77\uD83C\uDFFE\u2642\uFE0F":"1f477-1f3fe-2642","\uD83D\uDC77\uD83C\uDFFF\u2640\uFE0F":"1f477-1f3ff-2640","\uD83D\uDC77\uD83C\uDFFF\u2642\uFE0F":"1f477-1f3ff-2642","\uD83D\uDC82\uD83C\uDFFB\u2640\uFE0F":"1f482-1f3fb-2640","\uD83D\uDC82\uD83C\uDFFB\u2642\uFE0F":"1f482-1f3fb-2642","\uD83D\uDC82\uD83C\uDFFC\u2640\uFE0F":"1f482-1f3fc-2640","\uD83D\uDC82\uD83C\uDFFC\u2642\uFE0F":"1f482-1f3fc-2642","\uD83D\uDC82\uD83C\uDFFD\u2640\uFE0F":"1f482-1f3fd-2640","\uD83D\uDC82\uD83C\uDFFD\u2642\uFE0F":"1f482-1f3fd-2642","\uD83D\uDC82\uD83C\uDFFE\u2640\uFE0F":"1f482-1f3fe-2640","\uD83D\uDC82\uD83C\uDFFE\u2642\uFE0F":"1f482-1f3fe-2642","\uD83D\uDC82\uD83C\uDFFF\u2640\uFE0F":"1f482-1f3ff-2640","\uD83D\uDC82\uD83C\uDFFF\u2642\uFE0F":"1f482-1f3ff-2642","\uD83C\uDFC3\uD83C\uDFFB\u2640\uFE0F":"1f3c3-1f3fb-2640","\uD83C\uDFC3\uD83C\uDFFB\u2642\uFE0F":"1f3c3-1f3fb-2642","\uD83C\uDFC3\uD83C\uDFFC\u2640\uFE0F":"1f3c3-1f3fc-2640","\uD83C\uDFC3\uD83C\uDFFC\u2642\uFE0F":"1f3c3-1f3fc-2642","\uD83C\uDFC3\uD83C\uDFFD\u2640\uFE0F":"1f3c3-1f3fd-2640","\uD83C\uDFC3\uD83C\uDFFD\u2642\uFE0F":"1f3c3-1f3fd-2642","\uD83C\uDFC3\uD83C\uDFFE\u2640\uFE0F":"1f3c3-1f3fe-2640","\uD83C\uDFC3\uD83C\uDFFE\u2642\uFE0F":"1f3c3-1f3fe-2642","\uD83C\uDFC3\uD83C\uDFFF\u2640\uFE0F":"1f3c3-1f3ff-2640","\uD83C\uDFC3\uD83C\uDFFF\u2642\uFE0F":"1f3c3-1f3ff-2642","\uD83C\uDFC4\uD83C\uDFFB\u2640\uFE0F":"1f3c4-1f3fb-2640","\uD83C\uDFC4\uD83C\uDFFB\u2642\uFE0F":"1f3c4-1f3fb-2642","\uD83C\uDFC4\uD83C\uDFFC\u2640\uFE0F":"1f3c4-1f3fc-2640","\uD83C\uDFC4\uD83C\uDFFC\u2642\uFE0F":"1f3c4-1f3fc-2642","\uD83C\uDFC4\uD83C\uDFFD\u2640\uFE0F":"1f3c4-1f3fd-2640","\uD83C\uDFC4\uD83C\uDFFD\u2642\uFE0F":"1f3c4-1f3fd-2642","\uD83C\uDFC4\uD83C\uDFFE\u2640\uFE0F":"1f3c4-1f3fe-2640","\uD83C\uDFC4\uD83C\uDFFE\u2642\uFE0F":"1f3c4-1f3fe-2642","\uD83C\uDFC4\uD83C\uDFFF\u2640\uFE0F":"1f3c4-1f3ff-2640","\uD83C\uDFC4\uD83C\uDFFF\u2642\uFE0F":"1f3c4-1f3ff-2642","\uD83C\uDFCA\uD83C\uDFFB\u2640\uFE0F":"1f3ca-1f3fb-2640","\uD83C\uDFCA\uD83C\uDFFB\u2642\uFE0F":"1f3ca-1f3fb-2642","\uD83C\uDFCA\uD83C\uDFFC\u2640\uFE0F":"1f3ca-1f3fc-2640","\uD83C\uDFCA\uD83C\uDFFC\u2642\uFE0F":"1f3ca-1f3fc-2642","\uD83C\uDFCA\uD83C\uDFFD\u2640\uFE0F":"1f3ca-1f3fd-2640","\uD83C\uDFCA\uD83C\uDFFD\u2642\uFE0F":"1f3ca-1f3fd-2642","\uD83C\uDFCA\uD83C\uDFFE\u2640\uFE0F":"1f3ca-1f3fe-2640","\uD83C\uDFCA\uD83C\uDFFE\u2642\uFE0F":"1f3ca-1f3fe-2642","\uD83C\uDFCA\uD83C\uDFFF\u2640\uFE0F":"1f3ca-1f3ff-2640","\uD83C\uDFCA\uD83C\uDFFF\u2642\uFE0F":"1f3ca-1f3ff-2642","\uD83D\uDC86\uD83C\uDFFB\u2640\uFE0F":"1f486-1f3fb-2640","\uD83D\uDC86\uD83C\uDFFB\u2642\uFE0F":"1f486-1f3fb-2642","\uD83D\uDC86\uD83C\uDFFC\u2640\uFE0F":"1f486-1f3fc-2640","\uD83D\uDC86\uD83C\uDFFC\u2642\uFE0F":"1f486-1f3fc-2642","\uD83D\uDC86\uD83C\uDFFD\u2640\uFE0F":"1f486-1f3fd-2640","\uD83D\uDC86\uD83C\uDFFD\u2642\uFE0F":"1f486-1f3fd-2642","\uD83D\uDC86\uD83C\uDFFE\u2640\uFE0F":"1f486-1f3fe-2640","\uD83D\uDC86\uD83C\uDFFE\u2642\uFE0F":"1f486-1f3fe-2642","\uD83D\uDC86\uD83C\uDFFF\u2640\uFE0F":"1f486-1f3ff-2640","\uD83D\uDC86\uD83C\uDFFF\u2642\uFE0F":"1f486-1f3ff-2642","\uD83D\uDC87\uD83C\uDFFB\u2640\uFE0F":"1f487-1f3fb-2640","\uD83D\uDC87\uD83C\uDFFB\u2642\uFE0F":"1f487-1f3fb-2642","\uD83D\uDC87\uD83C\uDFFC\u2640\uFE0F":"1f487-1f3fc-2640","\uD83D\uDC87\uD83C\uDFFC\u2642\uFE0F":"1f487-1f3fc-2642","\uD83D\uDC87\uD83C\uDFFD\u2640\uFE0F":"1f487-1f3fd-2640","\uD83D\uDC87\uD83C\uDFFD\u2642\uFE0F":"1f487-1f3fd-2642","\uD83D\uDC87\uD83C\uDFFE\u2640\uFE0F":"1f487-1f3fe-2640","\uD83D\uDC87\uD83C\uDFFE\u2642\uFE0F":"1f487-1f3fe-2642","\uD83D\uDC87\uD83C\uDFFF\u2640\uFE0F":"1f487-1f3ff-2640","\uD83D\uDC87\uD83C\uDFFF\u2642\uFE0F":"1f487-1f3ff-2642","\uD83D\uDEA3\uD83C\uDFFB\u2640\uFE0F":"1f6a3-1f3fb-2640","\uD83D\uDEA3\uD83C\uDFFB\u2642\uFE0F":"1f6a3-1f3fb-2642","\uD83D\uDEA3\uD83C\uDFFC\u2640\uFE0F":"1f6a3-1f3fc-2640","\uD83D\uDEA3\uD83C\uDFFC\u2642\uFE0F":"1f6a3-1f3fc-2642","\uD83D\uDEA3\uD83C\uDFFD\u2640\uFE0F":"1f6a3-1f3fd-2640","\uD83D\uDEA3\uD83C\uDFFD\u2642\uFE0F":"1f6a3-1f3fd-2642","\uD83D\uDEA3\uD83C\uDFFE\u2640\uFE0F":"1f6a3-1f3fe-2640","\uD83D\uDEA3\uD83C\uDFFE\u2642\uFE0F":"1f6a3-1f3fe-2642","\uD83D\uDEA3\uD83C\uDFFF\u2640\uFE0F":"1f6a3-1f3ff-2640","\uD83D\uDEA3\uD83C\uDFFF\u2642\uFE0F":"1f6a3-1f3ff-2642","\uD83D\uDEB4\uD83C\uDFFB\u2640\uFE0F":"1f6b4-1f3fb-2640","\uD83D\uDEB4\uD83C\uDFFB\u2642\uFE0F":"1f6b4-1f3fb-2642","\uD83D\uDEB4\uD83C\uDFFC\u2640\uFE0F":"1f6b4-1f3fc-2640","\uD83D\uDEB4\uD83C\uDFFC\u2642\uFE0F":"1f6b4-1f3fc-2642","\uD83D\uDEB4\uD83C\uDFFD\u2640\uFE0F":"1f6b4-1f3fd-2640","\uD83D\uDEB4\uD83C\uDFFD\u2642\uFE0F":"1f6b4-1f3fd-2642","\uD83D\uDEB4\uD83C\uDFFE\u2640\uFE0F":"1f6b4-1f3fe-2640","\uD83D\uDEB4\uD83C\uDFFE\u2642\uFE0F":"1f6b4-1f3fe-2642","\uD83D\uDEB4\uD83C\uDFFF\u2640\uFE0F":"1f6b4-1f3ff-2640","\uD83D\uDEB4\uD83C\uDFFF\u2642\uFE0F":"1f6b4-1f3ff-2642","\uD83D\uDEB5\uD83C\uDFFB\u2640\uFE0F":"1f6b5-1f3fb-2640","\uD83D\uDEB5\uD83C\uDFFB\u2642\uFE0F":"1f6b5-1f3fb-2642","\uD83D\uDEB5\uD83C\uDFFC\u2640\uFE0F":"1f6b5-1f3fc-2640","\uD83D\uDEB5\uD83C\uDFFC\u2642\uFE0F":"1f6b5-1f3fc-2642","\uD83D\uDEB5\uD83C\uDFFD\u2640\uFE0F":"1f6b5-1f3fd-2640","\uD83D\uDEB5\uD83C\uDFFD\u2642\uFE0F":"1f6b5-1f3fd-2642","\uD83D\uDEB5\uD83C\uDFFE\u2640\uFE0F":"1f6b5-1f3fe-2640","\uD83D\uDEB5\uD83C\uDFFE\u2642\uFE0F":"1f6b5-1f3fe-2642","\uD83D\uDEB5\uD83C\uDFFF\u2640\uFE0F":"1f6b5-1f3ff-2640","\uD83D\uDEB5\uD83C\uDFFF\u2642\uFE0F":"1f6b5-1f3ff-2642","\uD83D\uDEB6\uD83C\uDFFB\u2640\uFE0F":"1f6b6-1f3fb-2640","\uD83D\uDEB6\uD83C\uDFFB\u2642\uFE0F":"1f6b6-1f3fb-2642","\uD83D\uDEB6\uD83C\uDFFC\u2640\uFE0F":"1f6b6-1f3fc-2640","\uD83D\uDEB6\uD83C\uDFFC\u2642\uFE0F":"1f6b6-1f3fc-2642","\uD83D\uDEB6\uD83C\uDFFD\u2640\uFE0F":"1f6b6-1f3fd-2640","\uD83D\uDEB6\uD83C\uDFFD\u2642\uFE0F":"1f6b6-1f3fd-2642","\uD83D\uDEB6\uD83C\uDFFE\u2640\uFE0F":"1f6b6-1f3fe-2640","\uD83D\uDEB6\uD83C\uDFFE\u2642\uFE0F":"1f6b6-1f3fe-2642","\uD83D\uDEB6\uD83C\uDFFF\u2640\uFE0F":"1f6b6-1f3ff-2640","\uD83D\uDEB6\uD83C\uDFFF\u2642\uFE0F":"1f6b6-1f3ff-2642","\uD83E\uDD38\uD83C\uDFFB\u2640\uFE0F":"1f938-1f3fb-2640","\uD83E\uDD38\uD83C\uDFFB\u2642\uFE0F":"1f938-1f3fb-2642","\uD83E\uDD38\uD83C\uDFFC\u2640\uFE0F":"1f938-1f3fc-2640","\uD83E\uDD38\uD83C\uDFFC\u2642\uFE0F":"1f938-1f3fc-2642","\uD83E\uDD38\uD83C\uDFFD\u2640\uFE0F":"1f938-1f3fd-2640","\uD83E\uDD38\uD83C\uDFFD\u2642\uFE0F":"1f938-1f3fd-2642","\uD83E\uDD38\uD83C\uDFFE\u2640\uFE0F":"1f938-1f3fe-2640","\uD83E\uDD38\uD83C\uDFFE\u2642\uFE0F":"1f938-1f3fe-2642","\uD83E\uDD38\uD83C\uDFFF\u2640\uFE0F":"1f938-1f3ff-2640","\uD83E\uDD38\uD83C\uDFFF\u2642\uFE0F":"1f938-1f3ff-2642","\uD83E\uDD39\uD83C\uDFFB\u2640\uFE0F":"1f939-1f3fb-2640","\uD83E\uDD39\uD83C\uDFFB\u2642\uFE0F":"1f939-1f3fb-2642","\uD83E\uDD39\uD83C\uDFFC\u2640\uFE0F":"1f939-1f3fc-2640","\uD83E\uDD39\uD83C\uDFFC\u2642\uFE0F":"1f939-1f3fc-2642","\uD83E\uDD39\uD83C\uDFFD\u2640\uFE0F":"1f939-1f3fd-2640","\uD83E\uDD39\uD83C\uDFFD\u2642\uFE0F":"1f939-1f3fd-2642","\uD83E\uDD39\uD83C\uDFFE\u2640\uFE0F":"1f939-1f3fe-2640","\uD83E\uDD39\uD83C\uDFFE\u2642\uFE0F":"1f939-1f3fe-2642","\uD83E\uDD39\uD83C\uDFFF\u2640\uFE0F":"1f939-1f3ff-2640","\uD83E\uDD39\uD83C\uDFFF\u2642\uFE0F":"1f939-1f3ff-2642","\uD83E\uDD3D\uD83C\uDFFB\u2640\uFE0F":"1f93d-1f3fb-2640","\uD83E\uDD3D\uD83C\uDFFB\u2642\uFE0F":"1f93d-1f3fb-2642","\uD83E\uDD3D\uD83C\uDFFC\u2640\uFE0F":"1f93d-1f3fc-2640","\uD83E\uDD3D\uD83C\uDFFC\u2642\uFE0F":"1f93d-1f3fc-2642","\uD83E\uDD3D\uD83C\uDFFD\u2640\uFE0F":"1f93d-1f3fd-2640","\uD83E\uDD3D\uD83C\uDFFD\u2642\uFE0F":"1f93d-1f3fd-2642","\uD83E\uDD3D\uD83C\uDFFE\u2640\uFE0F":"1f93d-1f3fe-2640","\uD83E\uDD3D\uD83C\uDFFE\u2642\uFE0F":"1f93d-1f3fe-2642","\uD83E\uDD3D\uD83C\uDFFF\u2640\uFE0F":"1f93d-1f3ff-2640","\uD83E\uDD3D\uD83C\uDFFF\u2642\uFE0F":"1f93d-1f3ff-2642","\uD83E\uDD3E\uD83C\uDFFB\u2640\uFE0F":"1f93e-1f3fb-2640","\uD83E\uDD3E\uD83C\uDFFB\u2642\uFE0F":"1f93e-1f3fb-2642","\uD83E\uDD3E\uD83C\uDFFC\u2640\uFE0F":"1f93e-1f3fc-2640","\uD83E\uDD3E\uD83C\uDFFC\u2642\uFE0F":"1f93e-1f3fc-2642","\uD83E\uDD3E\uD83C\uDFFD\u2640\uFE0F":"1f93e-1f3fd-2640","\uD83E\uDD3E\uD83C\uDFFD\u2642\uFE0F":"1f93e-1f3fd-2642","\uD83E\uDD3E\uD83C\uDFFE\u2640\uFE0F":"1f93e-1f3fe-2640","\uD83E\uDD3E\uD83C\uDFFE\u2642\uFE0F":"1f93e-1f3fe-2642","\uD83E\uDD3E\uD83C\uDFFF\u2640\uFE0F":"1f93e-1f3ff-2640","\uD83E\uDD3E\uD83C\uDFFF\u2642\uFE0F":"1f93e-1f3ff-2642","\uD83D\uDC81\uD83C\uDFFB\u2640\uFE0F":"1f481-1f3fb-2640","\uD83D\uDC81\uD83C\uDFFB\u2642\uFE0F":"1f481-1f3fb-2642","\uD83D\uDC81\uD83C\uDFFC\u2640\uFE0F":"1f481-1f3fc-2640","\uD83D\uDC81\uD83C\uDFFC\u2642\uFE0F":"1f481-1f3fc-2642","\uD83D\uDC81\uD83C\uDFFD\u2640\uFE0F":"1f481-1f3fd-2640","\uD83D\uDC81\uD83C\uDFFD\u2642\uFE0F":"1f481-1f3fd-2642","\uD83D\uDC81\uD83C\uDFFE\u2640\uFE0F":"1f481-1f3fe-2640","\uD83D\uDC81\uD83C\uDFFE\u2642\uFE0F":"1f481-1f3fe-2642","\uD83D\uDC81\uD83C\uDFFF\u2640\uFE0F":"1f481-1f3ff-2640","\uD83D\uDC81\uD83C\uDFFF\u2642\uFE0F":"1f481-1f3ff-2642","\uD83D\uDE45\uD83C\uDFFB\u2640\uFE0F":"1f645-1f3fb-2640","\uD83D\uDE45\uD83C\uDFFB\u2642\uFE0F":"1f645-1f3fb-2642","\uD83D\uDE45\uD83C\uDFFC\u2640\uFE0F":"1f645-1f3fc-2640","\uD83D\uDE45\uD83C\uDFFC\u2642\uFE0F":"1f645-1f3fc-2642","\uD83D\uDE45\uD83C\uDFFD\u2640\uFE0F":"1f645-1f3fd-2640","\uD83D\uDE45\uD83C\uDFFD\u2642\uFE0F":"1f645-1f3fd-2642","\uD83D\uDE45\uD83C\uDFFE\u2640\uFE0F":"1f645-1f3fe-2640","\uD83D\uDE45\uD83C\uDFFE\u2642\uFE0F":"1f645-1f3fe-2642","\uD83D\uDE45\uD83C\uDFFF\u2640\uFE0F":"1f645-1f3ff-2640","\uD83D\uDE45\uD83C\uDFFF\u2642\uFE0F":"1f645-1f3ff-2642","\uD83D\uDE46\uD83C\uDFFB\u2640\uFE0F":"1f646-1f3fb-2640","\uD83D\uDE46\uD83C\uDFFB\u2642\uFE0F":"1f646-1f3fb-2642","\uD83D\uDE46\uD83C\uDFFC\u2640\uFE0F":"1f646-1f3fc-2640","\uD83D\uDE46\uD83C\uDFFC\u2642\uFE0F":"1f646-1f3fc-2642","\uD83D\uDE46\uD83C\uDFFD\u2640\uFE0F":"1f646-1f3fd-2640","\uD83D\uDE46\uD83C\uDFFD\u2642\uFE0F":"1f646-1f3fd-2642","\uD83D\uDE46\uD83C\uDFFE\u2640\uFE0F":"1f646-1f3fe-2640","\uD83D\uDE46\uD83C\uDFFE\u2642\uFE0F":"1f646-1f3fe-2642","\uD83D\uDE46\uD83C\uDFFF\u2640\uFE0F":"1f646-1f3ff-2640","\uD83D\uDE46\uD83C\uDFFF\u2642\uFE0F":"1f646-1f3ff-2642","\uD83D\uDE47\uD83C\uDFFB\u2640\uFE0F":"1f647-1f3fb-2640","\uD83D\uDE47\uD83C\uDFFB\u2642\uFE0F":"1f647-1f3fb-2642","\uD83D\uDE47\uD83C\uDFFC\u2640\uFE0F":"1f647-1f3fc-2640","\uD83D\uDE47\uD83C\uDFFC\u2642\uFE0F":"1f647-1f3fc-2642","\uD83D\uDE47\uD83C\uDFFD\u2640\uFE0F":"1f647-1f3fd-2640","\uD83D\uDE47\uD83C\uDFFD\u2642\uFE0F":"1f647-1f3fd-2642","\uD83D\uDE47\uD83C\uDFFE\u2640\uFE0F":"1f647-1f3fe-2640","\uD83D\uDE47\uD83C\uDFFE\u2642\uFE0F":"1f647-1f3fe-2642","\uD83D\uDE47\uD83C\uDFFF\u2640\uFE0F":"1f647-1f3ff-2640","\uD83D\uDE47\uD83C\uDFFF\u2642\uFE0F":"1f647-1f3ff-2642","\uD83D\uDE4B\uD83C\uDFFB\u2640\uFE0F":"1f64b-1f3fb-2640","\uD83D\uDE4B\uD83C\uDFFB\u2642\uFE0F":"1f64b-1f3fb-2642","\uD83D\uDE4B\uD83C\uDFFC\u2640\uFE0F":"1f64b-1f3fc-2640","\uD83D\uDE4B\uD83C\uDFFC\u2642\uFE0F":"1f64b-1f3fc-2642","\uD83D\uDE4B\uD83C\uDFFD\u2640\uFE0F":"1f64b-1f3fd-2640","\uD83D\uDE4B\uD83C\uDFFD\u2642\uFE0F":"1f64b-1f3fd-2642","\uD83D\uDE4B\uD83C\uDFFE\u2640\uFE0F":"1f64b-1f3fe-2640","\uD83D\uDE4B\uD83C\uDFFE\u2642\uFE0F":"1f64b-1f3fe-2642","\uD83D\uDE4B\uD83C\uDFFF\u2640\uFE0F":"1f64b-1f3ff-2640","\uD83D\uDE4B\uD83C\uDFFF\u2642\uFE0F":"1f64b-1f3ff-2642","\uD83D\uDE4D\uD83C\uDFFB\u2640\uFE0F":"1f64d-1f3fb-2640","\uD83D\uDE4D\uD83C\uDFFB\u2642\uFE0F":"1f64d-1f3fb-2642","\uD83D\uDE4D\uD83C\uDFFC\u2640\uFE0F":"1f64d-1f3fc-2640","\uD83D\uDE4D\uD83C\uDFFC\u2642\uFE0F":"1f64d-1f3fc-2642","\uD83D\uDE4D\uD83C\uDFFD\u2640\uFE0F":"1f64d-1f3fd-2640","\uD83D\uDE4D\uD83C\uDFFD\u2642\uFE0F":"1f64d-1f3fd-2642","\uD83D\uDE4D\uD83C\uDFFE\u2640\uFE0F":"1f64d-1f3fe-2640","\uD83D\uDE4D\uD83C\uDFFE\u2642\uFE0F":"1f64d-1f3fe-2642","\uD83D\uDE4D\uD83C\uDFFF\u2640\uFE0F":"1f64d-1f3ff-2640","\uD83D\uDE4D\uD83C\uDFFF\u2642\uFE0F":"1f64d-1f3ff-2642","\uD83D\uDE4E\uD83C\uDFFB\u2640\uFE0F":"1f64e-1f3fb-2640","\uD83D\uDE4E\uD83C\uDFFB\u2642\uFE0F":"1f64e-1f3fb-2642","\uD83D\uDE4E\uD83C\uDFFC\u2640\uFE0F":"1f64e-1f3fc-2640","\uD83D\uDE4E\uD83C\uDFFC\u2642\uFE0F":"1f64e-1f3fc-2642","\uD83D\uDE4E\uD83C\uDFFD\u2640\uFE0F":"1f64e-1f3fd-2640","\uD83D\uDE4E\uD83C\uDFFD\u2642\uFE0F":"1f64e-1f3fd-2642","\uD83D\uDE4E\uD83C\uDFFE\u2640\uFE0F":"1f64e-1f3fe-2640","\uD83D\uDE4E\uD83C\uDFFE\u2642\uFE0F":"1f64e-1f3fe-2642","\uD83D\uDE4E\uD83C\uDFFF\u2640\uFE0F":"1f64e-1f3ff-2640","\uD83D\uDE4E\uD83C\uDFFF\u2642\uFE0F":"1f64e-1f3ff-2642","\uD83E\uDD26\uD83C\uDFFB\u2640\uFE0F":"1f926-1f3fb-2640","\uD83E\uDD26\uD83C\uDFFB\u2642\uFE0F":"1f926-1f3fb-2642","\uD83E\uDD26\uD83C\uDFFC\u2640\uFE0F":"1f926-1f3fc-2640","\uD83E\uDD26\uD83C\uDFFC\u2642\uFE0F":"1f926-1f3fc-2642","\uD83E\uDD26\uD83C\uDFFD\u2640\uFE0F":"1f926-1f3fd-2640","\uD83E\uDD26\uD83C\uDFFD\u2642\uFE0F":"1f926-1f3fd-2642","\uD83E\uDD26\uD83C\uDFFE\u2640\uFE0F":"1f926-1f3fe-2640","\uD83E\uDD26\uD83C\uDFFE\u2642\uFE0F":"1f926-1f3fe-2642","\uD83E\uDD26\uD83C\uDFFF\u2640\uFE0F":"1f926-1f3ff-2640","\uD83E\uDD26\uD83C\uDFFF\u2642\uFE0F":"1f926-1f3ff-2642","\uD83E\uDD37\uD83C\uDFFB\u2640\uFE0F":"1f937-1f3fb-2640","\uD83E\uDD37\uD83C\uDFFB\u2642\uFE0F":"1f937-1f3fb-2642","\uD83E\uDD37\uD83C\uDFFC\u2640\uFE0F":"1f937-1f3fc-2640","\uD83E\uDD37\uD83C\uDFFC\u2642\uFE0F":"1f937-1f3fc-2642","\uD83E\uDD37\uD83C\uDFFD\u2640\uFE0F":"1f937-1f3fd-2640","\uD83E\uDD37\uD83C\uDFFD\u2642\uFE0F":"1f937-1f3fd-2642","\uD83E\uDD37\uD83C\uDFFE\u2640\uFE0F":"1f937-1f3fe-2640","\uD83E\uDD37\uD83C\uDFFE\u2642\uFE0F":"1f937-1f3fe-2642","\uD83E\uDD37\uD83C\uDFFF\u2640\uFE0F":"1f937-1f3ff-2640","\uD83E\uDD37\uD83C\uDFFF\u2642\uFE0F":"1f937-1f3ff-2642","\uD83D\uDC41\uFE0F\uD83D\uDDE8\uFE0F":"1f441-1f5e8","\uD83E\uDDD9\uD83C\uDFFB\u200D\u2640":"1f9d9-1f3fb-2640","\uD83E\uDDD9\uD83C\uDFFB\u2640\uFE0F":"1f9d9-1f3fb-2640","\uD83E\uDDD9\uD83C\uDFFB\u200D\u2642":"1f9d9-1f3fb-2642","\uD83E\uDDD9\uD83C\uDFFB\u2642\uFE0F":"1f9d9-1f3fb-2642","\uD83E\uDDD9\uD83C\uDFFC\u200D\u2640":"1f9d9-1f3fc-2640","\uD83E\uDDD9\uD83C\uDFFC\u2640\uFE0F":"1f9d9-1f3fc-2640","\uD83E\uDDD9\uD83C\uDFFC\u200D\u2642":"1f9d9-1f3fc-2642","\uD83E\uDDD9\uD83C\uDFFC\u2642\uFE0F":"1f9d9-1f3fc-2642","\uD83E\uDDD9\uD83C\uDFFD\u200D\u2640":"1f9d9-1f3fd-2640","\uD83E\uDDD9\uD83C\uDFFD\u2640\uFE0F":"1f9d9-1f3fd-2640","\uD83E\uDDD9\uD83C\uDFFD\u200D\u2642":"1f9d9-1f3fd-2642","\uD83E\uDDD9\uD83C\uDFFD\u2642\uFE0F":"1f9d9-1f3fd-2642","\uD83E\uDDD9\uD83C\uDFFE\u200D\u2640":"1f9d9-1f3fe-2640","\uD83E\uDDD9\uD83C\uDFFE\u2640\uFE0F":"1f9d9-1f3fe-2640","\uD83E\uDDD9\uD83C\uDFFE\u200D\u2642":"1f9d9-1f3fe-2642","\uD83E\uDDD9\uD83C\uDFFE\u2642\uFE0F":"1f9d9-1f3fe-2642","\uD83E\uDDD9\uD83C\uDFFF\u200D\u2640":"1f9d9-1f3ff-2640","\uD83E\uDDD9\uD83C\uDFFF\u2640\uFE0F":"1f9d9-1f3ff-2640","\uD83E\uDDD9\uD83C\uDFFF\u200D\u2642":"1f9d9-1f3ff-2642","\uD83E\uDDD9\uD83C\uDFFF\u2642\uFE0F":"1f9d9-1f3ff-2642","\uD83E\uDDDA\uD83C\uDFFB\u200D\u2640":"1f9da-1f3fb-2640","\uD83E\uDDDA\uD83C\uDFFB\u2640\uFE0F":"1f9da-1f3fb-2640","\uD83E\uDDDA\uD83C\uDFFB\u200D\u2642":"1f9da-1f3fb-2642","\uD83E\uDDDA\uD83C\uDFFB\u2642\uFE0F":"1f9da-1f3fb-2642","\uD83E\uDDDA\uD83C\uDFFC\u200D\u2640":"1f9da-1f3fc-2640","\uD83E\uDDDA\uD83C\uDFFC\u2640\uFE0F":"1f9da-1f3fc-2640","\uD83E\uDDDA\uD83C\uDFFC\u200D\u2642":"1f9da-1f3fc-2642","\uD83E\uDDDA\uD83C\uDFFC\u2642\uFE0F":"1f9da-1f3fc-2642","\uD83E\uDDDA\uD83C\uDFFD\u200D\u2640":"1f9da-1f3fd-2640","\uD83E\uDDDA\uD83C\uDFFD\u2640\uFE0F":"1f9da-1f3fd-2640","\uD83E\uDDDA\uD83C\uDFFD\u200D\u2642":"1f9da-1f3fd-2642","\uD83E\uDDDA\uD83C\uDFFD\u2642\uFE0F":"1f9da-1f3fd-2642","\uD83E\uDDDA\uD83C\uDFFE\u200D\u2640":"1f9da-1f3fe-2640","\uD83E\uDDDA\uD83C\uDFFE\u2640\uFE0F":"1f9da-1f3fe-2640","\uD83E\uDDDA\uD83C\uDFFE\u200D\u2642":"1f9da-1f3fe-2642","\uD83E\uDDDA\uD83C\uDFFE\u2642\uFE0F":"1f9da-1f3fe-2642","\uD83E\uDDDA\uD83C\uDFFF\u200D\u2640":"1f9da-1f3ff-2640","\uD83E\uDDDA\uD83C\uDFFF\u2640\uFE0F":"1f9da-1f3ff-2640","\uD83E\uDDDA\uD83C\uDFFF\u200D\u2642":"1f9da-1f3ff-2642","\uD83E\uDDDA\uD83C\uDFFF\u2642\uFE0F":"1f9da-1f3ff-2642","\uD83E\uDDDB\uD83C\uDFFB\u200D\u2640":"1f9db-1f3fb-2640","\uD83E\uDDDB\uD83C\uDFFB\u2640\uFE0F":"1f9db-1f3fb-2640","\uD83E\uDDDB\uD83C\uDFFB\u200D\u2642":"1f9db-1f3fb-2642","\uD83E\uDDDB\uD83C\uDFFB\u2642\uFE0F":"1f9db-1f3fb-2642","\uD83E\uDDDB\uD83C\uDFFC\u200D\u2640":"1f9db-1f3fc-2640","\uD83E\uDDDB\uD83C\uDFFC\u2640\uFE0F":"1f9db-1f3fc-2640","\uD83E\uDDDB\uD83C\uDFFC\u200D\u2642":"1f9db-1f3fc-2642","\uD83E\uDDDB\uD83C\uDFFC\u2642\uFE0F":"1f9db-1f3fc-2642","\uD83E\uDDDB\uD83C\uDFFD\u200D\u2640":"1f9db-1f3fd-2640","\uD83E\uDDDB\uD83C\uDFFD\u2640\uFE0F":"1f9db-1f3fd-2640","\uD83E\uDDDB\uD83C\uDFFD\u200D\u2642":"1f9db-1f3fd-2642","\uD83E\uDDDB\uD83C\uDFFD\u2642\uFE0F":"1f9db-1f3fd-2642","\uD83E\uDDDB\uD83C\uDFFE\u200D\u2640":"1f9db-1f3fe-2640","\uD83E\uDDDB\uD83C\uDFFE\u2640\uFE0F":"1f9db-1f3fe-2640","\uD83E\uDDDB\uD83C\uDFFE\u200D\u2642":"1f9db-1f3fe-2642","\uD83E\uDDDB\uD83C\uDFFE\u2642\uFE0F":"1f9db-1f3fe-2642","\uD83E\uDDDB\uD83C\uDFFF\u200D\u2640":"1f9db-1f3ff-2640","\uD83E\uDDDB\uD83C\uDFFF\u2640\uFE0F":"1f9db-1f3ff-2640","\uD83E\uDDDB\uD83C\uDFFF\u200D\u2642":"1f9db-1f3ff-2642","\uD83E\uDDDB\uD83C\uDFFF\u2642\uFE0F":"1f9db-1f3ff-2642","\uD83E\uDDDC\uD83C\uDFFB\u200D\u2640":"1f9dc-1f3fb-2640","\uD83E\uDDDC\uD83C\uDFFB\u2640\uFE0F":"1f9dc-1f3fb-2640","\uD83E\uDDDC\uD83C\uDFFB\u200D\u2642":"1f9dc-1f3fb-2642","\uD83E\uDDDC\uD83C\uDFFB\u2642\uFE0F":"1f9dc-1f3fb-2642","\uD83E\uDDDC\uD83C\uDFFC\u200D\u2640":"1f9dc-1f3fc-2640","\uD83E\uDDDC\uD83C\uDFFC\u2640\uFE0F":"1f9dc-1f3fc-2640","\uD83E\uDDDC\uD83C\uDFFC\u200D\u2642":"1f9dc-1f3fc-2642","\uD83E\uDDDC\uD83C\uDFFC\u2642\uFE0F":"1f9dc-1f3fc-2642","\uD83E\uDDDC\uD83C\uDFFD\u200D\u2640":"1f9dc-1f3fd-2640","\uD83E\uDDDC\uD83C\uDFFD\u2640\uFE0F":"1f9dc-1f3fd-2640","\uD83E\uDDDC\uD83C\uDFFD\u200D\u2642":"1f9dc-1f3fd-2642","\uD83E\uDDDC\uD83C\uDFFD\u2642\uFE0F":"1f9dc-1f3fd-2642","\uD83E\uDDDC\uD83C\uDFFE\u200D\u2640":"1f9dc-1f3fe-2640","\uD83E\uDDDC\uD83C\uDFFE\u2640\uFE0F":"1f9dc-1f3fe-2640","\uD83E\uDDDC\uD83C\uDFFE\u200D\u2642":"1f9dc-1f3fe-2642","\uD83E\uDDDC\uD83C\uDFFE\u2642\uFE0F":"1f9dc-1f3fe-2642","\uD83E\uDDDC\uD83C\uDFFF\u200D\u2640":"1f9dc-1f3ff-2640","\uD83E\uDDDC\uD83C\uDFFF\u2640\uFE0F":"1f9dc-1f3ff-2640","\uD83E\uDDDC\uD83C\uDFFF\u200D\u2642":"1f9dc-1f3ff-2642","\uD83E\uDDDC\uD83C\uDFFF\u2642\uFE0F":"1f9dc-1f3ff-2642","\uD83E\uDDDD\uD83C\uDFFB\u200D\u2640":"1f9dd-1f3fb-2640","\uD83E\uDDDD\uD83C\uDFFB\u2640\uFE0F":"1f9dd-1f3fb-2640","\uD83E\uDDDD\uD83C\uDFFB\u200D\u2642":"1f9dd-1f3fb-2642","\uD83E\uDDDD\uD83C\uDFFB\u2642\uFE0F":"1f9dd-1f3fb-2642","\uD83E\uDDDD\uD83C\uDFFC\u200D\u2640":"1f9dd-1f3fc-2640","\uD83E\uDDDD\uD83C\uDFFC\u2640\uFE0F":"1f9dd-1f3fc-2640","\uD83E\uDDDD\uD83C\uDFFC\u200D\u2642":"1f9dd-1f3fc-2642","\uD83E\uDDDD\uD83C\uDFFC\u2642\uFE0F":"1f9dd-1f3fc-2642","\uD83E\uDDDD\uD83C\uDFFD\u200D\u2640":"1f9dd-1f3fd-2640","\uD83E\uDDDD\uD83C\uDFFD\u2640\uFE0F":"1f9dd-1f3fd-2640","\uD83E\uDDDD\uD83C\uDFFD\u200D\u2642":"1f9dd-1f3fd-2642","\uD83E\uDDDD\uD83C\uDFFD\u2642\uFE0F":"1f9dd-1f3fd-2642","\uD83E\uDDDD\uD83C\uDFFE\u200D\u2640":"1f9dd-1f3fe-2640","\uD83E\uDDDD\uD83C\uDFFE\u2640\uFE0F":"1f9dd-1f3fe-2640","\uD83E\uDDDD\uD83C\uDFFE\u200D\u2642":"1f9dd-1f3fe-2642","\uD83E\uDDDD\uD83C\uDFFE\u2642\uFE0F":"1f9dd-1f3fe-2642","\uD83E\uDDDD\uD83C\uDFFF\u200D\u2640":"1f9dd-1f3ff-2640","\uD83E\uDDDD\uD83C\uDFFF\u2640\uFE0F":"1f9dd-1f3ff-2640","\uD83E\uDDDD\uD83C\uDFFF\u200D\u2642":"1f9dd-1f3ff-2642","\uD83E\uDDDD\uD83C\uDFFF\u2642\uFE0F":"1f9dd-1f3ff-2642","\uD83E\uDDD6\uD83C\uDFFB\u200D\u2640":"1f9d6-1f3fb-2640","\uD83E\uDDD6\uD83C\uDFFB\u2640\uFE0F":"1f9d6-1f3fb-2640","\uD83E\uDDD6\uD83C\uDFFB\u200D\u2642":"1f9d6-1f3fb-2642","\uD83E\uDDD6\uD83C\uDFFB\u2642\uFE0F":"1f9d6-1f3fb-2642","\uD83E\uDDD6\uD83C\uDFFC\u200D\u2640":"1f9d6-1f3fc-2640","\uD83E\uDDD6\uD83C\uDFFC\u2640\uFE0F":"1f9d6-1f3fc-2640","\uD83E\uDDD6\uD83C\uDFFC\u200D\u2642":"1f9d6-1f3fc-2642","\uD83E\uDDD6\uD83C\uDFFC\u2642\uFE0F":"1f9d6-1f3fc-2642","\uD83E\uDDD6\uD83C\uDFFD\u200D\u2640":"1f9d6-1f3fd-2640","\uD83E\uDDD6\uD83C\uDFFD\u2640\uFE0F":"1f9d6-1f3fd-2640","\uD83E\uDDD6\uD83C\uDFFD\u200D\u2642":"1f9d6-1f3fd-2642","\uD83E\uDDD6\uD83C\uDFFD\u2642\uFE0F":"1f9d6-1f3fd-2642","\uD83E\uDDD6\uD83C\uDFFE\u200D\u2640":"1f9d6-1f3fe-2640","\uD83E\uDDD6\uD83C\uDFFE\u2640\uFE0F":"1f9d6-1f3fe-2640","\uD83E\uDDD6\uD83C\uDFFE\u200D\u2642":"1f9d6-1f3fe-2642","\uD83E\uDDD6\uD83C\uDFFE\u2642\uFE0F":"1f9d6-1f3fe-2642","\uD83E\uDDD6\uD83C\uDFFF\u200D\u2640":"1f9d6-1f3ff-2640","\uD83E\uDDD6\uD83C\uDFFF\u2640\uFE0F":"1f9d6-1f3ff-2640","\uD83E\uDDD6\uD83C\uDFFF\u200D\u2642":"1f9d6-1f3ff-2642","\uD83E\uDDD6\uD83C\uDFFF\u2642\uFE0F":"1f9d6-1f3ff-2642","\uD83E\uDDD7\uD83C\uDFFB\u200D\u2640":"1f9d7-1f3fb-2640","\uD83E\uDDD7\uD83C\uDFFB\u2640\uFE0F":"1f9d7-1f3fb-2640","\uD83E\uDDD7\uD83C\uDFFB\u200D\u2642":"1f9d7-1f3fb-2642","\uD83E\uDDD7\uD83C\uDFFB\u2642\uFE0F":"1f9d7-1f3fb-2642","\uD83E\uDDD7\uD83C\uDFFC\u200D\u2640":"1f9d7-1f3fc-2640","\uD83E\uDDD7\uD83C\uDFFC\u2640\uFE0F":"1f9d7-1f3fc-2640","\uD83E\uDDD7\uD83C\uDFFC\u200D\u2642":"1f9d7-1f3fc-2642","\uD83E\uDDD7\uD83C\uDFFC\u2642\uFE0F":"1f9d7-1f3fc-2642","\uD83E\uDDD7\uD83C\uDFFD\u200D\u2640":"1f9d7-1f3fd-2640","\uD83E\uDDD7\uD83C\uDFFD\u2640\uFE0F":"1f9d7-1f3fd-2640","\uD83E\uDDD7\uD83C\uDFFD\u200D\u2642":"1f9d7-1f3fd-2642","\uD83E\uDDD7\uD83C\uDFFD\u2642\uFE0F":"1f9d7-1f3fd-2642","\uD83E\uDDD7\uD83C\uDFFE\u200D\u2640":"1f9d7-1f3fe-2640","\uD83E\uDDD7\uD83C\uDFFE\u2640\uFE0F":"1f9d7-1f3fe-2640","\uD83E\uDDD7\uD83C\uDFFE\u200D\u2642":"1f9d7-1f3fe-2642","\uD83E\uDDD7\uD83C\uDFFE\u2642\uFE0F":"1f9d7-1f3fe-2642","\uD83E\uDDD7\uD83C\uDFFF\u200D\u2640":"1f9d7-1f3ff-2640","\uD83E\uDDD7\uD83C\uDFFF\u2640\uFE0F":"1f9d7-1f3ff-2640","\uD83E\uDDD7\uD83C\uDFFF\u200D\u2642":"1f9d7-1f3ff-2642","\uD83E\uDDD7\uD83C\uDFFF\u2642\uFE0F":"1f9d7-1f3ff-2642","\uD83E\uDDD8\uD83C\uDFFB\u200D\u2640":"1f9d8-1f3fb-2640","\uD83E\uDDD8\uD83C\uDFFB\u2640\uFE0F":"1f9d8-1f3fb-2640","\uD83E\uDDD8\uD83C\uDFFB\u200D\u2642":"1f9d8-1f3fb-2642","\uD83E\uDDD8\uD83C\uDFFB\u2642\uFE0F":"1f9d8-1f3fb-2642","\uD83E\uDDD8\uD83C\uDFFC\u200D\u2640":"1f9d8-1f3fc-2640","\uD83E\uDDD8\uD83C\uDFFC\u2640\uFE0F":"1f9d8-1f3fc-2640","\uD83E\uDDD8\uD83C\uDFFC\u200D\u2642":"1f9d8-1f3fc-2642","\uD83E\uDDD8\uD83C\uDFFC\u2642\uFE0F":"1f9d8-1f3fc-2642","\uD83E\uDDD8\uD83C\uDFFD\u200D\u2640":"1f9d8-1f3fd-2640","\uD83E\uDDD8\uD83C\uDFFD\u2640\uFE0F":"1f9d8-1f3fd-2640","\uD83E\uDDD8\uD83C\uDFFD\u200D\u2642":"1f9d8-1f3fd-2642","\uD83E\uDDD8\uD83C\uDFFD\u2642\uFE0F":"1f9d8-1f3fd-2642","\uD83E\uDDD8\uD83C\uDFFE\u200D\u2640":"1f9d8-1f3fe-2640","\uD83E\uDDD8\uD83C\uDFFE\u2640\uFE0F":"1f9d8-1f3fe-2640","\uD83E\uDDD8\uD83C\uDFFE\u200D\u2642":"1f9d8-1f3fe-2642","\uD83E\uDDD8\uD83C\uDFFE\u2642\uFE0F":"1f9d8-1f3fe-2642","\uD83E\uDDD8\uD83C\uDFFF\u200D\u2640":"1f9d8-1f3ff-2640","\uD83E\uDDD8\uD83C\uDFFF\u2640\uFE0F":"1f9d8-1f3ff-2640","\uD83E\uDDD8\uD83C\uDFFF\u200D\u2642":"1f9d8-1f3ff-2642","\uD83E\uDDD8\uD83C\uDFFF\u2642\uFE0F":"1f9d8-1f3ff-2642","\u26F9\uD83C\uDFFF\u200D\u2642":"26f9-1f3ff-2642","\u26F9\uD83C\uDFFE\u200D\u2642":"26f9-1f3fe-2642","\u26F9\uD83C\uDFFD\u200D\u2642":"26f9-1f3fd-2642","\u26F9\uD83C\uDFFC\u200D\u2642":"26f9-1f3fc-2642","\u26F9\uD83C\uDFFB\u200D\u2642":"26f9-1f3fb-2642","\u26F9\uD83C\uDFFF\u200D\u2640":"26f9-1f3ff-2640","\u26F9\uD83C\uDFFE\u200D\u2640":"26f9-1f3fe-2640","\u26F9\uD83C\uDFFD\u200D\u2640":"26f9-1f3fd-2640","\u26F9\uD83C\uDFFC\u200D\u2640":"26f9-1f3fc-2640","\u26F9\uD83C\uDFFB\u200D\u2640":"26f9-1f3fb-2640","\uD83D\uDC68\u200D\u2695\uFE0F":"1f468-2695","\uD83D\uDC68\u200D\u2696\uFE0F":"1f468-2696","\uD83D\uDC68\u200D\u2708\uFE0F":"1f468-2708","\uD83D\uDC69\u200D\u2695\uFE0F":"1f469-2695","\uD83D\uDC69\u200D\u2696\uFE0F":"1f469-2696","\uD83D\uDC69\u200D\u2708\uFE0F":"1f469-2708","\uD83D\uDC6E\u200D\u2640\uFE0F":"1f46e-2640","\uD83D\uDC6E\u200D\u2642\uFE0F":"1f46e-2642","\uD83D\uDC71\u200D\u2640\uFE0F":"1f471-2640","\uD83D\uDC71\u200D\u2642\uFE0F":"1f471-2642","\uD83D\uDC73\u200D\u2640\uFE0F":"1f473-2640","\uD83D\uDC73\u200D\u2642\uFE0F":"1f473-2642","\uD83D\uDC77\u200D\u2640\uFE0F":"1f477-2640","\uD83D\uDC77\u200D\u2642\uFE0F":"1f477-2642","\uD83D\uDC82\u200D\u2640\uFE0F":"1f482-2640","\uD83D\uDC82\u200D\u2642\uFE0F":"1f482-2642","\uD83D\uDD75\uFE0F\u2640\uFE0F":"1f575-2640","\uD83D\uDD75\uFE0F\u2642\uFE0F":"1f575-2642","\uD83C\uDFC3\u200D\u2640\uFE0F":"1f3c3-2640","\uD83C\uDFC3\u200D\u2642\uFE0F":"1f3c3-2642","\uD83C\uDFC4\u200D\u2640\uFE0F":"1f3c4-2640","\uD83C\uDFC4\u200D\u2642\uFE0F":"1f3c4-2642","\uD83C\uDFCA\u200D\u2640\uFE0F":"1f3ca-2640","\uD83C\uDFCA\u200D\u2642\uFE0F":"1f3ca-2642","\uD83C\uDFCB\uFE0F\u2640\uFE0F":"1f3cb-2640","\uD83C\uDFCB\uFE0F\u2642\uFE0F":"1f3cb-2642","\uD83C\uDFCC\uFE0F\u2640\uFE0F":"1f3cc-2640","\uD83C\uDFCC\uFE0F\u2642\uFE0F":"1f3cc-2642","\uD83D\uDC6F\u200D\u2640\uFE0F":"1f46f-2640","\uD83D\uDC6F\u200D\u2642\uFE0F":"1f46f-2642","\uD83D\uDC86\u200D\u2640\uFE0F":"1f486-2640","\uD83D\uDC86\u200D\u2642\uFE0F":"1f486-2642","\uD83D\uDC87\u200D\u2640\uFE0F":"1f487-2640","\uD83D\uDC87\u200D\u2642\uFE0F":"1f487-2642","\uD83D\uDEA3\u200D\u2640\uFE0F":"1f6a3-2640","\uD83D\uDEA3\u200D\u2642\uFE0F":"1f6a3-2642","\uD83D\uDEB4\u200D\u2640\uFE0F":"1f6b4-2640","\uD83D\uDEB4\u200D\u2642\uFE0F":"1f6b4-2642","\uD83D\uDEB5\u200D\u2640\uFE0F":"1f6b5-2640","\uD83D\uDEB5\u200D\u2642\uFE0F":"1f6b5-2642","\uD83D\uDEB6\u200D\u2640\uFE0F":"1f6b6-2640","\uD83D\uDEB6\u200D\u2642\uFE0F":"1f6b6-2642","\uD83E\uDD38\u200D\u2640\uFE0F":"1f938-2640","\uD83E\uDD38\u200D\u2642\uFE0F":"1f938-2642","\uD83E\uDD39\u200D\u2640\uFE0F":"1f939-2640","\uD83E\uDD39\u200D\u2642\uFE0F":"1f939-2642","\uD83E\uDD3C\u200D\u2640\uFE0F":"1f93c-2640","\uD83E\uDD3C\u200D\u2642\uFE0F":"1f93c-2642","\uD83E\uDD3D\u200D\u2640\uFE0F":"1f93d-2640","\uD83E\uDD3D\u200D\u2642\uFE0F":"1f93d-2642","\uD83E\uDD3E\u200D\u2640\uFE0F":"1f93e-2640","\uD83E\uDD3E\u200D\u2642\uFE0F":"1f93e-2642","\uD83D\uDC81\u200D\u2640\uFE0F":"1f481-2640","\uD83D\uDC81\u200D\u2642\uFE0F":"1f481-2642","\uD83D\uDE45\u200D\u2640\uFE0F":"1f645-2640","\uD83D\uDE45\u200D\u2642\uFE0F":"1f645-2642","\uD83D\uDE46\u200D\u2640\uFE0F":"1f646-2640","\uD83D\uDE46\u200D\u2642\uFE0F":"1f646-2642","\uD83D\uDE47\u200D\u2640\uFE0F":"1f647-2640","\uD83D\uDE47\u200D\u2642\uFE0F":"1f647-2642","\uD83D\uDE4B\u200D\u2640\uFE0F":"1f64b-2640","\uD83D\uDE4B\u200D\u2642\uFE0F":"1f64b-2642","\uD83D\uDE4D\u200D\u2640\uFE0F":"1f64d-2640","\uD83D\uDE4D\u200D\u2642\uFE0F":"1f64d-2642","\uD83D\uDE4E\u200D\u2640\uFE0F":"1f64e-2640","\uD83D\uDE4E\u200D\u2642\uFE0F":"1f64e-2642","\uD83E\uDD26\u200D\u2640\uFE0F":"1f926-2640","\uD83E\uDD26\u200D\u2642\uFE0F":"1f926-2642","\uD83E\uDD37\u200D\u2640\uFE0F":"1f937-2640","\uD83E\uDD37\u200D\u2642\uFE0F":"1f937-2642","\uD83E\uDDD9\u200D\u2640\uFE0F":"1f9d9-2640","\uD83E\uDDD9\u200D\u2642\uFE0F":"1f9d9-2642","\uD83E\uDDDA\u200D\u2640\uFE0F":"1f9da-2640","\uD83E\uDDDA\u200D\u2642\uFE0F":"1f9da-2642","\uD83E\uDDDB\u200D\u2640\uFE0F":"1f9db-2640","\uD83E\uDDDB\u200D\u2642\uFE0F":"1f9db-2642","\uD83E\uDDDC\u200D\u2640\uFE0F":"1f9dc-2640","\uD83E\uDDDC\u200D\u2642\uFE0F":"1f9dc-2642","\uD83E\uDDDD\u200D\u2640\uFE0F":"1f9dd-2640","\uD83E\uDDDD\u200D\u2642\uFE0F":"1f9dd-2642","\uD83E\uDDDE\u200D\u2640\uFE0F":"1f9de-2640","\uD83E\uDDDE\u200D\u2642\uFE0F":"1f9de-2642","\uD83E\uDDDF\u200D\u2640\uFE0F":"1f9df-2640","\uD83E\uDDDF\u200D\u2642\uFE0F":"1f9df-2642","\uD83E\uDDD6\u200D\u2640\uFE0F":"1f9d6-2640","\uD83E\uDDD6\u200D\u2642\uFE0F":"1f9d6-2642","\uD83E\uDDD7\u200D\u2640\uFE0F":"1f9d7-2640","\uD83E\uDDD7\u200D\u2642\uFE0F":"1f9d7-2642","\uD83E\uDDD8\u200D\u2640\uFE0F":"1f9d8-2640","\uD83E\uDDD8\u200D\u2642\uFE0F":"1f9d8-2642","\u26F9\uFE0F\u2640\uFE0F":"26f9-2640","\u26F9\uFE0F\u2642\uFE0F":"26f9-2642","\uD83D\uDC68\uD83D\uDC68\uD83D\uDC66":"1f468-1f468-1f466","\uD83D\uDC68\uD83D\uDC68\uD83D\uDC67":"1f468-1f468-1f467","\uD83D\uDC68\uD83D\uDC69\uD83D\uDC67":"1f468-1f469-1f467","\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66":"1f469-1f469-1f466","\uD83D\uDC69\uD83D\uDC69\uD83D\uDC67":"1f469-1f469-1f467","\uD83D\uDC68\uD83D\uDC66\uD83D\uDC66":"1f468-1f466-1f466","\uD83D\uDC68\uD83D\uDC67\uD83D\uDC66":"1f468-1f467-1f466","\uD83D\uDC69\uD83D\uDC66\uD83D\uDC66":"1f469-1f466-1f466","\uD83D\uDC69\uD83D\uDC67\uD83D\uDC66":"1f469-1f467-1f466","\uD83D\uDC69\uD83D\uDC67\uD83D\uDC67":"1f469-1f467-1f467","\uD83D\uDC68\uD83C\uDFFB\uD83C\uDFA8":"1f468-1f3fb-1f3a8","\uD83D\uDC68\uD83C\uDFFC\uD83C\uDFA8":"1f468-1f3fc-1f3a8","\uD83D\uDC68\uD83C\uDFFD\uD83C\uDFA8":"1f468-1f3fd-1f3a8","\uD83D\uDC68\uD83C\uDFFE\uD83C\uDFA8":"1f468-1f3fe-1f3a8","\uD83D\uDC68\uD83C\uDFFF\uD83C\uDFA8":"1f468-1f3ff-1f3a8","\uD83D\uDC69\uD83C\uDFFB\uD83C\uDFA8":"1f469-1f3fb-1f3a8","\uD83D\uDC69\uD83C\uDFFC\uD83C\uDFA8":"1f469-1f3fc-1f3a8","\uD83D\uDC69\uD83C\uDFFD\uD83C\uDFA8":"1f469-1f3fd-1f3a8","\uD83D\uDC69\uD83C\uDFFE\uD83C\uDFA8":"1f469-1f3fe-1f3a8","\uD83D\uDC69\uD83C\uDFFF\uD83C\uDFA8":"1f469-1f3ff-1f3a8","\uD83D\uDC68\uD83C\uDFFB\uD83D\uDE80":"1f468-1f3fb-1f680","\uD83D\uDC68\uD83C\uDFFC\uD83D\uDE80":"1f468-1f3fc-1f680","\uD83D\uDC68\uD83C\uDFFD\uD83D\uDE80":"1f468-1f3fd-1f680","\uD83D\uDC68\uD83C\uDFFE\uD83D\uDE80":"1f468-1f3fe-1f680","\uD83D\uDC68\uD83C\uDFFF\uD83D\uDE80":"1f468-1f3ff-1f680","\uD83D\uDC69\uD83C\uDFFB\uD83D\uDE80":"1f469-1f3fb-1f680","\uD83D\uDC69\uD83C\uDFFC\uD83D\uDE80":"1f469-1f3fc-1f680","\uD83D\uDC69\uD83C\uDFFD\uD83D\uDE80":"1f469-1f3fd-1f680","\uD83D\uDC69\uD83C\uDFFE\uD83D\uDE80":"1f469-1f3fe-1f680","\uD83D\uDC69\uD83C\uDFFF\uD83D\uDE80":"1f469-1f3ff-1f680","\uD83D\uDC68\uD83C\uDFFB\uD83D\uDE92":"1f468-1f3fb-1f692","\uD83D\uDC68\uD83C\uDFFC\uD83D\uDE92":"1f468-1f3fc-1f692","\uD83D\uDC68\uD83C\uDFFD\uD83D\uDE92":"1f468-1f3fd-1f692","\uD83D\uDC68\uD83C\uDFFE\uD83D\uDE92":"1f468-1f3fe-1f692","\uD83D\uDC68\uD83C\uDFFF\uD83D\uDE92":"1f468-1f3ff-1f692","\uD83D\uDC69\uD83C\uDFFB\uD83D\uDE92":"1f469-1f3fb-1f692","\uD83D\uDC69\uD83C\uDFFC\uD83D\uDE92":"1f469-1f3fc-1f692","\uD83D\uDC69\uD83C\uDFFD\uD83D\uDE92":"1f469-1f3fd-1f692","\uD83D\uDC69\uD83C\uDFFE\uD83D\uDE92":"1f469-1f3fe-1f692","\uD83D\uDC69\uD83C\uDFFF\uD83D\uDE92":"1f469-1f3ff-1f692","\uD83D\uDC68\uD83D\uDC69\uD83D\uDC66":"1f468-1f469-1f466","\uD83D\uDC68\uD83D\uDC67\uD83D\uDC67":"1f468-1f467-1f467","\uD83D\uDC68\uD83C\uDFFB\uD83C\uDF3E":"1f468-1f3fb-1f33e","\uD83D\uDC68\uD83C\uDFFB\uD83C\uDF73":"1f468-1f3fb-1f373","\uD83D\uDC68\uD83C\uDFFB\uD83C\uDF93":"1f468-1f3fb-1f393","\uD83D\uDC68\uD83C\uDFFB\uD83C\uDFA4":"1f468-1f3fb-1f3a4","\uD83D\uDC68\uD83C\uDFFB\uD83C\uDFEB":"1f468-1f3fb-1f3eb","\uD83D\uDC68\uD83C\uDFFB\uD83C\uDFED":"1f468-1f3fb-1f3ed","\uD83D\uDC68\uD83C\uDFFB\uD83D\uDCBB":"1f468-1f3fb-1f4bb","\uD83D\uDC68\uD83C\uDFFB\uD83D\uDCBC":"1f468-1f3fb-1f4bc","\uD83D\uDC68\uD83C\uDFFB\uD83D\uDD27":"1f468-1f3fb-1f527","\uD83D\uDC68\uD83C\uDFFB\uD83D\uDD2C":"1f468-1f3fb-1f52c","\uD83D\uDC68\uD83C\uDFFC\uD83C\uDF3E":"1f468-1f3fc-1f33e","\uD83D\uDC68\uD83C\uDFFC\uD83C\uDF73":"1f468-1f3fc-1f373","\uD83D\uDC68\uD83C\uDFFC\uD83C\uDF93":"1f468-1f3fc-1f393","\uD83D\uDC68\uD83C\uDFFC\uD83C\uDFA4":"1f468-1f3fc-1f3a4","\uD83D\uDC68\uD83C\uDFFC\uD83C\uDFEB":"1f468-1f3fc-1f3eb","\uD83D\uDC68\uD83C\uDFFC\uD83C\uDFED":"1f468-1f3fc-1f3ed","\uD83D\uDC68\uD83C\uDFFC\uD83D\uDCBB":"1f468-1f3fc-1f4bb","\uD83D\uDC68\uD83C\uDFFC\uD83D\uDCBC":"1f468-1f3fc-1f4bc","\uD83D\uDC68\uD83C\uDFFC\uD83D\uDD27":"1f468-1f3fc-1f527","\uD83D\uDC68\uD83C\uDFFC\uD83D\uDD2C":"1f468-1f3fc-1f52c","\uD83D\uDC68\uD83C\uDFFD\uD83C\uDF3E":"1f468-1f3fd-1f33e","\uD83D\uDC68\uD83C\uDFFD\uD83C\uDF73":"1f468-1f3fd-1f373","\uD83D\uDC68\uD83C\uDFFD\uD83C\uDF93":"1f468-1f3fd-1f393","\uD83D\uDC68\uD83C\uDFFD\uD83C\uDFA4":"1f468-1f3fd-1f3a4","\uD83D\uDC68\uD83C\uDFFD\uD83C\uDFEB":"1f468-1f3fd-1f3eb","\uD83D\uDC68\uD83C\uDFFD\uD83C\uDFED":"1f468-1f3fd-1f3ed","\uD83D\uDC68\uD83C\uDFFD\uD83D\uDCBB":"1f468-1f3fd-1f4bb","\uD83D\uDC68\uD83C\uDFFD\uD83D\uDCBC":"1f468-1f3fd-1f4bc","\uD83D\uDC68\uD83C\uDFFD\uD83D\uDD27":"1f468-1f3fd-1f527","\uD83D\uDC68\uD83C\uDFFD\uD83D\uDD2C":"1f468-1f3fd-1f52c","\uD83D\uDC68\uD83C\uDFFE\uD83C\uDF3E":"1f468-1f3fe-1f33e","\uD83D\uDC68\uD83C\uDFFE\uD83C\uDF73":"1f468-1f3fe-1f373","\uD83D\uDC68\uD83C\uDFFE\uD83C\uDF93":"1f468-1f3fe-1f393","\uD83D\uDC68\uD83C\uDFFE\uD83C\uDFA4":"1f468-1f3fe-1f3a4","\uD83D\uDC68\uD83C\uDFFE\uD83C\uDFEB":"1f468-1f3fe-1f3eb","\uD83D\uDC68\uD83C\uDFFE\uD83C\uDFED":"1f468-1f3fe-1f3ed","\uD83D\uDC68\uD83C\uDFFE\uD83D\uDCBB":"1f468-1f3fe-1f4bb","\uD83D\uDC68\uD83C\uDFFE\uD83D\uDCBC":"1f468-1f3fe-1f4bc","\uD83D\uDC68\uD83C\uDFFE\uD83D\uDD27":"1f468-1f3fe-1f527","\uD83D\uDC68\uD83C\uDFFE\uD83D\uDD2C":"1f468-1f3fe-1f52c","\uD83D\uDC68\uD83C\uDFFF\uD83C\uDF3E":"1f468-1f3ff-1f33e","\uD83D\uDC68\uD83C\uDFFF\uD83C\uDF73":"1f468-1f3ff-1f373","\uD83D\uDC68\uD83C\uDFFF\uD83C\uDF93":"1f468-1f3ff-1f393","\uD83D\uDC68\uD83C\uDFFF\uD83C\uDFA4":"1f468-1f3ff-1f3a4","\uD83D\uDC68\uD83C\uDFFF\uD83C\uDFEB":"1f468-1f3ff-1f3eb","\uD83D\uDC68\uD83C\uDFFF\uD83C\uDFED":"1f468-1f3ff-1f3ed","\uD83D\uDC68\uD83C\uDFFF\uD83D\uDCBB":"1f468-1f3ff-1f4bb","\uD83D\uDC68\uD83C\uDFFF\uD83D\uDCBC":"1f468-1f3ff-1f4bc","\uD83D\uDC68\uD83C\uDFFF\uD83D\uDD27":"1f468-1f3ff-1f527","\uD83D\uDC68\uD83C\uDFFF\uD83D\uDD2C":"1f468-1f3ff-1f52c","\uD83D\uDC69\uD83C\uDFFB\uD83C\uDF3E":"1f469-1f3fb-1f33e","\uD83D\uDC69\uD83C\uDFFB\uD83C\uDF73":"1f469-1f3fb-1f373","\uD83D\uDC69\uD83C\uDFFB\uD83C\uDF93":"1f469-1f3fb-1f393","\uD83D\uDC69\uD83C\uDFFB\uD83C\uDFA4":"1f469-1f3fb-1f3a4","\uD83D\uDC69\uD83C\uDFFB\uD83C\uDFEB":"1f469-1f3fb-1f3eb","\uD83D\uDC69\uD83C\uDFFB\uD83C\uDFED":"1f469-1f3fb-1f3ed","\uD83D\uDC69\uD83C\uDFFB\uD83D\uDCBB":"1f469-1f3fb-1f4bb","\uD83D\uDC69\uD83C\uDFFB\uD83D\uDCBC":"1f469-1f3fb-1f4bc","\uD83D\uDC69\uD83C\uDFFB\uD83D\uDD27":"1f469-1f3fb-1f527","\uD83D\uDC69\uD83C\uDFFB\uD83D\uDD2C":"1f469-1f3fb-1f52c","\uD83D\uDC69\uD83C\uDFFC\uD83C\uDF3E":"1f469-1f3fc-1f33e","\uD83D\uDC69\uD83C\uDFFC\uD83C\uDF73":"1f469-1f3fc-1f373","\uD83D\uDC69\uD83C\uDFFC\uD83C\uDF93":"1f469-1f3fc-1f393","\uD83D\uDC69\uD83C\uDFFC\uD83C\uDFA4":"1f469-1f3fc-1f3a4","\uD83D\uDC69\uD83C\uDFFC\uD83C\uDFEB":"1f469-1f3fc-1f3eb","\uD83D\uDC69\uD83C\uDFFC\uD83C\uDFED":"1f469-1f3fc-1f3ed","\uD83D\uDC69\uD83C\uDFFC\uD83D\uDCBB":"1f469-1f3fc-1f4bb","\uD83D\uDC69\uD83C\uDFFC\uD83D\uDCBC":"1f469-1f3fc-1f4bc","\uD83D\uDC69\uD83C\uDFFC\uD83D\uDD27":"1f469-1f3fc-1f527","\uD83D\uDC69\uD83C\uDFFC\uD83D\uDD2C":"1f469-1f3fc-1f52c","\uD83D\uDC69\uD83C\uDFFD\uD83C\uDF3E":"1f469-1f3fd-1f33e","\uD83D\uDC69\uD83C\uDFFD\uD83C\uDF73":"1f469-1f3fd-1f373","\uD83D\uDC69\uD83C\uDFFD\uD83C\uDF93":"1f469-1f3fd-1f393","\uD83D\uDC69\uD83C\uDFFD\uD83C\uDFA4":"1f469-1f3fd-1f3a4","\uD83D\uDC69\uD83C\uDFFD\uD83C\uDFEB":"1f469-1f3fd-1f3eb","\uD83D\uDC69\uD83C\uDFFD\uD83C\uDFED":"1f469-1f3fd-1f3ed","\uD83D\uDC69\uD83C\uDFFD\uD83D\uDCBB":"1f469-1f3fd-1f4bb","\uD83D\uDC69\uD83C\uDFFD\uD83D\uDCBC":"1f469-1f3fd-1f4bc","\uD83D\uDC69\uD83C\uDFFD\uD83D\uDD27":"1f469-1f3fd-1f527","\uD83D\uDC69\uD83C\uDFFD\uD83D\uDD2C":"1f469-1f3fd-1f52c","\uD83D\uDC69\uD83C\uDFFE\uD83C\uDF3E":"1f469-1f3fe-1f33e","\uD83D\uDC69\uD83C\uDFFE\uD83C\uDF73":"1f469-1f3fe-1f373","\uD83D\uDC69\uD83C\uDFFE\uD83C\uDF93":"1f469-1f3fe-1f393","\uD83D\uDC69\uD83C\uDFFE\uD83C\uDFA4":"1f469-1f3fe-1f3a4","\uD83D\uDC69\uD83C\uDFFE\uD83C\uDFEB":"1f469-1f3fe-1f3eb","\uD83D\uDC69\uD83C\uDFFE\uD83C\uDFED":"1f469-1f3fe-1f3ed","\uD83D\uDC69\uD83C\uDFFE\uD83D\uDCBB":"1f469-1f3fe-1f4bb","\uD83D\uDC69\uD83C\uDFFE\uD83D\uDCBC":"1f469-1f3fe-1f4bc","\uD83D\uDC69\uD83C\uDFFE\uD83D\uDD27":"1f469-1f3fe-1f527","\uD83D\uDC69\uD83C\uDFFE\uD83D\uDD2C":"1f469-1f3fe-1f52c","\uD83D\uDC69\uD83C\uDFFF\uD83C\uDF3E":"1f469-1f3ff-1f33e","\uD83D\uDC69\uD83C\uDFFF\uD83C\uDF73":"1f469-1f3ff-1f373","\uD83D\uDC69\uD83C\uDFFF\uD83C\uDF93":"1f469-1f3ff-1f393","\uD83D\uDC69\uD83C\uDFFF\uD83C\uDFA4":"1f469-1f3ff-1f3a4","\uD83D\uDC69\uD83C\uDFFF\uD83C\uDFEB":"1f469-1f3ff-1f3eb","\uD83D\uDC69\uD83C\uDFFF\uD83C\uDFED":"1f469-1f3ff-1f3ed","\uD83D\uDC69\uD83C\uDFFF\uD83D\uDCBB":"1f469-1f3ff-1f4bb","\uD83D\uDC69\uD83C\uDFFF\uD83D\uDCBC":"1f469-1f3ff-1f4bc","\uD83D\uDC69\uD83C\uDFFF\uD83D\uDD27":"1f469-1f3ff-1f527","\uD83D\uDC69\uD83C\uDFFF\uD83D\uDD2C":"1f469-1f3ff-1f52c","\uD83D\uDC41\u200D\uD83D\uDDE8":"1f441-1f5e8","\uD83D\uDC68\u200D\uD83D\uDCBB":"1f468-1f4bb","\uD83D\uDC69\u200D\uD83D\uDCBB":"1f469-1f4bb","\uD83D\uDC68\u200D\uD83C\uDFEB":"1f468-1f3eb","\uD83D\uDC69\u200D\uD83C\uDFEB":"1f469-1f3eb","\uD83D\uDC68\u200D\uD83C\uDF93":"1f468-1f393","\uD83D\uDC69\u200D\uD83C\uDF93":"1f469-1f393","\uD83D\uDC68\u200D\uD83C\uDFA4":"1f468-1f3a4","\uD83D\uDC69\u200D\uD83C\uDFA4":"1f469-1f3a4","\uD83D\uDC68\u200D\uD83D\uDD2C":"1f468-1f52c","\uD83D\uDC69\u200D\uD83D\uDD2C":"1f469-1f52c","\uD83D\uDC68\u200D\uD83D\uDCBC":"1f468-1f4bc","\uD83D\uDC69\u200D\uD83D\uDCBC":"1f469-1f4bc","\uD83D\uDC68\u200D\uD83D\uDD27":"1f468-1f527","\uD83D\uDC69\u200D\uD83D\uDD27":"1f469-1f527","\uD83D\uDC68\u200D\uD83C\uDFED":"1f468-1f3ed","\uD83D\uDC69\u200D\uD83C\uDFED":"1f469-1f3ed","\uD83D\uDC68\u200D\uD83C\uDF73":"1f468-1f373","\uD83D\uDC69\u200D\uD83C\uDF73":"1f469-1f373","\uD83D\uDC68\u200D\uD83C\uDF3E":"1f468-1f33e","\uD83D\uDC69\u200D\uD83C\uDF3E":"1f469-1f33e","\uD83D\uDC68\u200D\uD83D\uDC66":"1f468-1f466","\uD83D\uDC68\u200D\uD83D\uDC67":"1f468-1f467","\uD83D\uDC69\u200D\uD83D\uDC66":"1f469-1f466","\uD83D\uDC69\u200D\uD83D\uDC67":"1f469-1f467","\uD83D\uDC68\u200D\uD83C\uDFA8":"1f468-1f3a8","\uD83D\uDC69\u200D\uD83C\uDFA8":"1f469-1f3a8","\uD83D\uDC68\u200D\uD83D\uDE80":"1f468-1f680","\uD83D\uDC69\u200D\uD83D\uDE80":"1f469-1f680","\uD83D\uDC68\u200D\uD83D\uDE92":"1f468-1f692","\uD83D\uDC69\u200D\uD83D\uDE92":"1f469-1f692","\uD83C\uDFCB\uFE0F\uD83C\uDFFB":"1f3cb-1f3fb","\uD83C\uDFCB\uFE0F\uD83C\uDFFC":"1f3cb-1f3fc","\uD83C\uDFCB\uFE0F\uD83C\uDFFD":"1f3cb-1f3fd","\uD83C\uDFCB\uFE0F\uD83C\uDFFE":"1f3cb-1f3fe","\uD83C\uDFCB\uFE0F\uD83C\uDFFF":"1f3cb-1f3ff","\uD83C\uDFCC\uFE0F\uD83C\uDFFB":"1f3cc-1f3fb","\uD83C\uDFCC\uFE0F\uD83C\uDFFC":"1f3cc-1f3fc","\uD83C\uDFCC\uFE0F\uD83C\uDFFD":"1f3cc-1f3fd","\uD83C\uDFCC\uFE0F\uD83C\uDFFE":"1f3cc-1f3fe","\uD83C\uDFCC\uFE0F\uD83C\uDFFF":"1f3cc-1f3ff","\uD83D\uDD74\uFE0F\uD83C\uDFFB":"1f574-1f3fb","\uD83D\uDD74\uFE0F\uD83C\uDFFC":"1f574-1f3fc","\uD83D\uDD74\uFE0F\uD83C\uDFFD":"1f574-1f3fd","\uD83D\uDD74\uFE0F\uD83C\uDFFE":"1f574-1f3fe","\uD83D\uDD74\uFE0F\uD83C\uDFFF":"1f574-1f3ff","\uD83D\uDD75\uFE0F\uD83C\uDFFB":"1f575-1f3fb","\uD83D\uDD75\uFE0F\uD83C\uDFFC":"1f575-1f3fc","\uD83D\uDD75\uFE0F\uD83C\uDFFD":"1f575-1f3fd","\uD83D\uDD75\uFE0F\uD83C\uDFFE":"1f575-1f3fe","\uD83D\uDD75\uFE0F\uD83C\uDFFF":"1f575-1f3ff","\uD83D\uDD90\uFE0F\uD83C\uDFFB":"1f590-1f3fb","\uD83D\uDD90\uFE0F\uD83C\uDFFC":"1f590-1f3fc","\uD83D\uDD90\uFE0F\uD83C\uDFFD":"1f590-1f3fd","\uD83D\uDD90\uFE0F\uD83C\uDFFE":"1f590-1f3fe","\uD83D\uDD90\uFE0F\uD83C\uDFFF":"1f590-1f3ff","\uD83C\uDFF3\u200D\uD83C\uDF08":"1f3f3-1f308","\uD83C\uDFF3\uFE0F\uD83C\uDF08":"1f3f3-1f308","\uD83D\uDC6F\u200D\u2642":"1f46f-2642","\uD83D\uDC6F\u200D\u2640":"1f46f-2640","\uD83E\uDD3C\u200D\u2642":"1f93c-2642","\uD83E\uDD3C\u200D\u2640":"1f93c-2640","\uD83E\uDD39\u200D\u2642":"1f939-2642","\uD83E\uDD39\u200D\u2640":"1f939-2640","\uD83E\uDD3E\u200D\u2642":"1f93e-2642","\uD83E\uDD3E\u200D\u2640":"1f93e-2640","\uD83E\uDD3D\u200D\u2642":"1f93d-2642","\uD83E\uDD3D\u200D\u2640":"1f93d-2640","\uD83E\uDD38\u200D\u2642":"1f938-2642","\uD83E\uDD38\u200D\u2640":"1f938-2640","\uD83D\uDEB6\u200D\u2642":"1f6b6-2642","\uD83D\uDEB6\u200D\u2640":"1f6b6-2640","\uD83D\uDEB5\u200D\u2642":"1f6b5-2642","\uD83D\uDEB5\u200D\u2640":"1f6b5-2640","\uD83D\uDEB4\u200D\u2642":"1f6b4-2642","\uD83D\uDEB4\u200D\u2640":"1f6b4-2640","\uD83D\uDEA3\u200D\u2642":"1f6a3-2642","\uD83D\uDEA3\u200D\u2640":"1f6a3-2640","\uD83C\uDFCA\u200D\u2642":"1f3ca-2642","\uD83C\uDFCA\u200D\u2640":"1f3ca-2640","\uD83C\uDFC4\u200D\u2642":"1f3c4-2642","\uD83C\uDFC4\u200D\u2640":"1f3c4-2640","\uD83C\uDFC3\u200D\u2642":"1f3c3-2642","\uD83C\uDFC3\u200D\u2640":"1f3c3-2640","\uD83E\uDD37\u200D\u2642":"1f937-2642","\uD83E\uDD37\u200D\u2640":"1f937-2640","\uD83E\uDD26\u200D\u2642":"1f926-2642","\uD83E\uDD26\u200D\u2640":"1f926-2640","\uD83D\uDE4E\u200D\u2642":"1f64e-2642","\uD83D\uDE4E\u200D\u2640":"1f64e-2640","\uD83D\uDE4D\u200D\u2642":"1f64d-2642","\uD83D\uDE4D\u200D\u2640":"1f64d-2640","\uD83D\uDE4B\u200D\u2642":"1f64b-2642","\uD83D\uDE4B\u200D\u2640":"1f64b-2640","\uD83D\uDE47\u200D\u2642":"1f647-2642","\uD83D\uDE47\u200D\u2640":"1f647-2640","\uD83D\uDE46\u200D\u2642":"1f646-2642","\uD83D\uDE46\u200D\u2640":"1f646-2640","\uD83D\uDE45\u200D\u2642":"1f645-2642","\uD83D\uDE45\u200D\u2640":"1f645-2640","\uD83D\uDC87\u200D\u2642":"1f487-2642","\uD83D\uDC87\u200D\u2640":"1f487-2640","\uD83D\uDC86\u200D\u2642":"1f486-2642","\uD83D\uDC86\u200D\u2640":"1f486-2640","\uD83D\uDC81\u200D\u2642":"1f481-2642","\uD83D\uDC81\u200D\u2640":"1f481-2640","\uD83D\uDC71\u200D\u2642":"1f471-2642","\uD83D\uDC71\u200D\u2640":"1f471-2640","\uD83D\uDC73\u200D\u2642":"1f473-2642","\uD83D\uDC73\u200D\u2640":"1f473-2640","\uD83D\uDC82\u200D\u2642":"1f482-2642","\uD83D\uDC82\u200D\u2640":"1f482-2640","\uD83D\uDC77\u200D\u2642":"1f477-2642","\uD83D\uDC77\u200D\u2640":"1f477-2640","\uD83D\uDC6E\u200D\u2642":"1f46e-2642","\uD83D\uDC6E\u200D\u2640":"1f46e-2640","\uD83D\uDC68\u200D\u2695":"1f468-2695","\uD83D\uDC69\u200D\u2695":"1f469-2695","\uD83D\uDC68\u200D\u2696":"1f468-2696","\uD83D\uDC69\u200D\u2696":"1f469-2696","\uD83D\uDC68\u200D\u2708":"1f468-2708","\uD83D\uDC69\u200D\u2708":"1f469-2708","\u261D\uFE0F\uD83C\uDFFB":"261d-1f3fb","\u261D\uFE0F\uD83C\uDFFC":"261d-1f3fc","\u261D\uFE0F\uD83C\uDFFD":"261d-1f3fd","\u261D\uFE0F\uD83C\uDFFE":"261d-1f3fe","\u261D\uFE0F\uD83C\uDFFF":"261d-1f3ff","\u26F9\uFE0F\uD83C\uDFFB":"26f9-1f3fb","\u26F9\uFE0F\uD83C\uDFFC":"26f9-1f3fc","\u26F9\uFE0F\uD83C\uDFFD":"26f9-1f3fd","\u26F9\uFE0F\uD83C\uDFFE":"26f9-1f3fe","\u26F9\uFE0F\uD83C\uDFFF":"26f9-1f3ff","\u270C\uFE0F\uD83C\uDFFB":"270c-1f3fb","\u270C\uFE0F\uD83C\uDFFC":"270c-1f3fc","\u270C\uFE0F\uD83C\uDFFD":"270c-1f3fd","\u270C\uFE0F\uD83C\uDFFE":"270c-1f3fe","\u270C\uFE0F\uD83C\uDFFF":"270c-1f3ff","\u270D\uFE0F\uD83C\uDFFB":"270d-1f3fb","\u270D\uFE0F\uD83C\uDFFC":"270d-1f3fc","\u270D\uFE0F\uD83C\uDFFD":"270d-1f3fd","\u270D\uFE0F\uD83C\uDFFE":"270d-1f3fe","\u270D\uFE0F\uD83C\uDFFF":"270d-1f3ff","\uD83D\uDC68\u2695\uFE0F":"1f468-2695","\uD83D\uDC68\u2696\uFE0F":"1f468-2696","\uD83D\uDC68\u2708\uFE0F":"1f468-2708","\uD83D\uDC69\u2695\uFE0F":"1f469-2695","\uD83D\uDC69\u2696\uFE0F":"1f469-2696","\uD83D\uDC69\u2708\uFE0F":"1f469-2708","\uD83D\uDC6E\u2640\uFE0F":"1f46e-2640","\uD83D\uDC6E\u2642\uFE0F":"1f46e-2642","\uD83D\uDC71\u2640\uFE0F":"1f471-2640","\uD83D\uDC71\u2642\uFE0F":"1f471-2642","\uD83D\uDC73\u2640\uFE0F":"1f473-2640","\uD83D\uDC73\u2642\uFE0F":"1f473-2642","\uD83D\uDC77\u2640\uFE0F":"1f477-2640","\uD83D\uDC77\u2642\uFE0F":"1f477-2642","\uD83D\uDC82\u2640\uFE0F":"1f482-2640","\uD83D\uDC82\u2642\uFE0F":"1f482-2642","\uD83D\uDD75\u200D\u2640":"1f575-2640","\uD83D\uDD75\u200D\u2642":"1f575-2642","\uD83C\uDFC3\u2640\uFE0F":"1f3c3-2640","\uD83C\uDFC3\u2642\uFE0F":"1f3c3-2642","\uD83C\uDFC4\u2640\uFE0F":"1f3c4-2640","\uD83C\uDFC4\u2642\uFE0F":"1f3c4-2642","\uD83C\uDFCA\u2640\uFE0F":"1f3ca-2640","\uD83C\uDFCA\u2642\uFE0F":"1f3ca-2642","\uD83C\uDFCB\u200D\u2640":"1f3cb-2640","\uD83C\uDFCB\u200D\u2642":"1f3cb-2642","\uD83C\uDFCC\u200D\u2640":"1f3cc-2640","\uD83C\uDFCC\u200D\u2642":"1f3cc-2642","\uD83D\uDC6F\u2640\uFE0F":"1f46f-2640","\uD83D\uDC6F\u2642\uFE0F":"1f46f-2642","\uD83D\uDC86\u2640\uFE0F":"1f486-2640","\uD83D\uDC86\u2642\uFE0F":"1f486-2642","\uD83D\uDC87\u2640\uFE0F":"1f487-2640","\uD83D\uDC87\u2642\uFE0F":"1f487-2642","\uD83D\uDEA3\u2640\uFE0F":"1f6a3-2640","\uD83D\uDEA3\u2642\uFE0F":"1f6a3-2642","\uD83D\uDEB4\u2640\uFE0F":"1f6b4-2640","\uD83D\uDEB4\u2642\uFE0F":"1f6b4-2642","\uD83D\uDEB5\u2640\uFE0F":"1f6b5-2640","\uD83D\uDEB5\u2642\uFE0F":"1f6b5-2642","\uD83D\uDEB6\u2640\uFE0F":"1f6b6-2640","\uD83D\uDEB6\u2642\uFE0F":"1f6b6-2642","\uD83E\uDD38\u2640\uFE0F":"1f938-2640","\uD83E\uDD38\u2642\uFE0F":"1f938-2642","\uD83E\uDD39\u2640\uFE0F":"1f939-2640","\uD83E\uDD39\u2642\uFE0F":"1f939-2642","\uD83E\uDD3C\u2640\uFE0F":"1f93c-2640","\uD83E\uDD3C\u2642\uFE0F":"1f93c-2642","\uD83E\uDD3D\u2640\uFE0F":"1f93d-2640","\uD83E\uDD3D\u2642\uFE0F":"1f93d-2642","\uD83E\uDD3E\u2640\uFE0F":"1f93e-2640","\uD83E\uDD3E\u2642\uFE0F":"1f93e-2642","\uD83D\uDC81\u2640\uFE0F":"1f481-2640","\uD83D\uDC81\u2642\uFE0F":"1f481-2642","\uD83D\uDE45\u2640\uFE0F":"1f645-2640","\uD83D\uDE45\u2642\uFE0F":"1f645-2642","\uD83D\uDE46\u2640\uFE0F":"1f646-2640","\uD83D\uDE46\u2642\uFE0F":"1f646-2642","\uD83D\uDE47\u2640\uFE0F":"1f647-2640","\uD83D\uDE47\u2642\uFE0F":"1f647-2642","\uD83D\uDE4B\u2640\uFE0F":"1f64b-2640","\uD83D\uDE4B\u2642\uFE0F":"1f64b-2642","\uD83D\uDE4D\u2640\uFE0F":"1f64d-2640","\uD83D\uDE4D\u2642\uFE0F":"1f64d-2642","\uD83D\uDE4E\u2640\uFE0F":"1f64e-2640","\uD83D\uDE4E\u2642\uFE0F":"1f64e-2642","\uD83E\uDD26\u2640\uFE0F":"1f926-2640","\uD83E\uDD26\u2642\uFE0F":"1f926-2642","\uD83E\uDD37\u2640\uFE0F":"1f937-2640","\uD83E\uDD37\u2642\uFE0F":"1f937-2642","\uD83E\uDDD9\u200D\u2640":"1f9d9-2640","\uD83E\uDDD9\u2640\uFE0F":"1f9d9-2640","\uD83E\uDDD9\u200D\u2642":"1f9d9-2642","\uD83E\uDDD9\u2642\uFE0F":"1f9d9-2642","\uD83E\uDDDA\u200D\u2640":"1f9da-2640","\uD83E\uDDDA\u2640\uFE0F":"1f9da-2640","\uD83E\uDDDA\u200D\u2642":"1f9da-2642","\uD83E\uDDDA\u2642\uFE0F":"1f9da-2642","\uD83E\uDDDB\u200D\u2640":"1f9db-2640","\uD83E\uDDDB\u2640\uFE0F":"1f9db-2640","\uD83E\uDDDB\u200D\u2642":"1f9db-2642","\uD83E\uDDDB\u2642\uFE0F":"1f9db-2642","\uD83E\uDDDC\u200D\u2640":"1f9dc-2640","\uD83E\uDDDC\u2640\uFE0F":"1f9dc-2640","\uD83E\uDDDC\u200D\u2642":"1f9dc-2642","\uD83E\uDDDC\u2642\uFE0F":"1f9dc-2642","\uD83E\uDDDD\u200D\u2640":"1f9dd-2640","\uD83E\uDDDD\u2640\uFE0F":"1f9dd-2640","\uD83E\uDDDD\u200D\u2642":"1f9dd-2642","\uD83E\uDDDD\u2642\uFE0F":"1f9dd-2642","\uD83E\uDDDE\u200D\u2640":"1f9de-2640","\uD83E\uDDDE\u2640\uFE0F":"1f9de-2640","\uD83E\uDDDE\u200D\u2642":"1f9de-2642","\uD83E\uDDDE\u2642\uFE0F":"1f9de-2642","\uD83E\uDDDF\u200D\u2640":"1f9df-2640","\uD83E\uDDDF\u2640\uFE0F":"1f9df-2640","\uD83E\uDDDF\u200D\u2642":"1f9df-2642","\uD83E\uDDDF\u2642\uFE0F":"1f9df-2642","\uD83E\uDDD6\u200D\u2640":"1f9d6-2640","\uD83E\uDDD6\u2640\uFE0F":"1f9d6-2640","\uD83E\uDDD6\u200D\u2642":"1f9d6-2642","\uD83E\uDDD6\u2642\uFE0F":"1f9d6-2642","\uD83E\uDDD7\u200D\u2640":"1f9d7-2640","\uD83E\uDDD7\u2640\uFE0F":"1f9d7-2640","\uD83E\uDDD7\u200D\u2642":"1f9d7-2642","\uD83E\uDDD7\u2642\uFE0F":"1f9d7-2642","\uD83E\uDDD8\u200D\u2640":"1f9d8-2640","\uD83E\uDDD8\u2640\uFE0F":"1f9d8-2640","\uD83E\uDDD8\u200D\u2642":"1f9d8-2642","\uD83E\uDDD8\u2642\uFE0F":"1f9d8-2642","#\uFE0F\u20E3":"0023-20e3","0\uFE0F\u20E3":"0030-20e3","1\uFE0F\u20E3":"0031-20e3","2\uFE0F\u20E3":"0032-20e3","3\uFE0F\u20E3":"0033-20e3","4\uFE0F\u20E3":"0034-20e3","5\uFE0F\u20E3":"0035-20e3","6\uFE0F\u20E3":"0036-20e3","7\uFE0F\u20E3":"0037-20e3","8\uFE0F\u20E3":"0038-20e3","9\uFE0F\u20E3":"0039-20e3","*\uFE0F\u20E3":"002a-20e3","\u26F9\u200D\u2640":"26f9-2640","\u26F9\u200D\u2642":"26f9-2642","\uD83C\uDDE8\uD83C\uDDF3":"1f1e8-1f1f3","\uD83C\uDDE9\uD83C\uDDEA":"1f1e9-1f1ea","\uD83C\uDDEA\uD83C\uDDF8":"1f1ea-1f1f8","\uD83C\uDDEB\uD83C\uDDF7":"1f1eb-1f1f7","\uD83C\uDDEC\uD83C\uDDE7":"1f1ec-1f1e7","\uD83C\uDDEE\uD83C\uDDF9":"1f1ee-1f1f9","\uD83C\uDDEF\uD83C\uDDF5":"1f1ef-1f1f5","\uD83C\uDDF0\uD83C\uDDF7":"1f1f0-1f1f7","\uD83C\uDDFA\uD83C\uDDF8":"1f1fa-1f1f8","\uD83C\uDDF7\uD83C\uDDFA":"1f1f7-1f1fa","\uD83E\uDD34\uD83C\uDFFB":"1f934-1f3fb","\uD83E\uDD34\uD83C\uDFFC":"1f934-1f3fc","\uD83E\uDD34\uD83C\uDFFD":"1f934-1f3fd","\uD83E\uDD34\uD83C\uDFFE":"1f934-1f3fe","\uD83E\uDD34\uD83C\uDFFF":"1f934-1f3ff","\uD83E\uDD36\uD83C\uDFFB":"1f936-1f3fb","\uD83E\uDD36\uD83C\uDFFC":"1f936-1f3fc","\uD83E\uDD36\uD83C\uDFFD":"1f936-1f3fd","\uD83E\uDD36\uD83C\uDFFE":"1f936-1f3fe","\uD83E\uDD36\uD83C\uDFFF":"1f936-1f3ff","\uD83E\uDD35\uD83C\uDFFB":"1f935-1f3fb","\uD83E\uDD35\uD83C\uDFFC":"1f935-1f3fc","\uD83E\uDD35\uD83C\uDFFD":"1f935-1f3fd","\uD83E\uDD35\uD83C\uDFFE":"1f935-1f3fe","\uD83E\uDD35\uD83C\uDFFF":"1f935-1f3ff","\uD83E\uDD37\uD83C\uDFFB":"1f937-1f3fb","\uD83E\uDD37\uD83C\uDFFC":"1f937-1f3fc","\uD83E\uDD37\uD83C\uDFFD":"1f937-1f3fd","\uD83E\uDD37\uD83C\uDFFE":"1f937-1f3fe","\uD83E\uDD37\uD83C\uDFFF":"1f937-1f3ff","\uD83E\uDD26\uD83C\uDFFB":"1f926-1f3fb","\uD83E\uDD26\uD83C\uDFFC":"1f926-1f3fc","\uD83E\uDD26\uD83C\uDFFD":"1f926-1f3fd","\uD83E\uDD26\uD83C\uDFFE":"1f926-1f3fe","\uD83E\uDD26\uD83C\uDFFF":"1f926-1f3ff","\uD83E\uDD30\uD83C\uDFFB":"1f930-1f3fb","\uD83E\uDD30\uD83C\uDFFC":"1f930-1f3fc","\uD83E\uDD30\uD83C\uDFFD":"1f930-1f3fd","\uD83E\uDD30\uD83C\uDFFE":"1f930-1f3fe","\uD83E\uDD30\uD83C\uDFFF":"1f930-1f3ff","\uD83D\uDD7A\uD83C\uDFFB":"1f57a-1f3fb","\uD83D\uDD7A\uD83C\uDFFC":"1f57a-1f3fc","\uD83D\uDD7A\uD83C\uDFFD":"1f57a-1f3fd","\uD83D\uDD7A\uD83C\uDFFE":"1f57a-1f3fe","\uD83D\uDD7A\uD83C\uDFFF":"1f57a-1f3ff","\uD83E\uDD33\uD83C\uDFFB":"1f933-1f3fb","\uD83E\uDD33\uD83C\uDFFC":"1f933-1f3fc","\uD83E\uDD33\uD83C\uDFFD":"1f933-1f3fd","\uD83E\uDD33\uD83C\uDFFE":"1f933-1f3fe","\uD83E\uDD33\uD83C\uDFFF":"1f933-1f3ff","\uD83E\uDD1E\uD83C\uDFFB":"1f91e-1f3fb","\uD83E\uDD1E\uD83C\uDFFC":"1f91e-1f3fc","\uD83E\uDD1E\uD83C\uDFFD":"1f91e-1f3fd","\uD83E\uDD1E\uD83C\uDFFE":"1f91e-1f3fe","\uD83E\uDD1E\uD83C\uDFFF":"1f91e-1f3ff","\uD83E\uDD19\uD83C\uDFFB":"1f919-1f3fb","\uD83E\uDD19\uD83C\uDFFC":"1f919-1f3fc","\uD83E\uDD19\uD83C\uDFFD":"1f919-1f3fd","\uD83C\uDDE6\uD83C\uDDEB":"1f1e6-1f1eb","\uD83C\uDDE6\uD83C\uDDF1":"1f1e6-1f1f1","\uD83C\uDDE9\uD83C\uDDFF":"1f1e9-1f1ff","\uD83C\uDDE6\uD83C\uDDE9":"1f1e6-1f1e9","\uD83C\uDDE6\uD83C\uDDF4":"1f1e6-1f1f4","\uD83C\uDDE6\uD83C\uDDEC":"1f1e6-1f1ec","\uD83C\uDDE6\uD83C\uDDF7":"1f1e6-1f1f7","\uD83C\uDDE6\uD83C\uDDF2":"1f1e6-1f1f2","\uD83C\uDDE6\uD83C\uDDFA":"1f1e6-1f1fa","\uD83C\uDDE6\uD83C\uDDF9":"1f1e6-1f1f9","\uD83C\uDDE6\uD83C\uDDFF":"1f1e6-1f1ff","\uD83C\uDDE7\uD83C\uDDF8":"1f1e7-1f1f8","\uD83C\uDDE7\uD83C\uDDED":"1f1e7-1f1ed","\uD83C\uDDE7\uD83C\uDDE9":"1f1e7-1f1e9","\uD83C\uDDE7\uD83C\uDDE7":"1f1e7-1f1e7","\uD83C\uDDE7\uD83C\uDDFE":"1f1e7-1f1fe","\uD83C\uDDE7\uD83C\uDDEA":"1f1e7-1f1ea","\uD83C\uDDE7\uD83C\uDDFF":"1f1e7-1f1ff","\uD83C\uDDE7\uD83C\uDDEF":"1f1e7-1f1ef","\uD83C\uDDE7\uD83C\uDDF9":"1f1e7-1f1f9","\uD83C\uDDE7\uD83C\uDDF4":"1f1e7-1f1f4","\uD83C\uDDE7\uD83C\uDDE6":"1f1e7-1f1e6","\uD83C\uDDE7\uD83C\uDDFC":"1f1e7-1f1fc","\uD83C\uDDE7\uD83C\uDDF7":"1f1e7-1f1f7","\uD83C\uDDE7\uD83C\uDDF3":"1f1e7-1f1f3","\uD83C\uDDE7\uD83C\uDDEC":"1f1e7-1f1ec","\uD83C\uDDE7\uD83C\uDDEB":"1f1e7-1f1eb","\uD83C\uDDE7\uD83C\uDDEE":"1f1e7-1f1ee","\uD83C\uDDF0\uD83C\uDDED":"1f1f0-1f1ed","\uD83C\uDDE8\uD83C\uDDF2":"1f1e8-1f1f2","\uD83C\uDDE8\uD83C\uDDE6":"1f1e8-1f1e6","\uD83C\uDDE8\uD83C\uDDFB":"1f1e8-1f1fb","\uD83E\uDD19\uD83C\uDFFE":"1f919-1f3fe","\uD83C\uDDE8\uD83C\uDDEB":"1f1e8-1f1eb","\uD83C\uDDF9\uD83C\uDDE9":"1f1f9-1f1e9","\uD83C\uDDE8\uD83C\uDDF1":"1f1e8-1f1f1","\uD83C\uDDE8\uD83C\uDDF4":"1f1e8-1f1f4","\uD83C\uDDF0\uD83C\uDDF2":"1f1f0-1f1f2","\uD83C\uDDE8\uD83C\uDDF7":"1f1e8-1f1f7","\uD83C\uDDE8\uD83C\uDDEE":"1f1e8-1f1ee","\uD83C\uDDED\uD83C\uDDF7":"1f1ed-1f1f7","\uD83C\uDDE8\uD83C\uDDFA":"1f1e8-1f1fa","\uD83C\uDDE8\uD83C\uDDFE":"1f1e8-1f1fe","\uD83C\uDDE8\uD83C\uDDFF":"1f1e8-1f1ff","\uD83E\uDD19\uD83C\uDFFF":"1f919-1f3ff","\uD83C\uDDE8\uD83C\uDDE9":"1f1e8-1f1e9","\uD83E\uDD1B\uD83C\uDFFB":"1f91b-1f3fb","\uD83C\uDDE9\uD83C\uDDF0":"1f1e9-1f1f0","\uD83C\uDDE9\uD83C\uDDEF":"1f1e9-1f1ef","\uD83C\uDDE9\uD83C\uDDF2":"1f1e9-1f1f2","\uD83C\uDDE9\uD83C\uDDF4":"1f1e9-1f1f4","\uD83C\uDDF9\uD83C\uDDF1":"1f1f9-1f1f1","\uD83C\uDDEA\uD83C\uDDE8":"1f1ea-1f1e8","\uD83C\uDDEA\uD83C\uDDEC":"1f1ea-1f1ec","\uD83C\uDDF8\uD83C\uDDFB":"1f1f8-1f1fb","\uD83C\uDDEC\uD83C\uDDF6":"1f1ec-1f1f6","\uD83C\uDDEA\uD83C\uDDF7":"1f1ea-1f1f7","\uD83C\uDDEA\uD83C\uDDEA":"1f1ea-1f1ea","\uD83C\uDDEA\uD83C\uDDF9":"1f1ea-1f1f9","\uD83E\uDD1B\uD83C\uDFFC":"1f91b-1f3fc","\uD83C\uDDEB\uD83C\uDDEF":"1f1eb-1f1ef","\uD83C\uDDEB\uD83C\uDDEE":"1f1eb-1f1ee","\uD83C\uDDEC\uD83C\uDDE6":"1f1ec-1f1e6","\uD83C\uDDEC\uD83C\uDDF2":"1f1ec-1f1f2","\uD83C\uDDEC\uD83C\uDDEA":"1f1ec-1f1ea","\uD83C\uDDEC\uD83C\uDDED":"1f1ec-1f1ed","\uD83C\uDDEC\uD83C\uDDF7":"1f1ec-1f1f7","\uD83C\uDDEC\uD83C\uDDE9":"1f1ec-1f1e9","\uD83C\uDDEC\uD83C\uDDF9":"1f1ec-1f1f9","\uD83C\uDDEC\uD83C\uDDF3":"1f1ec-1f1f3","\uD83C\uDDEC\uD83C\uDDFC":"1f1ec-1f1fc","\uD83C\uDDEC\uD83C\uDDFE":"1f1ec-1f1fe","\uD83C\uDDED\uD83C\uDDF9":"1f1ed-1f1f9","\uD83C\uDDED\uD83C\uDDF3":"1f1ed-1f1f3","\uD83C\uDDED\uD83C\uDDFA":"1f1ed-1f1fa","\uD83C\uDDEE\uD83C\uDDF8":"1f1ee-1f1f8","\uD83C\uDDEE\uD83C\uDDF3":"1f1ee-1f1f3","\uD83C\uDDEE\uD83C\uDDE9":"1f1ee-1f1e9","\uD83C\uDDEE\uD83C\uDDF7":"1f1ee-1f1f7","\uD83C\uDDEE\uD83C\uDDF6":"1f1ee-1f1f6","\uD83C\uDDEE\uD83C\uDDEA":"1f1ee-1f1ea","\uD83C\uDDEE\uD83C\uDDF1":"1f1ee-1f1f1","\uD83C\uDDEF\uD83C\uDDF2":"1f1ef-1f1f2","\uD83C\uDDEF\uD83C\uDDF4":"1f1ef-1f1f4","\uD83C\uDDF0\uD83C\uDDFF":"1f1f0-1f1ff","\uD83C\uDDF0\uD83C\uDDEA":"1f1f0-1f1ea","\uD83C\uDDF0\uD83C\uDDEE":"1f1f0-1f1ee","\uD83C\uDDFD\uD83C\uDDF0":"1f1fd-1f1f0","\uD83C\uDDF0\uD83C\uDDFC":"1f1f0-1f1fc","\uD83C\uDDF0\uD83C\uDDEC":"1f1f0-1f1ec","\uD83E\uDD1B\uD83C\uDFFD":"1f91b-1f3fd","\uD83C\uDDF1\uD83C\uDDE6":"1f1f1-1f1e6","\uD83C\uDDF1\uD83C\uDDFB":"1f1f1-1f1fb","\uD83C\uDDF1\uD83C\uDDE7":"1f1f1-1f1e7","\uD83C\uDDF1\uD83C\uDDF8":"1f1f1-1f1f8","\uD83C\uDDF1\uD83C\uDDF7":"1f1f1-1f1f7","\uD83C\uDDF1\uD83C\uDDFE":"1f1f1-1f1fe","\uD83C\uDDF1\uD83C\uDDEE":"1f1f1-1f1ee","\uD83C\uDDF1\uD83C\uDDF9":"1f1f1-1f1f9","\uD83C\uDDF1\uD83C\uDDFA":"1f1f1-1f1fa","\uD83C\uDDF2\uD83C\uDDF0":"1f1f2-1f1f0","\uD83C\uDDF2\uD83C\uDDEC":"1f1f2-1f1ec","\uD83C\uDDF2\uD83C\uDDFC":"1f1f2-1f1fc","\uD83C\uDDF2\uD83C\uDDFE":"1f1f2-1f1fe","\uD83C\uDDF2\uD83C\uDDFB":"1f1f2-1f1fb","\uD83C\uDDF2\uD83C\uDDF1":"1f1f2-1f1f1","\uD83C\uDDF2\uD83C\uDDF9":"1f1f2-1f1f9","\uD83C\uDDF2\uD83C\uDDED":"1f1f2-1f1ed","\uD83C\uDDF2\uD83C\uDDF7":"1f1f2-1f1f7","\uD83C\uDDF2\uD83C\uDDFA":"1f1f2-1f1fa","\uD83C\uDDF2\uD83C\uDDFD":"1f1f2-1f1fd","\uD83C\uDDEB\uD83C\uDDF2":"1f1eb-1f1f2","\uD83C\uDDF2\uD83C\uDDE9":"1f1f2-1f1e9","\uD83C\uDDF2\uD83C\uDDE8":"1f1f2-1f1e8","\uD83C\uDDF2\uD83C\uDDF3":"1f1f2-1f1f3","\uD83C\uDDF2\uD83C\uDDEA":"1f1f2-1f1ea","\uD83C\uDDF2\uD83C\uDDE6":"1f1f2-1f1e6","\uD83C\uDDF2\uD83C\uDDFF":"1f1f2-1f1ff","\uD83C\uDDF2\uD83C\uDDF2":"1f1f2-1f1f2","\uD83C\uDDF3\uD83C\uDDE6":"1f1f3-1f1e6","\uD83C\uDDF3\uD83C\uDDF7":"1f1f3-1f1f7","\uD83C\uDDF3\uD83C\uDDF5":"1f1f3-1f1f5","\uD83C\uDDF3\uD83C\uDDF1":"1f1f3-1f1f1","\uD83C\uDDF3\uD83C\uDDFF":"1f1f3-1f1ff","\uD83C\uDDF3\uD83C\uDDEE":"1f1f3-1f1ee","\uD83C\uDDF3\uD83C\uDDEA":"1f1f3-1f1ea","\uD83C\uDDF3\uD83C\uDDEC":"1f1f3-1f1ec","\uD83C\uDDF0\uD83C\uDDF5":"1f1f0-1f1f5","\uD83C\uDDF3\uD83C\uDDF4":"1f1f3-1f1f4","\uD83C\uDDF4\uD83C\uDDF2":"1f1f4-1f1f2","\uD83C\uDDF5\uD83C\uDDF0":"1f1f5-1f1f0","\uD83C\uDDF5\uD83C\uDDFC":"1f1f5-1f1fc","\uD83C\uDDF5\uD83C\uDDE6":"1f1f5-1f1e6","\uD83C\uDDF5\uD83C\uDDEC":"1f1f5-1f1ec","\uD83E\uDD1B\uD83C\uDFFE":"1f91b-1f3fe","\uD83C\uDDF5\uD83C\uDDFE":"1f1f5-1f1fe","\uD83C\uDDF5\uD83C\uDDEA":"1f1f5-1f1ea","\uD83C\uDDF5\uD83C\uDDED":"1f1f5-1f1ed","\uD83C\uDDF5\uD83C\uDDF1":"1f1f5-1f1f1","\uD83C\uDDF5\uD83C\uDDF9":"1f1f5-1f1f9","\uD83C\uDDF6\uD83C\uDDE6":"1f1f6-1f1e6","\uD83C\uDDF9\uD83C\uDDFC":"1f1f9-1f1fc","\uD83C\uDDE8\uD83C\uDDEC":"1f1e8-1f1ec","\uD83C\uDDF7\uD83C\uDDF4":"1f1f7-1f1f4","\uD83C\uDDF7\uD83C\uDDFC":"1f1f7-1f1fc","\uD83C\uDDF0\uD83C\uDDF3":"1f1f0-1f1f3","\uD83C\uDDF1\uD83C\uDDE8":"1f1f1-1f1e8","\uD83C\uDDFB\uD83C\uDDE8":"1f1fb-1f1e8","\uD83C\uDDFC\uD83C\uDDF8":"1f1fc-1f1f8","\uD83C\uDDF8\uD83C\uDDF2":"1f1f8-1f1f2","\uD83C\uDDF8\uD83C\uDDF9":"1f1f8-1f1f9","\uD83C\uDDF8\uD83C\uDDE6":"1f1f8-1f1e6","\uD83E\uDD1B\uD83C\uDFFF":"1f91b-1f3ff","\uD83C\uDDF8\uD83C\uDDF3":"1f1f8-1f1f3","\uD83C\uDDF7\uD83C\uDDF8":"1f1f7-1f1f8","\uD83C\uDDF8\uD83C\uDDE8":"1f1f8-1f1e8","\uD83C\uDDF8\uD83C\uDDF1":"1f1f8-1f1f1","\uD83C\uDDF8\uD83C\uDDEC":"1f1f8-1f1ec","\uD83C\uDDF8\uD83C\uDDF0":"1f1f8-1f1f0","\uD83C\uDDF8\uD83C\uDDEE":"1f1f8-1f1ee","\uD83C\uDDF8\uD83C\uDDE7":"1f1f8-1f1e7","\uD83C\uDDF8\uD83C\uDDF4":"1f1f8-1f1f4","\uD83C\uDDFF\uD83C\uDDE6":"1f1ff-1f1e6","\uD83C\uDDF1\uD83C\uDDF0":"1f1f1-1f1f0","\uD83C\uDDF8\uD83C\uDDE9":"1f1f8-1f1e9","\uD83C\uDDF8\uD83C\uDDF7":"1f1f8-1f1f7","\uD83C\uDDF8\uD83C\uDDFF":"1f1f8-1f1ff","\uD83C\uDDF8\uD83C\uDDEA":"1f1f8-1f1ea","\uD83C\uDDE8\uD83C\uDDED":"1f1e8-1f1ed","\uD83C\uDDF8\uD83C\uDDFE":"1f1f8-1f1fe","\uD83C\uDDF9\uD83C\uDDEF":"1f1f9-1f1ef","\uD83C\uDDF9\uD83C\uDDFF":"1f1f9-1f1ff","\uD83C\uDDF9\uD83C\uDDED":"1f1f9-1f1ed","\uD83C\uDDF9\uD83C\uDDEC":"1f1f9-1f1ec","\uD83C\uDDF9\uD83C\uDDF4":"1f1f9-1f1f4","\uD83C\uDDF9\uD83C\uDDF9":"1f1f9-1f1f9","\uD83C\uDDF9\uD83C\uDDF3":"1f1f9-1f1f3","\uD83C\uDDF9\uD83C\uDDF7":"1f1f9-1f1f7","\uD83C\uDDF9\uD83C\uDDF2":"1f1f9-1f1f2","\uD83C\uDDF9\uD83C\uDDFB":"1f1f9-1f1fb","\uD83C\uDDFA\uD83C\uDDEC":"1f1fa-1f1ec","\uD83C\uDDFA\uD83C\uDDE6":"1f1fa-1f1e6","\uD83C\uDDE6\uD83C\uDDEA":"1f1e6-1f1ea","\uD83C\uDDFA\uD83C\uDDFE":"1f1fa-1f1fe","\uD83C\uDDFA\uD83C\uDDFF":"1f1fa-1f1ff","\uD83C\uDDFB\uD83C\uDDFA":"1f1fb-1f1fa","\uD83C\uDDFB\uD83C\uDDE6":"1f1fb-1f1e6","\uD83C\uDDFB\uD83C\uDDEA":"1f1fb-1f1ea","\uD83C\uDDFB\uD83C\uDDF3":"1f1fb-1f1f3","\uD83C\uDDEA\uD83C\uDDED":"1f1ea-1f1ed","\uD83E\uDD1C\uD83C\uDFFB":"1f91c-1f3fb","\uD83C\uDDFE\uD83C\uDDEA":"1f1fe-1f1ea","\uD83C\uDDFF\uD83C\uDDF2":"1f1ff-1f1f2","\uD83C\uDDFF\uD83C\uDDFC":"1f1ff-1f1fc","\uD83C\uDDF5\uD83C\uDDF7":"1f1f5-1f1f7","\uD83C\uDDF0\uD83C\uDDFE":"1f1f0-1f1fe","\uD83C\uDDE7\uD83C\uDDF2":"1f1e7-1f1f2","\uD83C\uDDF5\uD83C\uDDEB":"1f1f5-1f1eb","\uD83C\uDDF5\uD83C\uDDF8":"1f1f5-1f1f8","\uD83C\uDDF3\uD83C\uDDE8":"1f1f3-1f1e8","\uD83E\uDD1C\uD83C\uDFFC":"1f91c-1f3fc","\uD83C\uDDF8\uD83C\uDDED":"1f1f8-1f1ed","\uD83C\uDDE6\uD83C\uDDFC":"1f1e6-1f1fc","\uD83C\uDDFB\uD83C\uDDEE":"1f1fb-1f1ee","\uD83C\uDDED\uD83C\uDDF0":"1f1ed-1f1f0","\uD83C\uDDE6\uD83C\uDDE8":"1f1e6-1f1e8","\uD83C\uDDF2\uD83C\uDDF8":"1f1f2-1f1f8","\uD83C\uDDEC\uD83C\uDDFA":"1f1ec-1f1fa","\uD83C\uDDEC\uD83C\uDDF1":"1f1ec-1f1f1","\uD83C\uDDF3\uD83C\uDDFA":"1f1f3-1f1fa","\uD83C\uDDFC\uD83C\uDDEB":"1f1fc-1f1eb","\uD83C\uDDF2\uD83C\uDDF4":"1f1f2-1f1f4","\uD83E\uDD1C\uD83C\uDFFD":"1f91c-1f3fd","\uD83C\uDDEB\uD83C\uDDF4":"1f1eb-1f1f4","\uD83C\uDDEB\uD83C\uDDF0":"1f1eb-1f1f0","\uD83C\uDDEF\uD83C\uDDEA":"1f1ef-1f1ea","\uD83C\uDDE6\uD83C\uDDEE":"1f1e6-1f1ee","\uD83C\uDDEC\uD83C\uDDEE":"1f1ec-1f1ee","\uD83E\uDD1C\uD83C\uDFFE":"1f91c-1f3fe","\uD83E\uDD1C\uD83C\uDFFF":"1f91c-1f3ff","\uD83E\uDD1A\uD83C\uDFFB":"1f91a-1f3fb","\uD83E\uDD1A\uD83C\uDFFC":"1f91a-1f3fc","\uD83E\uDD1A\uD83C\uDFFD":"1f91a-1f3fd","\uD83E\uDD1A\uD83C\uDFFE":"1f91a-1f3fe","\uD83D\uDC76\uD83C\uDFFB":"1f476-1f3fb","\uD83D\uDC76\uD83C\uDFFC":"1f476-1f3fc","\uD83D\uDC76\uD83C\uDFFD":"1f476-1f3fd","\uD83D\uDC76\uD83C\uDFFE":"1f476-1f3fe","\uD83D\uDC76\uD83C\uDFFF":"1f476-1f3ff","\uD83D\uDC66\uD83C\uDFFB":"1f466-1f3fb","\uD83D\uDC66\uD83C\uDFFC":"1f466-1f3fc","\uD83D\uDC66\uD83C\uDFFD":"1f466-1f3fd","\uD83D\uDC66\uD83C\uDFFE":"1f466-1f3fe","\uD83D\uDC66\uD83C\uDFFF":"1f466-1f3ff","\uD83D\uDC67\uD83C\uDFFB":"1f467-1f3fb","\uD83D\uDC67\uD83C\uDFFC":"1f467-1f3fc","\uD83D\uDC67\uD83C\uDFFD":"1f467-1f3fd","\uD83D\uDC67\uD83C\uDFFE":"1f467-1f3fe","\uD83D\uDC67\uD83C\uDFFF":"1f467-1f3ff","\uD83D\uDC68\uD83C\uDFFB":"1f468-1f3fb","\uD83D\uDC68\uD83C\uDFFC":"1f468-1f3fc","\uD83D\uDC68\uD83C\uDFFD":"1f468-1f3fd","\uD83D\uDC68\uD83C\uDFFE":"1f468-1f3fe","\uD83D\uDC68\uD83C\uDFFF":"1f468-1f3ff","\uD83D\uDC69\uD83C\uDFFB":"1f469-1f3fb","\uD83D\uDC69\uD83C\uDFFC":"1f469-1f3fc","\uD83D\uDC69\uD83C\uDFFD":"1f469-1f3fd","\uD83D\uDC69\uD83C\uDFFE":"1f469-1f3fe","\uD83D\uDC69\uD83C\uDFFF":"1f469-1f3ff","\uD83D\uDC70\uD83C\uDFFB":"1f470-1f3fb","\uD83D\uDC70\uD83C\uDFFC":"1f470-1f3fc","\uD83E\uDD1A\uD83C\uDFFF":"1f91a-1f3ff","\uD83D\uDC70\uD83C\uDFFD":"1f470-1f3fd","\uD83D\uDC70\uD83C\uDFFE":"1f470-1f3fe","\uD83D\uDC70\uD83C\uDFFF":"1f470-1f3ff","\uD83D\uDC71\uD83C\uDFFB":"1f471-1f3fb","\uD83D\uDC71\uD83C\uDFFC":"1f471-1f3fc","\uD83D\uDC71\uD83C\uDFFD":"1f471-1f3fd","\uD83D\uDC71\uD83C\uDFFE":"1f471-1f3fe","\uD83D\uDC71\uD83C\uDFFF":"1f471-1f3ff","\uD83D\uDC72\uD83C\uDFFB":"1f472-1f3fb","\uD83D\uDC72\uD83C\uDFFC":"1f472-1f3fc","\uD83D\uDC72\uD83C\uDFFD":"1f472-1f3fd","\uD83D\uDC72\uD83C\uDFFE":"1f472-1f3fe","\uD83D\uDC72\uD83C\uDFFF":"1f472-1f3ff","\uD83D\uDC73\uD83C\uDFFB":"1f473-1f3fb","\uD83D\uDC73\uD83C\uDFFC":"1f473-1f3fc","\uD83D\uDC73\uD83C\uDFFD":"1f473-1f3fd","\uD83D\uDC73\uD83C\uDFFE":"1f473-1f3fe","\uD83D\uDC73\uD83C\uDFFF":"1f473-1f3ff","\uD83D\uDC74\uD83C\uDFFB":"1f474-1f3fb","\uD83D\uDC74\uD83C\uDFFC":"1f474-1f3fc","\uD83D\uDC74\uD83C\uDFFD":"1f474-1f3fd","\uD83D\uDC74\uD83C\uDFFE":"1f474-1f3fe","\uD83D\uDC74\uD83C\uDFFF":"1f474-1f3ff","\uD83D\uDC75\uD83C\uDFFB":"1f475-1f3fb","\uD83D\uDC75\uD83C\uDFFC":"1f475-1f3fc","\uD83D\uDC75\uD83C\uDFFD":"1f475-1f3fd","\uD83D\uDC75\uD83C\uDFFE":"1f475-1f3fe","\uD83D\uDC75\uD83C\uDFFF":"1f475-1f3ff","\uD83D\uDC6E\uD83C\uDFFB":"1f46e-1f3fb","\uD83D\uDC6E\uD83C\uDFFC":"1f46e-1f3fc","\uD83D\uDC6E\uD83C\uDFFD":"1f46e-1f3fd","\uD83D\uDC6E\uD83C\uDFFE":"1f46e-1f3fe","\uD83D\uDC6E\uD83C\uDFFF":"1f46e-1f3ff","\uD83D\uDC77\uD83C\uDFFB":"1f477-1f3fb","\uD83D\uDC77\uD83C\uDFFC":"1f477-1f3fc","\uD83D\uDC77\uD83C\uDFFD":"1f477-1f3fd","\uD83D\uDC77\uD83C\uDFFE":"1f477-1f3fe","\uD83D\uDC77\uD83C\uDFFF":"1f477-1f3ff","\uD83D\uDC78\uD83C\uDFFB":"1f478-1f3fb","\uD83D\uDC78\uD83C\uDFFC":"1f478-1f3fc","\uD83D\uDC78\uD83C\uDFFD":"1f478-1f3fd","\uD83D\uDC78\uD83C\uDFFE":"1f478-1f3fe","\uD83E\uDD38\uD83C\uDFFB":"1f938-1f3fb","\uD83D\uDC78\uD83C\uDFFF":"1f478-1f3ff","\uD83D\uDC82\uD83C\uDFFB":"1f482-1f3fb","\uD83D\uDC82\uD83C\uDFFC":"1f482-1f3fc","\uD83E\uDD38\uD83C\uDFFC":"1f938-1f3fc","\uD83D\uDC82\uD83C\uDFFD":"1f482-1f3fd","\uD83D\uDC82\uD83C\uDFFE":"1f482-1f3fe","\uD83D\uDC82\uD83C\uDFFF":"1f482-1f3ff","\uD83E\uDD38\uD83C\uDFFD":"1f938-1f3fd","\uD83D\uDC7C\uD83C\uDFFB":"1f47c-1f3fb","\uD83D\uDC7C\uD83C\uDFFC":"1f47c-1f3fc","\uD83D\uDC7C\uD83C\uDFFD":"1f47c-1f3fd","\uD83D\uDC7C\uD83C\uDFFE":"1f47c-1f3fe","\uD83D\uDC7C\uD83C\uDFFF":"1f47c-1f3ff","\uD83D\uDE47\uD83C\uDFFB":"1f647-1f3fb","\uD83D\uDE47\uD83C\uDFFC":"1f647-1f3fc","\uD83D\uDE47\uD83C\uDFFD":"1f647-1f3fd","\uD83D\uDE47\uD83C\uDFFE":"1f647-1f3fe","\uD83D\uDE47\uD83C\uDFFF":"1f647-1f3ff","\uD83D\uDC81\uD83C\uDFFB":"1f481-1f3fb","\uD83D\uDC81\uD83C\uDFFC":"1f481-1f3fc","\uD83D\uDC81\uD83C\uDFFD":"1f481-1f3fd","\uD83E\uDD38\uD83C\uDFFE":"1f938-1f3fe","\uD83D\uDC81\uD83C\uDFFE":"1f481-1f3fe","\uD83D\uDC81\uD83C\uDFFF":"1f481-1f3ff","\uD83D\uDE45\uD83C\uDFFB":"1f645-1f3fb","\uD83E\uDD38\uD83C\uDFFF":"1f938-1f3ff","\uD83D\uDE45\uD83C\uDFFC":"1f645-1f3fc","\uD83D\uDE45\uD83C\uDFFD":"1f645-1f3fd","\uD83D\uDE45\uD83C\uDFFE":"1f645-1f3fe","\uD83D\uDE45\uD83C\uDFFF":"1f645-1f3ff","\uD83D\uDE46\uD83C\uDFFB":"1f646-1f3fb","\uD83D\uDE46\uD83C\uDFFC":"1f646-1f3fc","\uD83D\uDE46\uD83C\uDFFD":"1f646-1f3fd","\uD83D\uDE46\uD83C\uDFFE":"1f646-1f3fe","\uD83D\uDE46\uD83C\uDFFF":"1f646-1f3ff","\uD83D\uDE4B\uD83C\uDFFB":"1f64b-1f3fb","\uD83D\uDE4B\uD83C\uDFFC":"1f64b-1f3fc","\uD83D\uDE4B\uD83C\uDFFD":"1f64b-1f3fd","\uD83D\uDE4B\uD83C\uDFFE":"1f64b-1f3fe","\uD83D\uDE4B\uD83C\uDFFF":"1f64b-1f3ff","\uD83D\uDE4E\uD83C\uDFFB":"1f64e-1f3fb","\uD83D\uDE4E\uD83C\uDFFC":"1f64e-1f3fc","\uD83D\uDE4E\uD83C\uDFFD":"1f64e-1f3fd","\uD83D\uDE4E\uD83C\uDFFE":"1f64e-1f3fe","\uD83D\uDE4E\uD83C\uDFFF":"1f64e-1f3ff","\uD83D\uDE4D\uD83C\uDFFB":"1f64d-1f3fb","\uD83D\uDE4D\uD83C\uDFFC":"1f64d-1f3fc","\uD83D\uDE4D\uD83C\uDFFD":"1f64d-1f3fd","\uD83D\uDE4D\uD83C\uDFFE":"1f64d-1f3fe","\uD83D\uDE4D\uD83C\uDFFF":"1f64d-1f3ff","\uD83D\uDC86\uD83C\uDFFB":"1f486-1f3fb","\uD83D\uDC86\uD83C\uDFFC":"1f486-1f3fc","\uD83D\uDC86\uD83C\uDFFD":"1f486-1f3fd","\uD83D\uDC86\uD83C\uDFFE":"1f486-1f3fe","\uD83D\uDC86\uD83C\uDFFF":"1f486-1f3ff","\uD83D\uDC87\uD83C\uDFFB":"1f487-1f3fb","\uD83D\uDC87\uD83C\uDFFC":"1f487-1f3fc","\uD83D\uDC87\uD83C\uDFFD":"1f487-1f3fd","\uD83D\uDC87\uD83C\uDFFE":"1f487-1f3fe","\uD83D\uDC87\uD83C\uDFFF":"1f487-1f3ff","\uD83D\uDE4C\uD83C\uDFFB":"1f64c-1f3fb","\uD83D\uDE4C\uD83C\uDFFC":"1f64c-1f3fc","\uD83D\uDE4C\uD83C\uDFFD":"1f64c-1f3fd","\uD83D\uDE4C\uD83C\uDFFE":"1f64c-1f3fe","\uD83D\uDE4C\uD83C\uDFFF":"1f64c-1f3ff","\uD83D\uDC4F\uD83C\uDFFB":"1f44f-1f3fb","\uD83D\uDC4F\uD83C\uDFFC":"1f44f-1f3fc","\uD83D\uDC4F\uD83C\uDFFD":"1f44f-1f3fd","\uD83E\uDD3D\uD83C\uDFFB":"1f93d-1f3fb","\uD83D\uDC4F\uD83C\uDFFE":"1f44f-1f3fe","\uD83D\uDC4F\uD83C\uDFFF":"1f44f-1f3ff","\uD83E\uDD3D\uD83C\uDFFC":"1f93d-1f3fc","\uD83D\uDC42\uD83C\uDFFB":"1f442-1f3fb","\uD83D\uDC42\uD83C\uDFFC":"1f442-1f3fc","\uD83D\uDC42\uD83C\uDFFD":"1f442-1f3fd","\uD83D\uDC42\uD83C\uDFFE":"1f442-1f3fe","\uD83D\uDC42\uD83C\uDFFF":"1f442-1f3ff","\uD83D\uDC43\uD83C\uDFFB":"1f443-1f3fb","\uD83D\uDC43\uD83C\uDFFC":"1f443-1f3fc","\uD83D\uDC43\uD83C\uDFFD":"1f443-1f3fd","\uD83D\uDC43\uD83C\uDFFE":"1f443-1f3fe","\uD83D\uDC43\uD83C\uDFFF":"1f443-1f3ff","\uD83D\uDC85\uD83C\uDFFB":"1f485-1f3fb","\uD83D\uDC85\uD83C\uDFFC":"1f485-1f3fc","\uD83D\uDC85\uD83C\uDFFD":"1f485-1f3fd","\uD83D\uDC85\uD83C\uDFFE":"1f485-1f3fe","\uD83D\uDC85\uD83C\uDFFF":"1f485-1f3ff","\uD83D\uDC4B\uD83C\uDFFB":"1f44b-1f3fb","\uD83D\uDC4B\uD83C\uDFFC":"1f44b-1f3fc","\uD83D\uDC4B\uD83C\uDFFD":"1f44b-1f3fd","\uD83D\uDC4B\uD83C\uDFFE":"1f44b-1f3fe","\uD83D\uDC4B\uD83C\uDFFF":"1f44b-1f3ff","\uD83D\uDC4D\uD83C\uDFFB":"1f44d-1f3fb","\uD83D\uDC4D\uD83C\uDFFC":"1f44d-1f3fc","\uD83D\uDC4D\uD83C\uDFFD":"1f44d-1f3fd","\uD83D\uDC4D\uD83C\uDFFE":"1f44d-1f3fe","\uD83D\uDC4D\uD83C\uDFFF":"1f44d-1f3ff","\uD83D\uDC4E\uD83C\uDFFB":"1f44e-1f3fb","\uD83D\uDC4E\uD83C\uDFFC":"1f44e-1f3fc","\uD83D\uDC4E\uD83C\uDFFD":"1f44e-1f3fd","\uD83D\uDC4E\uD83C\uDFFE":"1f44e-1f3fe","\uD83D\uDC4E\uD83C\uDFFF":"1f44e-1f3ff","\uD83D\uDC46\uD83C\uDFFB":"1f446-1f3fb","\uD83D\uDC46\uD83C\uDFFC":"1f446-1f3fc","\uD83D\uDC46\uD83C\uDFFD":"1f446-1f3fd","\uD83D\uDC46\uD83C\uDFFE":"1f446-1f3fe","\uD83D\uDC46\uD83C\uDFFF":"1f446-1f3ff","\uD83D\uDC47\uD83C\uDFFB":"1f447-1f3fb","\uD83D\uDC47\uD83C\uDFFC":"1f447-1f3fc","\uD83D\uDC47\uD83C\uDFFD":"1f447-1f3fd","\uD83D\uDC47\uD83C\uDFFE":"1f447-1f3fe","\uD83D\uDC47\uD83C\uDFFF":"1f447-1f3ff","\uD83D\uDC48\uD83C\uDFFB":"1f448-1f3fb","\uD83D\uDC48\uD83C\uDFFC":"1f448-1f3fc","\uD83D\uDC48\uD83C\uDFFD":"1f448-1f3fd","\uD83D\uDC48\uD83C\uDFFE":"1f448-1f3fe","\uD83D\uDC48\uD83C\uDFFF":"1f448-1f3ff","\uD83D\uDC49\uD83C\uDFFB":"1f449-1f3fb","\uD83D\uDC49\uD83C\uDFFC":"1f449-1f3fc","\uD83D\uDC49\uD83C\uDFFD":"1f449-1f3fd","\uD83D\uDC49\uD83C\uDFFE":"1f449-1f3fe","\uD83D\uDC49\uD83C\uDFFF":"1f449-1f3ff","\uD83D\uDC4C\uD83C\uDFFB":"1f44c-1f3fb","\uD83D\uDC4C\uD83C\uDFFC":"1f44c-1f3fc","\uD83E\uDD3D\uD83C\uDFFD":"1f93d-1f3fd","\uD83D\uDC4C\uD83C\uDFFD":"1f44c-1f3fd","\uD83D\uDC4C\uD83C\uDFFE":"1f44c-1f3fe","\uD83E\uDD3D\uD83C\uDFFE":"1f93d-1f3fe","\uD83D\uDC4C\uD83C\uDFFF":"1f44c-1f3ff","\uD83D\uDC4A\uD83C\uDFFB":"1f44a-1f3fb","\uD83D\uDC4A\uD83C\uDFFC":"1f44a-1f3fc","\uD83D\uDC4A\uD83C\uDFFD":"1f44a-1f3fd","\uD83D\uDC4A\uD83C\uDFFE":"1f44a-1f3fe","\uD83D\uDC4A\uD83C\uDFFF":"1f44a-1f3ff","\uD83D\uDCAA\uD83C\uDFFB":"1f4aa-1f3fb","\uD83D\uDCAA\uD83C\uDFFC":"1f4aa-1f3fc","\uD83D\uDCAA\uD83C\uDFFD":"1f4aa-1f3fd","\uD83D\uDCAA\uD83C\uDFFE":"1f4aa-1f3fe","\uD83D\uDCAA\uD83C\uDFFF":"1f4aa-1f3ff","\uD83D\uDC50\uD83C\uDFFB":"1f450-1f3fb","\uD83D\uDC50\uD83C\uDFFC":"1f450-1f3fc","\uD83D\uDC50\uD83C\uDFFD":"1f450-1f3fd","\uD83D\uDC50\uD83C\uDFFE":"1f450-1f3fe","\uD83D\uDC50\uD83C\uDFFF":"1f450-1f3ff","\uD83D\uDE4F\uD83C\uDFFB":"1f64f-1f3fb","\uD83E\uDD3D\uD83C\uDFFF":"1f93d-1f3ff","\uD83D\uDE4F\uD83C\uDFFC":"1f64f-1f3fc","\uD83D\uDE4F\uD83C\uDFFD":"1f64f-1f3fd","\uD83E\uDD3E\uD83C\uDFFB":"1f93e-1f3fb","\uD83D\uDE4F\uD83C\uDFFE":"1f64f-1f3fe","\uD83D\uDE4F\uD83C\uDFFF":"1f64f-1f3ff","\uD83E\uDD3E\uD83C\uDFFC":"1f93e-1f3fc","\uD83C\uDFC3\uD83C\uDFFB":"1f3c3-1f3fb","\uD83C\uDFC3\uD83C\uDFFC":"1f3c3-1f3fc","\uD83C\uDFC3\uD83C\uDFFD":"1f3c3-1f3fd","\uD83C\uDFC3\uD83C\uDFFE":"1f3c3-1f3fe","\uD83E\uDD3E\uD83C\uDFFD":"1f93e-1f3fd","\uD83C\uDFC3\uD83C\uDFFF":"1f3c3-1f3ff","\uD83D\uDEB6\uD83C\uDFFB":"1f6b6-1f3fb","\uD83D\uDEB6\uD83C\uDFFC":"1f6b6-1f3fc","\uD83D\uDEB6\uD83C\uDFFD":"1f6b6-1f3fd","\uD83D\uDEB6\uD83C\uDFFE":"1f6b6-1f3fe","\uD83D\uDEB6\uD83C\uDFFF":"1f6b6-1f3ff","\uD83D\uDC83\uD83C\uDFFB":"1f483-1f3fb","\uD83E\uDD3E\uD83C\uDFFE":"1f93e-1f3fe","\uD83D\uDC83\uD83C\uDFFC":"1f483-1f3fc","\uD83D\uDC83\uD83C\uDFFD":"1f483-1f3fd","\uD83E\uDD3E\uD83C\uDFFF":"1f93e-1f3ff","\uD83D\uDC83\uD83C\uDFFE":"1f483-1f3fe","\uD83D\uDC83\uD83C\uDFFF":"1f483-1f3ff","\uD83E\uDD39\uD83C\uDFFB":"1f939-1f3fb","\uD83D\uDEA3\uD83C\uDFFB":"1f6a3-1f3fb","\uD83D\uDEA3\uD83C\uDFFC":"1f6a3-1f3fc","\uD83D\uDEA3\uD83C\uDFFD":"1f6a3-1f3fd","\uD83D\uDEA3\uD83C\uDFFE":"1f6a3-1f3fe","\uD83D\uDEA3\uD83C\uDFFF":"1f6a3-1f3ff","\uD83C\uDFCA\uD83C\uDFFB":"1f3ca-1f3fb","\uD83C\uDFCA\uD83C\uDFFC":"1f3ca-1f3fc","\uD83E\uDD39\uD83C\uDFFC":"1f939-1f3fc","\uD83C\uDFCA\uD83C\uDFFD":"1f3ca-1f3fd","\uD83C\uDFCA\uD83C\uDFFE":"1f3ca-1f3fe","\uD83C\uDFCA\uD83C\uDFFF":"1f3ca-1f3ff","\uD83E\uDD39\uD83C\uDFFD":"1f939-1f3fd","\uD83C\uDFC4\uD83C\uDFFB":"1f3c4-1f3fb","\uD83C\uDFC4\uD83C\uDFFC":"1f3c4-1f3fc","\uD83C\uDFC4\uD83C\uDFFD":"1f3c4-1f3fd","\uD83C\uDFC4\uD83C\uDFFE":"1f3c4-1f3fe","\uD83C\uDFC4\uD83C\uDFFF":"1f3c4-1f3ff","\uD83D\uDEC0\uD83C\uDFFB":"1f6c0-1f3fb","\uD83D\uDEC0\uD83C\uDFFC":"1f6c0-1f3fc","\uD83E\uDD39\uD83C\uDFFE":"1f939-1f3fe","\uD83D\uDEC0\uD83C\uDFFD":"1f6c0-1f3fd","\uD83D\uDEC0\uD83C\uDFFE":"1f6c0-1f3fe","\uD83D\uDEC0\uD83C\uDFFF":"1f6c0-1f3ff","\uD83E\uDD39\uD83C\uDFFF":"1f939-1f3ff","\uD83D\uDEB4\uD83C\uDFFB":"1f6b4-1f3fb","\uD83D\uDEB4\uD83C\uDFFC":"1f6b4-1f3fc","\uD83D\uDEB4\uD83C\uDFFD":"1f6b4-1f3fd","\uD83D\uDEB4\uD83C\uDFFE":"1f6b4-1f3fe","\uD83D\uDEB4\uD83C\uDFFF":"1f6b4-1f3ff","\uD83D\uDEB5\uD83C\uDFFB":"1f6b5-1f3fb","\uD83D\uDEB5\uD83C\uDFFC":"1f6b5-1f3fc","\uD83D\uDEB5\uD83C\uDFFD":"1f6b5-1f3fd","\uD83D\uDEB5\uD83C\uDFFE":"1f6b5-1f3fe","\uD83D\uDEB5\uD83C\uDFFF":"1f6b5-1f3ff","\uD83C\uDFC7\uD83C\uDFFB":"1f3c7-1f3fb","\uD83C\uDFC7\uD83C\uDFFC":"1f3c7-1f3fc","\uD83C\uDFC7\uD83C\uDFFD":"1f3c7-1f3fd","\uD83C\uDFC7\uD83C\uDFFE":"1f3c7-1f3fe","\uD83C\uDFC7\uD83C\uDFFF":"1f3c7-1f3ff","\uD83D\uDD90\uD83C\uDFFB":"1f590-1f3fb","\uD83D\uDD90\uD83C\uDFFC":"1f590-1f3fc","\uD83D\uDD90\uD83C\uDFFD":"1f590-1f3fd","\uD83D\uDD90\uD83C\uDFFE":"1f590-1f3fe","\uD83D\uDD90\uD83C\uDFFF":"1f590-1f3ff","\uD83D\uDD95\uD83C\uDFFB":"1f595-1f3fb","\uD83D\uDD95\uD83C\uDFFC":"1f595-1f3fc","\uD83D\uDD95\uD83C\uDFFD":"1f595-1f3fd","\uD83D\uDD95\uD83C\uDFFE":"1f595-1f3fe","\uD83D\uDD95\uD83C\uDFFF":"1f595-1f3ff","\uD83D\uDD96\uD83C\uDFFB":"1f596-1f3fb","\uD83D\uDD96\uD83C\uDFFC":"1f596-1f3fc","\uD83D\uDD96\uD83C\uDFFD":"1f596-1f3fd","\uD83D\uDD96\uD83C\uDFFE":"1f596-1f3fe","\uD83D\uDD96\uD83C\uDFFF":"1f596-1f3ff","\uD83C\uDF85\uD83C\uDFFB":"1f385-1f3fb","\uD83C\uDF85\uD83C\uDFFC":"1f385-1f3fc","\uD83C\uDF85\uD83C\uDFFD":"1f385-1f3fd","\uD83C\uDF85\uD83C\uDFFE":"1f385-1f3fe","\uD83C\uDF85\uD83C\uDFFF":"1f385-1f3ff","\uD83E\uDD18\uD83C\uDFFB":"1f918-1f3fb","\uD83E\uDD18\uD83C\uDFFC":"1f918-1f3fc","\uD83E\uDD18\uD83C\uDFFD":"1f918-1f3fd","\uD83E\uDD18\uD83C\uDFFE":"1f918-1f3fe","\uD83E\uDD18\uD83C\uDFFF":"1f918-1f3ff","\uD83C\uDFCB\uD83C\uDFFB":"1f3cb-1f3fb","\uD83C\uDFCB\uD83C\uDFFC":"1f3cb-1f3fc","\uD83C\uDFCB\uD83C\uDFFD":"1f3cb-1f3fd","\uD83C\uDFCB\uD83C\uDFFE":"1f3cb-1f3fe","\uD83C\uDFCB\uD83C\uDFFF":"1f3cb-1f3ff","\uD83C\uDDE6\uD83C\uDDFD":"1f1e6-1f1fd","\uD83C\uDDF9\uD83C\uDDE6":"1f1f9-1f1e6","\uD83C\uDDEE\uD83C\uDDF4":"1f1ee-1f1f4","\uD83C\uDDE7\uD83C\uDDF6":"1f1e7-1f1f6","\uD83C\uDDE8\uD83C\uDDFD":"1f1e8-1f1fd","\uD83C\uDDE8\uD83C\uDDE8":"1f1e8-1f1e8","\uD83C\uDDEC\uD83C\uDDEC":"1f1ec-1f1ec","\uD83C\uDDEE\uD83C\uDDF2":"1f1ee-1f1f2","\uD83C\uDDFE\uD83C\uDDF9":"1f1fe-1f1f9","\uD83C\uDDF3\uD83C\uDDEB":"1f1f3-1f1eb","\uD83C\uDDF5\uD83C\uDDF3":"1f1f5-1f1f3","\uD83C\uDDE7\uD83C\uDDF1":"1f1e7-1f1f1","\uD83C\uDDF5\uD83C\uDDF2":"1f1f5-1f1f2","\uD83C\uDDEC\uD83C\uDDF8":"1f1ec-1f1f8","\uD83C\uDDF9\uD83C\uDDF0":"1f1f9-1f1f0","\uD83C\uDDE7\uD83C\uDDFB":"1f1e7-1f1fb","\uD83C\uDDED\uD83C\uDDF2":"1f1ed-1f1f2","\uD83C\uDDF8\uD83C\uDDEF":"1f1f8-1f1ef","\uD83C\uDDFA\uD83C\uDDF2":"1f1fa-1f1f2","\uD83C\uDDEE\uD83C\uDDE8":"1f1ee-1f1e8","\uD83C\uDDEA\uD83C\uDDE6":"1f1ea-1f1e6","\uD83C\uDDE8\uD83C\uDDF5":"1f1e8-1f1f5","\uD83C\uDDE9\uD83C\uDDEC":"1f1e9-1f1ec","\uD83C\uDDE6\uD83C\uDDF8":"1f1e6-1f1f8","\uD83C\uDDE6\uD83C\uDDF6":"1f1e6-1f1f6","\uD83C\uDDFB\uD83C\uDDEC":"1f1fb-1f1ec","\uD83C\uDDE8\uD83C\uDDF0":"1f1e8-1f1f0","\uD83C\uDDE8\uD83C\uDDFC":"1f1e8-1f1fc","\uD83C\uDDEA\uD83C\uDDFA":"1f1ea-1f1fa","\uD83C\uDDEC\uD83C\uDDEB":"1f1ec-1f1eb","\uD83C\uDDF9\uD83C\uDDEB":"1f1f9-1f1eb","\uD83C\uDDEC\uD83C\uDDF5":"1f1ec-1f1f5","\uD83C\uDDF2\uD83C\uDDF6":"1f1f2-1f1f6","\uD83C\uDDF2\uD83C\uDDF5":"1f1f2-1f1f5","\uD83C\uDDF7\uD83C\uDDEA":"1f1f7-1f1ea","\uD83C\uDDF8\uD83C\uDDFD":"1f1f8-1f1fd","\uD83C\uDDF8\uD83C\uDDF8":"1f1f8-1f1f8","\uD83C\uDDF9\uD83C\uDDE8":"1f1f9-1f1e8","\uD83C\uDDF2\uD83C\uDDEB":"1f1f2-1f1eb","\uD83D\uDD75\uD83C\uDFFB":"1f575-1f3fb","\uD83D\uDD75\uD83C\uDFFC":"1f575-1f3fc","\uD83D\uDD75\uD83C\uDFFD":"1f575-1f3fd","\uD83D\uDD75\uD83C\uDFFE":"1f575-1f3fe","\uD83D\uDD75\uD83C\uDFFF":"1f575-1f3ff","\uD83C\uDFC2\uD83C\uDFFB":"1f3c2-1f3fb","\uD83D\uDC68\uD83D\uDCBB":"1f468-1f4bb","\uD83D\uDC69\uD83D\uDCBB":"1f469-1f4bb","\uD83D\uDC68\uD83C\uDFEB":"1f468-1f3eb","\uD83D\uDC69\uD83C\uDFEB":"1f469-1f3eb","\uD83D\uDC68\uD83C\uDF93":"1f468-1f393","\uD83D\uDC69\uD83C\uDF93":"1f469-1f393","\uD83D\uDC68\uD83C\uDFA4":"1f468-1f3a4","\uD83D\uDC69\uD83C\uDFA4":"1f469-1f3a4","\uD83D\uDC68\uD83D\uDD2C":"1f468-1f52c","\uD83D\uDC69\uD83D\uDD2C":"1f469-1f52c","\uD83D\uDC68\uD83D\uDCBC":"1f468-1f4bc","\uD83D\uDC69\uD83D\uDCBC":"1f469-1f4bc","\uD83D\uDC68\uD83D\uDD27":"1f468-1f527","\uD83D\uDC69\uD83D\uDD27":"1f469-1f527","\uD83D\uDC68\uD83C\uDFED":"1f468-1f3ed","\uD83D\uDC69\uD83C\uDFED":"1f469-1f3ed","\uD83D\uDC68\uD83C\uDF73":"1f468-1f373","\uD83D\uDC69\uD83C\uDF73":"1f469-1f373","\uD83D\uDC68\uD83C\uDF3E":"1f468-1f33e","\uD83D\uDC69\uD83C\uDF3E":"1f469-1f33e","\uD83D\uDD74\uD83C\uDFFB":"1f574-1f3fb","\uD83D\uDD74\uD83C\uDFFC":"1f574-1f3fc","\uD83D\uDD74\uD83C\uDFFD":"1f574-1f3fd","\uD83D\uDD74\uD83C\uDFFE":"1f574-1f3fe","\uD83D\uDD74\uD83C\uDFFF":"1f574-1f3ff","\uD83D\uDECC\uD83C\uDFFB":"1f6cc-1f3fb","\uD83D\uDECC\uD83C\uDFFC":"1f6cc-1f3fc","\uD83D\uDECC\uD83C\uDFFD":"1f6cc-1f3fd","\uD83D\uDECC\uD83C\uDFFE":"1f6cc-1f3fe","\uD83D\uDECC\uD83C\uDFFF":"1f6cc-1f3ff","\uD83D\uDC68\uD83D\uDC66":"1f468-1f466","\uD83D\uDC68\uD83D\uDC67":"1f468-1f467","\uD83D\uDC69\uD83D\uDC66":"1f469-1f466","\uD83D\uDC69\uD83D\uDC67":"1f469-1f467","\uD83D\uDC68\uD83C\uDFA8":"1f468-1f3a8","\uD83D\uDC69\uD83C\uDFA8":"1f469-1f3a8","\uD83D\uDC68\uD83D\uDE80":"1f468-1f680","\uD83D\uDC69\uD83D\uDE80":"1f469-1f680","\uD83D\uDC68\uD83D\uDE92":"1f468-1f692","\uD83D\uDC69\uD83D\uDE92":"1f469-1f692","\uD83C\uDDFA\uD83C\uDDF3":"1f1fa-1f1f3","\uD83C\uDFC2\uD83C\uDFFC":"1f3c2-1f3fc","\uD83C\uDFC2\uD83C\uDFFD":"1f3c2-1f3fd","\uD83C\uDFC2\uD83C\uDFFE":"1f3c2-1f3fe","\uD83C\uDFC2\uD83C\uDFFF":"1f3c2-1f3ff","\uD83C\uDFCC\uD83C\uDFFB":"1f3cc-1f3fb","\uD83C\uDFCC\uD83C\uDFFC":"1f3cc-1f3fc","\uD83C\uDFCC\uD83C\uDFFD":"1f3cc-1f3fd","\uD83C\uDFCC\uD83C\uDFFE":"1f3cc-1f3fe","\uD83C\uDFCC\uD83C\uDFFF":"1f3cc-1f3ff","\uD83E\uDD1F\uD83C\uDFFB":"1f91f-1f3fb","\uD83E\uDD1F\uD83C\uDFFC":"1f91f-1f3fc","\uD83E\uDD1F\uD83C\uDFFD":"1f91f-1f3fd","\uD83E\uDD1F\uD83C\uDFFE":"1f91f-1f3fe","\uD83E\uDD1F\uD83C\uDFFF":"1f91f-1f3ff","\uD83E\uDD31\uD83C\uDFFB":"1f931-1f3fb","\uD83E\uDD31\uD83C\uDFFC":"1f931-1f3fc","\uD83E\uDD31\uD83C\uDFFD":"1f931-1f3fd","\uD83E\uDD31\uD83C\uDFFE":"1f931-1f3fe","\uD83E\uDD31\uD83C\uDFFF":"1f931-1f3ff","\uD83E\uDD32\uD83C\uDFFB":"1f932-1f3fb","\uD83E\uDD32\uD83C\uDFFC":"1f932-1f3fc","\uD83E\uDD32\uD83C\uDFFD":"1f932-1f3fd","\uD83E\uDD32\uD83C\uDFFE":"1f932-1f3fe","\uD83E\uDD32\uD83C\uDFFF":"1f932-1f3ff","\uD83E\uDDD1\uD83C\uDFFB":"1f9d1-1f3fb","\uD83E\uDDD1\uD83C\uDFFC":"1f9d1-1f3fc","\uD83E\uDDD1\uD83C\uDFFD":"1f9d1-1f3fd","\uD83E\uDDD1\uD83C\uDFFE":"1f9d1-1f3fe","\uD83E\uDDD1\uD83C\uDFFF":"1f9d1-1f3ff","\uD83E\uDDD2\uD83C\uDFFB":"1f9d2-1f3fb","\uD83E\uDDD2\uD83C\uDFFC":"1f9d2-1f3fc","\uD83E\uDDD2\uD83C\uDFFD":"1f9d2-1f3fd","\uD83E\uDDD2\uD83C\uDFFE":"1f9d2-1f3fe","\uD83E\uDDD2\uD83C\uDFFF":"1f9d2-1f3ff","\uD83E\uDDD3\uD83C\uDFFB":"1f9d3-1f3fb","\uD83E\uDDD3\uD83C\uDFFC":"1f9d3-1f3fc","\uD83E\uDDD3\uD83C\uDFFD":"1f9d3-1f3fd","\uD83E\uDDD3\uD83C\uDFFE":"1f9d3-1f3fe","\uD83E\uDDD3\uD83C\uDFFF":"1f9d3-1f3ff","\uD83E\uDDD4\uD83C\uDFFB":"1f9d4-1f3fb","\uD83E\uDDD4\uD83C\uDFFC":"1f9d4-1f3fc","\uD83E\uDDD4\uD83C\uDFFD":"1f9d4-1f3fd","\uD83E\uDDD4\uD83C\uDFFE":"1f9d4-1f3fe","\uD83E\uDDD4\uD83C\uDFFF":"1f9d4-1f3ff","\uD83E\uDDD5\uD83C\uDFFB":"1f9d5-1f3fb","\uD83E\uDDD5\uD83C\uDFFC":"1f9d5-1f3fc","\uD83E\uDDD5\uD83C\uDFFD":"1f9d5-1f3fd","\uD83E\uDDD5\uD83C\uDFFE":"1f9d5-1f3fe","\uD83E\uDDD5\uD83C\uDFFF":"1f9d5-1f3ff","\uD83E\uDDD6\uD83C\uDFFB":"1f9d6-1f3fb","\uD83E\uDDD6\uD83C\uDFFC":"1f9d6-1f3fc","\uD83E\uDDD6\uD83C\uDFFD":"1f9d6-1f3fd","\uD83E\uDDD6\uD83C\uDFFE":"1f9d6-1f3fe","\uD83E\uDDD6\uD83C\uDFFF":"1f9d6-1f3ff","\uD83E\uDDD7\uD83C\uDFFB":"1f9d7-1f3fb","\uD83E\uDDD7\uD83C\uDFFC":"1f9d7-1f3fc","\uD83E\uDDD7\uD83C\uDFFD":"1f9d7-1f3fd","\uD83E\uDDD7\uD83C\uDFFE":"1f9d7-1f3fe","\uD83E\uDDD7\uD83C\uDFFF":"1f9d7-1f3ff","\uD83E\uDDD8\uD83C\uDFFB":"1f9d8-1f3fb","\uD83E\uDDD8\uD83C\uDFFC":"1f9d8-1f3fc","\uD83E\uDDD8\uD83C\uDFFD":"1f9d8-1f3fd","\uD83E\uDDD8\uD83C\uDFFE":"1f9d8-1f3fe","\uD83E\uDDD8\uD83C\uDFFF":"1f9d8-1f3ff","\uD83E\uDDD9\uD83C\uDFFB":"1f9d9-1f3fb","\uD83E\uDDD9\uD83C\uDFFC":"1f9d9-1f3fc","\uD83E\uDDD9\uD83C\uDFFD":"1f9d9-1f3fd","\uD83E\uDDD9\uD83C\uDFFE":"1f9d9-1f3fe","\uD83E\uDDD9\uD83C\uDFFF":"1f9d9-1f3ff","\uD83E\uDDDA\uD83C\uDFFB":"1f9da-1f3fb","\uD83E\uDDDA\uD83C\uDFFC":"1f9da-1f3fc","\uD83E\uDDDA\uD83C\uDFFD":"1f9da-1f3fd","\uD83E\uDDDA\uD83C\uDFFE":"1f9da-1f3fe","\uD83E\uDDDA\uD83C\uDFFF":"1f9da-1f3ff","\uD83E\uDDDB\uD83C\uDFFB":"1f9db-1f3fb","\uD83E\uDDDB\uD83C\uDFFC":"1f9db-1f3fc","\uD83E\uDDDB\uD83C\uDFFD":"1f9db-1f3fd","\uD83E\uDDDB\uD83C\uDFFE":"1f9db-1f3fe","\uD83E\uDDDB\uD83C\uDFFF":"1f9db-1f3ff","\uD83E\uDDDC\uD83C\uDFFB":"1f9dc-1f3fb","\uD83E\uDDDC\uD83C\uDFFC":"1f9dc-1f3fc","\uD83E\uDDDC\uD83C\uDFFD":"1f9dc-1f3fd","\uD83E\uDDDC\uD83C\uDFFE":"1f9dc-1f3fe","\uD83E\uDDDC\uD83C\uDFFF":"1f9dc-1f3ff","\uD83E\uDDDD\uD83C\uDFFB":"1f9dd-1f3fb","\uD83E\uDDDD\uD83C\uDFFC":"1f9dd-1f3fc","\uD83E\uDDDD\uD83C\uDFFD":"1f9dd-1f3fd","\uD83E\uDDDD\uD83C\uDFFE":"1f9dd-1f3fe","\uD83E\uDDDD\uD83C\uDFFF":"1f9dd-1f3ff","\uD83C\uDD7F\uFE0F":"1f17f","\uD83C\uDE02\uFE0F":"1f202","\uD83C\uDE37\uFE0F":"1f237","\uD83C\uDF9E\uFE0F":"1f39e","\uD83C\uDF9F\uFE0F":"1f39f","\uD83C\uDFCB\uFE0F":"1f3cb","\uD83C\uDFCC\uFE0F":"1f3cc","\uD83C\uDFCD\uFE0F":"1f3cd","\uD83C\uDFCE\uFE0F":"1f3ce","\uD83C\uDF96\uFE0F":"1f396","\uD83C\uDF97\uFE0F":"1f397","\uD83C\uDF36\uFE0F":"1f336","\uD83C\uDF27\uFE0F":"1f327","\uD83C\uDF28\uFE0F":"1f328","\uD83C\uDF29\uFE0F":"1f329","\uD83C\uDF2A\uFE0F":"1f32a","\uD83C\uDF2B\uFE0F":"1f32b","\uD83C\uDF2C\uFE0F":"1f32c","\uD83D\uDC3F\uFE0F":"1f43f","\uD83D\uDD77\uFE0F":"1f577","\uD83D\uDD78\uFE0F":"1f578","\uD83C\uDF21\uFE0F":"1f321","\uD83C\uDF99\uFE0F":"1f399","\uD83C\uDF9A\uFE0F":"1f39a","\uD83C\uDF9B\uFE0F":"1f39b","\uD83C\uDFF3\uFE0F":"1f3f3","\uD83C\uDFF5\uFE0F":"1f3f5","\uD83C\uDFF7\uFE0F":"1f3f7","\uD83D\uDCFD\uFE0F":"1f4fd","\uD83D\uDD49\uFE0F":"1f549","\uD83D\uDD4A\uFE0F":"1f54a","\uD83D\uDD6F\uFE0F":"1f56f","\uD83D\uDD70\uFE0F":"1f570","\uD83D\uDD73\uFE0F":"1f573","\uD83D\uDD76\uFE0F":"1f576","\uD83D\uDD79\uFE0F":"1f579","\uD83D\uDD87\uFE0F":"1f587","\uD83D\uDD8A\uFE0F":"1f58a","\uD83D\uDD8B\uFE0F":"1f58b","\uD83D\uDD8C\uFE0F":"1f58c","\uD83D\uDD8D\uFE0F":"1f58d","\uD83D\uDDA5\uFE0F":"1f5a5","\uD83D\uDDA8\uFE0F":"1f5a8","\uD83D\uDDB2\uFE0F":"1f5b2","\uD83D\uDDBC\uFE0F":"1f5bc","\uD83D\uDDC2\uFE0F":"1f5c2","\uD83D\uDDC3\uFE0F":"1f5c3","\uD83D\uDDC4\uFE0F":"1f5c4","\uD83D\uDDD1\uFE0F":"1f5d1","\uD83D\uDDD2\uFE0F":"1f5d2","\uD83D\uDDD3\uFE0F":"1f5d3","\uD83D\uDDDC\uFE0F":"1f5dc","\uD83D\uDDDD\uFE0F":"1f5dd","\uD83D\uDDDE\uFE0F":"1f5de","\uD83D\uDDE1\uFE0F":"1f5e1","\uD83D\uDDE3\uFE0F":"1f5e3","\uD83D\uDDE8\uFE0F":"1f5e8","\uD83D\uDDEF\uFE0F":"1f5ef","\uD83D\uDDF3\uFE0F":"1f5f3","\uD83D\uDDFA\uFE0F":"1f5fa","\uD83D\uDEE0\uFE0F":"1f6e0","\uD83D\uDEE1\uFE0F":"1f6e1","\uD83D\uDEE2\uFE0F":"1f6e2","\uD83D\uDEF0\uFE0F":"1f6f0","\uD83C\uDF7D\uFE0F":"1f37d","\uD83D\uDC41\uFE0F":"1f441","\uD83D\uDD74\uFE0F":"1f574","\uD83D\uDD75\uFE0F":"1f575","\uD83D\uDD90\uFE0F":"1f590","\uD83C\uDFD4\uFE0F":"1f3d4","\uD83C\uDFD5\uFE0F":"1f3d5","\uD83C\uDFD6\uFE0F":"1f3d6","\uD83C\uDFD7\uFE0F":"1f3d7","\uD83C\uDFD8\uFE0F":"1f3d8","\uD83C\uDFD9\uFE0F":"1f3d9","\uD83C\uDFDA\uFE0F":"1f3da","\uD83C\uDFDB\uFE0F":"1f3db","\uD83C\uDFDC\uFE0F":"1f3dc","\uD83C\uDFDD\uFE0F":"1f3dd","\uD83C\uDFDE\uFE0F":"1f3de","\uD83C\uDFDF\uFE0F":"1f3df","\uD83D\uDECB\uFE0F":"1f6cb","\uD83D\uDECD\uFE0F":"1f6cd","\uD83D\uDECE\uFE0F":"1f6ce","\uD83D\uDECF\uFE0F":"1f6cf","\uD83D\uDEE3\uFE0F":"1f6e3","\uD83D\uDEE4\uFE0F":"1f6e4","\uD83D\uDEE5\uFE0F":"1f6e5","\uD83D\uDEE9\uFE0F":"1f6e9","\uD83D\uDEF3\uFE0F":"1f6f3","\u261D\uD83C\uDFFB":"261d-1f3fb","\u261D\uD83C\uDFFC":"261d-1f3fc","\u261D\uD83C\uDFFD":"261d-1f3fd","\u261D\uD83C\uDFFE":"261d-1f3fe","\u261D\uD83C\uDFFF":"261d-1f3ff","\u270C\uD83C\uDFFB":"270c-1f3fb","\u270C\uD83C\uDFFC":"270c-1f3fc","\u270C\uD83C\uDFFD":"270c-1f3fd","\u270C\uD83C\uDFFE":"270c-1f3fe","\u270C\uD83C\uDFFF":"270c-1f3ff","\u270A\uD83C\uDFFB":"270a-1f3fb","\u270A\uD83C\uDFFC":"270a-1f3fc","\u270A\uD83C\uDFFD":"270a-1f3fd","\u270A\uD83C\uDFFE":"270a-1f3fe","\u270A\uD83C\uDFFF":"270a-1f3ff","\u270B\uD83C\uDFFB":"270b-1f3fb","\u270B\uD83C\uDFFC":"270b-1f3fc","\u270B\uD83C\uDFFD":"270b-1f3fd","\u270B\uD83C\uDFFE":"270b-1f3fe","\u270B\uD83C\uDFFF":"270b-1f3ff","\u270D\uD83C\uDFFB":"270d-1f3fb","\u270D\uD83C\uDFFC":"270d-1f3fc","\u270D\uD83C\uDFFD":"270d-1f3fd","\u270D\uD83C\uDFFE":"270d-1f3fe","\u270D\uD83C\uDFFF":"270d-1f3ff","\uD83C\uDF24\uFE0F":"1f324","\uD83C\uDF25\uFE0F":"1f325","\uD83C\uDF26\uFE0F":"1f326","\uD83D\uDDB1\uFE0F":"1f5b1","\u26F9\uD83C\uDFFB":"26f9-1f3fb","\u26F9\uD83C\uDFFC":"26f9-1f3fc","\u26F9\uD83C\uDFFD":"26f9-1f3fd","\u26F9\uD83C\uDFFE":"26f9-1f3fe","\u26F9\uD83C\uDFFF":"26f9-1f3ff","\uD83C\uDD70\uFE0F":"1f170","\uD83C\uDD71\uFE0F":"1f171","\uD83C\uDD7E\uFE0F":"1f17e","#\u20E3":"0023-20e3","0\u20E3":"0030-20e3","1\u20E3":"0031-20e3","2\u20E3":"0032-20e3","3\u20E3":"0033-20e3","4\u20E3":"0034-20e3","5\u20E3":"0035-20e3","6\u20E3":"0036-20e3","7\u20E3":"0037-20e3","8\u20E3":"0038-20e3","9\u20E3":"0039-20e3","\u00A9\uFE0F":"00a9","\u00AE\uFE0F":"00ae","\u203C\uFE0F":"203c","\u2049\uFE0F":"2049","\u2122\uFE0F":"2122","\u2139\uFE0F":"2139","\u2194\uFE0F":"2194","\u2195\uFE0F":"2195","\u2196\uFE0F":"2196","\u2197\uFE0F":"2197","\u2198\uFE0F":"2198","\u2199\uFE0F":"2199","\u21A9\uFE0F":"21a9","\u21AA\uFE0F":"21aa","\u24C2\uFE0F":"24c2","\u25AA\uFE0F":"25aa","\u25AB\uFE0F":"25ab","\u25B6\uFE0F":"25b6","\u25C0\uFE0F":"25c0","\u25FB\uFE0F":"25fb","\u25FC\uFE0F":"25fc","\u2600\uFE0F":"2600","\u2601\uFE0F":"2601","\u260E\uFE0F":"260e","\u2611\uFE0F":"2611","\u261D\uFE0F":"261d","\u263A\uFE0F":"263a","\u2660\uFE0F":"2660","\u2663\uFE0F":"2663","\u2665\uFE0F":"2665","\u2666\uFE0F":"2666","\u2668\uFE0F":"2668","\u267B\uFE0F":"267b","\u26A0\uFE0F":"26a0","\u2702\uFE0F":"2702","\u2708\uFE0F":"2708","\u2709\uFE0F":"2709","\u270C\uFE0F":"270c","\u270F\uFE0F":"270f","\u2712\uFE0F":"2712","\u2714\uFE0F":"2714","\u2716\uFE0F":"2716","\u2733\uFE0F":"2733","\u2734\uFE0F":"2734","\u2744\uFE0F":"2744","\u2747\uFE0F":"2747","\u2764\uFE0F":"2764","\u27A1\uFE0F":"27a1","\u2934\uFE0F":"2934","\u2935\uFE0F":"2935","\u2B05\uFE0F":"2b05","\u2B06\uFE0F":"2b06","\u2B07\uFE0F":"2b07","\u3030\uFE0F":"3030","\u303D\uFE0F":"303d","\u3297\uFE0F":"3297","\u3299\uFE0F":"3299","\u271D\uFE0F":"271d","\u2328\uFE0F":"2328","\u270D\uFE0F":"270d","*\u20E3":"002a-20e3","\u23CF\uFE0F":"23cf","\u23ED\uFE0F":"23ed","\u23EE\uFE0F":"23ee","\u23EF\uFE0F":"23ef","\u23F1\uFE0F":"23f1","\u23F2\uFE0F":"23f2","\u23F8\uFE0F":"23f8","\u23F9\uFE0F":"23f9","\u23FA\uFE0F":"23fa","\u2602\uFE0F":"2602","\u2603\uFE0F":"2603","\u2604\uFE0F":"2604","\u2618\uFE0F":"2618","\u2620\uFE0F":"2620","\u2622\uFE0F":"2622","\u2623\uFE0F":"2623","\u2626\uFE0F":"2626","\u262A\uFE0F":"262a","\u262E\uFE0F":"262e","\u262F\uFE0F":"262f","\u2638\uFE0F":"2638","\u2639\uFE0F":"2639","\u2692\uFE0F":"2692","\u2694\uFE0F":"2694","\u2696\uFE0F":"2696","\u2697\uFE0F":"2697","\u2699\uFE0F":"2699","\u269B\uFE0F":"269b","\u269C\uFE0F":"269c","\u26B0\uFE0F":"26b0","\u26B1\uFE0F":"26b1","\u26C8\uFE0F":"26c8","\u26CF\uFE0F":"26cf","\u26D1\uFE0F":"26d1","\u26D3\uFE0F":"26d3","\u26E9\uFE0F":"26e9","\u26F0\uFE0F":"26f0","\u26F1\uFE0F":"26f1","\u26F4\uFE0F":"26f4","\u26F7\uFE0F":"26f7","\u26F8\uFE0F":"26f8","\u26F9\uFE0F":"26f9","\u2721\uFE0F":"2721","\u2763\uFE0F":"2763","#\uFE0F":"0023","*\uFE0F":"002a","0\uFE0F":"0030","1\uFE0F":"0031","2\uFE0F":"0032","3\uFE0F":"0033","4\uFE0F":"0034","5\uFE0F":"0035","6\uFE0F":"0036","7\uFE0F":"0037","8\uFE0F":"0038","9\uFE0F":"0039","\u2640\uFE0F":"2640","\u2642\uFE0F":"2642","\u2695\uFE0F":"2695","\uD83E\uDD49":"1f949","\uD83E\uDD48":"1f948","\uD83E\uDD47":"1f947","\uD83E\uDD3A":"1f93a","\uD83E\uDD45":"1f945","\uD83E\uDD3E":"1f93e","\uD83C\uDDFF":"1f1ff","\uD83E\uDD3D":"1f93d","\uD83E\uDD4B":"1f94b","\uD83E\uDD4A":"1f94a","\uD83E\uDD3C":"1f93c","\uD83E\uDD39":"1f939","\uD83E\uDD38":"1f938","\uD83D\uDEF6":"1f6f6","\uD83D\uDEF5":"1f6f5","\uD83D\uDEF4":"1f6f4","\uD83D\uDED2":"1f6d2","\uD83C\uDC04":"1f004","\uD83C\uDCCF":"1f0cf","\uD83D\uDED1":"1f6d1","\uD83C\uDD8E":"1f18e","\uD83C\uDD91":"1f191","\uD83C\uDDFE":"1f1fe","\uD83C\uDD92":"1f192","\uD83C\uDD93":"1f193","\uD83C\uDD94":"1f194","\uD83C\uDD95":"1f195","\uD83C\uDD96":"1f196","\uD83C\uDD97":"1f197","\uD83C\uDD98":"1f198","\uD83E\uDD44":"1f944","\uD83C\uDD99":"1f199","\uD83C\uDD9A":"1f19a","\uD83E\uDD42":"1f942","\uD83E\uDD43":"1f943","\uD83C\uDE01":"1f201","\uD83C\uDE1A":"1f21a","\uD83C\uDE2F":"1f22f","\uD83E\uDD59":"1f959","\uD83C\uDE32":"1f232","\uD83C\uDE33":"1f233","\uD83C\uDE34":"1f234","\uD83C\uDE35":"1f235","\uD83C\uDE36":"1f236","\uD83E\uDD58":"1f958","\uD83C\uDE38":"1f238","\uD83C\uDE39":"1f239","\uD83E\uDD57":"1f957","\uD83C\uDE3A":"1f23a","\uD83C\uDE50":"1f250","\uD83C\uDE51":"1f251","\uD83C\uDF00":"1f300","\uD83E\uDD56":"1f956","\uD83C\uDF01":"1f301","\uD83C\uDF02":"1f302","\uD83C\uDF03":"1f303","\uD83C\uDF04":"1f304","\uD83C\uDF05":"1f305","\uD83C\uDF06":"1f306","\uD83E\uDD55":"1f955","\uD83C\uDF07":"1f307","\uD83C\uDF08":"1f308","\uD83E\uDD54":"1f954","\uD83C\uDF09":"1f309","\uD83C\uDF0A":"1f30a","\uD83C\uDF0B":"1f30b","\uD83C\uDF0C":"1f30c","\uD83C\uDF0F":"1f30f","\uD83C\uDF11":"1f311","\uD83E\uDD53":"1f953","\uD83C\uDF13":"1f313","\uD83C\uDF14":"1f314","\uD83C\uDF15":"1f315","\uD83C\uDF19":"1f319","\uD83C\uDF1B":"1f31b","\uD83C\uDF1F":"1f31f","\uD83E\uDD52":"1f952","\uD83C\uDF20":"1f320","\uD83C\uDF30":"1f330","\uD83E\uDD51":"1f951","\uD83C\uDF31":"1f331","\uD83C\uDF34":"1f334","\uD83C\uDF35":"1f335","\uD83C\uDF37":"1f337","\uD83C\uDF38":"1f338","\uD83C\uDF39":"1f339","\uD83C\uDF3A":"1f33a","\uD83C\uDF3B":"1f33b","\uD83C\uDF3C":"1f33c","\uD83C\uDF3D":"1f33d","\uD83E\uDD50":"1f950","\uD83C\uDF3E":"1f33e","\uD83C\uDF3F":"1f33f","\uD83C\uDF40":"1f340","\uD83C\uDF41":"1f341","\uD83C\uDF42":"1f342","\uD83C\uDF43":"1f343","\uD83C\uDF44":"1f344","\uD83C\uDF45":"1f345","\uD83C\uDF46":"1f346","\uD83C\uDF47":"1f347","\uD83C\uDF48":"1f348","\uD83C\uDF49":"1f349","\uD83C\uDF4A":"1f34a","\uD83E\uDD40":"1f940","\uD83C\uDF4C":"1f34c","\uD83C\uDF4D":"1f34d","\uD83C\uDF4E":"1f34e","\uD83C\uDF4F":"1f34f","\uD83C\uDF51":"1f351","\uD83C\uDF52":"1f352","\uD83C\uDF53":"1f353","\uD83E\uDD8F":"1f98f","\uD83C\uDF54":"1f354","\uD83C\uDF55":"1f355","\uD83C\uDF56":"1f356","\uD83E\uDD8E":"1f98e","\uD83C\uDF57":"1f357","\uD83C\uDF58":"1f358","\uD83C\uDF59":"1f359","\uD83E\uDD8D":"1f98d","\uD83C\uDF5A":"1f35a","\uD83C\uDF5B":"1f35b","\uD83E\uDD8C":"1f98c","\uD83C\uDF5C":"1f35c","\uD83C\uDF5D":"1f35d","\uD83C\uDF5E":"1f35e","\uD83C\uDF5F":"1f35f","\uD83E\uDD8B":"1f98b","\uD83C\uDF60":"1f360","\uD83C\uDF61":"1f361","\uD83E\uDD8A":"1f98a","\uD83C\uDF62":"1f362","\uD83C\uDF63":"1f363","\uD83E\uDD89":"1f989","\uD83C\uDF64":"1f364","\uD83C\uDF65":"1f365","\uD83E\uDD88":"1f988","\uD83C\uDF66":"1f366","\uD83E\uDD87":"1f987","\uD83C\uDF67":"1f367","\uD83C\uDDFD":"1f1fd","\uD83C\uDF68":"1f368","\uD83E\uDD86":"1f986","\uD83C\uDF69":"1f369","\uD83E\uDD85":"1f985","\uD83C\uDF6A":"1f36a","\uD83D\uDDA4":"1f5a4","\uD83C\uDF6B":"1f36b","\uD83C\uDF6C":"1f36c","\uD83C\uDF6D":"1f36d","\uD83C\uDF6E":"1f36e","\uD83C\uDF6F":"1f36f","\uD83E\uDD1E":"1f91e","\uD83C\uDF70":"1f370","\uD83C\uDF71":"1f371","\uD83C\uDF72":"1f372","\uD83E\uDD1D":"1f91d","\uD83C\uDF73":"1f373","\uD83C\uDF74":"1f374","\uD83C\uDF75":"1f375","\uD83C\uDF76":"1f376","\uD83C\uDF77":"1f377","\uD83C\uDF78":"1f378","\uD83C\uDF79":"1f379","\uD83C\uDF7A":"1f37a","\uD83C\uDF7B":"1f37b","\uD83C\uDF80":"1f380","\uD83C\uDF81":"1f381","\uD83C\uDF82":"1f382","\uD83C\uDF83":"1f383","\uD83E\uDD1B":"1f91b","\uD83E\uDD1C":"1f91c","\uD83C\uDF84":"1f384","\uD83C\uDF85":"1f385","\uD83C\uDF86":"1f386","\uD83E\uDD1A":"1f91a","\uD83C\uDF87":"1f387","\uD83C\uDF88":"1f388","\uD83C\uDF89":"1f389","\uD83C\uDF8A":"1f38a","\uD83C\uDF8B":"1f38b","\uD83C\uDF8C":"1f38c","\uD83E\uDD19":"1f919","\uD83C\uDF8D":"1f38d","\uD83D\uDD7A":"1f57a","\uD83C\uDF8E":"1f38e","\uD83E\uDD33":"1f933","\uD83C\uDF8F":"1f38f","\uD83E\uDD30":"1f930","\uD83C\uDF90":"1f390","\uD83E\uDD26":"1f926","\uD83E\uDD37":"1f937","\uD83C\uDF91":"1f391","\uD83C\uDF92":"1f392","\uD83C\uDF93":"1f393","\uD83C\uDFA0":"1f3a0","\uD83C\uDFA1":"1f3a1","\uD83C\uDFA2":"1f3a2","\uD83C\uDFA3":"1f3a3","\uD83C\uDFA4":"1f3a4","\uD83C\uDFA5":"1f3a5","\uD83C\uDFA6":"1f3a6","\uD83C\uDFA7":"1f3a7","\uD83E\uDD36":"1f936","\uD83C\uDFA8":"1f3a8","\uD83E\uDD35":"1f935","\uD83C\uDFA9":"1f3a9","\uD83C\uDFAA":"1f3aa","\uD83E\uDD34":"1f934","\uD83C\uDFAB":"1f3ab","\uD83C\uDFAC":"1f3ac","\uD83C\uDFAD":"1f3ad","\uD83E\uDD27":"1f927","\uD83C\uDFAE":"1f3ae","\uD83C\uDFAF":"1f3af","\uD83C\uDFB0":"1f3b0","\uD83C\uDFB1":"1f3b1","\uD83C\uDFB2":"1f3b2","\uD83C\uDFB3":"1f3b3","\uD83C\uDFB4":"1f3b4","\uD83E\uDD25":"1f925","\uD83C\uDFB5":"1f3b5","\uD83C\uDFB6":"1f3b6","\uD83C\uDFB7":"1f3b7","\uD83E\uDD24":"1f924","\uD83C\uDFB8":"1f3b8","\uD83C\uDFB9":"1f3b9","\uD83C\uDFBA":"1f3ba","\uD83E\uDD23":"1f923","\uD83C\uDFBB":"1f3bb","\uD83C\uDFBC":"1f3bc","\uD83C\uDFBD":"1f3bd","\uD83E\uDD22":"1f922","\uD83C\uDFBE":"1f3be","\uD83C\uDFBF":"1f3bf","\uD83C\uDFC0":"1f3c0","\uD83C\uDFC1":"1f3c1","\uD83E\uDD21":"1f921","\uD83C\uDFC2":"1f3c2","\uD83C\uDFC3":"1f3c3","\uD83C\uDFC4":"1f3c4","\uD83C\uDFC6":"1f3c6","\uD83C\uDFC8":"1f3c8","\uD83C\uDFCA":"1f3ca","\uD83C\uDFE0":"1f3e0","\uD83C\uDFE1":"1f3e1","\uD83C\uDFE2":"1f3e2","\uD83C\uDFE3":"1f3e3","\uD83C\uDFE5":"1f3e5","\uD83C\uDFE6":"1f3e6","\uD83C\uDFE7":"1f3e7","\uD83C\uDFE8":"1f3e8","\uD83C\uDFE9":"1f3e9","\uD83C\uDFEA":"1f3ea","\uD83C\uDFEB":"1f3eb","\uD83C\uDFEC":"1f3ec","\uD83E\uDD20":"1f920","\uD83C\uDFED":"1f3ed","\uD83C\uDFEE":"1f3ee","\uD83C\uDFEF":"1f3ef","\uD83C\uDFF0":"1f3f0","\uD83D\uDC0C":"1f40c","\uD83D\uDC0D":"1f40d","\uD83D\uDC0E":"1f40e","\uD83D\uDC11":"1f411","\uD83D\uDC12":"1f412","\uD83D\uDC14":"1f414","\uD83D\uDC17":"1f417","\uD83D\uDC18":"1f418","\uD83D\uDC19":"1f419","\uD83D\uDC1A":"1f41a","\uD83D\uDC1B":"1f41b","\uD83D\uDC1C":"1f41c","\uD83D\uDC1D":"1f41d","\uD83D\uDC1E":"1f41e","\uD83D\uDC1F":"1f41f","\uD83D\uDC20":"1f420","\uD83D\uDC21":"1f421","\uD83D\uDC22":"1f422","\uD83D\uDC23":"1f423","\uD83D\uDC24":"1f424","\uD83D\uDC25":"1f425","\uD83D\uDC26":"1f426","\uD83D\uDC27":"1f427","\uD83D\uDC28":"1f428","\uD83D\uDC29":"1f429","\uD83D\uDC2B":"1f42b","\uD83D\uDC2C":"1f42c","\uD83D\uDC2D":"1f42d","\uD83D\uDC2E":"1f42e","\uD83D\uDC2F":"1f42f","\uD83D\uDC30":"1f430","\uD83D\uDC31":"1f431","\uD83D\uDC32":"1f432","\uD83D\uDC33":"1f433","\uD83D\uDC34":"1f434","\uD83D\uDC35":"1f435","\uD83D\uDC36":"1f436","\uD83D\uDC37":"1f437","\uD83D\uDC38":"1f438","\uD83D\uDC39":"1f439","\uD83D\uDC3A":"1f43a","\uD83D\uDC3B":"1f43b","\uD83D\uDC3C":"1f43c","\uD83D\uDC3D":"1f43d","\uD83D\uDC3E":"1f43e","\uD83D\uDC40":"1f440","\uD83D\uDC42":"1f442","\uD83D\uDC43":"1f443","\uD83D\uDC44":"1f444","\uD83D\uDC45":"1f445","\uD83D\uDC46":"1f446","\uD83D\uDC47":"1f447","\uD83D\uDC48":"1f448","\uD83D\uDC49":"1f449","\uD83D\uDC4A":"1f44a","\uD83D\uDC4B":"1f44b","\uD83D\uDC4C":"1f44c","\uD83D\uDC4D":"1f44d","\uD83D\uDC4E":"1f44e","\uD83D\uDC4F":"1f44f","\uD83D\uDC50":"1f450","\uD83D\uDC51":"1f451","\uD83D\uDC52":"1f452","\uD83D\uDC53":"1f453","\uD83D\uDC54":"1f454","\uD83D\uDC55":"1f455","\uD83D\uDC56":"1f456","\uD83D\uDC57":"1f457","\uD83D\uDC58":"1f458","\uD83D\uDC59":"1f459","\uD83D\uDC5A":"1f45a","\uD83D\uDC5B":"1f45b","\uD83D\uDC5C":"1f45c","\uD83D\uDC5D":"1f45d","\uD83D\uDC5E":"1f45e","\uD83D\uDC5F":"1f45f","\uD83D\uDC60":"1f460","\uD83D\uDC61":"1f461","\uD83D\uDC62":"1f462","\uD83D\uDC63":"1f463","\uD83D\uDC64":"1f464","\uD83D\uDC66":"1f466","\uD83D\uDC67":"1f467","\uD83D\uDC68":"1f468","\uD83D\uDC69":"1f469","\uD83D\uDC6A":"1f46a","\uD83D\uDC6B":"1f46b","\uD83D\uDC6E":"1f46e","\uD83D\uDC6F":"1f46f","\uD83D\uDC70":"1f470","\uD83D\uDC71":"1f471","\uD83D\uDC72":"1f472","\uD83D\uDC73":"1f473","\uD83D\uDC74":"1f474","\uD83D\uDC75":"1f475","\uD83D\uDC76":"1f476","\uD83D\uDC77":"1f477","\uD83D\uDC78":"1f478","\uD83D\uDC79":"1f479","\uD83D\uDC7A":"1f47a","\uD83D\uDC7B":"1f47b","\uD83D\uDC7C":"1f47c","\uD83D\uDC7D":"1f47d","\uD83D\uDC7E":"1f47e","\uD83D\uDC7F":"1f47f","\uD83D\uDC80":"1f480","\uD83D\uDCC7":"1f4c7","\uD83D\uDC81":"1f481","\uD83D\uDC82":"1f482","\uD83D\uDC83":"1f483","\uD83D\uDC84":"1f484","\uD83D\uDC85":"1f485","\uD83D\uDCD2":"1f4d2","\uD83D\uDC86":"1f486","\uD83D\uDCD3":"1f4d3","\uD83D\uDC87":"1f487","\uD83D\uDCD4":"1f4d4","\uD83D\uDC88":"1f488","\uD83D\uDCD5":"1f4d5","\uD83D\uDC89":"1f489","\uD83D\uDCD6":"1f4d6","\uD83D\uDC8A":"1f48a","\uD83D\uDCD7":"1f4d7","\uD83D\uDC8B":"1f48b","\uD83D\uDCD8":"1f4d8","\uD83D\uDC8C":"1f48c","\uD83D\uDCD9":"1f4d9","\uD83D\uDC8D":"1f48d","\uD83D\uDCDA":"1f4da","\uD83D\uDC8E":"1f48e","\uD83D\uDCDB":"1f4db","\uD83D\uDC8F":"1f48f","\uD83D\uDCDC":"1f4dc","\uD83D\uDC90":"1f490","\uD83D\uDCDD":"1f4dd","\uD83D\uDC91":"1f491","\uD83D\uDCDE":"1f4de","\uD83D\uDC92":"1f492","\uD83D\uDCDF":"1f4df","\uD83D\uDCE0":"1f4e0","\uD83D\uDC93":"1f493","\uD83D\uDCE1":"1f4e1","\uD83D\uDCE2":"1f4e2","\uD83D\uDC94":"1f494","\uD83D\uDCE3":"1f4e3","\uD83D\uDCE4":"1f4e4","\uD83D\uDC95":"1f495","\uD83D\uDCE5":"1f4e5","\uD83D\uDCE6":"1f4e6","\uD83D\uDC96":"1f496","\uD83D\uDCE7":"1f4e7","\uD83D\uDCE8":"1f4e8","\uD83D\uDC97":"1f497","\uD83D\uDCE9":"1f4e9","\uD83D\uDCEA":"1f4ea","\uD83D\uDC98":"1f498","\uD83D\uDCEB":"1f4eb","\uD83D\uDCEE":"1f4ee","\uD83D\uDC99":"1f499","\uD83D\uDCF0":"1f4f0","\uD83D\uDCF1":"1f4f1","\uD83D\uDC9A":"1f49a","\uD83D\uDCF2":"1f4f2","\uD83D\uDCF3":"1f4f3","\uD83D\uDC9B":"1f49b","\uD83D\uDCF4":"1f4f4","\uD83D\uDCF6":"1f4f6","\uD83D\uDC9C":"1f49c","\uD83D\uDCF7":"1f4f7","\uD83D\uDCF9":"1f4f9","\uD83D\uDC9D":"1f49d","\uD83D\uDCFA":"1f4fa","\uD83D\uDCFB":"1f4fb","\uD83D\uDC9E":"1f49e","\uD83D\uDCFC":"1f4fc","\uD83D\uDD03":"1f503","\uD83D\uDC9F":"1f49f","\uD83D\uDD0A":"1f50a","\uD83D\uDD0B":"1f50b","\uD83D\uDCA0":"1f4a0","\uD83D\uDD0C":"1f50c","\uD83D\uDD0D":"1f50d","\uD83D\uDCA1":"1f4a1","\uD83D\uDD0E":"1f50e","\uD83D\uDD0F":"1f50f","\uD83D\uDCA2":"1f4a2","\uD83D\uDD10":"1f510","\uD83D\uDD11":"1f511","\uD83D\uDCA3":"1f4a3","\uD83D\uDD12":"1f512","\uD83D\uDD13":"1f513","\uD83D\uDCA4":"1f4a4","\uD83D\uDD14":"1f514","\uD83D\uDD16":"1f516","\uD83D\uDCA5":"1f4a5","\uD83D\uDD17":"1f517","\uD83D\uDD18":"1f518","\uD83D\uDCA6":"1f4a6","\uD83D\uDD19":"1f519","\uD83D\uDD1A":"1f51a","\uD83D\uDCA7":"1f4a7","\uD83D\uDD1B":"1f51b","\uD83D\uDD1C":"1f51c","\uD83D\uDCA8":"1f4a8","\uD83D\uDD1D":"1f51d","\uD83D\uDD1E":"1f51e","\uD83D\uDCA9":"1f4a9","\uD83D\uDD1F":"1f51f","\uD83D\uDCAA":"1f4aa","\uD83D\uDD20":"1f520","\uD83D\uDD21":"1f521","\uD83D\uDCAB":"1f4ab","\uD83D\uDD22":"1f522","\uD83D\uDD23":"1f523","\uD83D\uDCAC":"1f4ac","\uD83D\uDD24":"1f524","\uD83D\uDD25":"1f525","\uD83D\uDCAE":"1f4ae","\uD83D\uDD26":"1f526","\uD83D\uDD27":"1f527","\uD83D\uDCAF":"1f4af","\uD83D\uDD28":"1f528","\uD83D\uDD29":"1f529","\uD83D\uDCB0":"1f4b0","\uD83D\uDD2A":"1f52a","\uD83D\uDD2B":"1f52b","\uD83D\uDCB1":"1f4b1","\uD83D\uDD2E":"1f52e","\uD83D\uDCB2":"1f4b2","\uD83D\uDD2F":"1f52f","\uD83D\uDCB3":"1f4b3","\uD83D\uDD30":"1f530","\uD83D\uDD31":"1f531","\uD83D\uDCB4":"1f4b4","\uD83D\uDD32":"1f532","\uD83D\uDD33":"1f533","\uD83D\uDCB5":"1f4b5","\uD83D\uDD34":"1f534","\uD83D\uDD35":"1f535","\uD83D\uDCB8":"1f4b8","\uD83D\uDD36":"1f536","\uD83D\uDD37":"1f537","\uD83D\uDCB9":"1f4b9","\uD83D\uDD38":"1f538","\uD83D\uDD39":"1f539","\uD83D\uDCBA":"1f4ba","\uD83D\uDD3A":"1f53a","\uD83D\uDD3B":"1f53b","\uD83D\uDCBB":"1f4bb","\uD83D\uDD3C":"1f53c","\uD83D\uDCBC":"1f4bc","\uD83D\uDD3D":"1f53d","\uD83D\uDD50":"1f550","\uD83D\uDCBD":"1f4bd","\uD83D\uDD51":"1f551","\uD83D\uDCBE":"1f4be","\uD83D\uDD52":"1f552","\uD83D\uDCBF":"1f4bf","\uD83D\uDD53":"1f553","\uD83D\uDCC0":"1f4c0","\uD83D\uDD54":"1f554","\uD83D\uDD55":"1f555","\uD83D\uDCC1":"1f4c1","\uD83D\uDD56":"1f556","\uD83D\uDD57":"1f557","\uD83D\uDCC2":"1f4c2","\uD83D\uDD58":"1f558","\uD83D\uDD59":"1f559","\uD83D\uDCC3":"1f4c3","\uD83D\uDD5A":"1f55a","\uD83D\uDD5B":"1f55b","\uD83D\uDCC4":"1f4c4","\uD83D\uDDFB":"1f5fb","\uD83D\uDDFC":"1f5fc","\uD83D\uDCC5":"1f4c5","\uD83D\uDDFD":"1f5fd","\uD83D\uDDFE":"1f5fe","\uD83D\uDCC6":"1f4c6","\uD83D\uDDFF":"1f5ff","\uD83D\uDE01":"1f601","\uD83D\uDE02":"1f602","\uD83D\uDE03":"1f603","\uD83D\uDCC8":"1f4c8","\uD83D\uDE04":"1f604","\uD83D\uDE05":"1f605","\uD83D\uDCC9":"1f4c9","\uD83D\uDE06":"1f606","\uD83D\uDE09":"1f609","\uD83D\uDCCA":"1f4ca","\uD83D\uDE0A":"1f60a","\uD83D\uDE0B":"1f60b","\uD83D\uDCCB":"1f4cb","\uD83D\uDE0C":"1f60c","\uD83D\uDE0D":"1f60d","\uD83D\uDCCC":"1f4cc","\uD83D\uDE0F":"1f60f","\uD83D\uDE12":"1f612","\uD83D\uDCCD":"1f4cd","\uD83D\uDE13":"1f613","\uD83D\uDE14":"1f614","\uD83D\uDCCE":"1f4ce","\uD83D\uDE16":"1f616","\uD83D\uDE18":"1f618","\uD83D\uDCCF":"1f4cf","\uD83D\uDE1A":"1f61a","\uD83D\uDE1C":"1f61c","\uD83D\uDCD0":"1f4d0","\uD83D\uDE1D":"1f61d","\uD83D\uDE1E":"1f61e","\uD83D\uDCD1":"1f4d1","\uD83D\uDE20":"1f620","\uD83D\uDE21":"1f621","\uD83D\uDE22":"1f622","\uD83D\uDE23":"1f623","\uD83D\uDE24":"1f624","\uD83D\uDE25":"1f625","\uD83D\uDE28":"1f628","\uD83D\uDE29":"1f629","\uD83D\uDE2A":"1f62a","\uD83D\uDE2B":"1f62b","\uD83D\uDE2D":"1f62d","\uD83D\uDE30":"1f630","\uD83D\uDE31":"1f631","\uD83D\uDE32":"1f632","\uD83D\uDE33":"1f633","\uD83D\uDE35":"1f635","\uD83D\uDE37":"1f637","\uD83D\uDE38":"1f638","\uD83D\uDE39":"1f639","\uD83D\uDE3A":"1f63a","\uD83D\uDE3B":"1f63b","\uD83D\uDE3C":"1f63c","\uD83D\uDE3D":"1f63d","\uD83D\uDE3E":"1f63e","\uD83D\uDE3F":"1f63f","\uD83D\uDE40":"1f640","\uD83D\uDE45":"1f645","\uD83D\uDE46":"1f646","\uD83D\uDE47":"1f647","\uD83D\uDE48":"1f648","\uD83D\uDE49":"1f649","\uD83D\uDE4A":"1f64a","\uD83D\uDE4B":"1f64b","\uD83D\uDE4C":"1f64c","\uD83D\uDE4D":"1f64d","\uD83D\uDE4E":"1f64e","\uD83D\uDE4F":"1f64f","\uD83D\uDE80":"1f680","\uD83D\uDE83":"1f683","\uD83D\uDE84":"1f684","\uD83D\uDE85":"1f685","\uD83D\uDE87":"1f687","\uD83D\uDE89":"1f689","\uD83D\uDE8C":"1f68c","\uD83D\uDE8F":"1f68f","\uD83D\uDE91":"1f691","\uD83D\uDE92":"1f692","\uD83D\uDE93":"1f693","\uD83D\uDE95":"1f695","\uD83D\uDE97":"1f697","\uD83D\uDE99":"1f699","\uD83D\uDE9A":"1f69a","\uD83D\uDEA2":"1f6a2","\uD83D\uDEA4":"1f6a4","\uD83D\uDEA5":"1f6a5","\uD83D\uDEA7":"1f6a7","\uD83D\uDEA8":"1f6a8","\uD83D\uDEA9":"1f6a9","\uD83D\uDEAA":"1f6aa","\uD83D\uDEAB":"1f6ab","\uD83D\uDEAC":"1f6ac","\uD83D\uDEAD":"1f6ad","\uD83D\uDEB2":"1f6b2","\uD83D\uDEB6":"1f6b6","\uD83D\uDEB9":"1f6b9","\uD83D\uDEBA":"1f6ba","\uD83D\uDEBB":"1f6bb","\uD83D\uDEBC":"1f6bc","\uD83D\uDEBD":"1f6bd","\uD83D\uDEBE":"1f6be","\uD83D\uDEC0":"1f6c0","\uD83E\uDD18":"1f918","\uD83D\uDE00":"1f600","\uD83D\uDE07":"1f607","\uD83D\uDE08":"1f608","\uD83D\uDE0E":"1f60e","\uD83D\uDE10":"1f610","\uD83D\uDE11":"1f611","\uD83D\uDE15":"1f615","\uD83D\uDE17":"1f617","\uD83D\uDE19":"1f619","\uD83D\uDE1B":"1f61b","\uD83D\uDE1F":"1f61f","\uD83D\uDE26":"1f626","\uD83D\uDE27":"1f627","\uD83D\uDE2C":"1f62c","\uD83D\uDE2E":"1f62e","\uD83D\uDE2F":"1f62f","\uD83D\uDE34":"1f634","\uD83D\uDE36":"1f636","\uD83D\uDE81":"1f681","\uD83D\uDE82":"1f682","\uD83D\uDE86":"1f686","\uD83D\uDE88":"1f688","\uD83D\uDE8A":"1f68a","\uD83D\uDE8D":"1f68d","\uD83D\uDE8E":"1f68e","\uD83D\uDE90":"1f690","\uD83D\uDE94":"1f694","\uD83D\uDE96":"1f696","\uD83D\uDE98":"1f698","\uD83D\uDE9B":"1f69b","\uD83D\uDE9C":"1f69c","\uD83D\uDE9D":"1f69d","\uD83D\uDE9E":"1f69e","\uD83D\uDE9F":"1f69f","\uD83D\uDEA0":"1f6a0","\uD83D\uDEA1":"1f6a1","\uD83D\uDEA3":"1f6a3","\uD83D\uDEA6":"1f6a6","\uD83D\uDEAE":"1f6ae","\uD83D\uDEAF":"1f6af","\uD83D\uDEB0":"1f6b0","\uD83D\uDEB1":"1f6b1","\uD83D\uDEB3":"1f6b3","\uD83D\uDEB4":"1f6b4","\uD83D\uDEB5":"1f6b5","\uD83D\uDEB7":"1f6b7","\uD83D\uDEB8":"1f6b8","\uD83D\uDEBF":"1f6bf","\uD83D\uDEC1":"1f6c1","\uD83D\uDEC2":"1f6c2","\uD83D\uDEC3":"1f6c3","\uD83D\uDEC4":"1f6c4","\uD83D\uDEC5":"1f6c5","\uD83C\uDF0D":"1f30d","\uD83C\uDF0E":"1f30e","\uD83C\uDF10":"1f310","\uD83C\uDF12":"1f312","\uD83C\uDF16":"1f316","\uD83C\uDF17":"1f317","\uD83C\uDF18":"1f318","\uD83C\uDF1A":"1f31a","\uD83C\uDF1C":"1f31c","\uD83C\uDF1D":"1f31d","\uD83C\uDF1E":"1f31e","\uD83C\uDF32":"1f332","\uD83C\uDF33":"1f333","\uD83C\uDF4B":"1f34b","\uD83C\uDF50":"1f350","\uD83C\uDF7C":"1f37c","\uD83C\uDFC7":"1f3c7","\uD83C\uDFC9":"1f3c9","\uD83C\uDFE4":"1f3e4","\uD83D\uDC00":"1f400","\uD83D\uDC01":"1f401","\uD83D\uDC02":"1f402","\uD83D\uDC03":"1f403","\uD83D\uDC04":"1f404","\uD83D\uDC05":"1f405","\uD83D\uDC06":"1f406","\uD83D\uDC07":"1f407","\uD83D\uDC08":"1f408","\uD83D\uDC09":"1f409","\uD83D\uDC0A":"1f40a","\uD83D\uDC0B":"1f40b","\uD83D\uDC0F":"1f40f","\uD83D\uDC10":"1f410","\uD83D\uDC13":"1f413","\uD83D\uDC15":"1f415","\uD83D\uDC16":"1f416","\uD83D\uDC2A":"1f42a","\uD83D\uDC65":"1f465","\uD83D\uDC6C":"1f46c","\uD83D\uDC6D":"1f46d","\uD83D\uDCAD":"1f4ad","\uD83D\uDCB6":"1f4b6","\uD83D\uDCB7":"1f4b7","\uD83D\uDCEC":"1f4ec","\uD83D\uDCED":"1f4ed","\uD83D\uDCEF":"1f4ef","\uD83D\uDCF5":"1f4f5","\uD83D\uDD00":"1f500","\uD83D\uDD01":"1f501","\uD83D\uDD02":"1f502","\uD83D\uDD04":"1f504","\uD83D\uDD05":"1f505","\uD83D\uDD06":"1f506","\uD83D\uDD07":"1f507","\uD83D\uDD09":"1f509","\uD83D\uDD15":"1f515","\uD83D\uDD2C":"1f52c","\uD83D\uDD2D":"1f52d","\uD83D\uDD5C":"1f55c","\uD83D\uDD5D":"1f55d","\uD83D\uDD5E":"1f55e","\uD83D\uDD5F":"1f55f","\uD83D\uDD60":"1f560","\uD83D\uDD61":"1f561","\uD83D\uDD62":"1f562","\uD83D\uDD63":"1f563","\uD83D\uDD64":"1f564","\uD83D\uDD65":"1f565","\uD83D\uDD66":"1f566","\uD83D\uDD67":"1f567","\uD83D\uDD08":"1f508","\uD83D\uDE8B":"1f68b","\uD83C\uDFC5":"1f3c5","\uD83C\uDFF4":"1f3f4","\uD83D\uDCF8":"1f4f8","\uD83D\uDECC":"1f6cc","\uD83D\uDD95":"1f595","\uD83D\uDD96":"1f596","\uD83D\uDE41":"1f641","\uD83D\uDE42":"1f642","\uD83D\uDEEB":"1f6eb","\uD83D\uDEEC":"1f6ec","\uD83C\uDFFB":"1f3fb","\uD83C\uDFFC":"1f3fc","\uD83C\uDFFD":"1f3fd","\uD83C\uDFFE":"1f3fe","\uD83C\uDFFF":"1f3ff","\uD83D\uDE43":"1f643","\uD83E\uDD11":"1f911","\uD83E\uDD13":"1f913","\uD83E\uDD17":"1f917","\uD83D\uDE44":"1f644","\uD83E\uDD14":"1f914","\uD83E\uDD10":"1f910","\uD83E\uDD12":"1f912","\uD83E\uDD15":"1f915","\uD83E\uDD16":"1f916","\uD83E\uDD81":"1f981","\uD83E\uDD84":"1f984","\uD83E\uDD82":"1f982","\uD83E\uDD80":"1f980","\uD83E\uDD83":"1f983","\uD83E\uDDC0":"1f9c0","\uD83C\uDF2D":"1f32d","\uD83C\uDF2E":"1f32e","\uD83C\uDF2F":"1f32f","\uD83C\uDF7F":"1f37f","\uD83C\uDF7E":"1f37e","\uD83C\uDFF9":"1f3f9","\uD83C\uDFFA":"1f3fa","\uD83D\uDED0":"1f6d0","\uD83D\uDD4B":"1f54b","\uD83D\uDD4C":"1f54c","\uD83D\uDD4D":"1f54d","\uD83D\uDD4E":"1f54e","\uD83D\uDCFF":"1f4ff","\uD83C\uDFCF":"1f3cf","\uD83C\uDFD0":"1f3d0","\uD83C\uDFD1":"1f3d1","\uD83C\uDFD2":"1f3d2","\uD83C\uDFD3":"1f3d3","\uD83C\uDFF8":"1f3f8","\uD83E\uDD41":"1f941","\uD83E\uDD90":"1f990","\uD83E\uDD91":"1f991","\uD83E\uDD5A":"1f95a","\uD83E\uDD5B":"1f95b","\uD83E\uDD5C":"1f95c","\uD83E\uDD5D":"1f95d","\uD83E\uDD5E":"1f95e","\uD83C\uDDFC":"1f1fc","\uD83C\uDDFB":"1f1fb","\uD83C\uDDFA":"1f1fa","\uD83C\uDDF9":"1f1f9","\uD83C\uDDF8":"1f1f8","\uD83C\uDDF7":"1f1f7","\uD83C\uDDF6":"1f1f6","\uD83C\uDDF5":"1f1f5","\uD83C\uDDF4":"1f1f4","\uD83C\uDDF3":"1f1f3","\uD83C\uDDF2":"1f1f2","\uD83C\uDDF1":"1f1f1","\uD83C\uDDF0":"1f1f0","\uD83C\uDDEF":"1f1ef","\uD83C\uDDEE":"1f1ee","\uD83C\uDDED":"1f1ed","\uD83C\uDDEC":"1f1ec","\uD83C\uDDEB":"1f1eb","\uD83C\uDDEA":"1f1ea","\uD83C\uDDE9":"1f1e9","\uD83C\uDDE8":"1f1e8","\uD83C\uDDE7":"1f1e7","\uD83C\uDDE6":"1f1e6","\uD83D\uDEF7":"1f6f7","\uD83D\uDEF8":"1f6f8","\uD83E\uDD1F":"1f91f","\uD83E\uDD28":"1f928","\uD83E\uDD29":"1f929","\uD83E\uDD2A":"1f92a","\uD83E\uDD2B":"1f92b","\uD83E\uDD2C":"1f92c","\uD83E\uDD2D":"1f92d","\uD83E\uDD2E":"1f92e","\uD83E\uDD2F":"1f92f","\uD83E\uDD31":"1f931","\uD83E\uDD32":"1f932","\uD83E\uDD4C":"1f94c","\uD83E\uDD5F":"1f95f","\uD83E\uDD60":"1f960","\uD83E\uDD61":"1f961","\uD83E\uDD62":"1f962","\uD83E\uDD63":"1f963","\uD83E\uDD64":"1f964","\uD83E\uDD65":"1f965","\uD83E\uDD66":"1f966","\uD83E\uDD67":"1f967","\uD83E\uDD68":"1f968","\uD83E\uDD69":"1f969","\uD83E\uDD6A":"1f96a","\uD83E\uDD6B":"1f96b","\uD83E\uDD92":"1f992","\uD83E\uDD93":"1f993","\uD83E\uDD94":"1f994","\uD83E\uDD95":"1f995","\uD83E\uDD96":"1f996","\uD83E\uDD97":"1f997","\uD83E\uDDD0":"1f9d0","\uD83E\uDDD1":"1f9d1","\uD83E\uDDD2":"1f9d2","\uD83E\uDDD3":"1f9d3","\uD83E\uDDD4":"1f9d4","\uD83E\uDDD5":"1f9d5","\uD83E\uDDD6":"1f9d6","\uD83E\uDDD7":"1f9d7","\uD83E\uDDD8":"1f9d8","\uD83E\uDDD9":"1f9d9","\uD83E\uDDDA":"1f9da","\uD83E\uDDDB":"1f9db","\uD83E\uDDDC":"1f9dc","\uD83E\uDDDD":"1f9dd","\uD83E\uDDDE":"1f9de","\uD83E\uDDDF":"1f9df","\uD83E\uDDE0":"1f9e0","\uD83E\uDDE1":"1f9e1","\uD83E\uDDE2":"1f9e2","\uD83E\uDDE3":"1f9e3","\uD83E\uDDE4":"1f9e4","\uD83E\uDDE5":"1f9e5","\uD83E\uDDE6":"1f9e6","\u231A":"231a","\u231B":"231b","\u23E9":"23e9","\u23EA":"23ea","\u23EB":"23eb","\u23EC":"23ec","\u23F0":"23f0","\u23F3":"23f3","\u25FD":"25fd","\u25FE":"25fe","\u2614":"2614","\u2615":"2615","\u2648":"2648","\u2649":"2649","\u264A":"264a","\u264B":"264b","\u264C":"264c","\u264D":"264d","\u264E":"264e","\u264F":"264f","\u2650":"2650","\u2651":"2651","\u2652":"2652","\u2653":"2653","\u267F":"267f","\u2693":"2693","\u26A1":"26a1","\u26AA":"26aa","\u26AB":"26ab","\u26BD":"26bd","\u26BE":"26be","\u26C4":"26c4","\u26C5":"26c5","\u26CE":"26ce","\u26D4":"26d4","\u26EA":"26ea","\u26F2":"26f2","\u26F3":"26f3","\u26F5":"26f5","\u26FA":"26fa","\u26FD":"26fd","\u2705":"2705","\u270A":"270a","\u270B":"270b","\u2728":"2728","\u274C":"274c","\u274E":"274e","\u2753":"2753","\u2754":"2754","\u2755":"2755","\u2757":"2757","\u2795":"2795","\u2796":"2796","\u2797":"2797","\u27B0":"27b0","\u2B1B":"2b1b","\u2B1C":"2b1c","\u2B50":"2b50","\u2B55":"2b55","\u27BF":"27bf"}; ns.jsEscapeMapGreedy = {"\uD83D\uDC69\u2764\uD83D\uDC8B\uD83D\uDC69":"1f469-2764-1f48b-1f469","\uD83D\uDC68\u2764\uD83D\uDC8B\uD83D\uDC68":"1f468-2764-1f48b-1f468","\uD83D\uDC69\u2764\uD83D\uDC8B\uD83D\uDC68":"1f469-2764-1f48b-1f468","\uD83D\uDC69\u2764\uD83D\uDC69":"1f469-2764-1f469","\uD83D\uDC68\u2764\uD83D\uDC68":"1f468-2764-1f468","\uD83C\uDFCC\uD83C\uDFFB\u2642":"1f3cc-1f3fb-2642","\uD83C\uDFCC\uD83C\uDFFC\u2642":"1f3cc-1f3fc-2642","\uD83C\uDFCC\uD83C\uDFFD\u2642":"1f3cc-1f3fd-2642","\uD83C\uDFCC\uD83C\uDFFE\u2642":"1f3cc-1f3fe-2642","\uD83C\uDFCC\uD83C\uDFFF\u2642":"1f3cc-1f3ff-2642","\uD83C\uDFCC\uD83C\uDFFB\u2640":"1f3cc-1f3fb-2640","\uD83C\uDFCC\uD83C\uDFFC\u2640":"1f3cc-1f3fc-2640","\uD83C\uDFCC\uD83C\uDFFD\u2640":"1f3cc-1f3fd-2640","\uD83C\uDFCC\uD83C\uDFFE\u2640":"1f3cc-1f3fe-2640","\uD83C\uDFCC\uD83C\uDFFF\u2640":"1f3cc-1f3ff-2640","\uD83D\uDC68\uD83C\uDFFB\u2696":"1f468-1f3fb-2696","\uD83D\uDC68\uD83C\uDFFC\u2696":"1f468-1f3fc-2696","\uD83D\uDC68\uD83C\uDFFD\u2696":"1f468-1f3fd-2696","\uD83D\uDC68\uD83C\uDFFE\u2696":"1f468-1f3fe-2696","\uD83D\uDC68\uD83C\uDFFF\u2696":"1f468-1f3ff-2696","\uD83D\uDC69\uD83C\uDFFB\u2696":"1f469-1f3fb-2696","\uD83D\uDC69\uD83C\uDFFC\u2696":"1f469-1f3fc-2696","\uD83D\uDC69\uD83C\uDFFD\u2696":"1f469-1f3fd-2696","\uD83D\uDC69\uD83C\uDFFE\u2696":"1f469-1f3fe-2696","\uD83D\uDC69\uD83C\uDFFF\u2696":"1f469-1f3ff-2696","\uD83D\uDC68\uD83C\uDFFB\u2708":"1f468-1f3fb-2708","\uD83D\uDC68\uD83C\uDFFC\u2708":"1f468-1f3fc-2708","\uD83D\uDC68\uD83C\uDFFD\u2708":"1f468-1f3fd-2708","\uD83D\uDC68\uD83C\uDFFE\u2708":"1f468-1f3fe-2708","\uD83D\uDC68\uD83C\uDFFF\u2708":"1f468-1f3ff-2708","\uD83D\uDC69\uD83C\uDFFB\u2708":"1f469-1f3fb-2708","\uD83D\uDC69\uD83C\uDFFC\u2708":"1f469-1f3fc-2708","\uD83D\uDC69\uD83C\uDFFD\u2708":"1f469-1f3fd-2708","\uD83D\uDC69\uD83C\uDFFE\u2708":"1f469-1f3fe-2708","\uD83D\uDC69\uD83C\uDFFF\u2708":"1f469-1f3ff-2708","\uD83D\uDC69\u2764\uD83D\uDC68":"1f469-2764-1f468","\uD83D\uDC68\uD83C\uDFFB\u2695":"1f468-1f3fb-2695","\uD83D\uDC68\uD83C\uDFFC\u2695":"1f468-1f3fc-2695","\uD83D\uDC68\uD83C\uDFFD\u2695":"1f468-1f3fd-2695","\uD83D\uDC68\uD83C\uDFFE\u2695":"1f468-1f3fe-2695","\uD83D\uDC68\uD83C\uDFFF\u2695":"1f468-1f3ff-2695","\uD83D\uDC69\uD83C\uDFFB\u2695":"1f469-1f3fb-2695","\uD83D\uDC69\uD83C\uDFFC\u2695":"1f469-1f3fc-2695","\uD83D\uDC69\uD83C\uDFFD\u2695":"1f469-1f3fd-2695","\uD83D\uDC69\uD83C\uDFFE\u2695":"1f469-1f3fe-2695","\uD83D\uDC69\uD83C\uDFFF\u2695":"1f469-1f3ff-2695","\uD83D\uDC6E\uD83C\uDFFB\u2640":"1f46e-1f3fb-2640","\uD83D\uDC6E\uD83C\uDFFB\u2642":"1f46e-1f3fb-2642","\uD83D\uDC6E\uD83C\uDFFC\u2640":"1f46e-1f3fc-2640","\uD83D\uDC6E\uD83C\uDFFC\u2642":"1f46e-1f3fc-2642","\uD83D\uDC6E\uD83C\uDFFD\u2640":"1f46e-1f3fd-2640","\uD83D\uDC6E\uD83C\uDFFD\u2642":"1f46e-1f3fd-2642","\uD83D\uDC6E\uD83C\uDFFE\u2640":"1f46e-1f3fe-2640","\uD83D\uDC6E\uD83C\uDFFE\u2642":"1f46e-1f3fe-2642","\uD83D\uDC6E\uD83C\uDFFF\u2640":"1f46e-1f3ff-2640","\uD83D\uDC6E\uD83C\uDFFF\u2642":"1f46e-1f3ff-2642","\uD83D\uDC71\uD83C\uDFFB\u2640":"1f471-1f3fb-2640","\uD83D\uDC71\uD83C\uDFFB\u2642":"1f471-1f3fb-2642","\uD83D\uDC71\uD83C\uDFFC\u2640":"1f471-1f3fc-2640","\uD83D\uDC71\uD83C\uDFFC\u2642":"1f471-1f3fc-2642","\uD83D\uDC71\uD83C\uDFFD\u2640":"1f471-1f3fd-2640","\uD83D\uDC71\uD83C\uDFFD\u2642":"1f471-1f3fd-2642","\uD83D\uDC71\uD83C\uDFFE\u2640":"1f471-1f3fe-2640","\uD83D\uDC71\uD83C\uDFFE\u2642":"1f471-1f3fe-2642","\uD83D\uDC71\uD83C\uDFFF\u2640":"1f471-1f3ff-2640","\uD83D\uDC71\uD83C\uDFFF\u2642":"1f471-1f3ff-2642","\uD83D\uDC73\uD83C\uDFFB\u2640":"1f473-1f3fb-2640","\uD83D\uDC73\uD83C\uDFFB\u2642":"1f473-1f3fb-2642","\uD83D\uDC73\uD83C\uDFFC\u2640":"1f473-1f3fc-2640","\uD83D\uDC73\uD83C\uDFFC\u2642":"1f473-1f3fc-2642","\uD83D\uDC73\uD83C\uDFFD\u2640":"1f473-1f3fd-2640","\uD83D\uDC73\uD83C\uDFFD\u2642":"1f473-1f3fd-2642","\uD83D\uDC73\uD83C\uDFFE\u2640":"1f473-1f3fe-2640","\uD83D\uDC73\uD83C\uDFFE\u2642":"1f473-1f3fe-2642","\uD83D\uDC73\uD83C\uDFFF\u2640":"1f473-1f3ff-2640","\uD83D\uDC73\uD83C\uDFFF\u2642":"1f473-1f3ff-2642","\uD83D\uDC77\uD83C\uDFFB\u2640":"1f477-1f3fb-2640","\uD83D\uDC77\uD83C\uDFFB\u2642":"1f477-1f3fb-2642","\uD83D\uDC77\uD83C\uDFFC\u2640":"1f477-1f3fc-2640","\uD83D\uDC77\uD83C\uDFFC\u2642":"1f477-1f3fc-2642","\uD83D\uDC77\uD83C\uDFFD\u2640":"1f477-1f3fd-2640","\uD83D\uDC77\uD83C\uDFFD\u2642":"1f477-1f3fd-2642","\uD83D\uDC77\uD83C\uDFFE\u2640":"1f477-1f3fe-2640","\uD83D\uDC77\uD83C\uDFFE\u2642":"1f477-1f3fe-2642","\uD83D\uDC77\uD83C\uDFFF\u2640":"1f477-1f3ff-2640","\uD83D\uDC77\uD83C\uDFFF\u2642":"1f477-1f3ff-2642","\uD83D\uDC82\uD83C\uDFFB\u2640":"1f482-1f3fb-2640","\uD83D\uDC82\uD83C\uDFFB\u2642":"1f482-1f3fb-2642","\uD83D\uDC82\uD83C\uDFFC\u2640":"1f482-1f3fc-2640","\uD83D\uDC82\uD83C\uDFFC\u2642":"1f482-1f3fc-2642","\uD83D\uDC82\uD83C\uDFFD\u2640":"1f482-1f3fd-2640","\uD83D\uDC82\uD83C\uDFFD\u2642":"1f482-1f3fd-2642","\uD83D\uDC82\uD83C\uDFFE\u2640":"1f482-1f3fe-2640","\uD83D\uDC82\uD83C\uDFFE\u2642":"1f482-1f3fe-2642","\uD83D\uDC82\uD83C\uDFFF\u2640":"1f482-1f3ff-2640","\uD83D\uDC82\uD83C\uDFFF\u2642":"1f482-1f3ff-2642","\uD83D\uDD75\uD83C\uDFFB\u2640":"1f575-1f3fb-2640","\uD83D\uDD75\uD83C\uDFFB\u2642":"1f575-1f3fb-2642","\uD83D\uDD75\uD83C\uDFFC\u2640":"1f575-1f3fc-2640","\uD83D\uDD75\uD83C\uDFFC\u2642":"1f575-1f3fc-2642","\uD83D\uDD75\uD83C\uDFFD\u2640":"1f575-1f3fd-2640","\uD83D\uDD75\uD83C\uDFFD\u2642":"1f575-1f3fd-2642","\uD83D\uDD75\uD83C\uDFFE\u2640":"1f575-1f3fe-2640","\uD83D\uDD75\uD83C\uDFFE\u2642":"1f575-1f3fe-2642","\uD83D\uDD75\uD83C\uDFFF\u2640":"1f575-1f3ff-2640","\uD83D\uDD75\uD83C\uDFFF\u2642":"1f575-1f3ff-2642","\uD83C\uDFC3\uD83C\uDFFB\u2640":"1f3c3-1f3fb-2640","\uD83C\uDFC3\uD83C\uDFFB\u2642":"1f3c3-1f3fb-2642","\uD83C\uDFC3\uD83C\uDFFC\u2640":"1f3c3-1f3fc-2640","\uD83C\uDFC3\uD83C\uDFFC\u2642":"1f3c3-1f3fc-2642","\uD83C\uDFC3\uD83C\uDFFD\u2640":"1f3c3-1f3fd-2640","\uD83C\uDFC3\uD83C\uDFFD\u2642":"1f3c3-1f3fd-2642","\uD83C\uDFC3\uD83C\uDFFE\u2640":"1f3c3-1f3fe-2640","\uD83C\uDFC3\uD83C\uDFFE\u2642":"1f3c3-1f3fe-2642","\uD83C\uDFC3\uD83C\uDFFF\u2640":"1f3c3-1f3ff-2640","\uD83C\uDFC3\uD83C\uDFFF\u2642":"1f3c3-1f3ff-2642","\uD83C\uDFC4\uD83C\uDFFB\u2640":"1f3c4-1f3fb-2640","\uD83C\uDFC4\uD83C\uDFFB\u2642":"1f3c4-1f3fb-2642","\uD83C\uDFC4\uD83C\uDFFC\u2640":"1f3c4-1f3fc-2640","\uD83C\uDFC4\uD83C\uDFFC\u2642":"1f3c4-1f3fc-2642","\uD83C\uDFC4\uD83C\uDFFD\u2640":"1f3c4-1f3fd-2640","\uD83C\uDFC4\uD83C\uDFFD\u2642":"1f3c4-1f3fd-2642","\uD83C\uDFC4\uD83C\uDFFE\u2640":"1f3c4-1f3fe-2640","\uD83C\uDFC4\uD83C\uDFFE\u2642":"1f3c4-1f3fe-2642","\uD83C\uDFC4\uD83C\uDFFF\u2640":"1f3c4-1f3ff-2640","\uD83C\uDFC4\uD83C\uDFFF\u2642":"1f3c4-1f3ff-2642","\uD83C\uDFCA\uD83C\uDFFB\u2640":"1f3ca-1f3fb-2640","\uD83C\uDFCA\uD83C\uDFFB\u2642":"1f3ca-1f3fb-2642","\uD83C\uDFCA\uD83C\uDFFC\u2640":"1f3ca-1f3fc-2640","\uD83C\uDFCA\uD83C\uDFFC\u2642":"1f3ca-1f3fc-2642","\uD83C\uDFCA\uD83C\uDFFD\u2640":"1f3ca-1f3fd-2640","\uD83C\uDFCA\uD83C\uDFFD\u2642":"1f3ca-1f3fd-2642","\uD83C\uDFCA\uD83C\uDFFE\u2640":"1f3ca-1f3fe-2640","\uD83C\uDFCA\uD83C\uDFFE\u2642":"1f3ca-1f3fe-2642","\uD83C\uDFCA\uD83C\uDFFF\u2640":"1f3ca-1f3ff-2640","\uD83C\uDFCA\uD83C\uDFFF\u2642":"1f3ca-1f3ff-2642","\uD83C\uDFCB\uD83C\uDFFB\u2640":"1f3cb-1f3fb-2640","\uD83C\uDFCB\uD83C\uDFFB\u2642":"1f3cb-1f3fb-2642","\uD83C\uDFCB\uD83C\uDFFC\u2640":"1f3cb-1f3fc-2640","\uD83C\uDFCB\uD83C\uDFFC\u2642":"1f3cb-1f3fc-2642","\uD83C\uDFCB\uD83C\uDFFD\u2640":"1f3cb-1f3fd-2640","\uD83C\uDFCB\uD83C\uDFFD\u2642":"1f3cb-1f3fd-2642","\uD83C\uDFCB\uD83C\uDFFE\u2640":"1f3cb-1f3fe-2640","\uD83C\uDFCB\uD83C\uDFFE\u2642":"1f3cb-1f3fe-2642","\uD83C\uDFCB\uD83C\uDFFF\u2640":"1f3cb-1f3ff-2640","\uD83C\uDFCB\uD83C\uDFFF\u2642":"1f3cb-1f3ff-2642","\uD83D\uDC86\uD83C\uDFFB\u2640":"1f486-1f3fb-2640","\uD83D\uDC86\uD83C\uDFFB\u2642":"1f486-1f3fb-2642","\uD83D\uDC86\uD83C\uDFFC\u2640":"1f486-1f3fc-2640","\uD83D\uDC86\uD83C\uDFFC\u2642":"1f486-1f3fc-2642","\uD83D\uDC86\uD83C\uDFFD\u2640":"1f486-1f3fd-2640","\uD83D\uDC86\uD83C\uDFFD\u2642":"1f486-1f3fd-2642","\uD83D\uDC86\uD83C\uDFFE\u2640":"1f486-1f3fe-2640","\uD83D\uDC86\uD83C\uDFFE\u2642":"1f486-1f3fe-2642","\uD83D\uDC86\uD83C\uDFFF\u2640":"1f486-1f3ff-2640","\uD83D\uDC86\uD83C\uDFFF\u2642":"1f486-1f3ff-2642","\uD83D\uDC87\uD83C\uDFFB\u2640":"1f487-1f3fb-2640","\uD83D\uDC87\uD83C\uDFFB\u2642":"1f487-1f3fb-2642","\uD83D\uDC87\uD83C\uDFFC\u2640":"1f487-1f3fc-2640","\uD83D\uDC87\uD83C\uDFFC\u2642":"1f487-1f3fc-2642","\uD83D\uDC87\uD83C\uDFFD\u2640":"1f487-1f3fd-2640","\uD83D\uDC87\uD83C\uDFFD\u2642":"1f487-1f3fd-2642","\uD83D\uDC87\uD83C\uDFFE\u2640":"1f487-1f3fe-2640","\uD83D\uDC87\uD83C\uDFFE\u2642":"1f487-1f3fe-2642","\uD83D\uDC87\uD83C\uDFFF\u2640":"1f487-1f3ff-2640","\uD83D\uDC87\uD83C\uDFFF\u2642":"1f487-1f3ff-2642","\uD83D\uDEA3\uD83C\uDFFB\u2640":"1f6a3-1f3fb-2640","\uD83D\uDEA3\uD83C\uDFFB\u2642":"1f6a3-1f3fb-2642","\uD83D\uDEA3\uD83C\uDFFC\u2640":"1f6a3-1f3fc-2640","\uD83D\uDEA3\uD83C\uDFFC\u2642":"1f6a3-1f3fc-2642","\uD83D\uDEA3\uD83C\uDFFD\u2640":"1f6a3-1f3fd-2640","\uD83D\uDEA3\uD83C\uDFFD\u2642":"1f6a3-1f3fd-2642","\uD83D\uDEA3\uD83C\uDFFE\u2640":"1f6a3-1f3fe-2640","\uD83D\uDEA3\uD83C\uDFFE\u2642":"1f6a3-1f3fe-2642","\uD83D\uDEA3\uD83C\uDFFF\u2640":"1f6a3-1f3ff-2640","\uD83D\uDEA3\uD83C\uDFFF\u2642":"1f6a3-1f3ff-2642","\uD83D\uDEB4\uD83C\uDFFB\u2640":"1f6b4-1f3fb-2640","\uD83D\uDEB4\uD83C\uDFFB\u2642":"1f6b4-1f3fb-2642","\uD83D\uDEB4\uD83C\uDFFC\u2640":"1f6b4-1f3fc-2640","\uD83D\uDEB4\uD83C\uDFFC\u2642":"1f6b4-1f3fc-2642","\uD83D\uDEB4\uD83C\uDFFD\u2640":"1f6b4-1f3fd-2640","\uD83D\uDEB4\uD83C\uDFFD\u2642":"1f6b4-1f3fd-2642","\uD83D\uDEB4\uD83C\uDFFE\u2640":"1f6b4-1f3fe-2640","\uD83D\uDEB4\uD83C\uDFFE\u2642":"1f6b4-1f3fe-2642","\uD83D\uDEB4\uD83C\uDFFF\u2640":"1f6b4-1f3ff-2640","\uD83D\uDEB4\uD83C\uDFFF\u2642":"1f6b4-1f3ff-2642","\uD83D\uDEB5\uD83C\uDFFB\u2640":"1f6b5-1f3fb-2640","\uD83D\uDEB5\uD83C\uDFFB\u2642":"1f6b5-1f3fb-2642","\uD83D\uDEB5\uD83C\uDFFC\u2640":"1f6b5-1f3fc-2640","\uD83D\uDEB5\uD83C\uDFFC\u2642":"1f6b5-1f3fc-2642","\uD83D\uDEB5\uD83C\uDFFD\u2640":"1f6b5-1f3fd-2640","\uD83D\uDEB5\uD83C\uDFFD\u2642":"1f6b5-1f3fd-2642","\uD83D\uDEB5\uD83C\uDFFE\u2640":"1f6b5-1f3fe-2640","\uD83D\uDEB5\uD83C\uDFFE\u2642":"1f6b5-1f3fe-2642","\uD83D\uDEB5\uD83C\uDFFF\u2640":"1f6b5-1f3ff-2640","\uD83D\uDEB5\uD83C\uDFFF\u2642":"1f6b5-1f3ff-2642","\uD83D\uDEB6\uD83C\uDFFB\u2640":"1f6b6-1f3fb-2640","\uD83D\uDEB6\uD83C\uDFFB\u2642":"1f6b6-1f3fb-2642","\uD83D\uDEB6\uD83C\uDFFC\u2640":"1f6b6-1f3fc-2640","\uD83D\uDEB6\uD83C\uDFFC\u2642":"1f6b6-1f3fc-2642","\uD83D\uDEB6\uD83C\uDFFD\u2640":"1f6b6-1f3fd-2640","\uD83D\uDEB6\uD83C\uDFFD\u2642":"1f6b6-1f3fd-2642","\uD83D\uDEB6\uD83C\uDFFE\u2640":"1f6b6-1f3fe-2640","\uD83D\uDEB6\uD83C\uDFFE\u2642":"1f6b6-1f3fe-2642","\uD83D\uDEB6\uD83C\uDFFF\u2640":"1f6b6-1f3ff-2640","\uD83D\uDEB6\uD83C\uDFFF\u2642":"1f6b6-1f3ff-2642","\uD83E\uDD38\uD83C\uDFFB\u2640":"1f938-1f3fb-2640","\uD83E\uDD38\uD83C\uDFFB\u2642":"1f938-1f3fb-2642","\uD83E\uDD38\uD83C\uDFFC\u2640":"1f938-1f3fc-2640","\uD83E\uDD38\uD83C\uDFFC\u2642":"1f938-1f3fc-2642","\uD83E\uDD38\uD83C\uDFFD\u2640":"1f938-1f3fd-2640","\uD83E\uDD38\uD83C\uDFFD\u2642":"1f938-1f3fd-2642","\uD83E\uDD38\uD83C\uDFFE\u2640":"1f938-1f3fe-2640","\uD83E\uDD38\uD83C\uDFFE\u2642":"1f938-1f3fe-2642","\uD83E\uDD38\uD83C\uDFFF\u2640":"1f938-1f3ff-2640","\uD83E\uDD38\uD83C\uDFFF\u2642":"1f938-1f3ff-2642","\uD83E\uDD39\uD83C\uDFFB\u2640":"1f939-1f3fb-2640","\uD83E\uDD39\uD83C\uDFFB\u2642":"1f939-1f3fb-2642","\uD83E\uDD39\uD83C\uDFFC\u2640":"1f939-1f3fc-2640","\uD83E\uDD39\uD83C\uDFFC\u2642":"1f939-1f3fc-2642","\uD83E\uDD39\uD83C\uDFFD\u2640":"1f939-1f3fd-2640","\uD83E\uDD39\uD83C\uDFFD\u2642":"1f939-1f3fd-2642","\uD83E\uDD39\uD83C\uDFFE\u2640":"1f939-1f3fe-2640","\uD83E\uDD39\uD83C\uDFFE\u2642":"1f939-1f3fe-2642","\uD83E\uDD39\uD83C\uDFFF\u2640":"1f939-1f3ff-2640","\uD83E\uDD39\uD83C\uDFFF\u2642":"1f939-1f3ff-2642","\uD83E\uDD3D\uD83C\uDFFB\u2640":"1f93d-1f3fb-2640","\uD83E\uDD3D\uD83C\uDFFB\u2642":"1f93d-1f3fb-2642","\uD83E\uDD3D\uD83C\uDFFC\u2640":"1f93d-1f3fc-2640","\uD83E\uDD3D\uD83C\uDFFC\u2642":"1f93d-1f3fc-2642","\uD83E\uDD3D\uD83C\uDFFD\u2640":"1f93d-1f3fd-2640","\uD83E\uDD3D\uD83C\uDFFD\u2642":"1f93d-1f3fd-2642","\uD83E\uDD3D\uD83C\uDFFE\u2640":"1f93d-1f3fe-2640","\uD83E\uDD3D\uD83C\uDFFE\u2642":"1f93d-1f3fe-2642","\uD83E\uDD3D\uD83C\uDFFF\u2640":"1f93d-1f3ff-2640","\uD83E\uDD3D\uD83C\uDFFF\u2642":"1f93d-1f3ff-2642","\uD83E\uDD3E\uD83C\uDFFB\u2640":"1f93e-1f3fb-2640","\uD83E\uDD3E\uD83C\uDFFB\u2642":"1f93e-1f3fb-2642","\uD83E\uDD3E\uD83C\uDFFC\u2640":"1f93e-1f3fc-2640","\uD83E\uDD3E\uD83C\uDFFC\u2642":"1f93e-1f3fc-2642","\uD83E\uDD3E\uD83C\uDFFD\u2640":"1f93e-1f3fd-2640","\uD83E\uDD3E\uD83C\uDFFD\u2642":"1f93e-1f3fd-2642","\uD83E\uDD3E\uD83C\uDFFE\u2640":"1f93e-1f3fe-2640","\uD83E\uDD3E\uD83C\uDFFE\u2642":"1f93e-1f3fe-2642","\uD83E\uDD3E\uD83C\uDFFF\u2640":"1f93e-1f3ff-2640","\uD83E\uDD3E\uD83C\uDFFF\u2642":"1f93e-1f3ff-2642","\uD83D\uDC81\uD83C\uDFFB\u2640":"1f481-1f3fb-2640","\uD83D\uDC81\uD83C\uDFFB\u2642":"1f481-1f3fb-2642","\uD83D\uDC81\uD83C\uDFFC\u2640":"1f481-1f3fc-2640","\uD83D\uDC81\uD83C\uDFFC\u2642":"1f481-1f3fc-2642","\uD83D\uDC81\uD83C\uDFFD\u2640":"1f481-1f3fd-2640","\uD83D\uDC81\uD83C\uDFFD\u2642":"1f481-1f3fd-2642","\uD83D\uDC81\uD83C\uDFFE\u2640":"1f481-1f3fe-2640","\uD83D\uDC81\uD83C\uDFFE\u2642":"1f481-1f3fe-2642","\uD83D\uDC81\uD83C\uDFFF\u2640":"1f481-1f3ff-2640","\uD83D\uDC81\uD83C\uDFFF\u2642":"1f481-1f3ff-2642","\uD83D\uDE45\uD83C\uDFFB\u2640":"1f645-1f3fb-2640","\uD83D\uDE45\uD83C\uDFFB\u2642":"1f645-1f3fb-2642","\uD83D\uDE45\uD83C\uDFFC\u2640":"1f645-1f3fc-2640","\uD83D\uDE45\uD83C\uDFFC\u2642":"1f645-1f3fc-2642","\uD83D\uDE45\uD83C\uDFFD\u2640":"1f645-1f3fd-2640","\uD83D\uDE45\uD83C\uDFFD\u2642":"1f645-1f3fd-2642","\uD83D\uDE45\uD83C\uDFFE\u2640":"1f645-1f3fe-2640","\uD83D\uDE45\uD83C\uDFFE\u2642":"1f645-1f3fe-2642","\uD83D\uDE45\uD83C\uDFFF\u2640":"1f645-1f3ff-2640","\uD83D\uDE45\uD83C\uDFFF\u2642":"1f645-1f3ff-2642","\uD83D\uDE46\uD83C\uDFFB\u2640":"1f646-1f3fb-2640","\uD83D\uDE46\uD83C\uDFFB\u2642":"1f646-1f3fb-2642","\uD83D\uDE46\uD83C\uDFFC\u2640":"1f646-1f3fc-2640","\uD83D\uDE46\uD83C\uDFFC\u2642":"1f646-1f3fc-2642","\uD83D\uDE46\uD83C\uDFFD\u2640":"1f646-1f3fd-2640","\uD83D\uDE46\uD83C\uDFFD\u2642":"1f646-1f3fd-2642","\uD83D\uDE46\uD83C\uDFFE\u2640":"1f646-1f3fe-2640","\uD83D\uDE46\uD83C\uDFFE\u2642":"1f646-1f3fe-2642","\uD83D\uDE46\uD83C\uDFFF\u2640":"1f646-1f3ff-2640","\uD83D\uDE46\uD83C\uDFFF\u2642":"1f646-1f3ff-2642","\uD83D\uDE47\uD83C\uDFFB\u2640":"1f647-1f3fb-2640","\uD83D\uDE47\uD83C\uDFFB\u2642":"1f647-1f3fb-2642","\uD83D\uDE47\uD83C\uDFFC\u2640":"1f647-1f3fc-2640","\uD83D\uDE47\uD83C\uDFFC\u2642":"1f647-1f3fc-2642","\uD83D\uDE47\uD83C\uDFFD\u2640":"1f647-1f3fd-2640","\uD83D\uDE47\uD83C\uDFFD\u2642":"1f647-1f3fd-2642","\uD83D\uDE47\uD83C\uDFFE\u2640":"1f647-1f3fe-2640","\uD83D\uDE47\uD83C\uDFFE\u2642":"1f647-1f3fe-2642","\uD83D\uDE47\uD83C\uDFFF\u2640":"1f647-1f3ff-2640","\uD83D\uDE47\uD83C\uDFFF\u2642":"1f647-1f3ff-2642","\uD83D\uDE4B\uD83C\uDFFB\u2640":"1f64b-1f3fb-2640","\uD83D\uDE4B\uD83C\uDFFB\u2642":"1f64b-1f3fb-2642","\uD83D\uDE4B\uD83C\uDFFC\u2640":"1f64b-1f3fc-2640","\uD83D\uDE4B\uD83C\uDFFC\u2642":"1f64b-1f3fc-2642","\uD83D\uDE4B\uD83C\uDFFD\u2640":"1f64b-1f3fd-2640","\uD83D\uDE4B\uD83C\uDFFD\u2642":"1f64b-1f3fd-2642","\uD83D\uDE4B\uD83C\uDFFE\u2640":"1f64b-1f3fe-2640","\uD83D\uDE4B\uD83C\uDFFE\u2642":"1f64b-1f3fe-2642","\uD83D\uDE4B\uD83C\uDFFF\u2640":"1f64b-1f3ff-2640","\uD83D\uDE4B\uD83C\uDFFF\u2642":"1f64b-1f3ff-2642","\uD83D\uDE4D\uD83C\uDFFB\u2640":"1f64d-1f3fb-2640","\uD83D\uDE4D\uD83C\uDFFB\u2642":"1f64d-1f3fb-2642","\uD83D\uDE4D\uD83C\uDFFC\u2640":"1f64d-1f3fc-2640","\uD83D\uDE4D\uD83C\uDFFC\u2642":"1f64d-1f3fc-2642","\uD83D\uDE4D\uD83C\uDFFD\u2640":"1f64d-1f3fd-2640","\uD83D\uDE4D\uD83C\uDFFD\u2642":"1f64d-1f3fd-2642","\uD83D\uDE4D\uD83C\uDFFE\u2640":"1f64d-1f3fe-2640","\uD83D\uDE4D\uD83C\uDFFE\u2642":"1f64d-1f3fe-2642","\uD83D\uDE4D\uD83C\uDFFF\u2640":"1f64d-1f3ff-2640","\uD83D\uDE4D\uD83C\uDFFF\u2642":"1f64d-1f3ff-2642","\uD83D\uDE4E\uD83C\uDFFB\u2640":"1f64e-1f3fb-2640","\uD83D\uDE4E\uD83C\uDFFB\u2642":"1f64e-1f3fb-2642","\uD83D\uDE4E\uD83C\uDFFC\u2640":"1f64e-1f3fc-2640","\uD83D\uDE4E\uD83C\uDFFC\u2642":"1f64e-1f3fc-2642","\uD83D\uDE4E\uD83C\uDFFD\u2640":"1f64e-1f3fd-2640","\uD83D\uDE4E\uD83C\uDFFD\u2642":"1f64e-1f3fd-2642","\uD83D\uDE4E\uD83C\uDFFE\u2640":"1f64e-1f3fe-2640","\uD83D\uDE4E\uD83C\uDFFE\u2642":"1f64e-1f3fe-2642","\uD83D\uDE4E\uD83C\uDFFF\u2640":"1f64e-1f3ff-2640","\uD83D\uDE4E\uD83C\uDFFF\u2642":"1f64e-1f3ff-2642","\uD83E\uDD26\uD83C\uDFFB\u2640":"1f926-1f3fb-2640","\uD83E\uDD26\uD83C\uDFFB\u2642":"1f926-1f3fb-2642","\uD83E\uDD26\uD83C\uDFFC\u2640":"1f926-1f3fc-2640","\uD83E\uDD26\uD83C\uDFFC\u2642":"1f926-1f3fc-2642","\uD83E\uDD26\uD83C\uDFFD\u2640":"1f926-1f3fd-2640","\uD83E\uDD26\uD83C\uDFFD\u2642":"1f926-1f3fd-2642","\uD83E\uDD26\uD83C\uDFFE\u2640":"1f926-1f3fe-2640","\uD83E\uDD26\uD83C\uDFFE\u2642":"1f926-1f3fe-2642","\uD83E\uDD26\uD83C\uDFFF\u2640":"1f926-1f3ff-2640","\uD83E\uDD26\uD83C\uDFFF\u2642":"1f926-1f3ff-2642","\uD83E\uDD37\uD83C\uDFFB\u2640":"1f937-1f3fb-2640","\uD83E\uDD37\uD83C\uDFFB\u2642":"1f937-1f3fb-2642","\uD83E\uDD37\uD83C\uDFFC\u2640":"1f937-1f3fc-2640","\uD83E\uDD37\uD83C\uDFFC\u2642":"1f937-1f3fc-2642","\uD83E\uDD37\uD83C\uDFFD\u2640":"1f937-1f3fd-2640","\uD83E\uDD37\uD83C\uDFFD\u2642":"1f937-1f3fd-2642","\uD83E\uDD37\uD83C\uDFFE\u2640":"1f937-1f3fe-2640","\uD83E\uDD37\uD83C\uDFFE\u2642":"1f937-1f3fe-2642","\uD83E\uDD37\uD83C\uDFFF\u2640":"1f937-1f3ff-2640","\uD83E\uDD37\uD83C\uDFFF\u2642":"1f937-1f3ff-2642","\uD83E\uDDD9\uD83C\uDFFB\u2640":"1f9d9-1f3fb-2640","\uD83E\uDDD9\uD83C\uDFFB\u2642":"1f9d9-1f3fb-2642","\uD83E\uDDD9\uD83C\uDFFC\u2640":"1f9d9-1f3fc-2640","\uD83E\uDDD9\uD83C\uDFFC\u2642":"1f9d9-1f3fc-2642","\uD83E\uDDD9\uD83C\uDFFD\u2640":"1f9d9-1f3fd-2640","\uD83E\uDDD9\uD83C\uDFFD\u2642":"1f9d9-1f3fd-2642","\uD83E\uDDD9\uD83C\uDFFE\u2640":"1f9d9-1f3fe-2640","\uD83E\uDDD9\uD83C\uDFFE\u2642":"1f9d9-1f3fe-2642","\uD83E\uDDD9\uD83C\uDFFF\u2640":"1f9d9-1f3ff-2640","\uD83E\uDDD9\uD83C\uDFFF\u2642":"1f9d9-1f3ff-2642","\uD83E\uDDDA\uD83C\uDFFB\u2640":"1f9da-1f3fb-2640","\uD83E\uDDDA\uD83C\uDFFB\u2642":"1f9da-1f3fb-2642","\uD83E\uDDDA\uD83C\uDFFC\u2640":"1f9da-1f3fc-2640","\uD83E\uDDDA\uD83C\uDFFC\u2642":"1f9da-1f3fc-2642","\uD83E\uDDDA\uD83C\uDFFD\u2640":"1f9da-1f3fd-2640","\uD83E\uDDDA\uD83C\uDFFD\u2642":"1f9da-1f3fd-2642","\uD83E\uDDDA\uD83C\uDFFE\u2640":"1f9da-1f3fe-2640","\uD83E\uDDDA\uD83C\uDFFE\u2642":"1f9da-1f3fe-2642","\uD83E\uDDDA\uD83C\uDFFF\u2640":"1f9da-1f3ff-2640","\uD83E\uDDDA\uD83C\uDFFF\u2642":"1f9da-1f3ff-2642","\uD83E\uDDDB\uD83C\uDFFB\u2640":"1f9db-1f3fb-2640","\uD83E\uDDDB\uD83C\uDFFB\u2642":"1f9db-1f3fb-2642","\uD83E\uDDDB\uD83C\uDFFC\u2640":"1f9db-1f3fc-2640","\uD83E\uDDDB\uD83C\uDFFC\u2642":"1f9db-1f3fc-2642","\uD83E\uDDDB\uD83C\uDFFD\u2640":"1f9db-1f3fd-2640","\uD83E\uDDDB\uD83C\uDFFD\u2642":"1f9db-1f3fd-2642","\uD83E\uDDDB\uD83C\uDFFE\u2640":"1f9db-1f3fe-2640","\uD83E\uDDDB\uD83C\uDFFE\u2642":"1f9db-1f3fe-2642","\uD83E\uDDDB\uD83C\uDFFF\u2640":"1f9db-1f3ff-2640","\uD83E\uDDDB\uD83C\uDFFF\u2642":"1f9db-1f3ff-2642","\uD83E\uDDDC\uD83C\uDFFB\u2640":"1f9dc-1f3fb-2640","\uD83E\uDDDC\uD83C\uDFFB\u2642":"1f9dc-1f3fb-2642","\uD83E\uDDDC\uD83C\uDFFC\u2640":"1f9dc-1f3fc-2640","\uD83E\uDDDC\uD83C\uDFFC\u2642":"1f9dc-1f3fc-2642","\uD83E\uDDDC\uD83C\uDFFD\u2640":"1f9dc-1f3fd-2640","\uD83E\uDDDC\uD83C\uDFFD\u2642":"1f9dc-1f3fd-2642","\uD83E\uDDDC\uD83C\uDFFE\u2640":"1f9dc-1f3fe-2640","\uD83E\uDDDC\uD83C\uDFFE\u2642":"1f9dc-1f3fe-2642","\uD83E\uDDDC\uD83C\uDFFF\u2640":"1f9dc-1f3ff-2640","\uD83E\uDDDC\uD83C\uDFFF\u2642":"1f9dc-1f3ff-2642","\uD83E\uDDDD\uD83C\uDFFB\u2640":"1f9dd-1f3fb-2640","\uD83E\uDDDD\uD83C\uDFFB\u2642":"1f9dd-1f3fb-2642","\uD83E\uDDDD\uD83C\uDFFC\u2640":"1f9dd-1f3fc-2640","\uD83E\uDDDD\uD83C\uDFFC\u2642":"1f9dd-1f3fc-2642","\uD83E\uDDDD\uD83C\uDFFD\u2640":"1f9dd-1f3fd-2640","\uD83E\uDDDD\uD83C\uDFFD\u2642":"1f9dd-1f3fd-2642","\uD83E\uDDDD\uD83C\uDFFE\u2640":"1f9dd-1f3fe-2640","\uD83E\uDDDD\uD83C\uDFFE\u2642":"1f9dd-1f3fe-2642","\uD83E\uDDDD\uD83C\uDFFF\u2640":"1f9dd-1f3ff-2640","\uD83E\uDDDD\uD83C\uDFFF\u2642":"1f9dd-1f3ff-2642","\uD83E\uDDD6\uD83C\uDFFB\u2640":"1f9d6-1f3fb-2640","\uD83E\uDDD6\uD83C\uDFFB\u2642":"1f9d6-1f3fb-2642","\uD83E\uDDD6\uD83C\uDFFC\u2640":"1f9d6-1f3fc-2640","\uD83E\uDDD6\uD83C\uDFFC\u2642":"1f9d6-1f3fc-2642","\uD83E\uDDD6\uD83C\uDFFD\u2640":"1f9d6-1f3fd-2640","\uD83E\uDDD6\uD83C\uDFFD\u2642":"1f9d6-1f3fd-2642","\uD83E\uDDD6\uD83C\uDFFE\u2640":"1f9d6-1f3fe-2640","\uD83E\uDDD6\uD83C\uDFFE\u2642":"1f9d6-1f3fe-2642","\uD83E\uDDD6\uD83C\uDFFF\u2640":"1f9d6-1f3ff-2640","\uD83E\uDDD6\uD83C\uDFFF\u2642":"1f9d6-1f3ff-2642","\uD83E\uDDD7\uD83C\uDFFB\u2640":"1f9d7-1f3fb-2640","\uD83E\uDDD7\uD83C\uDFFB\u2642":"1f9d7-1f3fb-2642","\uD83E\uDDD7\uD83C\uDFFC\u2640":"1f9d7-1f3fc-2640","\uD83E\uDDD7\uD83C\uDFFC\u2642":"1f9d7-1f3fc-2642","\uD83E\uDDD7\uD83C\uDFFD\u2640":"1f9d7-1f3fd-2640","\uD83E\uDDD7\uD83C\uDFFD\u2642":"1f9d7-1f3fd-2642","\uD83E\uDDD7\uD83C\uDFFE\u2640":"1f9d7-1f3fe-2640","\uD83E\uDDD7\uD83C\uDFFE\u2642":"1f9d7-1f3fe-2642","\uD83E\uDDD7\uD83C\uDFFF\u2640":"1f9d7-1f3ff-2640","\uD83E\uDDD7\uD83C\uDFFF\u2642":"1f9d7-1f3ff-2642","\uD83E\uDDD8\uD83C\uDFFB\u2640":"1f9d8-1f3fb-2640","\uD83E\uDDD8\uD83C\uDFFB\u2642":"1f9d8-1f3fb-2642","\uD83E\uDDD8\uD83C\uDFFC\u2640":"1f9d8-1f3fc-2640","\uD83E\uDDD8\uD83C\uDFFC\u2642":"1f9d8-1f3fc-2642","\uD83E\uDDD8\uD83C\uDFFD\u2640":"1f9d8-1f3fd-2640","\uD83E\uDDD8\uD83C\uDFFD\u2642":"1f9d8-1f3fd-2642","\uD83E\uDDD8\uD83C\uDFFE\u2640":"1f9d8-1f3fe-2640","\uD83E\uDDD8\uD83C\uDFFE\u2642":"1f9d8-1f3fe-2642","\uD83E\uDDD8\uD83C\uDFFF\u2640":"1f9d8-1f3ff-2640","\uD83E\uDDD8\uD83C\uDFFF\u2642":"1f9d8-1f3ff-2642","\u26F9\uD83C\uDFFB\u2640":"26f9-1f3fb-2640","\u26F9\uD83C\uDFFB\u2642":"26f9-1f3fb-2642","\u26F9\uD83C\uDFFC\u2640":"26f9-1f3fc-2640","\u26F9\uD83C\uDFFC\u2642":"26f9-1f3fc-2642","\u26F9\uD83C\uDFFD\u2640":"26f9-1f3fd-2640","\u26F9\uD83C\uDFFD\u2642":"26f9-1f3fd-2642","\u26F9\uD83C\uDFFE\u2640":"26f9-1f3fe-2640","\u26F9\uD83C\uDFFE\u2642":"26f9-1f3fe-2642","\u26F9\uD83C\uDFFF\u2640":"26f9-1f3ff-2640","\u26F9\uD83C\uDFFF\u2642":"26f9-1f3ff-2642","\uD83C\uDFF3\uD83C\uDF08":"1f3f3-1f308","\uD83D\uDC41\uD83D\uDDE8":"1f441-1f5e8","\uD83D\uDC6F\u2642":"1f46f-2642","\uD83D\uDC6F\u2640":"1f46f-2640","\uD83C\uDFCC\u2642":"1f3cc-2642","\uD83C\uDFCC\u2640":"1f3cc-2640","\uD83E\uDD3C\u2642":"1f93c-2642","\uD83E\uDD3C\u2640":"1f93c-2640","\uD83E\uDD39\u2642":"1f939-2642","\uD83E\uDD39\u2640":"1f939-2640","\uD83E\uDD3E\u2642":"1f93e-2642","\uD83E\uDD3E\u2640":"1f93e-2640","\uD83E\uDD3D\u2642":"1f93d-2642","\uD83E\uDD3D\u2640":"1f93d-2640","\uD83E\uDD38\u2642":"1f938-2642","\uD83E\uDD38\u2640":"1f938-2640","\uD83D\uDEB6\u2642":"1f6b6-2642","\uD83D\uDEB6\u2640":"1f6b6-2640","\uD83D\uDEB5\u2642":"1f6b5-2642","\uD83D\uDEB5\u2640":"1f6b5-2640","\uD83D\uDEB4\u2642":"1f6b4-2642","\uD83D\uDEB4\u2640":"1f6b4-2640","\uD83D\uDEA3\u2642":"1f6a3-2642","\uD83D\uDEA3\u2640":"1f6a3-2640","\uD83C\uDFCB\u2642":"1f3cb-2642","\uD83C\uDFCB\u2640":"1f3cb-2640","\uD83C\uDFCA\u2642":"1f3ca-2642","\uD83C\uDFCA\u2640":"1f3ca-2640","\uD83C\uDFC4\u2642":"1f3c4-2642","\uD83C\uDFC4\u2640":"1f3c4-2640","\uD83C\uDFC3\u2642":"1f3c3-2642","\uD83C\uDFC3\u2640":"1f3c3-2640","\uD83E\uDD37\u2642":"1f937-2642","\uD83E\uDD37\u2640":"1f937-2640","\uD83E\uDD26\u2642":"1f926-2642","\uD83E\uDD26\u2640":"1f926-2640","\uD83D\uDE4E\u2642":"1f64e-2642","\uD83D\uDE4E\u2640":"1f64e-2640","\uD83D\uDE4D\u2642":"1f64d-2642","\uD83D\uDE4D\u2640":"1f64d-2640","\uD83D\uDE4B\u2642":"1f64b-2642","\uD83D\uDE4B\u2640":"1f64b-2640","\uD83D\uDE47\u2642":"1f647-2642","\uD83D\uDE47\u2640":"1f647-2640","\uD83D\uDE46\u2642":"1f646-2642","\uD83D\uDE46\u2640":"1f646-2640","\uD83D\uDE45\u2642":"1f645-2642","\uD83D\uDE45\u2640":"1f645-2640","\uD83D\uDC87\u2642":"1f487-2642","\uD83D\uDC87\u2640":"1f487-2640","\uD83D\uDC86\u2642":"1f486-2642","\uD83D\uDC86\u2640":"1f486-2640","\uD83D\uDC81\u2642":"1f481-2642","\uD83D\uDC81\u2640":"1f481-2640","\uD83D\uDC71\u2642":"1f471-2642","\uD83D\uDC71\u2640":"1f471-2640","\uD83D\uDC73\u2642":"1f473-2642","\uD83D\uDC73\u2640":"1f473-2640","\uD83D\uDC82\u2642":"1f482-2642","\uD83D\uDC82\u2640":"1f482-2640","\uD83D\uDD75\u2642":"1f575-2642","\uD83D\uDD75\u2640":"1f575-2640","\uD83D\uDC77\u2642":"1f477-2642","\uD83D\uDC77\u2640":"1f477-2640","\uD83D\uDC6E\u2642":"1f46e-2642","\uD83D\uDC6E\u2640":"1f46e-2640","\uD83D\uDC68\u2695":"1f468-2695","\uD83D\uDC69\u2695":"1f469-2695","\uD83D\uDC68\u2696":"1f468-2696","\uD83D\uDC69\u2696":"1f469-2696","\uD83D\uDC68\u2708":"1f468-2708","\uD83D\uDC69\u2708":"1f469-2708","\uD83E\uDDD9\u2640":"1f9d9-2640","\uD83E\uDDD9\u2642":"1f9d9-2642","\uD83E\uDDDA\u2640":"1f9da-2640","\uD83E\uDDDA\u2642":"1f9da-2642","\uD83E\uDDDB\u2640":"1f9db-2640","\uD83E\uDDDB\u2642":"1f9db-2642","\uD83E\uDDDC\u2640":"1f9dc-2640","\uD83E\uDDDC\u2642":"1f9dc-2642","\uD83E\uDDDD\u2640":"1f9dd-2640","\uD83E\uDDDD\u2642":"1f9dd-2642","\uD83E\uDDDE\u2640":"1f9de-2640","\uD83E\uDDDE\u2642":"1f9de-2642","\uD83E\uDDDF\u2640":"1f9df-2640","\uD83E\uDDDF\u2642":"1f9df-2642","\uD83E\uDDD6\u2640":"1f9d6-2640","\uD83E\uDDD6\u2642":"1f9d6-2642","\uD83E\uDDD7\u2640":"1f9d7-2640","\uD83E\uDDD7\u2642":"1f9d7-2642","\uD83E\uDDD8\u2640":"1f9d8-2640","\uD83E\uDDD8\u2642":"1f9d8-2642","\u26F9\u2642":"26f9-2642","\u26F9\u2640":"26f9-2640","\uD83C\uDD70":"1f170","\uD83C\uDD71":"1f171","\uD83C\uDD7E":"1f17e","\uD83C\uDD7F":"1f17f","\uD83C\uDE02":"1f202","\uD83C\uDE37":"1f237","\uD83C\uDF9E":"1f39e","\uD83C\uDF9F":"1f39f","\uD83C\uDFCB":"1f3cb","\uD83C\uDFCC":"1f3cc","\uD83C\uDFCD":"1f3cd","\uD83C\uDFCE":"1f3ce","\uD83C\uDF96":"1f396","\uD83C\uDF97":"1f397","\uD83C\uDF36":"1f336","\uD83C\uDF27":"1f327","\uD83C\uDF28":"1f328","\uD83C\uDF29":"1f329","\uD83C\uDF2A":"1f32a","\uD83C\uDF2B":"1f32b","\uD83C\uDF2C":"1f32c","\uD83D\uDC3F":"1f43f","\uD83D\uDD77":"1f577","\uD83D\uDD78":"1f578","\uD83C\uDF21":"1f321","\uD83C\uDF99":"1f399","\uD83C\uDF9A":"1f39a","\uD83C\uDF9B":"1f39b","\uD83C\uDFF3":"1f3f3","\uD83C\uDFF5":"1f3f5","\uD83C\uDFF7":"1f3f7","\uD83D\uDCFD":"1f4fd","\uD83D\uDD49":"1f549","\uD83D\uDD4A":"1f54a","\uD83D\uDD6F":"1f56f","\uD83D\uDD70":"1f570","\uD83D\uDD73":"1f573","\uD83D\uDD76":"1f576","\uD83D\uDD79":"1f579","\uD83D\uDD87":"1f587","\uD83D\uDD8A":"1f58a","\uD83D\uDD8B":"1f58b","\uD83D\uDD8C":"1f58c","\uD83D\uDD8D":"1f58d","\uD83D\uDDA5":"1f5a5","\uD83D\uDDA8":"1f5a8","\uD83D\uDDB2":"1f5b2","\uD83D\uDDBC":"1f5bc","\uD83D\uDDC2":"1f5c2","\uD83D\uDDC3":"1f5c3","\uD83D\uDDC4":"1f5c4","\uD83D\uDDD1":"1f5d1","\uD83D\uDDD2":"1f5d2","\uD83D\uDDD3":"1f5d3","\uD83D\uDDDC":"1f5dc","\uD83D\uDDDD":"1f5dd","\uD83D\uDDDE":"1f5de","\uD83D\uDDE1":"1f5e1","\uD83D\uDDE3":"1f5e3","\uD83D\uDDE8":"1f5e8","\uD83D\uDDEF":"1f5ef","\uD83D\uDDF3":"1f5f3","\uD83D\uDDFA":"1f5fa","\uD83D\uDEE0":"1f6e0","\uD83D\uDEE1":"1f6e1","\uD83D\uDEE2":"1f6e2","\uD83D\uDEF0":"1f6f0","\uD83C\uDF7D":"1f37d","\uD83D\uDC41":"1f441","\uD83D\uDD74":"1f574","\uD83D\uDD75":"1f575","\uD83D\uDD90":"1f590","\uD83C\uDFD4":"1f3d4","\uD83C\uDFD5":"1f3d5","\uD83C\uDFD6":"1f3d6","\uD83C\uDFD7":"1f3d7","\uD83C\uDFD8":"1f3d8","\uD83C\uDFD9":"1f3d9","\uD83C\uDFDA":"1f3da","\uD83C\uDFDB":"1f3db","\uD83C\uDFDC":"1f3dc","\uD83C\uDFDD":"1f3dd","\uD83C\uDFDE":"1f3de","\uD83C\uDFDF":"1f3df","\uD83D\uDECB":"1f6cb","\uD83D\uDECD":"1f6cd","\uD83D\uDECE":"1f6ce","\uD83D\uDECF":"1f6cf","\uD83D\uDEE3":"1f6e3","\uD83D\uDEE4":"1f6e4","\uD83D\uDEE5":"1f6e5","\uD83D\uDEE9":"1f6e9","\uD83D\uDEF3":"1f6f3","\uD83C\uDF24":"1f324","\uD83C\uDF25":"1f325","\uD83C\uDF26":"1f326","\uD83D\uDDB1":"1f5b1","\u00A9":"00a9","\u00AE":"00ae","\u203C":"203c","\u2049":"2049","\u2122":"2122","\u2139":"2139","\u2194":"2194","\u2195":"2195","\u2196":"2196","\u2197":"2197","\u2198":"2198","\u2199":"2199","\u21A9":"21a9","\u21AA":"21aa","\u24C2":"24c2","\u25AA":"25aa","\u25AB":"25ab","\u25B6":"25b6","\u25C0":"25c0","\u25FB":"25fb","\u25FC":"25fc","\u2600":"2600","\u2601":"2601","\u260E":"260e","\u2611":"2611","\u261D":"261d","\u263A":"263a","*":"002a","\u2660":"2660","\u2663":"2663","\u2665":"2665","\u2666":"2666","\u2668":"2668","\u267B":"267b","\u26A0":"26a0","\u2702":"2702","\u2708":"2708","\u2709":"2709","\u270C":"270c","\u270F":"270f","\u2712":"2712","\u2714":"2714","\u2716":"2716","\u2733":"2733","\u2734":"2734","\u2744":"2744","\u2747":"2747","\u2764":"2764","\u27A1":"27a1","\u2934":"2934","\u2935":"2935","\u2B05":"2b05","\u2B06":"2b06","\u2B07":"2b07","\u3030":"3030","\u303D":"303d","\u3297":"3297","\u3299":"3299","#":"0023","\u271D":"271d","\u2328":"2328","\u270D":"270d","\u23CF":"23cf","\u23ED":"23ed","\u23EE":"23ee","\u23EF":"23ef","\u23F1":"23f1","\u23F2":"23f2","\u23F8":"23f8","\u23F9":"23f9","\u23FA":"23fa","\u2602":"2602","\u2603":"2603","\u2604":"2604","\u2618":"2618","\u2620":"2620","\u2622":"2622","\u2623":"2623","\u2626":"2626","\u262A":"262a","\u262E":"262e","\u262F":"262f","\u2638":"2638","\u2639":"2639","\u2692":"2692","\u2694":"2694","\u2696":"2696","\u2697":"2697","\u2699":"2699","\u269B":"269b","\u269C":"269c","\u26B0":"26b0","\u26B1":"26b1","\u26C8":"26c8","\u26CF":"26cf","\u26D1":"26d1","\u26D3":"26d3","\u26E9":"26e9","\u26F0":"26f0","\u26F1":"26f1","\u26F4":"26f4","\u26F7":"26f7","\u26F8":"26f8","\u26F9":"26f9","\u2721":"2721","\u2763":"2763","9":"0039","8":"0038","7":"0037","6":"0036","5":"0035","4":"0034","3":"0033","2":"0032","1":"0031","0":"0030","\u2640":"2640","\u2642":"2642","\u2695":"2695"}; ns.asciiList = { '*\\0/*':'1f646', '*\\O/*':'1f646', '-___-':'1f611', ':\'-)':'1f602', '\':-)':'1f605', '\':-D':'1f605', '>:-)':'1f606', '\':-(':'1f613', '>:-(':'1f620', ':\'-(':'1f622', 'O:-)':'1f607', '0:-3':'1f607', '0:-)':'1f607', '0;^)':'1f607', 'O;-)':'1f607', '0;-)':'1f607', 'O:-3':'1f607', '-__-':'1f611', ':-Þ':'1f61b', ':)':'1f606', '>;)':'1f606', '>=)':'1f606', ';-)':'1f609', '*-)':'1f609', ';-]':'1f609', ';^)':'1f609', '\':(':'1f613', '\'=(':'1f613', ':-*':'1f618', ':^*':'1f618', '>:P':'1f61c', 'X-P':'1f61c', '>:[':'1f61e', ':-(':'1f61e', ':-[':'1f61e', '>:(':'1f620', ':\'(':'1f622', ';-(':'1f622', '>.<':'1f623', '#-)':'1f635', '%-)':'1f635', 'X-)':'1f635', '\\0/':'1f646', '\\O/':'1f646', '0:3':'1f607', '0:)':'1f607', 'O:)':'1f607', 'O=)':'1f607', 'O:3':'1f607', 'B-)':'1f60e', '8-)':'1f60e', 'B-D':'1f60e', '8-D':'1f60e', '-_-':'1f611', '>:\\':'1f615', '>:/':'1f615', ':-/':'1f615', ':-.':'1f615', ':-P':'1f61b', ':Þ':'1f61b', ':-b':'1f61b', ':-O':'1f62e', 'O_O':'1f62e', '>:O':'1f62e', ':-X':'1f636', ':-#':'1f636', ':-)':'1f642', '(y)':'1f44d', '<3':'2764', ':D':'1f603', '=D':'1f603', ';)':'1f609', '*)':'1f609', ';]':'1f609', ';D':'1f609', ':*':'1f618', '=*':'1f618', ':(':'1f61e', ':[':'1f61e', '=(':'1f61e', ':@':'1f620', ';(':'1f622', 'D:':'1f628', ':$':'1f633', '=$':'1f633', '#)':'1f635', '%)':'1f635', 'X)':'1f635', 'B)':'1f60e', '8)':'1f60e', ':/':'1f615', ':\\':'1f615', '=/':'1f615', '=\\':'1f615', ':L':'1f615', '=L':'1f615', ':P':'1f61b', '=P':'1f61b', ':b':'1f61b', ':O':'1f62e', ':X':'1f636', ':#':'1f636', '=X':'1f636', '=#':'1f636', ':)':'1f642', '=]':'1f642', '=)':'1f642', ':]':'1f642' }; ns.asciiRegexp = '(\\*\\\\0\\/\\*|\\*\\\\O\\/\\*|\\-___\\-|\\:\'\\-\\)|\'\\:\\-\\)|\'\\:\\-D|\\>\\:\\-\\)|>\\:\\-\\)|\'\\:\\-\\(|\\>\\:\\-\\(|>\\:\\-\\(|\\:\'\\-\\(|O\\:\\-\\)|0\\:\\-3|0\\:\\-\\)|0;\\^\\)|O;\\-\\)|0;\\-\\)|O\\:\\-3|\\-__\\-|\\:\\-Þ|\\:\\-Þ|\\<\\/3|<\\/3|\\:\'\\)|\\:\\-D|\'\\:\\)|\'\\=\\)|\'\\:D|\'\\=D|\\>\\:\\)|>\\:\\)|\\>;\\)|>;\\)|\\>\\=\\)|>\\=\\)|;\\-\\)|\\*\\-\\)|;\\-\\]|;\\^\\)|\'\\:\\(|\'\\=\\(|\\:\\-\\*|\\:\\^\\*|\\>\\:P|>\\:P|X\\-P|\\>\\:\\[|>\\:\\[|\\:\\-\\(|\\:\\-\\[|\\>\\:\\(|>\\:\\(|\\:\'\\(|;\\-\\(|\\>\\.\\<|>\\.<|#\\-\\)|%\\-\\)|X\\-\\)|\\\\0\\/|\\\\O\\/|0\\:3|0\\:\\)|O\\:\\)|O\\=\\)|O\\:3|B\\-\\)|8\\-\\)|B\\-D|8\\-D|\\-_\\-|\\>\\:\\\\|>\\:\\\\|\\>\\:\\/|>\\:\\/|\\:\\-\\/|\\:\\-\\.|\\:\\-P|\\:Þ|\\:Þ|\\:\\-b|\\:\\-O|O_O|\\>\\:O|>\\:O|\\:\\-X|\\:\\-#|\\:\\-\\)|\\(y\\)|\\<3|<3|\\:D|\\=D|;\\)|\\*\\)|;\\]|;D|\\:\\*|\\=\\*|\\:\\(|\\:\\[|\\=\\(|\\:@|;\\(|D\\:|\\:\\$|\\=\\$|#\\)|%\\)|X\\)|B\\)|8\\)|\\:\\/|\\:\\\\|\\=\\/|\\=\\\\|\\:L|\\=L|\\:P|\\=P|\\:b|\\:O|\\:X|\\:#|\\=X|\\=#|\\:\\)|\\=\\]|\\=\\)|\\:\\])'; ns.emojiVersion = '3.1'; // you can [optionally] modify this to load alternate emoji versions. see readme for backwards compatibility and version options ns.emojiSize = '32'; ns.greedyMatch = false; // set to true for greedy unicode matching ns.imagePathPNG = 'https://cdn.jsdelivr.net/emojione/assets/' + ns.emojiVersion + '/png/'; ns.defaultPathPNG = ns.imagePathPNG; ns.imageTitleTag = true; // set to false to remove title attribute from img tag ns.sprites = false; // if this is true then sprite markup will be used ns.spriteSize = '32'; ns.unicodeAlt = true; // use the unicode char as the alt attribute (makes copy and pasting the resulting text better) ns.ascii = false; // change to true to convert ascii smileys ns.riskyMatchAscii = false; // set true to match ascii without leading/trailing space char ns.regShortNames = new RegExp("]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|("+ns.shortnames+")", "gi"); ns.regAscii = new RegExp("]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|((\\s|^)"+ns.asciiRegexp+"(?=\\s|$|[!,.?]))", "gi"); ns.regAsciiRisky = new RegExp("]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(()"+ns.asciiRegexp+"())", "gi"); ns.regUnicode = new RegExp("]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(?:\uD83C\uDFF3)\uFE0F?\u200D?(?:\uD83C\uDF08)|(?:\uD83D\uDC41)\uFE0F?\u200D?(?:\uD83D\uDDE8)\uFE0F?|[#-9]\uFE0F?\u20E3|(?:(?:\uD83C\uDFF4)(?:\uDB40[\uDC60-\uDCFF]){1,6})|(?:\uD83C[\uDDE0-\uDDFF]){2}|(?:(?:\uD83D[\uDC68\uDC69]))\uFE0F?(?:\uD83C[\uDFFA-\uDFFF])?\u200D?(?:[\u2695\u2696\u2708]|\uD83C[\uDF3E-\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83D[\uDC68\uDC69]|\uD83E[\uDDD0-\uDDDF])(?:\uD83C[\uDFFA-\uDFFF])?\u200D?[\u2640\u2642\u2695\u2696\u2708]?\uFE0F?|(?:(?:\u2764|\uD83D[\uDC66-\uDC69\uDC8B])[\u200D\uFE0F]{0,2}){1,3}(?:\u2764|\uD83D[\uDC66-\uDC69\uDC8B])|(?:(?:\u2764|\uD83D[\uDC66-\uDC69\uDC8B])\uFE0F?){2,4}|(?:\uD83D[\uDC68\uDC69\uDC6E\uDC71-\uDC87\uDD75\uDE45-\uDE4E]|\uD83E[\uDD26\uDD37]|\uD83C[\uDFC3-\uDFCC]|\uD83E[\uDD38-\uDD3E]|\uD83D[\uDEA3-\uDEB6]|\u26f9|\uD83D\uDC6F)\uFE0F?(?:\uD83C[\uDFFB-\uDFFF])?\u200D?[\u2640\u2642]?\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85-\uDFCC]|\uD83D[\uDC42-\uDCAA\uDD74-\uDD96\uDE45-\uDE4F\uDEA3-\uDECC]|\uD83E[\uDD18-\uDD3E])\uFE0F?(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u2194-\u2199\u21a9-\u21aa]\uFE0F?|[\u0023\u002a]|[\u3030\u303d]\uFE0F?|(?:\ud83c[\udd70-\udd71]|\ud83c\udd8e|\ud83c[\udd91-\udd9a])\uFE0F?|\u24c2\uFE0F?|[\u3297\u3299]\uFE0F?|(?:\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51])\uFE0F?|[\u203c\u2049]\uFE0F?|[\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe]\uFE0F?|[\u00a9\u00ae]\uFE0F?|[\u2122\u2139]\uFE0F?|\ud83c\udc04\uFE0F?|[\u2b05-\u2b07\u2b1b-\u2b1c\u2b50\u2b55]\uFE0F?|[\u231a-\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa]\uFE0F?|\ud83c\udccf|[\u2934\u2935]\uFE0F?)|[\u2700-\u27bf]\uFE0F?|[\ud800-\udbff][\udc00-\udfff]\uFE0F?|[\u2600-\u26FF]\uFE0F?|[\u0030-\u0039]\uFE0F", "g"); ns.toImage = function(str) { str = ns.unicodeToImage(str); str = ns.shortnameToImage(str); return str; }; // Uses toShort to transform all unicode into a standard shortname // then transforms the shortname into unicode // This is done for standardization when converting several unicode types ns.unifyUnicode = function(str) { str = ns.toShort(str); str = ns.shortnameToUnicode(str); return str; }; // Replace shortnames (:wink:) with Ascii equivalents ( ;^) ) // Useful for systems that dont support unicode nor images ns.shortnameToAscii = function(str) { var unicode, // something to keep in mind here is that array flip will destroy // half of the ascii text "emojis" because the unicode numbers are duplicated // this is ok for what it's being used for unicodeToAscii = ns.objectFlip(ns.asciiList); str = str.replace(ns.regShortNames, function(shortname) { if( (typeof shortname === 'undefined') || (shortname === '') || (!(shortname in ns.emojioneList)) ) { // if the shortname doesnt exist just return the entire match return shortname; } else { unicode = ns.emojioneList[shortname].uc_output; if(typeof unicodeToAscii[unicode] !== 'undefined') { return unicodeToAscii[unicode]; } else { return shortname; } } }); return str; }; // will output unicode from shortname // useful for sending emojis back to mobile devices ns.shortnameToUnicode = function(str) { // replace regular shortnames first var unicode,fname; str = str.replace(ns.regShortNames, function(shortname) { if( (typeof shortname === 'undefined') || (shortname === '') || (!(shortname in ns.emojioneList)) ) { // if the shortname doesnt exist just return the entire matchhju return shortname; } unicode = ns.emojioneList[shortname].uc_output.toUpperCase(); fname = ns.emojioneList[shortname].uc_base; return ns.convert(unicode); }); // if ascii smileys are turned on, then we'll replace them! if (ns.ascii) { var asciiRX = ns.riskyMatchAscii ? ns.regAsciiRisky : ns.regAscii; str = str.replace(asciiRX, function(entire, m1, m2, m3) { if( (typeof m3 === 'undefined') || (m3 === '') || (!(ns.unescapeHTML(m3) in ns.asciiList)) ) { // if the ascii doesnt exist just return the entire match return entire; } m3 = ns.unescapeHTML(m3); unicode = ns.asciiList[m3].toUpperCase(); return m2+ns.convert(unicode); }); } return str; }; ns.shortnameToImage = function(str) { // replace regular shortnames first var replaceWith,shortname,unicode,fname,alt,category,title,size,ePath; var mappedUnicode = ns.mapUnicodeToShort(); str = str.replace(ns.regShortNames, function(shortname) { if( (typeof shortname === 'undefined') || (shortname === '') || (ns.shortnames.indexOf(shortname) === -1) ) { // if the shortname doesnt exist just return the entire match return shortname; } else { // map shortname to parent if (!ns.emojioneList[shortname]) { for ( var emoji in ns.emojioneList ) { if (!ns.emojioneList.hasOwnProperty(emoji) || (emoji === '')) continue; if (ns.emojioneList[emoji].shortnames.indexOf(shortname) === -1) continue; shortname = emoji; break; } } unicode = ns.emojioneList[shortname].uc_output; fname = ns.emojioneList[shortname].uc_base; category = (fname.includes("-1f3f")) ? 'diversity' : ns.emojioneList[shortname].category; title = ns.imageTitleTag ? 'title="' + shortname + '"' : ''; size = (ns.spriteSize == '32' || ns.spriteSize == '64') ? ns.spriteSize : '32'; //if the image path has not changed, we'll assume the default cdn path, otherwise we'll assume the provided path ePath = (ns.imagePathPNG != ns.defaultPathPNG) ? ns.imagePathPNG : ns.defaultPathPNG + ns.emojiSize + '/'; // depending on the settings, we'll either add the native unicode as the alt tag, otherwise the shortname alt = (ns.unicodeAlt) ? ns.convert(unicode.toUpperCase()) : shortname; if(ns.sprites) { replaceWith = '' + alt + ''; } else { replaceWith = '' + alt + ''; } return replaceWith; } }); // if ascii smileys are turned on, then we'll replace them! if (ns.ascii) { var asciiRX = ns.riskyMatchAscii ? ns.regAsciiRisky : ns.regAscii; str = str.replace(asciiRX, function(entire, m1, m2, m3) { if( (typeof m3 === 'undefined') || (m3 === '') || (!(ns.unescapeHTML(m3) in ns.asciiList)) ) { // if the ascii doesnt exist just return the entire match return entire; } m3 = ns.unescapeHTML(m3); unicode = ns.asciiList[m3]; shortname = mappedUnicode[unicode]; category = (unicode.includes("-1f3f")) ? 'diversity' : ns.emojioneList[shortname].category; title = ns.imageTitleTag ? 'title="' + ns.escapeHTML(m3) + '"' : ''; size = (ns.spriteSize == '32' || ns.spriteSize == '64') ? ns.spriteSize : '32'; //if the image path has not changed, we'll assume the default cdn path, otherwise we'll assume the provided path ePath = (ns.imagePathPNG != ns.defaultPathPNG) ? ns.imagePathPNG : ns.defaultPathPNG + ns.emojiSize + '/'; // depending on the settings, we'll either add the native unicode as the alt tag, otherwise the shortname alt = (ns.unicodeAlt) ? ns.convert(unicode.toUpperCase()) : ns.escapeHTML(m3); if(ns.sprites) { replaceWith = m2+'' + alt + ''; } else { replaceWith = m2+''+alt+''; } return replaceWith; }); } return str; }; ns.unicodeToImage = function(str) { var replaceWith,unicode,short,fname,alt,category,title,size,ePath; var mappedUnicode = ns.mapUnicodeToShort(); var eList = ns.emojioneList; str = str.replace(ns.regUnicode, function(unicodeChar) { if( (typeof unicodeChar === 'undefined') || (unicodeChar === '') ) { return unicodeChar; } else if ( unicodeChar in ns.jsEscapeMap ) { fname = ns.jsEscapeMap[unicodeChar]; } else if ( ns.greedyMatch && unicodeChar in ns.jsEscapeMapGreedy ) { fname = ns.jsEscapeMapGreedy[unicodeChar]; } else { return unicodeChar; } // then map to shortname and locate the filename short = mappedUnicode[fname]; // then pull the unicode output from emojioneList fname = eList[short].uc_base; unicode = eList[short].uc_output; category = (fname.includes("-1f3f")) ? 'diversity' : eList[short].category; size = (ns.spriteSize == '32' || ns.spriteSize == '64') ? ns.spriteSize : '32'; //if the image path has not changed, we'll assume the default cdn path, otherwise we'll assume the provided path ePath = (ns.imagePathPNG != ns.defaultPathPNG) ? ns.imagePathPNG : ns.defaultPathPNG + ns.emojiSize + '/'; // depending on the settings, we'll either add the native unicode as the alt tag, otherwise the shortname alt = (ns.unicodeAlt) ? ns.convert(unicode.toUpperCase()) : short; title = ns.imageTitleTag ? 'title="' + short + '"' : ''; if(ns.sprites) { replaceWith = '' + alt + ''; } else { replaceWith = '' + alt + ''; } return replaceWith; }); // if ascii smileys are turned on, then we'll replace them! if (ns.ascii) { var asciiRX = ns.riskyMatchAscii ? ns.regAsciiRisky : ns.regAscii; str = str.replace(asciiRX, function(entire, m1, m2, m3) { if( (typeof m3 === 'undefined') || (m3 === '') || (!(ns.unescapeHTML(m3) in ns.asciiList)) ) { // if the ascii doesnt exist just return the entire match return entire; } m3 = ns.unescapeHTML(m3); unicode = ns.asciiList[m3]; shortname = mappedUnicode[unicode]; category = (unicode.includes("-1f3f")) ? 'diversity' : ns.emojioneList[shortname].category; title = ns.imageTitleTag ? 'title="' + ns.escapeHTML(m3) + '"' : ''; size = (ns.spriteSize == '32' || ns.spriteSize == '64') ? ns.spriteSize : '32'; //if the image path has not changed, we'll assume the default cdn path, otherwise we'll assume the provided path ePath = (ns.imagePathPNG != ns.defaultPathPNG) ? ns.imagePathPNG : ns.defaultPathPNG + ns.emojiSize + '/'; // depending on the settings, we'll either add the native unicode as the alt tag, otherwise the shortname alt = (ns.unicodeAlt) ? ns.convert(unicode.toUpperCase()) : ns.escapeHTML(m3); if(ns.sprites) { replaceWith = m2+'' + alt + ''; } else { replaceWith = m2+''+alt+''; } return replaceWith; }); } return str; }; // this is really just unicodeToShortname() but I opted for the shorthand name to match toImage() ns.toShort = function(str) { var find = ns.unicodeCharRegex(); return ns.replaceAll(str, find); }; // for converting unicode code points and code pairs to their respective characters ns.convert = function(unicode) { if(unicode.indexOf("-") > -1) { var parts = []; var s = unicode.split('-'); for(var i = 0; i < s.length; i++) { var part = parseInt(s[i], 16); if (part >= 0x10000 && part <= 0x10FFFF) { var hi = Math.floor((part - 0x10000) / 0x400) + 0xD800; var lo = ((part - 0x10000) % 0x400) + 0xDC00; part = (String.fromCharCode(hi) + String.fromCharCode(lo)); } else { part = String.fromCharCode(part); } parts.push(part); } return parts.join(''); } else { var s = parseInt(unicode, 16); if (s >= 0x10000 && s <= 0x10FFFF) { var hi = Math.floor((s - 0x10000) / 0x400) + 0xD800; var lo = ((s - 0x10000) % 0x400) + 0xDC00; return (String.fromCharCode(hi) + String.fromCharCode(lo)); } else { return String.fromCharCode(s); } } }; ns.escapeHTML = function (string) { var escaped = { '&' : '&', '<' : '<', '>' : '>', '"' : '"', '\'': ''' }; return string.replace(/[&<>"']/g, function (match) { return escaped[match]; }); }; ns.unescapeHTML = function (string) { var unescaped = { '&' : '&', '&' : '&', '&' : '&', '<' : '<', '<' : '<', '<' : '<', '>' : '>', '>' : '>', '>' : '>', '"' : '"', '"' : '"', '"' : '"', ''' : '\'', ''' : '\'', ''' : '\'' }; return string.replace(/&(?:amp|#38|#x26|lt|#60|#x3C|gt|#62|#x3E|apos|#39|#x27|quot|#34|#x22);/ig, function (match) { return unescaped[match]; }); }; ns.shortnameConversionMap = function() { var map = [], emoji; for (emoji in ns.emojioneList) { if (!ns.emojioneList.hasOwnProperty(emoji) || (emoji === '')) continue; map[ns.convert(ns.emojioneList[emoji].uc_output)] = emoji; } return map; }; ns.unicodeCharRegex = function() { var map = []; for (emoji in ns.emojioneList) { if (!ns.emojioneList.hasOwnProperty(emoji) || (emoji === '')) continue; map.push(ns.convert(ns.emojioneList[emoji].uc_output)); } return map.join('|'); }; ns.mapEmojioneList = function (addToMapStorage) { for (var shortname in ns.emojioneList) { if (!ns.emojioneList.hasOwnProperty(shortname)) { continue; } var unicode = ns.emojioneList[shortname].uc_base; addToMapStorage(unicode, shortname); } }; ns.mapUnicodeToShort = function() { if (!ns.memMapShortToUnicode) { ns.memMapShortToUnicode = {}; ns.mapEmojioneList(function (unicode, shortname) { ns.memMapShortToUnicode[unicode] = shortname; }); } return ns.memMapShortToUnicode; }; ns.memorizeReplacement = function() { if (!ns.unicodeReplacementRegEx || !ns.memMapShortToUnicodeCharacters) { var unicodeList = []; ns.memMapShortToUnicodeCharacters = {}; ns.mapEmojioneList(function (unicode, shortname) { var emojiCharacter = ns.convert(unicode); ns.memMapShortToUnicodeCharacters[emojiCharacter] = shortname; unicodeList.push(emojiCharacter); }); ns.unicodeReplacementRegEx = unicodeList.join('|'); } }; ns.mapUnicodeCharactersToShort = function() { ns.memorizeReplacement(); return ns.memMapShortToUnicodeCharacters; }; //reverse an object ns.objectFlip = function (obj) { var key, tmp_obj = {}; for (key in obj) { if (obj.hasOwnProperty(key)) { tmp_obj[obj[key]] = key; } } return tmp_obj; }; ns.escapeRegExp = function(string) { return string.replace(/[-[\]{}()*+?.,;:&\\^$#\s]/g, "\\$&"); }; ns.replaceAll = function(string, find) { var escapedFind = ns.escapeRegExp(find); //sorted largest output to smallest output var search = new RegExp("]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|("+escapedFind+")", "gi"); // callback prevents replacing anything inside of these common html tags as well as between an tag var replace = function(entire, m1) { return ((typeof m1 === 'undefined') || (m1 === '')) ? entire : ns.shortnameConversionMap()[m1]; }; return string.replace(search,replace); }; }(this.emojione = this.emojione || {})); if(typeof module === "object") module.exports = this.emojione; define("emojione", (function (global) { return function () { var ret, fn; return ret || global.emojione; }; }(this))); (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o */ var FilterCSS = require('cssfilter').FilterCSS; var getDefaultCSSWhiteList = require('cssfilter').getDefaultWhiteList; var _ = require('./util'); // 默认白名单 function getDefaultWhiteList () { return { a: ['target', 'href', 'title'], abbr: ['title'], address: [], area: ['shape', 'coords', 'href', 'alt'], article: [], aside: [], audio: ['autoplay', 'controls', 'loop', 'preload', 'src'], b: [], bdi: ['dir'], bdo: ['dir'], big: [], blockquote: ['cite'], br: [], caption: [], center: [], cite: [], code: [], col: ['align', 'valign', 'span', 'width'], colgroup: ['align', 'valign', 'span', 'width'], dd: [], del: ['datetime'], details: ['open'], div: [], dl: [], dt: [], em: [], font: ['color', 'size', 'face'], footer: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], header: [], hr: [], i: [], img: ['src', 'alt', 'title', 'width', 'height'], ins: ['datetime'], li: [], mark: [], nav: [], ol: [], p: [], pre: [], s: [], section:[], small: [], span: [], sub: [], sup: [], strong: [], table: ['width', 'border', 'align', 'valign'], tbody: ['align', 'valign'], td: ['width', 'rowspan', 'colspan', 'align', 'valign'], tfoot: ['align', 'valign'], th: ['width', 'rowspan', 'colspan', 'align', 'valign'], thead: ['align', 'valign'], tr: ['rowspan', 'align', 'valign'], tt: [], u: [], ul: [], video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width'] }; } // 默认CSS Filter var defaultCSSFilter = new FilterCSS(); /** * 匹配到标签时的处理方法 * * @param {String} tag * @param {String} html * @param {Object} options * @return {String} */ function onTag (tag, html, options) { // do nothing } /** * 匹配到不在白名单上的标签时的处理方法 * * @param {String} tag * @param {String} html * @param {Object} options * @return {String} */ function onIgnoreTag (tag, html, options) { // do nothing } /** * 匹配到标签属性时的处理方法 * * @param {String} tag * @param {String} name * @param {String} value * @return {String} */ function onTagAttr (tag, name, value) { // do nothing } /** * 匹配到不在白名单上的标签属性时的处理方法 * * @param {String} tag * @param {String} name * @param {String} value * @return {String} */ function onIgnoreTagAttr (tag, name, value) { // do nothing } /** * HTML转义 * * @param {String} html */ function escapeHtml (html) { return html.replace(REGEXP_LT, '<').replace(REGEXP_GT, '>'); } /** * 安全的标签属性值 * * @param {String} tag * @param {String} name * @param {String} value * @param {Object} cssFilter * @return {String} */ function safeAttrValue (tag, name, value, cssFilter) { // 转换为友好的属性值,再做判断 value = friendlyAttrValue(value); if (name === 'href' || name === 'src') { // 过滤 href 和 src 属性 // 仅允许 http:// | https:// | mailto: | / | # 开头的地址 value = _.trim(value); if (value === '#') return '#'; if (!(value.substr(0, 7) === 'http://' || value.substr(0, 8) === 'https://' || value.substr(0, 7) === 'mailto:' || value[0] === '#' || value[0] === '/')) { return ''; } } else if (name === 'background') { // 过滤 background 属性 (这个xss漏洞较老了,可能已经不适用) // javascript: REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) { return ''; } } else if (name === 'style') { // /*注释*/ /*REGEXP_DEFAULT_ON_TAG_ATTR_3.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_3.test(value)) { return ''; }*/ // expression() REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) { return ''; } // url() REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) { REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) { return ''; } } if (cssFilter !== false) { cssFilter = cssFilter || defaultCSSFilter; value = cssFilter.process(value); } } // 输出时需要转义<>" value = escapeAttrValue(value); return value; } // 正则表达式 var REGEXP_LT = //g; var REGEXP_QUOTE = /"/g; var REGEXP_QUOTE_2 = /"/g; var REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/img; var REGEXP_ATTR_VALUE_COLON = /:?/img; var REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/img; var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\/\*|\*\//mg; var REGEXP_DEFAULT_ON_TAG_ATTR_4 = /((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a)\:/ig; var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\s"'`]*(d\s*a\s*t\s*a\s*)\:/ig; var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\s"'`]*(d\s*a\s*t\s*a\s*)\:\s*image\//ig; var REGEXP_DEFAULT_ON_TAG_ATTR_7 = /e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/ig; var REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\s*r\s*l\s*\(.*/ig; /** * 对双引号进行转义 * * @param {String} str * @return {String} str */ function escapeQuote (str) { return str.replace(REGEXP_QUOTE, '"'); } /** * 对双引号进行转义 * * @param {String} str * @return {String} str */ function unescapeQuote (str) { return str.replace(REGEXP_QUOTE_2, '"'); } /** * 对html实体编码进行转义 * * @param {String} str * @return {String} */ function escapeHtmlEntities (str) { return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode (str, code) { return (code[0] === 'x' || code[0] === 'X') ? String.fromCharCode(parseInt(code.substr(1), 16)) : String.fromCharCode(parseInt(code, 10)); }); } /** * 对html5新增的危险实体编码进行转义 * * @param {String} str * @return {String} */ function escapeDangerHtml5Entities (str) { return str.replace(REGEXP_ATTR_VALUE_COLON, ':') .replace(REGEXP_ATTR_VALUE_NEWLINE, ' '); } /** * 清除不可见字符 * * @param {String} str * @return {String} */ function clearNonPrintableCharacter (str) { var str2 = ''; for (var i = 0, len = str.length; i < len; i++) { str2 += str.charCodeAt(i) < 32 ? ' ' : str.charAt(i); } return _.trim(str2); } /** * 将标签的属性值转换成一般字符,便于分析 * * @param {String} str * @return {String} */ function friendlyAttrValue (str) { str = unescapeQuote(str); // 双引号 str = escapeHtmlEntities(str); // 转换HTML实体编码 str = escapeDangerHtml5Entities(str); // 转换危险的HTML5新增实体编码 str = clearNonPrintableCharacter(str); // 清除不可见字符 return str; } /** * 转义用于输出的标签属性值 * * @param {String} str * @return {String} */ function escapeAttrValue (str) { str = escapeQuote(str); str = escapeHtml(str); return str; } /** * 去掉不在白名单中的标签onIgnoreTag处理方法 */ function onIgnoreTagStripAll () { return ''; } /** * 删除标签体 * * @param {array} tags 要删除的标签列表 * @param {function} next 对不在列表中的标签的处理函数,可选 */ function StripTagBody (tags, next) { if (typeof(next) !== 'function') { next = function () {}; } var isRemoveAllTag = !Array.isArray(tags); function isRemoveTag (tag) { if (isRemoveAllTag) return true; return (_.indexOf(tags, tag) !== -1); } var removeList = []; // 要删除的位置范围列表 var posStart = false; // 当前标签开始位置 return { onIgnoreTag: function (tag, html, options) { if (isRemoveTag(tag)) { if (options.isClosing) { var ret = '[/removed]'; var end = options.position + ret.length; removeList.push([posStart !== false ? posStart : options.position, end]); posStart = false; return ret; } else { if (!posStart) { posStart = options.position; } return '[removed]'; } } else { return next(tag, html, options); } }, remove: function (html) { var rethtml = ''; var lastPos = 0; _.forEach(removeList, function (pos) { rethtml += html.slice(lastPos, pos[0]); lastPos = pos[1]; }); rethtml += html.slice(lastPos); return rethtml; } }; } /** * 去除备注标签 * * @param {String} html * @return {String} */ function stripCommentTag (html) { return html.replace(STRIP_COMMENT_TAG_REGEXP, ''); } var STRIP_COMMENT_TAG_REGEXP = //g; /** * 去除不可见字符 * * @param {String} html * @return {String} */ function stripBlankChar (html) { var chars = html.split(''); chars = chars.filter(function (char) { var c = char.charCodeAt(0); if (c === 127) return false; if (c <= 31) { if (c === 10 || c === 13) return true; return false; } return true; }); return chars.join(''); } exports.whiteList = getDefaultWhiteList(); exports.getDefaultWhiteList = getDefaultWhiteList; exports.onTag = onTag; exports.onIgnoreTag = onIgnoreTag; exports.onTagAttr = onTagAttr; exports.onIgnoreTagAttr = onIgnoreTagAttr; exports.safeAttrValue = safeAttrValue; exports.escapeHtml = escapeHtml; exports.escapeQuote = escapeQuote; exports.unescapeQuote = unescapeQuote; exports.escapeHtmlEntities = escapeHtmlEntities; exports.escapeDangerHtml5Entities = escapeDangerHtml5Entities; exports.clearNonPrintableCharacter = clearNonPrintableCharacter; exports.friendlyAttrValue = friendlyAttrValue; exports.escapeAttrValue = escapeAttrValue; exports.onIgnoreTagStripAll = onIgnoreTagStripAll; exports.StripTagBody = StripTagBody; exports.stripCommentTag = stripCommentTag; exports.stripBlankChar = stripBlankChar; exports.cssFilter = defaultCSSFilter; exports.getDefaultCSSWhiteList = getDefaultCSSWhiteList; },{"./util":4,"cssfilter":8}],2:[function(require,module,exports){ /** * 模块入口 * * @author 老雷 */ var DEFAULT = require('./default'); var parser = require('./parser'); var FilterXSS = require('./xss'); /** * XSS过滤 * * @param {String} html 要过滤的HTML代码 * @param {Object} options 选项:whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml * @return {String} */ function filterXSS (html, options) { var xss = new FilterXSS(options); return xss.process(html); } // 输出 exports = module.exports = filterXSS; exports.FilterXSS = FilterXSS; for (var i in DEFAULT) exports[i] = DEFAULT[i]; for (var i in parser) exports[i] = parser[i]; // 在浏览器端使用 if (typeof window !== 'undefined') { window.filterXSS = module.exports; } },{"./default":1,"./parser":3,"./xss":5}],3:[function(require,module,exports){ /** * 简单 HTML Parser * * @author 老雷 */ var _ = require('./util'); /** * 获取标签的名称 * * @param {String} html 如:'' * @return {String} */ function getTagName (html) { var i = html.indexOf(' '); if (i === -1) { var tagName = html.slice(1, -1); } else { var tagName = html.slice(1, i + 1); } tagName = _.trim(tagName).toLowerCase(); if (tagName.slice(0, 1) === '/') tagName = tagName.slice(1); if (tagName.slice(-1) === '/') tagName = tagName.slice(0, -1); return tagName; } /** * 是否为闭合标签 * * @param {String} html 如:'' * @return {Boolean} */ function isClosing (html) { return (html.slice(0, 2) === '') { rethtml += escapeHtml(html.slice(lastPos, tagStart)); currentHtml = html.slice(tagStart, currentPos + 1); currentTagName = getTagName(currentHtml); rethtml += onTag(tagStart, rethtml.length, currentTagName, currentHtml, isClosing(currentHtml)); lastPos = currentPos + 1; tagStart = false; continue; } // HTML标签内的引号仅当前一个字符是等于号时才有效 if ((c === '"' || c === "'") && html.charAt(currentPos - 1) === '=') { quoteStart = c; continue; } } else { if (c === quoteStart) { quoteStart = false; continue; } } } } if (lastPos < html.length) { rethtml += escapeHtml(html.substr(lastPos)); } return rethtml; } // 不符合属性名称规则的正则表达式 var REGEXP_ATTR_NAME = /[^a-zA-Z0-9_:\.\-]/img; /** * 分析标签HTML代码,调用相应的函数处理,返回HTML * * @param {String} html 如标签'' 则为 'href="#" target="_blank"' * @param {Function} onAttr 处理属性值的函数 * 函数格式: function (name, value) * @return {String} */ function parseAttr (html, onAttr) { 'user strict'; var lastPos = 0; // 当前位置 var retAttrs = []; // 待返回的属性列表 var tmpName = false; // 临时属性名称 var len = html.length; // HTML代码长度 function addAttr (name, value) { name = _.trim(name); name = name.replace(REGEXP_ATTR_NAME, '').toLowerCase(); if (name.length < 1) return; var ret = onAttr(name, value || ''); if (ret) retAttrs.push(ret); }; // 逐个分析字符 for (var i = 0; i < len; i++) { var c = html.charAt(i); var v, j; if (tmpName === false && c === '=') { tmpName = html.slice(lastPos, i); lastPos = i + 1; continue; } if (tmpName !== false) { // HTML标签内的引号仅当前一个字符是等于号时才有效 if (i === lastPos && (c === '"' || c === "'") && html.charAt(i - 1) === '=') { j = html.indexOf(c, i + 1); if (j === -1) { break; } else { v = _.trim(html.slice(lastPos + 1, j)); addAttr(tmpName, v); tmpName = false; i = j; lastPos = i + 1; continue; } } } if (c === ' ') { if (tmpName === false) { j = findNextEqual(html, i); if (j === -1) { v = _.trim(html.slice(lastPos, i)); addAttr(v); tmpName = false; lastPos = i + 1; continue; } else { i = j - 1; continue; } } else { j = findBeforeEqual(html, i - 1); if (j === -1) { v = _.trim(html.slice(lastPos, i)); v = stripQuoteWrap(v); addAttr(tmpName, v); tmpName = false; lastPos = i + 1; continue; } else { continue; } } } } if (lastPos < html.length) { if (tmpName === false) { addAttr(html.slice(lastPos)); } else { addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos)))); } } return _.trim(retAttrs.join(' ')); } function findNextEqual (str, i) { for (; i < str.length; i++) { var c = str[i]; if (c === ' ') continue; if (c === '=') return i; return -1; } } function findBeforeEqual (str, i) { for (; i > 0; i--) { var c = str[i]; if (c === ' ') continue; if (c === '=') return i; return -1; } } function isQuoteWrapString (text) { if ((text[0] === '"' && text[text.length - 1] === '"') || (text[0] === '\'' && text[text.length - 1] === '\'')) { return true; } else { return false; } }; function stripQuoteWrap (text) { if (isQuoteWrapString(text)) { return text.substr(1, text.length - 2); } else { return text; } }; exports.parseTag = parseTag; exports.parseAttr = parseAttr; },{"./util":4}],4:[function(require,module,exports){ module.exports = { indexOf: function (arr, item) { var i, j; if (Array.prototype.indexOf) { return arr.indexOf(item); } for (i = 0, j = arr.length; i < j; i++) { if (arr[i] === item) { return i; } } return -1; }, forEach: function (arr, fn, scope) { var i, j; if (Array.prototype.forEach) { return arr.forEach(fn, scope); } for (i = 0, j = arr.length; i < j; i++) { fn.call(scope, arr[i], i, arr); } }, trim: function (str) { if (String.prototype.trim) { return str.trim(); } return str.replace(/(^\s*)|(\s*$)/g, ''); } }; },{}],5:[function(require,module,exports){ /** * 过滤XSS * * @author 老雷 */ var FilterCSS = require('cssfilter').FilterCSS; var DEFAULT = require('./default'); var parser = require('./parser'); var parseTag = parser.parseTag; var parseAttr = parser.parseAttr; var _ = require('./util'); /** * 返回值是否为空 * * @param {Object} obj * @return {Boolean} */ function isNull (obj) { return (obj === undefined || obj === null); } /** * 取标签内的属性列表字符串 * * @param {String} html * @return {Object} * - {String} html * - {Boolean} closing */ function getAttrs (html) { var i = html.indexOf(' '); if (i === -1) { return { html: '', closing: (html[html.length - 2] === '/') }; } html = _.trim(html.slice(i + 1, -1)); var isClosing = (html[html.length - 1] === '/'); if (isClosing) html = _.trim(html.slice(0, -1)); return { html: html, closing: isClosing }; } /** * 浅拷贝对象 * * @param {Object} obj * @return {Object} */ function shallowCopyObject (obj) { var ret = {}; for (var i in obj) { ret[i] = obj[i]; } return ret; } /** * XSS过滤对象 * * @param {Object} options * 选项:whiteList, onTag, onTagAttr, onIgnoreTag, * onIgnoreTagAttr, safeAttrValue, escapeHtml * stripIgnoreTagBody, allowCommentTag, stripBlankChar * css{whiteList, onAttr, onIgnoreAttr} css=false表示禁用cssfilter */ function FilterXSS (options) { options = shallowCopyObject(options || {}); if (options.stripIgnoreTag) { if (options.onIgnoreTag) { console.error('Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time'); } options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll; } options.whiteList = options.whiteList || DEFAULT.whiteList; options.onTag = options.onTag || DEFAULT.onTag; options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr; options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag; options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr; options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue; options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml; this.options = options; if (options.css === false) { this.cssFilter = false; } else { options.css = options.css || {}; this.cssFilter = new FilterCSS(options.css); } } /** * 开始处理 * * @param {String} html * @return {String} */ FilterXSS.prototype.process = function (html) { // 兼容各种奇葩输入 html = html || ''; html = html.toString(); if (!html) return ''; var me = this; var options = me.options; var whiteList = options.whiteList; var onTag = options.onTag; var onIgnoreTag = options.onIgnoreTag; var onTagAttr = options.onTagAttr; var onIgnoreTagAttr = options.onIgnoreTagAttr; var safeAttrValue = options.safeAttrValue; var escapeHtml = options.escapeHtml; var cssFilter = me.cssFilter; // 是否清除不可见字符 if (options.stripBlankChar) { html = DEFAULT.stripBlankChar(html); } // 是否禁止备注标签 if (!options.allowCommentTag) { html = DEFAULT.stripCommentTag(html); } // 如果开启了stripIgnoreTagBody var stripIgnoreTagBody = false; if (options.stripIgnoreTagBody) { var stripIgnoreTagBody = DEFAULT.StripTagBody(options.stripIgnoreTagBody, onIgnoreTag); onIgnoreTag = stripIgnoreTagBody.onIgnoreTag; } var retHtml = parseTag(html, function (sourcePosition, position, tag, html, isClosing) { var info = { sourcePosition: sourcePosition, position: position, isClosing: isClosing, isWhite: (tag in whiteList) }; // 调用onTag处理 var ret = onTag(tag, html, info); if (!isNull(ret)) return ret; // 默认标签处理方法 if (info.isWhite) { // 白名单标签,解析标签属性 // 如果是闭合标签,则不需要解析属性 if (info.isClosing) { return ''; } var attrs = getAttrs(html); var whiteAttrList = whiteList[tag]; var attrsHtml = parseAttr(attrs.html, function (name, value) { // 调用onTagAttr处理 var isWhiteAttr = (_.indexOf(whiteAttrList, name) !== -1); var ret = onTagAttr(tag, name, value, isWhiteAttr); if (!isNull(ret)) return ret; // 默认的属性处理方法 if (isWhiteAttr) { // 白名单属性,调用safeAttrValue过滤属性值 value = safeAttrValue(tag, name, value, cssFilter); if (value) { return name + '="' + value + '"'; } else { return name; } } else { // 非白名单属性,调用onIgnoreTagAttr处理 var ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr); if (!isNull(ret)) return ret; return; } }); // 构造新的标签代码 var html = '<' + tag; if (attrsHtml) html += ' ' + attrsHtml; if (attrs.closing) html += ' /'; html += '>'; return html; } else { // 非白名单标签,调用onIgnoreTag处理 var ret = onIgnoreTag(tag, html, info); if (!isNull(ret)) return ret; return escapeHtml(html); } }, escapeHtml); // 如果开启了stripIgnoreTagBody,需要对结果再进行处理 if (stripIgnoreTagBody) { retHtml = stripIgnoreTagBody.remove(retHtml); } return retHtml; }; module.exports = FilterXSS; },{"./default":1,"./parser":3,"./util":4,"cssfilter":8}],6:[function(require,module,exports){ /** * cssfilter * * @author 老雷 */ var DEFAULT = require('./default'); var parseStyle = require('./parser'); var _ = require('./util'); /** * 返回值是否为空 * * @param {Object} obj * @return {Boolean} */ function isNull (obj) { return (obj === undefined || obj === null); } /** * 浅拷贝对象 * * @param {Object} obj * @return {Object} */ function shallowCopyObject (obj) { var ret = {}; for (var i in obj) { ret[i] = obj[i]; } return ret; } /** * 创建CSS过滤器 * * @param {Object} options * - {Object} whiteList * - {Object} onAttr * - {Object} onIgnoreAttr */ function FilterCSS (options) { options = shallowCopyObject(options || {}); options.whiteList = options.whiteList || DEFAULT.whiteList; options.onAttr = options.onAttr || DEFAULT.onAttr; options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr; this.options = options; } FilterCSS.prototype.process = function (css) { // 兼容各种奇葩输入 css = css || ''; css = css.toString(); if (!css) return ''; var me = this; var options = me.options; var whiteList = options.whiteList; var onAttr = options.onAttr; var onIgnoreAttr = options.onIgnoreAttr; var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) { var check = whiteList[name]; var isWhite = false; if (check === true) isWhite = check; else if (typeof check === 'function') isWhite = check(value); else if (check instanceof RegExp) isWhite = check.test(value); if (isWhite !== true) isWhite = false; var opts = { position: position, sourcePosition: sourcePosition, source: source, isWhite: isWhite }; if (isWhite) { var ret = onAttr(name, value, opts); if (isNull(ret)) { return name + ':' + value; } else { return ret; } } else { var ret = onIgnoreAttr(name, value, opts); if (!isNull(ret)) { return ret; } } }); return retCSS; }; module.exports = FilterCSS; },{"./default":7,"./parser":9,"./util":10}],7:[function(require,module,exports){ /** * cssfilter * * @author 老雷 */ function getDefaultWhiteList () { // 白名单值说明: // true: 允许该属性 // Function: function (val) { } 返回true表示允许该属性,其他值均表示不允许 // RegExp: regexp.test(val) 返回true表示允许该属性,其他值均表示不允许 // 除上面列出的值外均表示不允许 var whiteList = {}; whiteList['align-content'] = false; // default: auto whiteList['align-items'] = false; // default: auto whiteList['align-self'] = false; // default: auto whiteList['alignment-adjust'] = false; // default: auto whiteList['alignment-baseline'] = false; // default: baseline whiteList['all'] = false; // default: depending on individual properties whiteList['anchor-point'] = false; // default: none whiteList['animation'] = false; // default: depending on individual properties whiteList['animation-delay'] = false; // default: 0 whiteList['animation-direction'] = false; // default: normal whiteList['animation-duration'] = false; // default: 0 whiteList['animation-fill-mode'] = false; // default: none whiteList['animation-iteration-count'] = false; // default: 1 whiteList['animation-name'] = false; // default: none whiteList['animation-play-state'] = false; // default: running whiteList['animation-timing-function'] = false; // default: ease whiteList['azimuth'] = false; // default: center whiteList['backface-visibility'] = false; // default: visible whiteList['background'] = true; // default: depending on individual properties whiteList['background-attachment'] = true; // default: scroll whiteList['background-clip'] = true; // default: border-box whiteList['background-color'] = true; // default: transparent whiteList['background-image'] = true; // default: none whiteList['background-origin'] = true; // default: padding-box whiteList['background-position'] = true; // default: 0% 0% whiteList['background-repeat'] = true; // default: repeat whiteList['background-size'] = true; // default: auto whiteList['baseline-shift'] = false; // default: baseline whiteList['binding'] = false; // default: none whiteList['bleed'] = false; // default: 6pt whiteList['bookmark-label'] = false; // default: content() whiteList['bookmark-level'] = false; // default: none whiteList['bookmark-state'] = false; // default: open whiteList['border'] = true; // default: depending on individual properties whiteList['border-bottom'] = true; // default: depending on individual properties whiteList['border-bottom-color'] = true; // default: current color whiteList['border-bottom-left-radius'] = true; // default: 0 whiteList['border-bottom-right-radius'] = true; // default: 0 whiteList['border-bottom-style'] = true; // default: none whiteList['border-bottom-width'] = true; // default: medium whiteList['border-collapse'] = true; // default: separate whiteList['border-color'] = true; // default: depending on individual properties whiteList['border-image'] = true; // default: none whiteList['border-image-outset'] = true; // default: 0 whiteList['border-image-repeat'] = true; // default: stretch whiteList['border-image-slice'] = true; // default: 100% whiteList['border-image-source'] = true; // default: none whiteList['border-image-width'] = true; // default: 1 whiteList['border-left'] = true; // default: depending on individual properties whiteList['border-left-color'] = true; // default: current color whiteList['border-left-style'] = true; // default: none whiteList['border-left-width'] = true; // default: medium whiteList['border-radius'] = true; // default: 0 whiteList['border-right'] = true; // default: depending on individual properties whiteList['border-right-color'] = true; // default: current color whiteList['border-right-style'] = true; // default: none whiteList['border-right-width'] = true; // default: medium whiteList['border-spacing'] = true; // default: 0 whiteList['border-style'] = true; // default: depending on individual properties whiteList['border-top'] = true; // default: depending on individual properties whiteList['border-top-color'] = true; // default: current color whiteList['border-top-left-radius'] = true; // default: 0 whiteList['border-top-right-radius'] = true; // default: 0 whiteList['border-top-style'] = true; // default: none whiteList['border-top-width'] = true; // default: medium whiteList['border-width'] = true; // default: depending on individual properties whiteList['bottom'] = false; // default: auto whiteList['box-decoration-break'] = true; // default: slice whiteList['box-shadow'] = true; // default: none whiteList['box-sizing'] = true; // default: content-box whiteList['box-snap'] = true; // default: none whiteList['box-suppress'] = true; // default: show whiteList['break-after'] = true; // default: auto whiteList['break-before'] = true; // default: auto whiteList['break-inside'] = true; // default: auto whiteList['caption-side'] = false; // default: top whiteList['chains'] = false; // default: none whiteList['clear'] = true; // default: none whiteList['clip'] = false; // default: auto whiteList['clip-path'] = false; // default: none whiteList['clip-rule'] = false; // default: nonzero whiteList['color'] = true; // default: implementation dependent whiteList['color-interpolation-filters'] = true; // default: auto whiteList['column-count'] = false; // default: auto whiteList['column-fill'] = false; // default: balance whiteList['column-gap'] = false; // default: normal whiteList['column-rule'] = false; // default: depending on individual properties whiteList['column-rule-color'] = false; // default: current color whiteList['column-rule-style'] = false; // default: medium whiteList['column-rule-width'] = false; // default: medium whiteList['column-span'] = false; // default: none whiteList['column-width'] = false; // default: auto whiteList['columns'] = false; // default: depending on individual properties whiteList['contain'] = false; // default: none whiteList['content'] = false; // default: normal whiteList['counter-increment'] = false; // default: none whiteList['counter-reset'] = false; // default: none whiteList['counter-set'] = false; // default: none whiteList['crop'] = false; // default: auto whiteList['cue'] = false; // default: depending on individual properties whiteList['cue-after'] = false; // default: none whiteList['cue-before'] = false; // default: none whiteList['cursor'] = false; // default: auto whiteList['direction'] = false; // default: ltr whiteList['display'] = true; // default: depending on individual properties whiteList['display-inside'] = true; // default: auto whiteList['display-list'] = true; // default: none whiteList['display-outside'] = true; // default: inline-level whiteList['dominant-baseline'] = false; // default: auto whiteList['elevation'] = false; // default: level whiteList['empty-cells'] = false; // default: show whiteList['filter'] = false; // default: none whiteList['flex'] = false; // default: depending on individual properties whiteList['flex-basis'] = false; // default: auto whiteList['flex-direction'] = false; // default: row whiteList['flex-flow'] = false; // default: depending on individual properties whiteList['flex-grow'] = false; // default: 0 whiteList['flex-shrink'] = false; // default: 1 whiteList['flex-wrap'] = false; // default: nowrap whiteList['float'] = false; // default: none whiteList['float-offset'] = false; // default: 0 0 whiteList['flood-color'] = false; // default: black whiteList['flood-opacity'] = false; // default: 1 whiteList['flow-from'] = false; // default: none whiteList['flow-into'] = false; // default: none whiteList['font'] = true; // default: depending on individual properties whiteList['font-family'] = true; // default: implementation dependent whiteList['font-feature-settings'] = true; // default: normal whiteList['font-kerning'] = true; // default: auto whiteList['font-language-override'] = true; // default: normal whiteList['font-size'] = true; // default: medium whiteList['font-size-adjust'] = true; // default: none whiteList['font-stretch'] = true; // default: normal whiteList['font-style'] = true; // default: normal whiteList['font-synthesis'] = true; // default: weight style whiteList['font-variant'] = true; // default: normal whiteList['font-variant-alternates'] = true; // default: normal whiteList['font-variant-caps'] = true; // default: normal whiteList['font-variant-east-asian'] = true; // default: normal whiteList['font-variant-ligatures'] = true; // default: normal whiteList['font-variant-numeric'] = true; // default: normal whiteList['font-variant-position'] = true; // default: normal whiteList['font-weight'] = true; // default: normal whiteList['grid'] = false; // default: depending on individual properties whiteList['grid-area'] = false; // default: depending on individual properties whiteList['grid-auto-columns'] = false; // default: auto whiteList['grid-auto-flow'] = false; // default: none whiteList['grid-auto-rows'] = false; // default: auto whiteList['grid-column'] = false; // default: depending on individual properties whiteList['grid-column-end'] = false; // default: auto whiteList['grid-column-start'] = false; // default: auto whiteList['grid-row'] = false; // default: depending on individual properties whiteList['grid-row-end'] = false; // default: auto whiteList['grid-row-start'] = false; // default: auto whiteList['grid-template'] = false; // default: depending on individual properties whiteList['grid-template-areas'] = false; // default: none whiteList['grid-template-columns'] = false; // default: none whiteList['grid-template-rows'] = false; // default: none whiteList['hanging-punctuation'] = false; // default: none whiteList['height'] = true; // default: auto whiteList['hyphens'] = false; // default: manual whiteList['icon'] = false; // default: auto whiteList['image-orientation'] = false; // default: auto whiteList['image-resolution'] = false; // default: normal whiteList['ime-mode'] = false; // default: auto whiteList['initial-letters'] = false; // default: normal whiteList['inline-box-align'] = false; // default: last whiteList['justify-content'] = false; // default: auto whiteList['justify-items'] = false; // default: auto whiteList['justify-self'] = false; // default: auto whiteList['left'] = false; // default: auto whiteList['letter-spacing'] = true; // default: normal whiteList['lighting-color'] = true; // default: white whiteList['line-box-contain'] = false; // default: block inline replaced whiteList['line-break'] = false; // default: auto whiteList['line-grid'] = false; // default: match-parent whiteList['line-height'] = false; // default: normal whiteList['line-snap'] = false; // default: none whiteList['line-stacking'] = false; // default: depending on individual properties whiteList['line-stacking-ruby'] = false; // default: exclude-ruby whiteList['line-stacking-shift'] = false; // default: consider-shifts whiteList['line-stacking-strategy'] = false; // default: inline-line-height whiteList['list-style'] = true; // default: depending on individual properties whiteList['list-style-image'] = true; // default: none whiteList['list-style-position'] = true; // default: outside whiteList['list-style-type'] = true; // default: disc whiteList['margin'] = true; // default: depending on individual properties whiteList['margin-bottom'] = true; // default: 0 whiteList['margin-left'] = true; // default: 0 whiteList['margin-right'] = true; // default: 0 whiteList['margin-top'] = true; // default: 0 whiteList['marker-offset'] = false; // default: auto whiteList['marker-side'] = false; // default: list-item whiteList['marks'] = false; // default: none whiteList['mask'] = false; // default: border-box whiteList['mask-box'] = false; // default: see individual properties whiteList['mask-box-outset'] = false; // default: 0 whiteList['mask-box-repeat'] = false; // default: stretch whiteList['mask-box-slice'] = false; // default: 0 fill whiteList['mask-box-source'] = false; // default: none whiteList['mask-box-width'] = false; // default: auto whiteList['mask-clip'] = false; // default: border-box whiteList['mask-image'] = false; // default: none whiteList['mask-origin'] = false; // default: border-box whiteList['mask-position'] = false; // default: center whiteList['mask-repeat'] = false; // default: no-repeat whiteList['mask-size'] = false; // default: border-box whiteList['mask-source-type'] = false; // default: auto whiteList['mask-type'] = false; // default: luminance whiteList['max-height'] = true; // default: none whiteList['max-lines'] = false; // default: none whiteList['max-width'] = true; // default: none whiteList['min-height'] = true; // default: 0 whiteList['min-width'] = true; // default: 0 whiteList['move-to'] = false; // default: normal whiteList['nav-down'] = false; // default: auto whiteList['nav-index'] = false; // default: auto whiteList['nav-left'] = false; // default: auto whiteList['nav-right'] = false; // default: auto whiteList['nav-up'] = false; // default: auto whiteList['object-fit'] = false; // default: fill whiteList['object-position'] = false; // default: 50% 50% whiteList['opacity'] = false; // default: 1 whiteList['order'] = false; // default: 0 whiteList['orphans'] = false; // default: 2 whiteList['outline'] = false; // default: depending on individual properties whiteList['outline-color'] = false; // default: invert whiteList['outline-offset'] = false; // default: 0 whiteList['outline-style'] = false; // default: none whiteList['outline-width'] = false; // default: medium whiteList['overflow'] = false; // default: depending on individual properties whiteList['overflow-wrap'] = false; // default: normal whiteList['overflow-x'] = false; // default: visible whiteList['overflow-y'] = false; // default: visible whiteList['padding'] = true; // default: depending on individual properties whiteList['padding-bottom'] = true; // default: 0 whiteList['padding-left'] = true; // default: 0 whiteList['padding-right'] = true; // default: 0 whiteList['padding-top'] = true; // default: 0 whiteList['page'] = false; // default: auto whiteList['page-break-after'] = false; // default: auto whiteList['page-break-before'] = false; // default: auto whiteList['page-break-inside'] = false; // default: auto whiteList['page-policy'] = false; // default: start whiteList['pause'] = false; // default: implementation dependent whiteList['pause-after'] = false; // default: implementation dependent whiteList['pause-before'] = false; // default: implementation dependent whiteList['perspective'] = false; // default: none whiteList['perspective-origin'] = false; // default: 50% 50% whiteList['pitch'] = false; // default: medium whiteList['pitch-range'] = false; // default: 50 whiteList['play-during'] = false; // default: auto whiteList['position'] = false; // default: static whiteList['presentation-level'] = false; // default: 0 whiteList['quotes'] = false; // default: text whiteList['region-fragment'] = false; // default: auto whiteList['resize'] = false; // default: none whiteList['rest'] = false; // default: depending on individual properties whiteList['rest-after'] = false; // default: none whiteList['rest-before'] = false; // default: none whiteList['richness'] = false; // default: 50 whiteList['right'] = false; // default: auto whiteList['rotation'] = false; // default: 0 whiteList['rotation-point'] = false; // default: 50% 50% whiteList['ruby-align'] = false; // default: auto whiteList['ruby-merge'] = false; // default: separate whiteList['ruby-position'] = false; // default: before whiteList['shape-image-threshold'] = false; // default: 0.0 whiteList['shape-outside'] = false; // default: none whiteList['shape-margin'] = false; // default: 0 whiteList['size'] = false; // default: auto whiteList['speak'] = false; // default: auto whiteList['speak-as'] = false; // default: normal whiteList['speak-header'] = false; // default: once whiteList['speak-numeral'] = false; // default: continuous whiteList['speak-punctuation'] = false; // default: none whiteList['speech-rate'] = false; // default: medium whiteList['stress'] = false; // default: 50 whiteList['string-set'] = false; // default: none whiteList['tab-size'] = false; // default: 8 whiteList['table-layout'] = false; // default: auto whiteList['text-align'] = true; // default: start whiteList['text-align-last'] = true; // default: auto whiteList['text-combine-upright'] = true; // default: none whiteList['text-decoration'] = true; // default: none whiteList['text-decoration-color'] = true; // default: currentColor whiteList['text-decoration-line'] = true; // default: none whiteList['text-decoration-skip'] = true; // default: objects whiteList['text-decoration-style'] = true; // default: solid whiteList['text-emphasis'] = true; // default: depending on individual properties whiteList['text-emphasis-color'] = true; // default: currentColor whiteList['text-emphasis-position'] = true; // default: over right whiteList['text-emphasis-style'] = true; // default: none whiteList['text-height'] = true; // default: auto whiteList['text-indent'] = true; // default: 0 whiteList['text-justify'] = true; // default: auto whiteList['text-orientation'] = true; // default: mixed whiteList['text-overflow'] = true; // default: clip whiteList['text-shadow'] = true; // default: none whiteList['text-space-collapse'] = true; // default: collapse whiteList['text-transform'] = true; // default: none whiteList['text-underline-position'] = true; // default: auto whiteList['text-wrap'] = true; // default: normal whiteList['top'] = false; // default: auto whiteList['transform'] = false; // default: none whiteList['transform-origin'] = false; // default: 50% 50% 0 whiteList['transform-style'] = false; // default: flat whiteList['transition'] = false; // default: depending on individual properties whiteList['transition-delay'] = false; // default: 0s whiteList['transition-duration'] = false; // default: 0s whiteList['transition-property'] = false; // default: all whiteList['transition-timing-function'] = false; // default: ease whiteList['unicode-bidi'] = false; // default: normal whiteList['vertical-align'] = false; // default: baseline whiteList['visibility'] = false; // default: visible whiteList['voice-balance'] = false; // default: center whiteList['voice-duration'] = false; // default: auto whiteList['voice-family'] = false; // default: implementation dependent whiteList['voice-pitch'] = false; // default: medium whiteList['voice-range'] = false; // default: medium whiteList['voice-rate'] = false; // default: normal whiteList['voice-stress'] = false; // default: normal whiteList['voice-volume'] = false; // default: medium whiteList['volume'] = false; // default: medium whiteList['white-space'] = false; // default: normal whiteList['widows'] = false; // default: 2 whiteList['width'] = true; // default: auto whiteList['will-change'] = false; // default: auto whiteList['word-break'] = true; // default: normal whiteList['word-spacing'] = true; // default: normal whiteList['word-wrap'] = true; // default: normal whiteList['wrap-flow'] = false; // default: auto whiteList['wrap-through'] = false; // default: wrap whiteList['writing-mode'] = false; // default: horizontal-tb whiteList['z-index'] = false; // default: auto return whiteList; } /** * 匹配到白名单上的一个属性时 * * @param {String} name * @param {String} value * @param {Object} options * @return {String} */ function onAttr (name, value, options) { // do nothing } /** * 匹配到不在白名单上的一个属性时 * * @param {String} name * @param {String} value * @param {Object} options * @return {String} */ function onIgnoreAttr (name, value, options) { // do nothing } exports.whiteList = getDefaultWhiteList(); exports.getDefaultWhiteList = getDefaultWhiteList; exports.onAttr = onAttr; exports.onIgnoreAttr = onIgnoreAttr; },{}],8:[function(require,module,exports){ /** * cssfilter * * @author 老雷 */ var DEFAULT = require('./default'); var FilterCSS = require('./css'); /** * XSS过滤 * * @param {String} css 要过滤的CSS代码 * @param {Object} options 选项:whiteList, onAttr, onIgnoreAttr * @return {String} */ function filterCSS (html, options) { var xss = new FilterCSS(options); return xss.process(html); } // 输出 exports = module.exports = filterCSS; exports.FilterCSS = FilterCSS; for (var i in DEFAULT) exports[i] = DEFAULT[i]; // 在浏览器端使用 if (typeof window !== 'undefined') { window.filterCSS = module.exports; } },{"./css":6,"./default":7}],9:[function(require,module,exports){ /** * cssfilter * * @author 老雷 */ var _ = require('./util'); /** * 解析style * * @param {String} css * @param {Function} onAttr 处理属性的函数 * 参数格式: function (sourcePosition, position, name, value, source) * @return {String} */ function parseStyle (css, onAttr) { css = _.trimRight(css); if (css[css.length - 1] !== ';') css += ';'; var cssLength = css.length; var isParenthesisOpen = false; var lastPos = 0; var i = 0; var retCSS = ''; function addNewAttr () { // 如果没有正常的闭合圆括号,则直接忽略当前属性 if (!isParenthesisOpen) { var source = _.trim(css.slice(lastPos, i)); var j = source.indexOf(':'); if (j !== -1) { var name = _.trim(source.slice(0, j)); var value = _.trim(source.slice(j + 1)); // 必须有属性名称 if (name) { var ret = onAttr(lastPos, retCSS.length, name, value, source); if (ret) retCSS += ret + '; '; } } } lastPos = i + 1; } for (; i < cssLength; i++) { var c = css[i]; if (c === '/' && css[i + 1] === '*') { // 备注开始 var j = css.indexOf('*/', i + 2); // 如果没有正常的备注结束,则后面的部分全部跳过 if (j === -1) break; // 直接将当前位置调到备注结尾,并且初始化状态 i = j + 1; lastPos = i + 1; isParenthesisOpen = false; } else if (c === '(') { isParenthesisOpen = true; } else if (c === ')') { isParenthesisOpen = false; } else if (c === ';') { if (isParenthesisOpen) { // 在圆括号里面,忽略 } else { addNewAttr(); } } else if (c === '\n') { addNewAttr(); } } return _.trim(retCSS); } module.exports = parseStyle; },{"./util":10}],10:[function(require,module,exports){ module.exports = { indexOf: function (arr, item) { var i, j; if (Array.prototype.indexOf) { return arr.indexOf(item); } for (i = 0, j = arr.length; i < j; i++) { if (arr[i] === item) { return i; } } return -1; }, forEach: function (arr, fn, scope) { var i, j; if (Array.prototype.forEach) { return arr.forEach(fn, scope); } for (i = 0, j = arr.length; i < j; i++) { fn.call(scope, arr[i], i, arr); } }, trim: function (str) { if (String.prototype.trim) { return str.trim(); } return str.replace(/(^\s*)|(\s*$)/g, ''); }, trimRight: function (str) { if (String.prototype.trimRight) { return str.trimRight(); } return str.replace(/(\s*$)/g, ''); } }; },{}]},{},[2]); define("xss", (function (global) { return function () { var ret, fn; fn = function (xss_noconflict) { return { filterXSS: window.filterXSS, filterCSS: window.filterCSS } }; ret = fn.apply(global, arguments); return ret; }; }(this))); /* Lo-Dash Template Loader v1.0.1 * Copyright 2015, Tim Branyen (@tbranyen). * loader.js may be freely distributed under the MIT license. */ (function(global) { "use strict"; // Cache used to map configuration options between load and write. var buildMap = {}; // Alias the correct `nodeRequire` method. var nodeRequire = typeof requirejs === "function" && requirejs.nodeRequire; // Strips trailing `/` from url fragments. var stripTrailing = function(prop) { return prop.replace(/(\/$)/, ''); }; // Define the plugin using the CommonJS syntax. define('tpl',['require','exports','module','lodash'],function(require, exports) { var _ = require("lodash"); exports.version = "1.0.1"; // Invoked by the AMD builder, passed the path to resolve, the require // function, done callback, and the configuration options. exports.load = function(name, req, load, config) { var isDojo; // Dojo provides access to the config object through the req function. if (!config) { config = require.rawConfig; isDojo = true; } var contents = ""; var settings = configure(config); // If the baseUrl and root are the same, just null out the root. if (stripTrailing(config.baseUrl) === stripTrailing(settings.root)) { settings.root = ''; } var url = require.toUrl(settings.root + name + settings.ext); if (isDojo && url.indexOf(config.baseUrl) !== 0) { url = stripTrailing(config.baseUrl) + url; } // Builds with r.js require Node.js to be installed. if (config.isBuild) { // If in Node, get access to the filesystem. var fs = nodeRequire("fs"); try { // First try reading the filepath as-is. contents = String(fs.readFileSync(url)); } catch(ex) { // If it failed, it's most likely because of a leading `/` and not an // absolute path. Remove the leading slash and try again. if (url.slice(0, 1) === "/") { url = url.slice(1); } // Try reading again with the leading `/`. contents = String(fs.readFileSync(url)); } // Read in the file synchronously, as RequireJS expects, and return the // contents. Process as a Lo-Dash template. buildMap[name] = _.template(contents); return load(); } // Create a basic XHR. var xhr = new XMLHttpRequest(); // Wait for it to load. xhr.onreadystatechange = function() { if (xhr.readyState === 4) { var templateSettings = _.clone(settings.templateSettings); // Attach the sourceURL. templateSettings.sourceURL = url; // Process as a Lo-Dash template and cache. buildMap[name] = _.template(xhr.responseText, templateSettings); // Return the compiled template. load(buildMap[name]); } }; // Initiate the fetch. xhr.open("GET", url, true); xhr.send(null); }; // Also invoked by the AMD builder, this writes out a compatible define // call that will work with loaders such as almond.js that cannot read // the configuration data. exports.write = function(pluginName, moduleName, write) { var template = buildMap[moduleName].source; // Write out the actual definition write(strDefine(pluginName, moduleName, template)); }; // This is for curl.js/cram.js build-time support. exports.compile = function(pluginName, moduleName, req, io, config) { configure(config); // Ask cram to fetch the template file (resId) and pass it to `write`. io.read(moduleName, write, io.error); function write(template) { // Write-out define(id,function(){return{/* template */}}); io.write(strDefine(pluginName, moduleName, template)); } }; // Crafts the written definition form of the module during a build. function strDefine(pluginName, moduleName, template) { return [ "define('", pluginName, "!", moduleName, "', ", "['lodash'], ", [ "function(_) {", "return ", template, ";", "}" ].join(""), ");\n" ].join(""); } function configure(config) { // Default settings point to the project root and using html files. var settings = _.extend({ ext: ".html", root: config.baseUrl, templateSettings: {} }, config.lodashLoader); // Ensure the root has been properly configured with a trailing slash, // unless it's an empty string or undefined, in which case work off the // baseUrl. if (settings.root && settings.root.slice(-1) !== "/") { settings.root += "/"; } // Set the custom passed in template settings. _.extend(_.templateSettings, settings.templateSettings); return settings; } }); })(typeof global === "object" ? global : this); define('tpl!chatbox', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '
\n
\n \n
\n '; if (url) { ; __p += '\n \n '; } ; __p += '\n ' + __e( title ) + '\n '; if (url) { ; __p += '\n \n '; } ; __p += '\n

\n

\n
\n
\n
\n \n '; if (show_textarea) { ; __p += '\n
\n '; if (show_toolbar) { ; __p += '\n
    \n '; } ; __p += '\n \n\n '; if (show_send_button) { ; __p += '\n \n '; } ; __p += '\n \n '; } ; __p += '\n
    \n
    \n'; } return __p };}); define('tpl!new_day', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '\n'; } return __p };}); define('tpl!action', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '
    \n ' + __e(time) + ' **' + __e(username) + ' \n \n
    \n'; } return __p };}); define('tpl!emojis', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { _.forEach(emojis_by_category, function (obj, category) { ; __p += '\n \n'; }); ; __p += '\n\n'; } return __p };}); define('tpl!message', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '
    \n ' + __e(time) + ' ' + __e(username) + ': \n \n
    \n'; } return __p };}); define('tpl!help_message', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '
    ' + __e(message) + '
    \n'; } return __p };}); define('tpl!toolbar', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { if (use_emoji) { ; __p += '\n
  • \n
      \n
    • \n'; } ; __p += '\n'; if (show_call_button) { ; __p += '\n
    • \n'; } ; __p += '\n'; if (show_clear_button) { ; __p += '\n
    • \n'; } ; __p += '\n'; } return __p };}); define('tpl!avatar', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = ''; with (obj) { __p += '\n'; } return __p };}); define('tpl!spinner', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = ''; with (obj) { __p += '\n'; } return __p };}); // Converse.js (A browser based XMPP chat client) // http://conversejs.org // // Copyright (c) 2012-2017, Jan-Carel Brand // Licensed under the Mozilla Public License (MPLv2) // /*global define */ (function (root, factory) { define('converse-chatview',["jquery.noconflict", "converse-core", "converse-chatboxes", "emojione", "xss", "tpl!chatbox", "tpl!new_day", "tpl!action", "tpl!emojis", "tpl!message", "tpl!help_message", "tpl!toolbar", "tpl!avatar", "tpl!spinner"], factory); })(undefined, function ($, converse, dummy, emojione, xss, tpl_chatbox, tpl_new_day, tpl_action, tpl_emojis, tpl_message, tpl_help_message, tpl_toolbar, tpl_avatar, tpl_spinner) { "use strict"; var _converse$env = converse.env, $msg = _converse$env.$msg, Backbone = _converse$env.Backbone, Strophe = _converse$env.Strophe, _ = _converse$env._, b64_sha1 = _converse$env.b64_sha1, moment = _converse$env.moment, utils = _converse$env.utils; var KEY = { ENTER: 13, FORWARD_SLASH: 47 }; converse.plugins.add('converse-chatview', { overrides: { // Overrides mentioned here will be picked up by converse.js's // plugin architecture they will replace existing methods on the // relevant objects or classes. // // New functions which don't exist yet can also be added. // registerGlobalEventHandlers: function registerGlobalEventHandlers() { this.__super__.registerGlobalEventHandlers(); document.addEventListener('click', function (ev) { if (_.includes(ev.target.classList, 'toggle-toolbar-menu') || _.includes(ev.target.classList, 'insert-emoji')) { return; } utils.slideInAllElements(document.querySelectorAll('.toolbar-menu')); }); }, ChatBoxViews: { onChatBoxAdded: function onChatBoxAdded(item) { var _converse = this.__super__._converse; var view = this.get(item.get('id')); if (!view) { view = new _converse.ChatBoxView({ model: item }); this.add(item.get('id'), view); return view; } else { return this.__super__.onChatBoxAdded.apply(this, arguments); } } } }, initialize: function initialize() { /* The initialize function gets called as soon as the plugin is * loaded by converse.js's plugin machinery. */ var _converse = this._converse, __ = _converse.__; _converse.api.settings.update({ 'use_emojione': true, 'emojione_image_path': emojione.imagePathPNG, 'chatview_avatar_height': 32, 'chatview_avatar_width': 32, 'show_toolbar': true, 'time_format': 'HH:mm', 'visible_toolbar_buttons': { 'emoji': true, 'call': false, 'clear': true } }); emojione.imagePathPNG = _converse.emojione_image_path; emojione.ascii = true; function onWindowStateChanged(data) { _converse.chatboxviews.each(function (chatboxview) { chatboxview.onWindowStateChanged(data.state); }); } _converse.api.listen.on('windowStateChanged', onWindowStateChanged); _converse.EmojiPicker = Backbone.Model.extend({ defaults: { 'current_category': 'people', 'current_skintone': '', 'scroll_position': 0 }, initialize: function initialize() { var id = "converse.emoji-" + _converse.bare_jid; this.id = id; this.browserStorage = new Backbone.BrowserStorage[_converse.storage](id); } }); _converse.EmojiPickerView = Backbone.View.extend({ className: 'emoji-picker-container toolbar-menu collapsed', events: { 'click .emoji-category-picker li.emoji-category': 'chooseCategory', 'click .emoji-skintone-picker li.emoji-skintone': 'chooseSkinTone' }, initialize: function initialize() { this.model.on('change:current_skintone', this.render, this); this.model.on('change:current_category', this.render, this); this.setScrollPosition = _.debounce(this.setScrollPosition, 50); }, render: function render() { var _this = this; var emojis_html = tpl_emojis(_.extend(this.model.toJSON(), { 'transform': _converse.use_emojione ? emojione.shortnameToImage : emojione.shortnameToUnicode, 'emojis_by_category': utils.getEmojisByCategory(_converse, emojione), 'toned_emojis': utils.getTonedEmojis(_converse), 'skintones': ['tone1', 'tone2', 'tone3', 'tone4', 'tone5'], 'shouldBeHidden': this.shouldBeHidden })); this.el.innerHTML = emojis_html; _.forEach(this.el.querySelectorAll('.emoji-picker'), function (el) { el.addEventListener('scroll', _this.setScrollPosition.bind(_this)); }); this.restoreScrollPosition(); return this; }, shouldBeHidden: function shouldBeHidden(shortname, current_skintone, toned_emojis) { /* Helper method for the template which decides whether an * emoji should be hidden, based on which skin tone is * currently being applied. */ if (_.includes(shortname, '_tone')) { if (!current_skintone || !_.includes(shortname, current_skintone)) { return true; } } else { if (current_skintone && _.includes(toned_emojis, shortname)) { return true; } } return false; }, restoreScrollPosition: function restoreScrollPosition() { var current_picker = _.difference(this.el.querySelectorAll('.emoji-picker'), this.el.querySelectorAll('.emoji-picker.hidden')); if (current_picker.length === 1 && this.model.get('scroll_position')) { current_picker[0].scrollTop = this.model.get('scroll_position'); } }, setScrollPosition: function setScrollPosition(ev) { this.model.save('scroll_position', ev.target.scrollTop); }, chooseSkinTone: function chooseSkinTone(ev) { ev.preventDefault(); ev.stopPropagation(); var target = ev.target.nodeName === 'IMG' ? ev.target.parentElement : ev.target; var skintone = target.getAttribute("data-skintone").trim(); if (this.model.get('current_skintone') === skintone) { this.model.save({ 'current_skintone': '' }); } else { this.model.save({ 'current_skintone': skintone }); } }, chooseCategory: function chooseCategory(ev) { ev.preventDefault(); ev.stopPropagation(); var target = ev.target.nodeName === 'IMG' ? ev.target.parentElement : ev.target; var category = target.getAttribute("data-category").trim(); this.model.save({ 'current_category': category, 'scroll_position': 0 }); } }); _converse.ChatBoxView = Backbone.View.extend({ length: 200, tagName: 'div', className: 'chatbox hidden', is_chatroom: false, // Leaky abstraction from MUC events: { 'click .close-chatbox-button': 'close', 'keypress .chat-textarea': 'keyPressed', 'click .send-button': 'onFormSubmitted', 'click .toggle-smiley': 'toggleEmojiMenu', 'click .toggle-smiley ul.emoji-picker li': 'insertEmoji', 'click .toggle-clear': 'clearMessages', 'click .toggle-call': 'toggleCall', 'click .new-msgs-indicator': 'viewUnreadMessages' }, initialize: function initialize() { this.markScrolled = _.debounce(this.markScrolled, 100); this.createEmojiPicker(); this.model.messages.on('add', this.onMessageAdded, this); this.model.on('show', this.show, this); this.model.on('destroy', this.hide, this); // TODO check for changed fullname as well this.model.on('change:chat_state', this.sendChatState, this); this.model.on('change:chat_status', this.onChatStatusChanged, this); this.model.on('change:image', this.renderAvatar, this); this.model.on('change:status', this.onStatusChanged, this); this.model.on('showHelpMessages', this.showHelpMessages, this); this.model.on('sendMessage', this.sendMessage, this); this.render().fetchMessages(); _converse.emit('chatBoxInitialized', this); }, render: function render() { this.$el.attr('id', this.model.get('box_id')).html(tpl_chatbox(_.extend(this.model.toJSON(), { show_toolbar: _converse.show_toolbar, show_textarea: true, show_send_button: _converse.show_send_button, title: this.model.get('fullname'), unread_msgs: __('You have unread messages'), info_close: __('Close this chat box'), label_personal_message: __('Personal message'), label_send: __('Send') }))); this.$content = this.$el.find('.chat-content'); this.renderToolbar().renderAvatar(); _converse.emit('chatBoxOpened', this); utils.refreshWebkit(); return this.showStatusMessage(); }, createEmojiPicker: function createEmojiPicker() { if (_.isUndefined(_converse.emojipicker)) { _converse.emojipicker = new _converse.EmojiPicker(); _converse.emojipicker.fetch(); } this.emoji_picker_view = new _converse.EmojiPickerView({ 'model': _converse.emojipicker }); }, afterMessagesFetched: function afterMessagesFetched() { this.insertIntoDOM(); this.scrollDown(); // We only start listening for the scroll event after // cached messages have been fetched this.$content.on('scroll', this.markScrolled.bind(this)); _converse.emit('afterMessagesFetched', this); }, fetchMessages: function fetchMessages() { this.model.messages.fetch({ 'add': true, 'success': this.afterMessagesFetched.bind(this), 'error': this.afterMessagesFetched.bind(this) }); return this; }, insertIntoDOM: function insertIntoDOM() { /* This method gets overridden in src/converse-controlbox.js * as well as src/converse-muc.js (if those plugins are * enabled). */ var container = document.querySelector('#conversejs'); if (this.el.parentNode !== container) { container.insertBefore(this.el, container.firstChild); } return this; }, clearStatusNotification: function clearStatusNotification() { this.$content.find('div.chat-event').remove(); }, showStatusNotification: function showStatusNotification(message, keep_old, permanent) { if (!keep_old) { this.clearStatusNotification(); } var $el = $('
      ').text(message); if (!permanent) { $el.addClass('chat-event'); } this.$content.append($el); this.scrollDown(); }, addSpinner: function addSpinner() { if (_.isNull(this.el.querySelector('.spinner'))) { this.$content.prepend(tpl_spinner); } }, clearSpinner: function clearSpinner() { if (this.$content.children(':first').is('span.spinner')) { this.$content.children(':first').remove(); } }, insertDayIndicator: function insertDayIndicator(date, prepend) { /* Appends (or prepends if "prepend" is truthy) an indicator * into the chat area, showing the day as given by the * passed in date. * * Parameters: * (String) date - An ISO8601 date string. */ var day_date = moment(date).startOf('day'); var insert = prepend ? this.$content.prepend : this.$content.append; insert.call(this.$content, tpl_new_day({ isodate: day_date.format(), datestring: day_date.format("dddd MMM Do YYYY") })); }, insertMessage: function insertMessage(attrs, prepend) { var _this2 = this; /* Helper method which appends a message (or prepends if the * 2nd parameter is set to true) to the end of the chat box's * content area. * * Parameters: * (Object) attrs: An object containing the message attributes. */ var insert = prepend ? this.$content.prepend : this.$content.append; _.flow(function ($el) { insert.call(_this2.$content, $el); return $el; }, this.scrollDown.bind(this))(this.renderMessage(attrs)); }, showMessage: function showMessage(attrs) { /* Inserts a chat message into the content area of the chat box. * Will also insert a new day indicator if the message is on a * different day. * * The message to show may either be newer than the newest * message, or older than the oldest message. * * Parameters: * (Object) attrs: An object containing the message * attributes. */ var current_msg_date = moment(attrs.time) || moment; var $first_msg = this.$content.find('.chat-message:first'), first_msg_date = $first_msg.data('isodate'); if (!first_msg_date) { // This is the first received message, so we insert a // date indicator before it. this.insertDayIndicator(current_msg_date); this.insertMessage(attrs); return; } var last_msg_date = this.$content.find('.chat-message:last').data('isodate'); if (current_msg_date.isAfter(last_msg_date) || current_msg_date.isSame(last_msg_date)) { // The new message is after the last message if (current_msg_date.isAfter(last_msg_date, 'day')) { // Append a new day indicator this.insertDayIndicator(current_msg_date); } this.insertMessage(attrs); return; } if (current_msg_date.isBefore(first_msg_date) || current_msg_date.isSame(first_msg_date)) { // The message is before the first, but on the same day. // We need to prepend the message immediately before the // first message (so that it'll still be after the day // indicator). this.insertMessage(attrs, 'prepend'); if (current_msg_date.isBefore(first_msg_date, 'day')) { // This message is also on a different day, so // we prepend a day indicator. this.insertDayIndicator(current_msg_date, 'prepend'); } return; } // Find the correct place to position the message current_msg_date = current_msg_date.format(); var msg_dates = _.map(this.$content.find('.chat-message'), function (el) { return $(el).data('isodate'); }); msg_dates.push(current_msg_date); msg_dates.sort(); var idx = msg_dates.indexOf(current_msg_date) - 1; var $latest_message = this.$content.find(".chat-message[data-isodate=\"" + msg_dates[idx] + "\"]:last"); _.flow(function ($el) { $el.insertAfter($latest_message); return $el; }, this.scrollDown.bind(this))(this.renderMessage(attrs)); }, getExtraMessageTemplateAttributes: function getExtraMessageTemplateAttributes() { /* Provides a hook for sending more attributes to the * message template. * * Parameters: * (Object) attrs: An object containing message attributes. */ return {}; }, getExtraMessageClasses: function getExtraMessageClasses(attrs) { return attrs.delayed && 'delayed' || ''; }, renderMessage: function renderMessage(attrs) { /* Renders a chat message based on the passed in attributes. * * Parameters: * (Object) attrs: An object containing the message attributes. * * Returns: * The DOM element representing the message. */ var text = attrs.message, fullname = this.model.get('fullname') || attrs.fullname, template = void 0, username = void 0; var match = text.match(/^\/(.*?)(?: (.*))?$/); if (match && match[1] === 'me') { text = text.replace(/^\/me/, ''); template = tpl_action; if (attrs.sender === 'me') { fullname = _converse.xmppstatus.get('fullname') || attrs.fullname; username = _.isNil(fullname) ? _converse.bare_jid : fullname; } else { username = attrs.fullname; } } else { template = tpl_message; username = attrs.sender === 'me' && __('me') || fullname; } this.$content.find('div.chat-event').remove(); if (text.length > 8000) { text = text.substring(0, 10) + '...'; this.showStatusNotification(__("A very large message has been received." + "This might be due to an attack meant to degrade the chat performance." + "Output has been shortened."), true, true); } var msg_time = moment(attrs.time) || moment; var $msg = $(template(_.extend(this.getExtraMessageTemplateAttributes(attrs), { 'msgid': attrs.msgid, 'sender': attrs.sender, 'time': msg_time.format(_converse.time_format), 'isodate': msg_time.format(), 'username': username, 'extra_classes': this.getExtraMessageClasses(attrs) }))); var msg_content = $msg[0].querySelector('.chat-msg-content'); msg_content.innerHTML = utils.addEmoji(_converse, emojione, utils.addHyperlinks(xss.filterXSS(text, { 'whiteList': {} }))); utils.renderImageURLs(msg_content); return $msg; }, showHelpMessages: function showHelpMessages(msgs, type, spinner) { var _this3 = this; _.each(msgs, function (msg) { _this3.$content.append($(tpl_help_message({ 'type': type || 'info', 'message': msgs }))); }); if (spinner === true) { this.$content.append(tpl_spinner); } else if (spinner === false) { this.$content.find('span.spinner').remove(); } return this.scrollDown(); }, handleChatStateMessage: function handleChatStateMessage(message) { if (message.get('chat_state') === _converse.COMPOSING) { if (message.get('sender') === 'me') { this.showStatusNotification(__('Typing from another device')); } else { this.showStatusNotification(message.get('fullname') + ' ' + __('is typing')); } this.clear_status_timeout = window.setTimeout(this.clearStatusNotification.bind(this), 30000); } else if (message.get('chat_state') === _converse.PAUSED) { if (message.get('sender') === 'me') { this.showStatusNotification(__('Stopped typing on the other device')); } else { this.showStatusNotification(message.get('fullname') + ' ' + __('has stopped typing')); } } else if (_.includes([_converse.INACTIVE, _converse.ACTIVE], message.get('chat_state'))) { this.$content.find('div.chat-event').remove(); } else if (message.get('chat_state') === _converse.GONE) { this.showStatusNotification(message.get('fullname') + ' ' + __('has gone away')); } }, shouldShowOnTextMessage: function shouldShowOnTextMessage() { return !this.$el.is(':visible'); }, handleTextMessage: function handleTextMessage(message) { this.showMessage(_.clone(message.attributes)); if (utils.isNewMessage(message) && message.get('sender') === 'me') { // We remove the "scrolled" flag so that the chat area // gets scrolled down. We always want to scroll down // when the user writes a message as opposed to when a // message is received. this.model.set('scrolled', false); } else { if (utils.isNewMessage(message) && this.model.get('scrolled', true)) { this.$el.find('.new-msgs-indicator').removeClass('hidden'); } } if (this.shouldShowOnTextMessage()) { this.show(); } else { this.scrollDown(); } }, handleErrorMessage: function handleErrorMessage(message) { var $message = $("[data-msgid=" + message.get('msgid') + "]"); if ($message.length) { $message.after($('
      ').text(message.get('message'))); this.scrollDown(); } }, onMessageAdded: function onMessageAdded(message) { /* Handler that gets called when a new message object is created. * * Parameters: * (Object) message - The message Backbone object that was added. */ if (!_.isUndefined(this.clear_status_timeout)) { window.clearTimeout(this.clear_status_timeout); delete this.clear_status_timeout; } if (message.get('type') === 'error') { this.handleErrorMessage(message); } else if (!message.get('message')) { this.handleChatStateMessage(message); } else { this.handleTextMessage(message); } _converse.emit('messageAdded', { 'message': message, 'chatbox': this.model }); }, createMessageStanza: function createMessageStanza(message) { return $msg({ from: _converse.connection.jid, to: this.model.get('jid'), type: 'chat', id: message.get('msgid') }).c('body').t(message.get('message')).up().c(_converse.ACTIVE, { 'xmlns': Strophe.NS.CHATSTATES }).up(); }, sendMessage: function sendMessage(message) { /* Responsible for sending off a text message. * * Parameters: * (Message) message - The chat message */ // TODO: We might want to send to specfic resources. // Especially in the OTR case. var messageStanza = this.createMessageStanza(message); _converse.connection.send(messageStanza); if (_converse.forward_messages) { // Forward the message, so that other connected resources are also aware of it. _converse.connection.send($msg({ to: _converse.bare_jid, type: 'chat', id: message.get('msgid') }).c('forwarded', { xmlns: 'urn:xmpp:forward:0' }).c('delay', { xmns: 'urn:xmpp:delay', stamp: new Date().getTime() }).up().cnode(messageStanza.tree())); } }, onMessageSubmitted: function onMessageSubmitted(text) { /* This method gets called once the user has typed a message * and then pressed enter in a chat box. * * Parameters: * (string) text - The chat message text. */ if (!_converse.connection.authenticated) { return this.showHelpMessages(['Sorry, the connection has been lost, ' + 'and your message could not be sent'], 'error'); } var match = text.replace(/^\s*/, "").match(/^\/(.*)\s*$/); if (match) { if (match[1] === "clear") { return this.clearMessages(); } else if (match[1] === "help") { var msgs = ["/help:" + __('Show this menu'), "/me:" + __('Write in the third person'), "/clear:" + __('Remove messages')]; this.showHelpMessages(msgs); return; } } var fullname = _converse.xmppstatus.get('fullname'); fullname = _.isEmpty(fullname) ? _converse.bare_jid : fullname; var message = this.model.messages.create({ fullname: fullname, sender: 'me', time: moment().format(), message: text }); this.sendMessage(message); }, sendChatState: function sendChatState() { /* Sends a message with the status of the user in this chat session * as taken from the 'chat_state' attribute of the chat box. * See XEP-0085 Chat State Notifications. */ _converse.connection.send($msg({ 'to': this.model.get('jid'), 'type': 'chat' }).c(this.model.get('chat_state'), { 'xmlns': Strophe.NS.CHATSTATES }).up().c('no-store', { 'xmlns': Strophe.NS.HINTS }).up().c('no-permanent-store', { 'xmlns': Strophe.NS.HINTS })); }, setChatState: function setChatState(state, no_save) { /* Mutator for setting the chat state of this chat session. * Handles clearing of any chat state notification timeouts and * setting new ones if necessary. * Timeouts are set when the state being set is COMPOSING or PAUSED. * After the timeout, COMPOSING will become PAUSED and PAUSED will become INACTIVE. * See XEP-0085 Chat State Notifications. * * Parameters: * (string) state - The chat state (consts ACTIVE, COMPOSING, PAUSED, INACTIVE, GONE) * (Boolean) no_save - Just do the cleanup or setup but don't actually save the state. */ if (!_.isUndefined(this.chat_state_timeout)) { window.clearTimeout(this.chat_state_timeout); delete this.chat_state_timeout; } if (state === _converse.COMPOSING) { this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), _converse.TIMEOUTS.PAUSED, _converse.PAUSED); } else if (state === _converse.PAUSED) { this.chat_state_timeout = window.setTimeout(this.setChatState.bind(this), _converse.TIMEOUTS.INACTIVE, _converse.INACTIVE); } if (!no_save && this.model.get('chat_state') !== state) { this.model.set('chat_state', state); } return this; }, onFormSubmitted: function onFormSubmitted(ev) { ev.preventDefault(); var textarea = this.el.querySelector('.chat-textarea'), message = textarea.value; textarea.value = ''; textarea.focus(); if (message !== '') { this.onMessageSubmitted(message); _converse.emit('messageSend', message); } this.setChatState(_converse.ACTIVE); }, keyPressed: function keyPressed(ev) { /* Event handler for when a key is pressed in a chat box textarea. */ if (ev.keyCode === KEY.ENTER) { this.onFormSubmitted(ev); } else { // Set chat state to composing if keyCode is not a forward-slash // (which would imply an internal command and not a message). this.setChatState(_converse.COMPOSING, ev.keyCode === KEY.FORWARD_SLASH); } }, clearMessages: function clearMessages(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } var result = confirm(__("Are you sure you want to clear the messages from this chat box?")); if (result === true) { this.$content.empty(); this.model.messages.reset(); this.model.messages.browserStorage._clear(); } return this; }, insertIntoTextArea: function insertIntoTextArea(value) { var $textbox = this.$el.find('textarea.chat-textarea'); var existing = $textbox.val(); if (existing && existing[existing.length - 1] !== ' ') { existing = existing + ' '; } $textbox.focus().val(existing + value + ' '); }, insertEmoji: function insertEmoji(ev) { ev.stopPropagation(); this.toggleEmojiMenu(); var target = ev.target.nodeName === 'IMG' ? ev.target.parentElement : ev.target; this.insertIntoTextArea(target.getAttribute('data-emoji')); }, toggleEmojiMenu: function toggleEmojiMenu(ev) { if (!_.isUndefined(ev)) { ev.stopPropagation(); if (ev.target.classList.contains('emoji-category-picker') || ev.target.classList.contains('emoji-skintone-picker') || ev.target.classList.contains('emoji-category')) { return; } } var elements = _.difference(document.querySelectorAll('.toolbar-menu'), [this.emoji_picker_view.el]); utils.slideInAllElements(elements).then(_.partial(utils.slideToggleElement, this.emoji_picker_view.el)); }, toggleCall: function toggleCall(ev) { ev.stopPropagation(); _converse.emit('callButtonClicked', { connection: _converse.connection, model: this.model }); }, onChatStatusChanged: function onChatStatusChanged(item) { var chat_status = item.get('chat_status'); var fullname = item.get('fullname'); fullname = _.isEmpty(fullname) ? item.get('jid') : fullname; if (this.$el.is(':visible')) { if (chat_status === 'offline') { this.showStatusNotification(fullname + ' ' + __('has gone offline')); } else if (chat_status === 'away') { this.showStatusNotification(fullname + ' ' + __('has gone away')); } else if (chat_status === 'dnd') { this.showStatusNotification(fullname + ' ' + __('is busy')); } else if (chat_status === 'online') { this.$el.find('div.chat-event').remove(); } } }, onStatusChanged: function onStatusChanged(item) { this.showStatusMessage(); _converse.emit('contactStatusMessageChanged', { 'contact': item.attributes, 'message': item.get('status') }); }, showStatusMessage: function showStatusMessage(msg) { msg = msg || this.model.get('status'); if (_.isString(msg)) { this.$el.find('p.user-custom-message').text(msg).attr('title', msg); } return this; }, close: function close(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } if (_converse.connection.connected) { // Immediately sending the chat state, because the // model is going to be destroyed afterwards. this.model.set('chat_state', _converse.INACTIVE); this.sendChatState(); } try { this.model.destroy(); } catch (e) { _converse.log(e, Strophe.LogLevel.ERROR); } this.remove(); _converse.emit('chatBoxClosed', this); return this; }, getToolbarOptions: function getToolbarOptions(options) { return _.extend(options || {}, { 'label_clear': __('Clear all messages'), 'label_insert_smiley': __('Insert a smiley'), 'label_start_call': __('Start a call'), 'show_call_button': _converse.visible_toolbar_buttons.call, 'show_clear_button': _converse.visible_toolbar_buttons.clear, 'use_emoji': _converse.visible_toolbar_buttons.emoji }); }, renderToolbar: function renderToolbar(toolbar, options) { if (!_converse.show_toolbar) { return; } toolbar = toolbar || tpl_toolbar; options = _.assign(this.model.toJSON(), this.getToolbarOptions(options || {})); this.el.querySelector('.chat-toolbar').innerHTML = toolbar(options); var toggle = this.el.querySelector('.toggle-smiley'); toggle.innerHTML = ''; toggle.appendChild(this.emoji_picker_view.render().el); return this; }, renderAvatar: function renderAvatar() { if (!this.model.get('image')) { return; } var width = _converse.chatview_avatar_width; var height = _converse.chatview_avatar_height; var img_src = "data:" + this.model.get('image_type') + ";base64," + this.model.get('image'), canvas = $(tpl_avatar({ 'width': width, 'height': height })).get(0); if (!(canvas.getContext && canvas.getContext('2d'))) { return this; } var ctx = canvas.getContext('2d'); var img = new Image(); // Create new Image object img.onload = function () { var ratio = img.width / img.height; if (ratio < 1) { ctx.drawImage(img, 0, 0, width, height * (1 / ratio)); } else { ctx.drawImage(img, 0, 0, width, height * ratio); } }; img.src = img_src; this.$el.find('.chat-title').before(canvas); return this; }, focus: function focus() { this.$el.find('.chat-textarea').focus(); _converse.emit('chatBoxFocused', this); return this; }, hide: function hide() { this.el.classList.add('hidden'); utils.refreshWebkit(); return this; }, afterShown: function afterShown(focus) { if (utils.isPersistableModel(this.model)) { this.model.save(); } this.setChatState(_converse.ACTIVE); this.scrollDown(); if (focus) { this.focus(); } }, _show: function _show(focus) { /* Inner show method that gets debounced */ if (this.$el.is(':visible') && this.$el.css('opacity') === "1") { if (focus) { this.focus(); } return; } utils.fadeIn(this.el, _.bind(this.afterShown, this, focus)); }, show: function show(focus) { if (_.isUndefined(this.debouncedShow)) { /* We wrap the method in a debouncer and set it on the * instance, so that we have it debounced per instance. * Debouncing it on the class-level is too broad. */ this.debouncedShow = _.debounce(this._show, 250, { 'leading': true }); } this.debouncedShow.apply(this, arguments); return this; }, hideNewMessagesIndicator: function hideNewMessagesIndicator() { var new_msgs_indicator = this.el.querySelector('.new-msgs-indicator'); if (!_.isNull(new_msgs_indicator)) { new_msgs_indicator.classList.add('hidden'); } }, markScrolled: function markScrolled(ev) { /* Called when the chat content is scrolled up or down. * We want to record when the user has scrolled away from * the bottom, so that we don't automatically scroll away * from what the user is reading when new messages are * received. */ if (ev && ev.preventDefault) { ev.preventDefault(); } if (this.model.get('auto_scrolled')) { this.model.set({ 'scrolled': false, 'auto_scrolled': false }); return; } var scrolled = true; var is_at_bottom = this.$content.scrollTop() + this.$content.innerHeight() >= this.$content[0].scrollHeight - 10; if (is_at_bottom) { scrolled = false; this.onScrolledDown(); } utils.safeSave(this.model, { 'scrolled': scrolled }); }, viewUnreadMessages: function viewUnreadMessages() { this.model.save('scrolled', false); this.scrollDown(); }, _scrollDown: function _scrollDown() { /* Inner method that gets debounced */ if (this.$content.is(':visible') && !this.model.get('scrolled')) { this.$content.scrollTop(this.$content[0].scrollHeight); this.onScrolledDown(); this.model.save({ 'auto_scrolled': true }); } }, onScrolledDown: function onScrolledDown() { this.hideNewMessagesIndicator(); if (_converse.windowState !== 'hidden') { this.model.clearUnreadMsgCounter(); } _converse.emit('chatBoxScrolledDown', { 'chatbox': this.model }); }, scrollDown: function scrollDown() { if (_.isUndefined(this.debouncedScrollDown)) { /* We wrap the method in a debouncer and set it on the * instance, so that we have it debounced per instance. * Debouncing it on the class-level is too broad. */ this.debouncedScrollDown = _.debounce(this._scrollDown, 250); } this.debouncedScrollDown.apply(this, arguments); return this; }, onWindowStateChanged: function onWindowStateChanged(state) { if (this.model.get('num_unread', 0) && !this.model.newMessageWillBeHidden()) { this.model.clearUnreadMsgCounter(); } } }); } }); return converse; }); //# sourceMappingURL=converse-chatview.js.map; define('lodash.fp',['lodash', 'lodash.converter', 'converse-core'], function (_, lodashConverter, converse) { var fp = lodashConverter(_.runInContext()); converse.env.fp = fp; return fp; }); !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define('virtual-dom',[],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.virtualDom=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o * Available under the MIT License * ECMAScript compliant, uniform cross-browser split method */ /** * Splits a string into an array of strings using a regex or string separator. Matches of the * separator are not included in the result array. However, if `separator` is a regex that contains * capturing groups, backreferences are spliced into the result each time `separator` is matched. * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably * cross-browser. * @param {String} str String to split. * @param {RegExp|String} separator Regex or string to use for separating the string. * @param {Number} [limit] Maximum number of items to include in the result array. * @returns {Array} Array of substrings. * @example * * // Basic use * split('a b c d', ' '); * // -> ['a', 'b', 'c', 'd'] * * // With limit * split('a b c d', ' ', 2); * // -> ['a', 'b'] * * // Backreferences in result array * split('..word1 word2..', /([a-z]+)(\d+)/i); * // -> ['..', 'word', '1', ' ', 'word', '2', '..'] */ module.exports = (function split(undef) { var nativeSplit = String.prototype.split, compliantExecNpcg = /()??/.exec("")[1] === undef, // NPCG: nonparticipating capturing group self; self = function(str, separator, limit) { // If `separator` is not a regex, use `nativeSplit` if (Object.prototype.toString.call(separator) !== "[object RegExp]") { return nativeSplit.call(str, separator, limit); } var output = [], flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + // Proposed for ES6 (separator.sticky ? "y" : ""), // Firefox 3+ lastLastIndex = 0, // Make `global` and avoid `lastIndex` issues by working with a copy separator = new RegExp(separator.source, flags + "g"), separator2, match, lastIndex, lastLength; str += ""; // Type-convert if (!compliantExecNpcg) { // Doesn't need flags gy, but they don't hurt separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags); } /* Values for `limit`, per the spec: * If undefined: 4294967295 // Math.pow(2, 32) - 1 * If 0, Infinity, or NaN: 0 * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296; * If negative number: 4294967296 - Math.floor(Math.abs(limit)) * If other: Type-convert, then use the above rules */ limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1 limit >>> 0; // ToUint32(limit) while (match = separator.exec(str)) { // `separator.lastIndex` is not reliable cross-browser lastIndex = match.index + match[0].length; if (lastIndex > lastLastIndex) { output.push(str.slice(lastLastIndex, match.index)); // Fix browsers whose `exec` methods don't consistently return `undefined` for // nonparticipating capturing groups if (!compliantExecNpcg && match.length > 1) { match[0].replace(separator2, function() { for (var i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undef) { match[i] = undef; } } }); } if (match.length > 1 && match.index < str.length) { Array.prototype.push.apply(output, match.slice(1)); } lastLength = match[0].length; lastLastIndex = lastIndex; if (output.length >= limit) { break; } } if (separator.lastIndex === match.index) { separator.lastIndex++; // Avoid an infinite loop } } if (lastLastIndex === str.length) { if (lastLength || !separator.test("")) { output.push(""); } } else { output.push(str.slice(lastLastIndex)); } return output.length > limit ? output.slice(0, limit) : output; }; return self; })(); },{}],6:[function(require,module,exports){ },{}],7:[function(require,module,exports){ 'use strict'; var OneVersionConstraint = require('individual/one-version'); var MY_VERSION = '7'; OneVersionConstraint('ev-store', MY_VERSION); var hashKey = '__EV_STORE_KEY@' + MY_VERSION; module.exports = EvStore; function EvStore(elem) { var hash = elem[hashKey]; if (!hash) { hash = elem[hashKey] = {}; } return hash; } },{"individual/one-version":9}],8:[function(require,module,exports){ (function (global){ 'use strict'; /*global window, global*/ var root = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}; module.exports = Individual; function Individual(key, value) { if (key in root) { return root[key]; } root[key] = value; return value; } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],9:[function(require,module,exports){ 'use strict'; var Individual = require('./index.js'); module.exports = OneVersion; function OneVersion(moduleName, version, defaultValue) { var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName; var enforceKey = key + '_ENFORCE_SINGLETON'; var versionValue = Individual(enforceKey, version); if (versionValue !== version) { throw new Error('Can only have one copy of ' + moduleName + '.\n' + 'You already have version ' + versionValue + ' installed.\n' + 'This means you cannot install version ' + version); } return Individual(key, defaultValue); } },{"./index.js":8}],10:[function(require,module,exports){ (function (global){ var topLevel = typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : {} var minDoc = require('min-document'); if (typeof document !== 'undefined') { module.exports = document; } else { var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4']; if (!doccy) { doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc; } module.exports = doccy; } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"min-document":6}],11:[function(require,module,exports){ "use strict"; module.exports = function isObject(x) { return typeof x === "object" && x !== null; }; },{}],12:[function(require,module,exports){ var nativeIsArray = Array.isArray var toString = Object.prototype.toString module.exports = nativeIsArray || isArray function isArray(obj) { return toString.call(obj) === "[object Array]" } },{}],13:[function(require,module,exports){ var patch = require("./vdom/patch.js") module.exports = patch },{"./vdom/patch.js":18}],14:[function(require,module,exports){ var isObject = require("is-object") var isHook = require("../vnode/is-vhook.js") module.exports = applyProperties function applyProperties(node, props, previous) { for (var propName in props) { var propValue = props[propName] if (propValue === undefined) { removeProperty(node, propName, propValue, previous); } else if (isHook(propValue)) { removeProperty(node, propName, propValue, previous) if (propValue.hook) { propValue.hook(node, propName, previous ? previous[propName] : undefined) } } else { if (isObject(propValue)) { patchObject(node, props, previous, propName, propValue); } else { node[propName] = propValue } } } } function removeProperty(node, propName, propValue, previous) { if (previous) { var previousValue = previous[propName] if (!isHook(previousValue)) { if (propName === "attributes") { for (var attrName in previousValue) { node.removeAttribute(attrName) } } else if (propName === "style") { for (var i in previousValue) { node.style[i] = "" } } else if (typeof previousValue === "string") { node[propName] = "" } else { node[propName] = null } } else if (previousValue.unhook) { previousValue.unhook(node, propName, propValue) } } } function patchObject(node, props, previous, propName, propValue) { var previousValue = previous ? previous[propName] : undefined // Set attributes if (propName === "attributes") { for (var attrName in propValue) { var attrValue = propValue[attrName] if (attrValue === undefined) { node.removeAttribute(attrName) } else { node.setAttribute(attrName, attrValue) } } return } if(previousValue && isObject(previousValue) && getPrototype(previousValue) !== getPrototype(propValue)) { node[propName] = propValue return } if (!isObject(node[propName])) { node[propName] = {} } var replacer = propName === "style" ? "" : undefined for (var k in propValue) { var value = propValue[k] node[propName][k] = (value === undefined) ? replacer : value } } function getPrototype(value) { if (Object.getPrototypeOf) { return Object.getPrototypeOf(value) } else if (value.__proto__) { return value.__proto__ } else if (value.constructor) { return value.constructor.prototype } } },{"../vnode/is-vhook.js":26,"is-object":11}],15:[function(require,module,exports){ var document = require("global/document") var applyProperties = require("./apply-properties") var isVNode = require("../vnode/is-vnode.js") var isVText = require("../vnode/is-vtext.js") var isWidget = require("../vnode/is-widget.js") var handleThunk = require("../vnode/handle-thunk.js") module.exports = createElement function createElement(vnode, opts) { var doc = opts ? opts.document || document : document var warn = opts ? opts.warn : null vnode = handleThunk(vnode).a if (isWidget(vnode)) { return vnode.init() } else if (isVText(vnode)) { return doc.createTextNode(vnode.text) } else if (!isVNode(vnode)) { if (warn) { warn("Item is not a valid virtual dom node", vnode) } return null } var node = (vnode.namespace === null) ? doc.createElement(vnode.tagName) : doc.createElementNS(vnode.namespace, vnode.tagName) var props = vnode.properties applyProperties(node, props) var children = vnode.children for (var i = 0; i < children.length; i++) { var childNode = createElement(children[i], opts) if (childNode) { node.appendChild(childNode) } } return node } },{"../vnode/handle-thunk.js":24,"../vnode/is-vnode.js":27,"../vnode/is-vtext.js":28,"../vnode/is-widget.js":29,"./apply-properties":14,"global/document":10}],16:[function(require,module,exports){ // Maps a virtual DOM tree onto a real DOM tree in an efficient manner. // We don't want to read all of the DOM nodes in the tree so we use // the in-order tree indexing to eliminate recursion down certain branches. // We only recurse into a DOM node if we know that it contains a child of // interest. var noChild = {} module.exports = domIndex function domIndex(rootNode, tree, indices, nodes) { if (!indices || indices.length === 0) { return {} } else { indices.sort(ascending) return recurse(rootNode, tree, indices, nodes, 0) } } function recurse(rootNode, tree, indices, nodes, rootIndex) { nodes = nodes || {} if (rootNode) { if (indexInRange(indices, rootIndex, rootIndex)) { nodes[rootIndex] = rootNode } var vChildren = tree.children if (vChildren) { var childNodes = rootNode.childNodes for (var i = 0; i < tree.children.length; i++) { rootIndex += 1 var vChild = vChildren[i] || noChild var nextIndex = rootIndex + (vChild.count || 0) // skip recursion down the tree if there are no nodes down here if (indexInRange(indices, rootIndex, nextIndex)) { recurse(childNodes[i], vChild, indices, nodes, rootIndex) } rootIndex = nextIndex } } } return nodes } // Binary search for an index in the interval [left, right] function indexInRange(indices, left, right) { if (indices.length === 0) { return false } var minIndex = 0 var maxIndex = indices.length - 1 var currentIndex var currentItem while (minIndex <= maxIndex) { currentIndex = ((maxIndex + minIndex) / 2) >> 0 currentItem = indices[currentIndex] if (minIndex === maxIndex) { return currentItem >= left && currentItem <= right } else if (currentItem < left) { minIndex = currentIndex + 1 } else if (currentItem > right) { maxIndex = currentIndex - 1 } else { return true } } return false; } function ascending(a, b) { return a > b ? 1 : -1 } },{}],17:[function(require,module,exports){ var applyProperties = require("./apply-properties") var isWidget = require("../vnode/is-widget.js") var VPatch = require("../vnode/vpatch.js") var updateWidget = require("./update-widget") module.exports = applyPatch function applyPatch(vpatch, domNode, renderOptions) { var type = vpatch.type var vNode = vpatch.vNode var patch = vpatch.patch switch (type) { case VPatch.REMOVE: return removeNode(domNode, vNode) case VPatch.INSERT: return insertNode(domNode, patch, renderOptions) case VPatch.VTEXT: return stringPatch(domNode, vNode, patch, renderOptions) case VPatch.WIDGET: return widgetPatch(domNode, vNode, patch, renderOptions) case VPatch.VNODE: return vNodePatch(domNode, vNode, patch, renderOptions) case VPatch.ORDER: reorderChildren(domNode, patch) return domNode case VPatch.PROPS: applyProperties(domNode, patch, vNode.properties) return domNode case VPatch.THUNK: return replaceRoot(domNode, renderOptions.patch(domNode, patch, renderOptions)) default: return domNode } } function removeNode(domNode, vNode) { var parentNode = domNode.parentNode if (parentNode) { parentNode.removeChild(domNode) } destroyWidget(domNode, vNode); return null } function insertNode(parentNode, vNode, renderOptions) { var newNode = renderOptions.render(vNode, renderOptions) if (parentNode) { parentNode.appendChild(newNode) } return parentNode } function stringPatch(domNode, leftVNode, vText, renderOptions) { var newNode if (domNode.nodeType === 3) { domNode.replaceData(0, domNode.length, vText.text) newNode = domNode } else { var parentNode = domNode.parentNode newNode = renderOptions.render(vText, renderOptions) if (parentNode && newNode !== domNode) { parentNode.replaceChild(newNode, domNode) } } return newNode } function widgetPatch(domNode, leftVNode, widget, renderOptions) { var updating = updateWidget(leftVNode, widget) var newNode if (updating) { newNode = widget.update(leftVNode, domNode) || domNode } else { newNode = renderOptions.render(widget, renderOptions) } var parentNode = domNode.parentNode if (parentNode && newNode !== domNode) { parentNode.replaceChild(newNode, domNode) } if (!updating) { destroyWidget(domNode, leftVNode) } return newNode } function vNodePatch(domNode, leftVNode, vNode, renderOptions) { var parentNode = domNode.parentNode var newNode = renderOptions.render(vNode, renderOptions) if (parentNode && newNode !== domNode) { parentNode.replaceChild(newNode, domNode) } return newNode } function destroyWidget(domNode, w) { if (typeof w.destroy === "function" && isWidget(w)) { w.destroy(domNode) } } function reorderChildren(domNode, moves) { var childNodes = domNode.childNodes var keyMap = {} var node var remove var insert for (var i = 0; i < moves.removes.length; i++) { remove = moves.removes[i] node = childNodes[remove.from] if (remove.key) { keyMap[remove.key] = node } domNode.removeChild(node) } var length = childNodes.length for (var j = 0; j < moves.inserts.length; j++) { insert = moves.inserts[j] node = keyMap[insert.key] // this is the weirdest bug i've ever seen in webkit domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to]) } } function replaceRoot(oldRoot, newRoot) { if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) { oldRoot.parentNode.replaceChild(newRoot, oldRoot) } return newRoot; } },{"../vnode/is-widget.js":29,"../vnode/vpatch.js":32,"./apply-properties":14,"./update-widget":19}],18:[function(require,module,exports){ var document = require("global/document") var isArray = require("x-is-array") var render = require("./create-element") var domIndex = require("./dom-index") var patchOp = require("./patch-op") module.exports = patch function patch(rootNode, patches, renderOptions) { renderOptions = renderOptions || {} renderOptions.patch = renderOptions.patch && renderOptions.patch !== patch ? renderOptions.patch : patchRecursive renderOptions.render = renderOptions.render || render return renderOptions.patch(rootNode, patches, renderOptions) } function patchRecursive(rootNode, patches, renderOptions) { var indices = patchIndices(patches) if (indices.length === 0) { return rootNode } var index = domIndex(rootNode, patches.a, indices) var ownerDocument = rootNode.ownerDocument if (!renderOptions.document && ownerDocument !== document) { renderOptions.document = ownerDocument } for (var i = 0; i < indices.length; i++) { var nodeIndex = indices[i] rootNode = applyPatch(rootNode, index[nodeIndex], patches[nodeIndex], renderOptions) } return rootNode } function applyPatch(rootNode, domNode, patchList, renderOptions) { if (!domNode) { return rootNode } var newNode if (isArray(patchList)) { for (var i = 0; i < patchList.length; i++) { newNode = patchOp(patchList[i], domNode, renderOptions) if (domNode === rootNode) { rootNode = newNode } } } else { newNode = patchOp(patchList, domNode, renderOptions) if (domNode === rootNode) { rootNode = newNode } } return rootNode } function patchIndices(patches) { var indices = [] for (var key in patches) { if (key !== "a") { indices.push(Number(key)) } } return indices } },{"./create-element":15,"./dom-index":16,"./patch-op":17,"global/document":10,"x-is-array":12}],19:[function(require,module,exports){ var isWidget = require("../vnode/is-widget.js") module.exports = updateWidget function updateWidget(a, b) { if (isWidget(a) && isWidget(b)) { if ("name" in a && "name" in b) { return a.id === b.id } else { return a.init === b.init } } return false } },{"../vnode/is-widget.js":29}],20:[function(require,module,exports){ 'use strict'; var EvStore = require('ev-store'); module.exports = EvHook; function EvHook(value) { if (!(this instanceof EvHook)) { return new EvHook(value); } this.value = value; } EvHook.prototype.hook = function (node, propertyName) { var es = EvStore(node); var propName = propertyName.substr(3); es[propName] = this.value; }; EvHook.prototype.unhook = function(node, propertyName) { var es = EvStore(node); var propName = propertyName.substr(3); es[propName] = undefined; }; },{"ev-store":7}],21:[function(require,module,exports){ 'use strict'; module.exports = SoftSetHook; function SoftSetHook(value) { if (!(this instanceof SoftSetHook)) { return new SoftSetHook(value); } this.value = value; } SoftSetHook.prototype.hook = function (node, propertyName) { if (node[propertyName] !== this.value) { node[propertyName] = this.value; } }; },{}],22:[function(require,module,exports){ 'use strict'; var isArray = require('x-is-array'); var VNode = require('../vnode/vnode.js'); var VText = require('../vnode/vtext.js'); var isVNode = require('../vnode/is-vnode'); var isVText = require('../vnode/is-vtext'); var isWidget = require('../vnode/is-widget'); var isHook = require('../vnode/is-vhook'); var isVThunk = require('../vnode/is-thunk'); var parseTag = require('./parse-tag.js'); var softSetHook = require('./hooks/soft-set-hook.js'); var evHook = require('./hooks/ev-hook.js'); module.exports = h; function h(tagName, properties, children) { var childNodes = []; var tag, props, key, namespace; if (!children && isChildren(properties)) { children = properties; props = {}; } props = props || properties || {}; tag = parseTag(tagName, props); // support keys if (props.hasOwnProperty('key')) { key = props.key; props.key = undefined; } // support namespace if (props.hasOwnProperty('namespace')) { namespace = props.namespace; props.namespace = undefined; } // fix cursor bug if (tag === 'INPUT' && !namespace && props.hasOwnProperty('value') && props.value !== undefined && !isHook(props.value) ) { props.value = softSetHook(props.value); } transformProperties(props); if (children !== undefined && children !== null) { addChild(children, childNodes, tag, props); } return new VNode(tag, props, childNodes, key, namespace); } function addChild(c, childNodes, tag, props) { if (typeof c === 'string') { childNodes.push(new VText(c)); } else if (typeof c === 'number') { childNodes.push(new VText(String(c))); } else if (isChild(c)) { childNodes.push(c); } else if (isArray(c)) { for (var i = 0; i < c.length; i++) { addChild(c[i], childNodes, tag, props); } } else if (c === null || c === undefined) { return; } else { throw UnexpectedVirtualElement({ foreignObject: c, parentVnode: { tagName: tag, properties: props } }); } } function transformProperties(props) { for (var propName in props) { if (props.hasOwnProperty(propName)) { var value = props[propName]; if (isHook(value)) { continue; } if (propName.substr(0, 3) === 'ev-') { // add ev-foo support props[propName] = evHook(value); } } } } function isChild(x) { return isVNode(x) || isVText(x) || isWidget(x) || isVThunk(x); } function isChildren(x) { return typeof x === 'string' || isArray(x) || isChild(x); } function UnexpectedVirtualElement(data) { var err = new Error(); err.type = 'virtual-hyperscript.unexpected.virtual-element'; err.message = 'Unexpected virtual child passed to h().\n' + 'Expected a VNode / Vthunk / VWidget / string but:\n' + 'got:\n' + errorString(data.foreignObject) + '.\n' + 'The parent vnode is:\n' + errorString(data.parentVnode) '\n' + 'Suggested fix: change your `h(..., [ ... ])` callsite.'; err.foreignObject = data.foreignObject; err.parentVnode = data.parentVnode; return err; } function errorString(obj) { try { return JSON.stringify(obj, null, ' '); } catch (e) { return String(obj); } } },{"../vnode/is-thunk":25,"../vnode/is-vhook":26,"../vnode/is-vnode":27,"../vnode/is-vtext":28,"../vnode/is-widget":29,"../vnode/vnode.js":31,"../vnode/vtext.js":33,"./hooks/ev-hook.js":20,"./hooks/soft-set-hook.js":21,"./parse-tag.js":23,"x-is-array":12}],23:[function(require,module,exports){ 'use strict'; var split = require('browser-split'); var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/; var notClassId = /^\.|#/; module.exports = parseTag; function parseTag(tag, props) { if (!tag) { return 'DIV'; } var noId = !(props.hasOwnProperty('id')); var tagParts = split(tag, classIdSplit); var tagName = null; if (notClassId.test(tagParts[1])) { tagName = 'DIV'; } var classes, part, type, i; for (i = 0; i < tagParts.length; i++) { part = tagParts[i]; if (!part) { continue; } type = part.charAt(0); if (!tagName) { tagName = part; } else if (type === '.') { classes = classes || []; classes.push(part.substring(1, part.length)); } else if (type === '#' && noId) { props.id = part.substring(1, part.length); } } if (classes) { if (props.className) { classes.push(props.className); } props.className = classes.join(' '); } return props.namespace ? tagName : tagName.toUpperCase(); } },{"browser-split":5}],24:[function(require,module,exports){ var isVNode = require("./is-vnode") var isVText = require("./is-vtext") var isWidget = require("./is-widget") var isThunk = require("./is-thunk") module.exports = handleThunk function handleThunk(a, b) { var renderedA = a var renderedB = b if (isThunk(b)) { renderedB = renderThunk(b, a) } if (isThunk(a)) { renderedA = renderThunk(a, null) } return { a: renderedA, b: renderedB } } function renderThunk(thunk, previous) { var renderedThunk = thunk.vnode if (!renderedThunk) { renderedThunk = thunk.vnode = thunk.render(previous) } if (!(isVNode(renderedThunk) || isVText(renderedThunk) || isWidget(renderedThunk))) { throw new Error("thunk did not return a valid node"); } return renderedThunk } },{"./is-thunk":25,"./is-vnode":27,"./is-vtext":28,"./is-widget":29}],25:[function(require,module,exports){ module.exports = isThunk function isThunk(t) { return t && t.type === "Thunk" } },{}],26:[function(require,module,exports){ module.exports = isHook function isHook(hook) { return hook && (typeof hook.hook === "function" && !hook.hasOwnProperty("hook") || typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook")) } },{}],27:[function(require,module,exports){ var version = require("./version") module.exports = isVirtualNode function isVirtualNode(x) { return x && x.type === "VirtualNode" && x.version === version } },{"./version":30}],28:[function(require,module,exports){ var version = require("./version") module.exports = isVirtualText function isVirtualText(x) { return x && x.type === "VirtualText" && x.version === version } },{"./version":30}],29:[function(require,module,exports){ module.exports = isWidget function isWidget(w) { return w && w.type === "Widget" } },{}],30:[function(require,module,exports){ module.exports = "2" },{}],31:[function(require,module,exports){ var version = require("./version") var isVNode = require("./is-vnode") var isWidget = require("./is-widget") var isThunk = require("./is-thunk") var isVHook = require("./is-vhook") module.exports = VirtualNode var noProperties = {} var noChildren = [] function VirtualNode(tagName, properties, children, key, namespace) { this.tagName = tagName this.properties = properties || noProperties this.children = children || noChildren this.key = key != null ? String(key) : undefined this.namespace = (typeof namespace === "string") ? namespace : null var count = (children && children.length) || 0 var descendants = 0 var hasWidgets = false var hasThunks = false var descendantHooks = false var hooks for (var propName in properties) { if (properties.hasOwnProperty(propName)) { var property = properties[propName] if (isVHook(property) && property.unhook) { if (!hooks) { hooks = {} } hooks[propName] = property } } } for (var i = 0; i < count; i++) { var child = children[i] if (isVNode(child)) { descendants += child.count || 0 if (!hasWidgets && child.hasWidgets) { hasWidgets = true } if (!hasThunks && child.hasThunks) { hasThunks = true } if (!descendantHooks && (child.hooks || child.descendantHooks)) { descendantHooks = true } } else if (!hasWidgets && isWidget(child)) { if (typeof child.destroy === "function") { hasWidgets = true } } else if (!hasThunks && isThunk(child)) { hasThunks = true; } } this.count = count + descendants this.hasWidgets = hasWidgets this.hasThunks = hasThunks this.hooks = hooks this.descendantHooks = descendantHooks } VirtualNode.prototype.version = version VirtualNode.prototype.type = "VirtualNode" },{"./is-thunk":25,"./is-vhook":26,"./is-vnode":27,"./is-widget":29,"./version":30}],32:[function(require,module,exports){ var version = require("./version") VirtualPatch.NONE = 0 VirtualPatch.VTEXT = 1 VirtualPatch.VNODE = 2 VirtualPatch.WIDGET = 3 VirtualPatch.PROPS = 4 VirtualPatch.ORDER = 5 VirtualPatch.INSERT = 6 VirtualPatch.REMOVE = 7 VirtualPatch.THUNK = 8 module.exports = VirtualPatch function VirtualPatch(type, vNode, patch) { this.type = Number(type) this.vNode = vNode this.patch = patch } VirtualPatch.prototype.version = version VirtualPatch.prototype.type = "VirtualPatch" },{"./version":30}],33:[function(require,module,exports){ var version = require("./version") module.exports = VirtualText function VirtualText(text) { this.text = String(text) } VirtualText.prototype.version = version VirtualText.prototype.type = "VirtualText" },{"./version":30}],34:[function(require,module,exports){ var isObject = require("is-object") var isHook = require("../vnode/is-vhook") module.exports = diffProps function diffProps(a, b) { var diff for (var aKey in a) { if (!(aKey in b)) { diff = diff || {} diff[aKey] = undefined } var aValue = a[aKey] var bValue = b[aKey] if (aValue === bValue) { continue } else if (isObject(aValue) && isObject(bValue)) { if (getPrototype(bValue) !== getPrototype(aValue)) { diff = diff || {} diff[aKey] = bValue } else if (isHook(bValue)) { diff = diff || {} diff[aKey] = bValue } else { var objectDiff = diffProps(aValue, bValue) if (objectDiff) { diff = diff || {} diff[aKey] = objectDiff } } } else { diff = diff || {} diff[aKey] = bValue } } for (var bKey in b) { if (!(bKey in a)) { diff = diff || {} diff[bKey] = b[bKey] } } return diff } function getPrototype(value) { if (Object.getPrototypeOf) { return Object.getPrototypeOf(value) } else if (value.__proto__) { return value.__proto__ } else if (value.constructor) { return value.constructor.prototype } } },{"../vnode/is-vhook":26,"is-object":11}],35:[function(require,module,exports){ var isArray = require("x-is-array") var VPatch = require("../vnode/vpatch") var isVNode = require("../vnode/is-vnode") var isVText = require("../vnode/is-vtext") var isWidget = require("../vnode/is-widget") var isThunk = require("../vnode/is-thunk") var handleThunk = require("../vnode/handle-thunk") var diffProps = require("./diff-props") module.exports = diff function diff(a, b) { var patch = { a: a } walk(a, b, patch, 0) return patch } function walk(a, b, patch, index) { if (a === b) { return } var apply = patch[index] var applyClear = false if (isThunk(a) || isThunk(b)) { thunks(a, b, patch, index) } else if (b == null) { // If a is a widget we will add a remove patch for it // Otherwise any child widgets/hooks must be destroyed. // This prevents adding two remove patches for a widget. if (!isWidget(a)) { clearState(a, patch, index) apply = patch[index] } apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b)) } else if (isVNode(b)) { if (isVNode(a)) { if (a.tagName === b.tagName && a.namespace === b.namespace && a.key === b.key) { var propsPatch = diffProps(a.properties, b.properties) if (propsPatch) { apply = appendPatch(apply, new VPatch(VPatch.PROPS, a, propsPatch)) } apply = diffChildren(a, b, patch, apply, index) } else { apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b)) applyClear = true } } else { apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b)) applyClear = true } } else if (isVText(b)) { if (!isVText(a)) { apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b)) applyClear = true } else if (a.text !== b.text) { apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b)) } } else if (isWidget(b)) { if (!isWidget(a)) { applyClear = true } apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b)) } if (apply) { patch[index] = apply } if (applyClear) { clearState(a, patch, index) } } function diffChildren(a, b, patch, apply, index) { var aChildren = a.children var orderedSet = reorder(aChildren, b.children) var bChildren = orderedSet.children var aLen = aChildren.length var bLen = bChildren.length var len = aLen > bLen ? aLen : bLen for (var i = 0; i < len; i++) { var leftNode = aChildren[i] var rightNode = bChildren[i] index += 1 if (!leftNode) { if (rightNode) { // Excess nodes in b need to be added apply = appendPatch(apply, new VPatch(VPatch.INSERT, null, rightNode)) } } else { walk(leftNode, rightNode, patch, index) } if (isVNode(leftNode) && leftNode.count) { index += leftNode.count } } if (orderedSet.moves) { // Reorder nodes last apply = appendPatch(apply, new VPatch( VPatch.ORDER, a, orderedSet.moves )) } return apply } function clearState(vNode, patch, index) { // TODO: Make this a single walk, not two unhook(vNode, patch, index) destroyWidgets(vNode, patch, index) } // Patch records for all destroyed widgets must be added because we need // a DOM node reference for the destroy function function destroyWidgets(vNode, patch, index) { if (isWidget(vNode)) { if (typeof vNode.destroy === "function") { patch[index] = appendPatch( patch[index], new VPatch(VPatch.REMOVE, vNode, null) ) } } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) { var children = vNode.children var len = children.length for (var i = 0; i < len; i++) { var child = children[i] index += 1 destroyWidgets(child, patch, index) if (isVNode(child) && child.count) { index += child.count } } } else if (isThunk(vNode)) { thunks(vNode, null, patch, index) } } // Create a sub-patch for thunks function thunks(a, b, patch, index) { var nodes = handleThunk(a, b) var thunkPatch = diff(nodes.a, nodes.b) if (hasPatches(thunkPatch)) { patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch) } } function hasPatches(patch) { for (var index in patch) { if (index !== "a") { return true } } return false } // Execute hooks when two nodes are identical function unhook(vNode, patch, index) { if (isVNode(vNode)) { if (vNode.hooks) { patch[index] = appendPatch( patch[index], new VPatch( VPatch.PROPS, vNode, undefinedKeys(vNode.hooks) ) ) } if (vNode.descendantHooks || vNode.hasThunks) { var children = vNode.children var len = children.length for (var i = 0; i < len; i++) { var child = children[i] index += 1 unhook(child, patch, index) if (isVNode(child) && child.count) { index += child.count } } } } else if (isThunk(vNode)) { thunks(vNode, null, patch, index) } } function undefinedKeys(obj) { var result = {} for (var key in obj) { result[key] = undefined } return result } // List diff, naive left to right reordering function reorder(aChildren, bChildren) { // O(M) time, O(M) memory var bChildIndex = keyIndex(bChildren) var bKeys = bChildIndex.keys var bFree = bChildIndex.free if (bFree.length === bChildren.length) { return { children: bChildren, moves: null } } // O(N) time, O(N) memory var aChildIndex = keyIndex(aChildren) var aKeys = aChildIndex.keys var aFree = aChildIndex.free if (aFree.length === aChildren.length) { return { children: bChildren, moves: null } } // O(MAX(N, M)) memory var newChildren = [] var freeIndex = 0 var freeCount = bFree.length var deletedItems = 0 // Iterate through a and match a node in b // O(N) time, for (var i = 0 ; i < aChildren.length; i++) { var aItem = aChildren[i] var itemIndex if (aItem.key) { if (bKeys.hasOwnProperty(aItem.key)) { // Match up the old keys itemIndex = bKeys[aItem.key] newChildren.push(bChildren[itemIndex]) } else { // Remove old keyed items itemIndex = i - deletedItems++ newChildren.push(null) } } else { // Match the item in a with the next free item in b if (freeIndex < freeCount) { itemIndex = bFree[freeIndex++] newChildren.push(bChildren[itemIndex]) } else { // There are no free items in b to match with // the free items in a, so the extra free nodes // are deleted. itemIndex = i - deletedItems++ newChildren.push(null) } } } var lastFreeIndex = freeIndex >= bFree.length ? bChildren.length : bFree[freeIndex] // Iterate through b and append any new keys // O(M) time for (var j = 0; j < bChildren.length; j++) { var newItem = bChildren[j] if (newItem.key) { if (!aKeys.hasOwnProperty(newItem.key)) { // Add any new keyed items // We are adding new items to the end and then sorting them // in place. In future we should insert new items in place. newChildren.push(newItem) } } else if (j >= lastFreeIndex) { // Add any leftover non-keyed items newChildren.push(newItem) } } var simulate = newChildren.slice() var simulateIndex = 0 var removes = [] var inserts = [] var simulateItem for (var k = 0; k < bChildren.length;) { var wantedItem = bChildren[k] simulateItem = simulate[simulateIndex] // remove items while (simulateItem === null && simulate.length) { removes.push(remove(simulate, simulateIndex, null)) simulateItem = simulate[simulateIndex] } if (!simulateItem || simulateItem.key !== wantedItem.key) { // if we need a key in this position... if (wantedItem.key) { if (simulateItem && simulateItem.key) { // if an insert doesn't put this key in place, it needs to move if (bKeys[simulateItem.key] !== k + 1) { removes.push(remove(simulate, simulateIndex, simulateItem.key)) simulateItem = simulate[simulateIndex] // if the remove didn't put the wanted item in place, we need to insert it if (!simulateItem || simulateItem.key !== wantedItem.key) { inserts.push({key: wantedItem.key, to: k}) } // items are matching, so skip ahead else { simulateIndex++ } } else { inserts.push({key: wantedItem.key, to: k}) } } else { inserts.push({key: wantedItem.key, to: k}) } k++ } // a key in simulate has no matching wanted key, remove it else if (simulateItem && simulateItem.key) { removes.push(remove(simulate, simulateIndex, simulateItem.key)) } } else { simulateIndex++ k++ } } // remove all the remaining nodes from simulate while(simulateIndex < simulate.length) { simulateItem = simulate[simulateIndex] removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key)) } // If the only moves we have are deletes then we can just // let the delete patch remove these items. if (removes.length === deletedItems && !inserts.length) { return { children: newChildren, moves: null } } return { children: newChildren, moves: { removes: removes, inserts: inserts } } } function remove(arr, index, key) { arr.splice(index, 1) return { from: index, key: key } } function keyIndex(children) { var keys = {} var free = [] var length = children.length for (var i = 0; i < length; i++) { var child = children[i] if (child.key) { keys[child.key] = i } else { free.push(i) } } return { keys: keys, // A hash of key name to index free: free // An array of unkeyed item indices } } function appendPatch(apply, patch) { if (apply) { if (isArray(apply)) { apply.push(patch) } else { apply = [apply, patch] } return apply } else { return patch } } },{"../vnode/handle-thunk":24,"../vnode/is-thunk":25,"../vnode/is-vnode":27,"../vnode/is-vtext":28,"../vnode/is-widget":29,"../vnode/vpatch":32,"./diff-props":34,"x-is-array":12}]},{},[4])(4) }); (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define('vdom-parser',[],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.vdomParser = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1) { output[item] = output[item].replace(/\"/g, '') } } return { name: 'style', value: output }; } },{"./namespace-map":2,"./property-map":10,"virtual-dom/vnode/vnode":8,"virtual-dom/vnode/vtext":9}],2:[function(require,module,exports){ /** * namespace-map.js * * Necessary to map svg attributes back to their namespace */ // extracted from https://github.com/Matt-Esch/virtual-dom/blob/master/virtual-hyperscript/svg-attribute-namespace.js var DEFAULT_NAMESPACE = null; var EV_NAMESPACE = 'http://www.w3.org/2001/xml-events'; var XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink'; var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'; var namespaces = { 'about': DEFAULT_NAMESPACE , 'accent-height': DEFAULT_NAMESPACE , 'accumulate': DEFAULT_NAMESPACE , 'additive': DEFAULT_NAMESPACE , 'alignment-baseline': DEFAULT_NAMESPACE , 'alphabetic': DEFAULT_NAMESPACE , 'amplitude': DEFAULT_NAMESPACE , 'arabic-form': DEFAULT_NAMESPACE , 'ascent': DEFAULT_NAMESPACE , 'attributeName': DEFAULT_NAMESPACE , 'attributeType': DEFAULT_NAMESPACE , 'azimuth': DEFAULT_NAMESPACE , 'bandwidth': DEFAULT_NAMESPACE , 'baseFrequency': DEFAULT_NAMESPACE , 'baseProfile': DEFAULT_NAMESPACE , 'baseline-shift': DEFAULT_NAMESPACE , 'bbox': DEFAULT_NAMESPACE , 'begin': DEFAULT_NAMESPACE , 'bias': DEFAULT_NAMESPACE , 'by': DEFAULT_NAMESPACE , 'calcMode': DEFAULT_NAMESPACE , 'cap-height': DEFAULT_NAMESPACE , 'class': DEFAULT_NAMESPACE , 'clip': DEFAULT_NAMESPACE , 'clip-path': DEFAULT_NAMESPACE , 'clip-rule': DEFAULT_NAMESPACE , 'clipPathUnits': DEFAULT_NAMESPACE , 'color': DEFAULT_NAMESPACE , 'color-interpolation': DEFAULT_NAMESPACE , 'color-interpolation-filters': DEFAULT_NAMESPACE , 'color-profile': DEFAULT_NAMESPACE , 'color-rendering': DEFAULT_NAMESPACE , 'content': DEFAULT_NAMESPACE , 'contentScriptType': DEFAULT_NAMESPACE , 'contentStyleType': DEFAULT_NAMESPACE , 'cursor': DEFAULT_NAMESPACE , 'cx': DEFAULT_NAMESPACE , 'cy': DEFAULT_NAMESPACE , 'd': DEFAULT_NAMESPACE , 'datatype': DEFAULT_NAMESPACE , 'defaultAction': DEFAULT_NAMESPACE , 'descent': DEFAULT_NAMESPACE , 'diffuseConstant': DEFAULT_NAMESPACE , 'direction': DEFAULT_NAMESPACE , 'display': DEFAULT_NAMESPACE , 'divisor': DEFAULT_NAMESPACE , 'dominant-baseline': DEFAULT_NAMESPACE , 'dur': DEFAULT_NAMESPACE , 'dx': DEFAULT_NAMESPACE , 'dy': DEFAULT_NAMESPACE , 'edgeMode': DEFAULT_NAMESPACE , 'editable': DEFAULT_NAMESPACE , 'elevation': DEFAULT_NAMESPACE , 'enable-background': DEFAULT_NAMESPACE , 'end': DEFAULT_NAMESPACE , 'ev:event': EV_NAMESPACE , 'event': DEFAULT_NAMESPACE , 'exponent': DEFAULT_NAMESPACE , 'externalResourcesRequired': DEFAULT_NAMESPACE , 'fill': DEFAULT_NAMESPACE , 'fill-opacity': DEFAULT_NAMESPACE , 'fill-rule': DEFAULT_NAMESPACE , 'filter': DEFAULT_NAMESPACE , 'filterRes': DEFAULT_NAMESPACE , 'filterUnits': DEFAULT_NAMESPACE , 'flood-color': DEFAULT_NAMESPACE , 'flood-opacity': DEFAULT_NAMESPACE , 'focusHighlight': DEFAULT_NAMESPACE , 'focusable': DEFAULT_NAMESPACE , 'font-family': DEFAULT_NAMESPACE , 'font-size': DEFAULT_NAMESPACE , 'font-size-adjust': DEFAULT_NAMESPACE , 'font-stretch': DEFAULT_NAMESPACE , 'font-style': DEFAULT_NAMESPACE , 'font-variant': DEFAULT_NAMESPACE , 'font-weight': DEFAULT_NAMESPACE , 'format': DEFAULT_NAMESPACE , 'from': DEFAULT_NAMESPACE , 'fx': DEFAULT_NAMESPACE , 'fy': DEFAULT_NAMESPACE , 'g1': DEFAULT_NAMESPACE , 'g2': DEFAULT_NAMESPACE , 'glyph-name': DEFAULT_NAMESPACE , 'glyph-orientation-horizontal': DEFAULT_NAMESPACE , 'glyph-orientation-vertical': DEFAULT_NAMESPACE , 'glyphRef': DEFAULT_NAMESPACE , 'gradientTransform': DEFAULT_NAMESPACE , 'gradientUnits': DEFAULT_NAMESPACE , 'handler': DEFAULT_NAMESPACE , 'hanging': DEFAULT_NAMESPACE , 'height': DEFAULT_NAMESPACE , 'horiz-adv-x': DEFAULT_NAMESPACE , 'horiz-origin-x': DEFAULT_NAMESPACE , 'horiz-origin-y': DEFAULT_NAMESPACE , 'id': DEFAULT_NAMESPACE , 'ideographic': DEFAULT_NAMESPACE , 'image-rendering': DEFAULT_NAMESPACE , 'in': DEFAULT_NAMESPACE , 'in2': DEFAULT_NAMESPACE , 'initialVisibility': DEFAULT_NAMESPACE , 'intercept': DEFAULT_NAMESPACE , 'k': DEFAULT_NAMESPACE , 'k1': DEFAULT_NAMESPACE , 'k2': DEFAULT_NAMESPACE , 'k3': DEFAULT_NAMESPACE , 'k4': DEFAULT_NAMESPACE , 'kernelMatrix': DEFAULT_NAMESPACE , 'kernelUnitLength': DEFAULT_NAMESPACE , 'kerning': DEFAULT_NAMESPACE , 'keyPoints': DEFAULT_NAMESPACE , 'keySplines': DEFAULT_NAMESPACE , 'keyTimes': DEFAULT_NAMESPACE , 'lang': DEFAULT_NAMESPACE , 'lengthAdjust': DEFAULT_NAMESPACE , 'letter-spacing': DEFAULT_NAMESPACE , 'lighting-color': DEFAULT_NAMESPACE , 'limitingConeAngle': DEFAULT_NAMESPACE , 'local': DEFAULT_NAMESPACE , 'marker-end': DEFAULT_NAMESPACE , 'marker-mid': DEFAULT_NAMESPACE , 'marker-start': DEFAULT_NAMESPACE , 'markerHeight': DEFAULT_NAMESPACE , 'markerUnits': DEFAULT_NAMESPACE , 'markerWidth': DEFAULT_NAMESPACE , 'mask': DEFAULT_NAMESPACE , 'maskContentUnits': DEFAULT_NAMESPACE , 'maskUnits': DEFAULT_NAMESPACE , 'mathematical': DEFAULT_NAMESPACE , 'max': DEFAULT_NAMESPACE , 'media': DEFAULT_NAMESPACE , 'mediaCharacterEncoding': DEFAULT_NAMESPACE , 'mediaContentEncodings': DEFAULT_NAMESPACE , 'mediaSize': DEFAULT_NAMESPACE , 'mediaTime': DEFAULT_NAMESPACE , 'method': DEFAULT_NAMESPACE , 'min': DEFAULT_NAMESPACE , 'mode': DEFAULT_NAMESPACE , 'name': DEFAULT_NAMESPACE , 'nav-down': DEFAULT_NAMESPACE , 'nav-down-left': DEFAULT_NAMESPACE , 'nav-down-right': DEFAULT_NAMESPACE , 'nav-left': DEFAULT_NAMESPACE , 'nav-next': DEFAULT_NAMESPACE , 'nav-prev': DEFAULT_NAMESPACE , 'nav-right': DEFAULT_NAMESPACE , 'nav-up': DEFAULT_NAMESPACE , 'nav-up-left': DEFAULT_NAMESPACE , 'nav-up-right': DEFAULT_NAMESPACE , 'numOctaves': DEFAULT_NAMESPACE , 'observer': DEFAULT_NAMESPACE , 'offset': DEFAULT_NAMESPACE , 'opacity': DEFAULT_NAMESPACE , 'operator': DEFAULT_NAMESPACE , 'order': DEFAULT_NAMESPACE , 'orient': DEFAULT_NAMESPACE , 'orientation': DEFAULT_NAMESPACE , 'origin': DEFAULT_NAMESPACE , 'overflow': DEFAULT_NAMESPACE , 'overlay': DEFAULT_NAMESPACE , 'overline-position': DEFAULT_NAMESPACE , 'overline-thickness': DEFAULT_NAMESPACE , 'panose-1': DEFAULT_NAMESPACE , 'path': DEFAULT_NAMESPACE , 'pathLength': DEFAULT_NAMESPACE , 'patternContentUnits': DEFAULT_NAMESPACE , 'patternTransform': DEFAULT_NAMESPACE , 'patternUnits': DEFAULT_NAMESPACE , 'phase': DEFAULT_NAMESPACE , 'playbackOrder': DEFAULT_NAMESPACE , 'pointer-events': DEFAULT_NAMESPACE , 'points': DEFAULT_NAMESPACE , 'pointsAtX': DEFAULT_NAMESPACE , 'pointsAtY': DEFAULT_NAMESPACE , 'pointsAtZ': DEFAULT_NAMESPACE , 'preserveAlpha': DEFAULT_NAMESPACE , 'preserveAspectRatio': DEFAULT_NAMESPACE , 'primitiveUnits': DEFAULT_NAMESPACE , 'propagate': DEFAULT_NAMESPACE , 'property': DEFAULT_NAMESPACE , 'r': DEFAULT_NAMESPACE , 'radius': DEFAULT_NAMESPACE , 'refX': DEFAULT_NAMESPACE , 'refY': DEFAULT_NAMESPACE , 'rel': DEFAULT_NAMESPACE , 'rendering-intent': DEFAULT_NAMESPACE , 'repeatCount': DEFAULT_NAMESPACE , 'repeatDur': DEFAULT_NAMESPACE , 'requiredExtensions': DEFAULT_NAMESPACE , 'requiredFeatures': DEFAULT_NAMESPACE , 'requiredFonts': DEFAULT_NAMESPACE , 'requiredFormats': DEFAULT_NAMESPACE , 'resource': DEFAULT_NAMESPACE , 'restart': DEFAULT_NAMESPACE , 'result': DEFAULT_NAMESPACE , 'rev': DEFAULT_NAMESPACE , 'role': DEFAULT_NAMESPACE , 'rotate': DEFAULT_NAMESPACE , 'rx': DEFAULT_NAMESPACE , 'ry': DEFAULT_NAMESPACE , 'scale': DEFAULT_NAMESPACE , 'seed': DEFAULT_NAMESPACE , 'shape-rendering': DEFAULT_NAMESPACE , 'slope': DEFAULT_NAMESPACE , 'snapshotTime': DEFAULT_NAMESPACE , 'spacing': DEFAULT_NAMESPACE , 'specularConstant': DEFAULT_NAMESPACE , 'specularExponent': DEFAULT_NAMESPACE , 'spreadMethod': DEFAULT_NAMESPACE , 'startOffset': DEFAULT_NAMESPACE , 'stdDeviation': DEFAULT_NAMESPACE , 'stemh': DEFAULT_NAMESPACE , 'stemv': DEFAULT_NAMESPACE , 'stitchTiles': DEFAULT_NAMESPACE , 'stop-color': DEFAULT_NAMESPACE , 'stop-opacity': DEFAULT_NAMESPACE , 'strikethrough-position': DEFAULT_NAMESPACE , 'strikethrough-thickness': DEFAULT_NAMESPACE , 'string': DEFAULT_NAMESPACE , 'stroke': DEFAULT_NAMESPACE , 'stroke-dasharray': DEFAULT_NAMESPACE , 'stroke-dashoffset': DEFAULT_NAMESPACE , 'stroke-linecap': DEFAULT_NAMESPACE , 'stroke-linejoin': DEFAULT_NAMESPACE , 'stroke-miterlimit': DEFAULT_NAMESPACE , 'stroke-opacity': DEFAULT_NAMESPACE , 'stroke-width': DEFAULT_NAMESPACE , 'surfaceScale': DEFAULT_NAMESPACE , 'syncBehavior': DEFAULT_NAMESPACE , 'syncBehaviorDefault': DEFAULT_NAMESPACE , 'syncMaster': DEFAULT_NAMESPACE , 'syncTolerance': DEFAULT_NAMESPACE , 'syncToleranceDefault': DEFAULT_NAMESPACE , 'systemLanguage': DEFAULT_NAMESPACE , 'tableValues': DEFAULT_NAMESPACE , 'target': DEFAULT_NAMESPACE , 'targetX': DEFAULT_NAMESPACE , 'targetY': DEFAULT_NAMESPACE , 'text-anchor': DEFAULT_NAMESPACE , 'text-decoration': DEFAULT_NAMESPACE , 'text-rendering': DEFAULT_NAMESPACE , 'textLength': DEFAULT_NAMESPACE , 'timelineBegin': DEFAULT_NAMESPACE , 'title': DEFAULT_NAMESPACE , 'to': DEFAULT_NAMESPACE , 'transform': DEFAULT_NAMESPACE , 'transformBehavior': DEFAULT_NAMESPACE , 'type': DEFAULT_NAMESPACE , 'typeof': DEFAULT_NAMESPACE , 'u1': DEFAULT_NAMESPACE , 'u2': DEFAULT_NAMESPACE , 'underline-position': DEFAULT_NAMESPACE , 'underline-thickness': DEFAULT_NAMESPACE , 'unicode': DEFAULT_NAMESPACE , 'unicode-bidi': DEFAULT_NAMESPACE , 'unicode-range': DEFAULT_NAMESPACE , 'units-per-em': DEFAULT_NAMESPACE , 'v-alphabetic': DEFAULT_NAMESPACE , 'v-hanging': DEFAULT_NAMESPACE , 'v-ideographic': DEFAULT_NAMESPACE , 'v-mathematical': DEFAULT_NAMESPACE , 'values': DEFAULT_NAMESPACE , 'version': DEFAULT_NAMESPACE , 'vert-adv-y': DEFAULT_NAMESPACE , 'vert-origin-x': DEFAULT_NAMESPACE , 'vert-origin-y': DEFAULT_NAMESPACE , 'viewBox': DEFAULT_NAMESPACE , 'viewTarget': DEFAULT_NAMESPACE , 'visibility': DEFAULT_NAMESPACE , 'width': DEFAULT_NAMESPACE , 'widths': DEFAULT_NAMESPACE , 'word-spacing': DEFAULT_NAMESPACE , 'writing-mode': DEFAULT_NAMESPACE , 'x': DEFAULT_NAMESPACE , 'x-height': DEFAULT_NAMESPACE , 'x1': DEFAULT_NAMESPACE , 'x2': DEFAULT_NAMESPACE , 'xChannelSelector': DEFAULT_NAMESPACE , 'xlink:actuate': XLINK_NAMESPACE , 'xlink:arcrole': XLINK_NAMESPACE , 'xlink:href': XLINK_NAMESPACE , 'xlink:role': XLINK_NAMESPACE , 'xlink:show': XLINK_NAMESPACE , 'xlink:title': XLINK_NAMESPACE , 'xlink:type': XLINK_NAMESPACE , 'xml:base': XML_NAMESPACE , 'xml:id': XML_NAMESPACE , 'xml:lang': XML_NAMESPACE , 'xml:space': XML_NAMESPACE , 'y': DEFAULT_NAMESPACE , 'y1': DEFAULT_NAMESPACE , 'y2': DEFAULT_NAMESPACE , 'yChannelSelector': DEFAULT_NAMESPACE , 'z': DEFAULT_NAMESPACE , 'zoomAndPan': DEFAULT_NAMESPACE }; module.exports = namespaces; },{}],3:[function(require,module,exports){ module.exports = isThunk function isThunk(t) { return t && t.type === "Thunk" } },{}],4:[function(require,module,exports){ module.exports = isHook function isHook(hook) { return hook && (typeof hook.hook === "function" && !hook.hasOwnProperty("hook") || typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook")) } },{}],5:[function(require,module,exports){ var version = require("./version") module.exports = isVirtualNode function isVirtualNode(x) { return x && x.type === "VirtualNode" && x.version === version } },{"./version":7}],6:[function(require,module,exports){ module.exports = isWidget function isWidget(w) { return w && w.type === "Widget" } },{}],7:[function(require,module,exports){ module.exports = "2" },{}],8:[function(require,module,exports){ var version = require("./version") var isVNode = require("./is-vnode") var isWidget = require("./is-widget") var isThunk = require("./is-thunk") var isVHook = require("./is-vhook") module.exports = VirtualNode var noProperties = {} var noChildren = [] function VirtualNode(tagName, properties, children, key, namespace) { this.tagName = tagName this.properties = properties || noProperties this.children = children || noChildren this.key = key != null ? String(key) : undefined this.namespace = (typeof namespace === "string") ? namespace : null var count = (children && children.length) || 0 var descendants = 0 var hasWidgets = false var hasThunks = false var descendantHooks = false var hooks for (var propName in properties) { if (properties.hasOwnProperty(propName)) { var property = properties[propName] if (isVHook(property) && property.unhook) { if (!hooks) { hooks = {} } hooks[propName] = property } } } for (var i = 0; i < count; i++) { var child = children[i] if (isVNode(child)) { descendants += child.count || 0 if (!hasWidgets && child.hasWidgets) { hasWidgets = true } if (!hasThunks && child.hasThunks) { hasThunks = true } if (!descendantHooks && (child.hooks || child.descendantHooks)) { descendantHooks = true } } else if (!hasWidgets && isWidget(child)) { if (typeof child.destroy === "function") { hasWidgets = true } } else if (!hasThunks && isThunk(child)) { hasThunks = true; } } this.count = count + descendants this.hasWidgets = hasWidgets this.hasThunks = hasThunks this.hooks = hooks this.descendantHooks = descendantHooks } VirtualNode.prototype.version = version VirtualNode.prototype.type = "VirtualNode" },{"./is-thunk":3,"./is-vhook":4,"./is-vnode":5,"./is-widget":6,"./version":7}],9:[function(require,module,exports){ var version = require("./version") module.exports = VirtualText function VirtualText(text) { this.text = String(text) } VirtualText.prototype.version = version VirtualText.prototype.type = "VirtualText" },{"./version":7}],10:[function(require,module,exports){ /** * property-map.js * * Necessary to map dom attributes back to vdom properties */ // invert of https://www.npmjs.com/package/html-attributes var properties = { 'abbr': 'abbr' , 'accept': 'accept' , 'accept-charset': 'acceptCharset' , 'accesskey': 'accessKey' , 'action': 'action' , 'allowfullscreen': 'allowFullScreen' , 'allowtransparency': 'allowTransparency' , 'alt': 'alt' , 'async': 'async' , 'autocomplete': 'autoComplete' , 'autofocus': 'autoFocus' , 'autoplay': 'autoPlay' , 'cellpadding': 'cellPadding' , 'cellspacing': 'cellSpacing' , 'challenge': 'challenge' , 'charset': 'charset' , 'checked': 'checked' , 'cite': 'cite' , 'class': 'className' , 'cols': 'cols' , 'colspan': 'colSpan' , 'command': 'command' , 'content': 'content' , 'contenteditable': 'contentEditable' , 'contextmenu': 'contextMenu' , 'controls': 'controls' , 'coords': 'coords' , 'crossorigin': 'crossOrigin' , 'data': 'data' , 'datetime': 'dateTime' , 'default': 'default' , 'defer': 'defer' , 'dir': 'dir' , 'disabled': 'disabled' , 'download': 'download' , 'draggable': 'draggable' , 'dropzone': 'dropzone' , 'enctype': 'encType' , 'for': 'htmlFor' , 'form': 'form' , 'formaction': 'formAction' , 'formenctype': 'formEncType' , 'formmethod': 'formMethod' , 'formnovalidate': 'formNoValidate' , 'formtarget': 'formTarget' , 'frameBorder': 'frameBorder' , 'headers': 'headers' , 'height': 'height' , 'hidden': 'hidden' , 'high': 'high' , 'href': 'href' , 'hreflang': 'hrefLang' , 'http-equiv': 'httpEquiv' , 'icon': 'icon' , 'id': 'id' , 'inputmode': 'inputMode' , 'ismap': 'isMap' , 'itemid': 'itemId' , 'itemprop': 'itemProp' , 'itemref': 'itemRef' , 'itemscope': 'itemScope' , 'itemtype': 'itemType' , 'kind': 'kind' , 'label': 'label' , 'lang': 'lang' , 'list': 'list' , 'loop': 'loop' , 'manifest': 'manifest' , 'max': 'max' , 'maxlength': 'maxLength' , 'media': 'media' , 'mediagroup': 'mediaGroup' , 'method': 'method' , 'min': 'min' , 'minlength': 'minLength' , 'multiple': 'multiple' , 'muted': 'muted' , 'name': 'name' , 'novalidate': 'noValidate' , 'open': 'open' , 'optimum': 'optimum' , 'pattern': 'pattern' , 'ping': 'ping' , 'placeholder': 'placeholder' , 'poster': 'poster' , 'preload': 'preload' , 'radiogroup': 'radioGroup' , 'readonly': 'readOnly' , 'rel': 'rel' , 'required': 'required' , 'role': 'role' , 'rows': 'rows' , 'rowspan': 'rowSpan' , 'sandbox': 'sandbox' , 'scope': 'scope' , 'scoped': 'scoped' , 'scrolling': 'scrolling' , 'seamless': 'seamless' , 'selected': 'selected' , 'shape': 'shape' , 'size': 'size' , 'sizes': 'sizes' , 'sortable': 'sortable' , 'span': 'span' , 'spellcheck': 'spellCheck' , 'src': 'src' , 'srcdoc': 'srcDoc' , 'srcset': 'srcSet' , 'start': 'start' , 'step': 'step' , 'style': 'style' , 'tabindex': 'tabIndex' , 'target': 'target' , 'title': 'title' , 'translate': 'translate' , 'type': 'type' , 'typemustmatch': 'typeMustMatch' , 'usemap': 'useMap' , 'value': 'value' , 'width': 'width' , 'wmode': 'wmode' , 'wrap': 'wrap' }; module.exports = properties; },{}]},{},[1])(1) }); define('tpl!add_contact_dropdown', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '\n'; } return __p };}); define('tpl!add_contact_form', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '
      \n '; if (error_message) { ; __p += '\n ' + __e(error_message) + '\n '; } ; __p += '\n \n \n
      \n'; } return __p };}); define('tpl!converse_brand_heading', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = ''; with (obj) { __p += '\n
      \n \n converse\n
      \n
      \n'; } return __p };}); define('tpl!change_status_message', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '
      \n \n \n \n \n
      \n'; } return __p };}); define('tpl!chat_status', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '\n'; } return __p };}); define('tpl!choose_status', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = ''; with (obj) { __p += '\n'; } return __p };}); define('tpl!contacts_panel', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '
      \n \n
      \n'; } return __p };}); define('tpl!contacts_tab', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '\n ' + __e(label_contacts) + '\n '; if (num_unread) { ; __p += '\n ' + __e( num_unread ) + '\n '; } ; __p += '\n\n'; } return __p };}); define('tpl!controlbox', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '
      \n
      \n
        \n '; if (!sticky_controlbox) { ; __p += '\n \n '; } ; __p += '\n
        \n
        \n
        \n'; } return __p };}); define('tpl!controlbox_toggle', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '' + __e(label_toggle) + '\n'; } return __p };}); define('tpl!login_panel', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '
        \n ' + __e(__("Login")) + '\n\n \n\n '; if (auto_login || _converse.CONNECTION_STATUS[connection_status] === 'CONNECTING') { ; __p += '\n \n '; } else { ; __p += '\n '; if (authentication == LOGIN || authentication == EXTERNAL) { ; __p += '\n \n \n \n '; if (authentication !== EXTERNAL) { ; __p += '\n \n \n \n '; } ; __p += '\n \n '; } ; __p += '\n '; if (authentication == ANONYMOUS) { ; __p += '\n \n '; } ; __p += '\n '; if (authentication == PREBIND) { ; __p += '\n

        Disconnected.

        \n '; } ; __p += '\n '; } ; __p += '\n\n'; } return __p };}); define('tpl!search_contact', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '
      • \n
        \n \n \n
        \n
      • \n'; } return __p };}); define('tpl!status_option', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '
      • \n \n \n ' + __e( text ) + '\n \n
      • \n'; } return __p };}); define('tpl!group_header', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape; with (obj) { __p += '' + __e(label_group) + '\n'; } return __p };}); define('tpl!pending_contact', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { if (allow_chat_pending_contacts) { ; __p += '\n\n'; } ; __p += '\n' + __e(fullname) + ' \n'; if (allow_chat_pending_contacts) { ; __p += '\n\n'; } ; __p += '\n\n'; } return __p };}); define('tpl!requesting_contact', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { if (allow_chat_pending_contacts) { ; __p += '\n\n'; } ; __p += '\n' + __e(fullname) + '\n'; if (allow_chat_pending_contacts) { ; __p += '\n\n'; } ; __p += '\n\n \n \n\n'; } return __p };}); define('tpl!roster', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = ''; with (obj) { __p += '
        \n'; } return __p };}); define('tpl!roster_filter', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '
        \n \n \n \n
        \n'; } return __p };}); define('tpl!roster_item', ['lodash'], function(_) {return function(obj) { obj || (obj = {}); var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { __p += '\n
        \n \n
        \n '; if (num_unread) { ; __p += '\n ' + __e( num_unread ) + '\n '; } ; __p += '\n ' + __e(fullname) + '\n
        \n'; if (allow_contact_removal) { ; __p += '\n\n'; } ; __p += '\n\n\n'; } return __p };}); // Converse.js (A browser based XMPP chat client) // http://conversejs.org // // Copyright (c) 2012-2017, Jan-Carel Brand // Licensed under the Mozilla Public License (MPLv2) // /*global define */ (function (root, factory) { define('converse-rosterview',["jquery.noconflict", "converse-core", "tpl!group_header", "tpl!pending_contact", "tpl!requesting_contact", "tpl!roster", "tpl!roster_filter", "tpl!roster_item", "converse-chatboxes"], factory); })(undefined, function ($, converse, tpl_group_header, tpl_pending_contact, tpl_requesting_contact, tpl_roster, tpl_roster_filter, tpl_roster_item) { "use strict"; var _converse$env = converse.env, Backbone = _converse$env.Backbone, utils = _converse$env.utils, Strophe = _converse$env.Strophe, $iq = _converse$env.$iq, b64_sha1 = _converse$env.b64_sha1, sizzle = _converse$env.sizzle, _ = _converse$env._; converse.plugins.add('converse-rosterview', { overrides: { // Overrides mentioned here will be picked up by converse.js's // plugin architecture they will replace existing methods on the // relevant objects or classes. // // New functions which don't exist yet can also be added. afterReconnected: function afterReconnected() { this.__super__.afterReconnected.apply(this, arguments); }, _tearDown: function _tearDown() { /* Remove the rosterview when tearing down. It gets created * anew when reconnecting or logging in. */ this.__super__._tearDown.apply(this, arguments); if (!_.isUndefined(this.rosterview)) { this.rosterview.remove(); } }, RosterGroups: { comparator: function comparator() { // RosterGroupsComparator only gets set later (once i18n is // set up), so we need to wrap it in this nameless function. var _converse = this.__super__._converse; return _converse.RosterGroupsComparator.apply(this, arguments); } } }, initialize: function initialize() { /* The initialize function gets called as soon as the plugin is * loaded by converse.js's plugin machinery. */ var _converse = this._converse, __ = _converse.__, ___ = _converse.___; _converse.api.settings.update({ allow_chat_pending_contacts: true, allow_contact_removal: true, show_toolbar: true }); _converse.api.promises.add('rosterViewInitialized'); var STATUSES = { 'dnd': __('This contact is busy'), 'online': __('This contact is online'), 'offline': __('This contact is offline'), 'unavailable': __('This contact is unavailable'), 'xa': __('This contact is away for an extended period'), 'away': __('This contact is away') }; var LABEL_CONTACTS = __('Contacts'); var LABEL_GROUPS = __('Groups'); var HEADER_CURRENT_CONTACTS = __('My contacts'); var HEADER_PENDING_CONTACTS = __('Pending contacts'); var HEADER_REQUESTING_CONTACTS = __('Contact requests'); var HEADER_UNGROUPED = __('Ungrouped'); var HEADER_WEIGHTS = {}; HEADER_WEIGHTS[HEADER_REQUESTING_CONTACTS] = 0; HEADER_WEIGHTS[HEADER_CURRENT_CONTACTS] = 1; HEADER_WEIGHTS[HEADER_UNGROUPED] = 2; HEADER_WEIGHTS[HEADER_PENDING_CONTACTS] = 3; _converse.RosterGroupsComparator = function (a, b) { /* Groups are sorted alphabetically, ignoring case. * However, Ungrouped, Requesting Contacts and Pending Contacts * appear last and in that order. */ a = a.get('name'); b = b.get('name'); var special_groups = _.keys(HEADER_WEIGHTS); var a_is_special = _.includes(special_groups, a); var b_is_special = _.includes(special_groups, b); if (!a_is_special && !b_is_special) { return a.toLowerCase() < b.toLowerCase() ? -1 : a.toLowerCase() > b.toLowerCase() ? 1 : 0; } else if (a_is_special && b_is_special) { return HEADER_WEIGHTS[a] < HEADER_WEIGHTS[b] ? -1 : HEADER_WEIGHTS[a] > HEADER_WEIGHTS[b] ? 1 : 0; } else if (!a_is_special && b_is_special) { return b === HEADER_REQUESTING_CONTACTS ? 1 : -1; } else if (a_is_special && !b_is_special) { return a === HEADER_REQUESTING_CONTACTS ? -1 : 1; } }; _converse.RosterFilter = Backbone.Model.extend({ initialize: function initialize() { this.set({ 'filter_text': '', 'filter_type': 'contacts', 'chat_state': '' }); } }); _converse.RosterFilterView = Backbone.View.extend({ tagName: 'span', events: { "keydown .roster-filter": "liveFilter", "submit form.roster-filter-form": "submitFilter", "click .onX": "clearFilter", "mousemove .x": "toggleX", "change .filter-type": "changeTypeFilter", "change .state-type": "changeChatStateFilter" }, initialize: function initialize() { this.model.on('change:filter_type', this.render, this); this.model.on('change:filter_text', this.renderClearButton, this); }, render: function render() { this.el.innerHTML = tpl_roster_filter(_.extend(this.model.toJSON(), { placeholder: __('Filter'), label_contacts: LABEL_CONTACTS, label_groups: LABEL_GROUPS, label_state: __('State'), label_any: __('Any'), label_unread_messages: __('Unread'), label_online: __('Online'), label_chatty: __('Chatty'), label_busy: __('Busy'), label_away: __('Away'), label_xa: __('Extended Away'), label_offline: __('Offline') })); this.renderClearButton(); return this.$el; }, renderClearButton: function renderClearButton() { var roster_filter = this.el.querySelector('.roster-filter'); if (_.isNull(roster_filter)) { return; } roster_filter.classList[this.tog(roster_filter.value)]('x'); }, tog: function tog(v) { return v ? 'add' : 'remove'; }, toggleX: function toggleX(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } var el = ev.target; el.classList[this.tog(el.offsetWidth - 18 < ev.clientX - el.getBoundingClientRect().left)]('onX'); }, changeChatStateFilter: function changeChatStateFilter(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } this.model.save({ 'chat_state': this.el.querySelector('.state-type').value }); }, changeTypeFilter: function changeTypeFilter(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } var type = ev.target.value; if (type === 'state') { this.model.save({ 'filter_type': type, 'chat_state': this.el.querySelector('.state-type').value }); } else { this.model.save({ 'filter_type': type, 'filter_text': this.el.querySelector('.roster-filter').value }); } }, liveFilter: _.debounce(function (ev) { this.model.save({ 'filter_type': this.el.querySelector('.filter-type').value, 'filter_text': this.el.querySelector('.roster-filter').value }); }, 250), submitFilter: function submitFilter(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } this.liveFilter(); this.render(); }, isActive: function isActive() { /* Returns true if the filter is enabled (i.e. if the user * has added values to the filter). */ if (this.model.get('filter_type') === 'state' || this.model.get('filter_text')) { return true; } return false; }, show: function show() { if (this.$el.is(':visible')) { return this; } this.$el.show(); return this; }, hide: function hide() { if (!this.$el.is(':visible')) { return this; } if (this.el.querySelector('.roster-filter').value.length > 0) { // Don't hide if user is currently filtering. return; } this.model.save({ 'filter_text': '', 'chat_state': '' }); this.$el.hide(); return this; }, clearFilter: function clearFilter(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); $(ev.target).removeClass('x onX').val(''); } this.model.save({ 'filter_text': '' }); } }); _converse.RosterView = Backbone.Overview.extend({ tagName: 'div', id: 'converse-roster', initialize: function initialize() { _converse.roster.on("add", this.onContactAdd, this); _converse.roster.on('change', this.onContactChange, this); _converse.roster.on("destroy", this.update, this); _converse.roster.on("remove", this.update, this); this.model.on("add", this.onGroupAdd, this); this.model.on("reset", this.reset, this); _converse.on('rosterGroupsFetched', this.positionFetchedGroups, this); _converse.on('rosterContactsFetched', this.update, this); this.createRosterFilter(); }, render: function render() { this.renderRoster(); this.$el.html(this.filter_view.render()); if (!_converse.allow_contact_requests) { // XXX: if we ever support live editing of config then // we'll need to be able to remove this class on the fly. this.el.classList.add('no-contact-requests'); } return this; }, renderRoster: function renderRoster() { this.$roster = $(tpl_roster()); this.roster = this.$roster[0]; }, createRosterFilter: function createRosterFilter() { // Create a model on which we can store filter properties var model = new _converse.RosterFilter(); model.id = b64_sha1("_converse.rosterfilter" + _converse.bare_jid); model.browserStorage = new Backbone.BrowserStorage.local(this.filter.id); this.filter_view = new _converse.RosterFilterView({ 'model': model }); this.filter_view.model.on('change', this.updateFilter, this); this.filter_view.model.fetch(); }, updateFilter: _.debounce(function () { /* Filter the roster again. * Called whenever the filter settings have been changed or * when contacts have been added, removed or changed. * * Debounced so that it doesn't get called for every * contact fetched from browser storage. */ var type = this.filter_view.model.get('filter_type'); if (type === 'state') { this.filter(this.filter_view.model.get('chat_state'), type); } else { this.filter(this.filter_view.model.get('filter_text'), type); } }, 100), update: _.debounce(function () { if (_.isNull(this.roster.parentElement)) { this.$el.append(this.$roster.show()); } return this.showHideFilter(); }, _converse.animate ? 100 : 0), showHideFilter: function showHideFilter() { if (!this.$el.is(':visible')) { return; } if (_converse.roster.length >= 10) { this.filter_view.show(); } else if (!this.filter_view.isActive()) { this.filter_view.hide(); } return this; }, filter: function filter(query, type) { // First we make sure the filter is restored to its // original state _.each(this.getAll(), function (view) { if (view.model.contacts.length > 0) { view.show().filter(''); } }); // Now we can filter query = query.toLowerCase(); if (type === 'groups') { _.each(this.getAll(), function (view, idx) { if (!_.includes(view.model.get('name').toLowerCase(), query.toLowerCase())) { view.hide(); } else if (view.model.contacts.length > 0) { view.show(); } }); } else { _.each(this.getAll(), function (view) { view.filter(query, type); }); } }, reset: function reset() { _converse.roster.reset(); this.removeAll(); this.renderRoster(); this.render().update(); return this; }, onGroupAdd: function onGroupAdd(group) { var view = new _converse.RosterGroupView({ model: group }); this.add(group.get('name'), view.render()); this.positionGroup(view); }, onContactAdd: function onContactAdd(contact) { this.addRosterContact(contact).update(); this.updateFilter(); }, onContactChange: function onContactChange(contact) { this.updateChatBox(contact).update(); if (_.has(contact.changed, 'subscription')) { if (contact.changed.subscription === 'from') { this.addContactToGroup(contact, HEADER_PENDING_CONTACTS); } else if (_.includes(['both', 'to'], contact.get('subscription'))) { this.addExistingContact(contact); } } if (_.has(contact.changed, 'ask') && contact.changed.ask === 'subscribe') { this.addContactToGroup(contact, HEADER_PENDING_CONTACTS); } if (_.has(contact.changed, 'subscription') && contact.changed.requesting === 'true') { this.addContactToGroup(contact, HEADER_REQUESTING_CONTACTS); } this.updateFilter(); }, updateChatBox: function updateChatBox(contact) { var chatbox = _converse.chatboxes.get(contact.get('jid')), changes = {}; if (!chatbox) { return this; } if (_.has(contact.changed, 'chat_status')) { changes.chat_status = contact.get('chat_status'); } if (_.has(contact.changed, 'status')) { changes.status = contact.get('status'); } chatbox.save(changes); return this; }, positionFetchedGroups: function positionFetchedGroups() { /* Instead of throwing an add event for each group * fetched, we wait until they're all fetched and then * we position them. * Works around the problem of positionGroup not * working when all groups besides the one being * positioned aren't already in inserted into the * roster DOM element. */ var that = this; this.model.sort(); this.model.each(function (group, idx) { var view = that.get(group.get('name')); if (!view) { view = new _converse.RosterGroupView({ model: group }); that.add(group.get('name'), view.render()); } if (idx === 0) { that.$roster.append(view.$el); } else { that.appendGroup(view); } }); }, positionGroup: function positionGroup(view) { /* Place the group's DOM element in the correct alphabetical * position amongst the other groups in the roster. */ var $groups = this.$roster.find('.roster-group'), index = $groups.length ? this.model.indexOf(view.model) : 0; if (index === 0) { this.$roster.prepend(view.$el); } else if (index === this.model.length - 1) { this.appendGroup(view); } else { $($groups.eq(index)).before(view.$el); } return this; }, appendGroup: function appendGroup(view) { /* Add the group at the bottom of the roster */ var $last = this.$roster.find('.roster-group').last(); var $siblings = $last.siblings('dd'); if ($siblings.length > 0) { $siblings.last().after(view.$el); } else { $last.after(view.$el); } return this; }, getGroup: function getGroup(name) { /* Returns the group as specified by name. * Creates the group if it doesn't exist. */ var view = this.get(name); if (view) { return view.model; } return this.model.create({ name: name, id: b64_sha1(name) }); }, addContactToGroup: function addContactToGroup(contact, name) { this.getGroup(name).contacts.add(contact); }, addExistingContact: function addExistingContact(contact) { var groups = void 0; if (_converse.roster_groups) { groups = contact.get('groups'); if (groups.length === 0) { groups = [HEADER_UNGROUPED]; } } else { groups = [HEADER_CURRENT_CONTACTS]; } _.each(groups, _.bind(this.addContactToGroup, this, contact)); }, addRosterContact: function addRosterContact(contact) { if (contact.get('subscription') === 'both' || contact.get('subscription') === 'to') { this.addExistingContact(contact); } else { if (contact.get('ask') === 'subscribe' || contact.get('subscription') === 'from') { this.addContactToGroup(contact, HEADER_PENDING_CONTACTS); } else if (contact.get('requesting') === true) { this.addContactToGroup(contact, HEADER_REQUESTING_CONTACTS); } } return this; } }); _converse.RosterContactView = Backbone.View.extend({ tagName: 'dd', events: { "click .accept-xmpp-request": "acceptRequest", "click .decline-xmpp-request": "declineRequest", "click .open-chat": "openChat", "click .remove-xmpp-contact": "removeContact" }, initialize: function initialize() { this.model.on("change", this.render, this); this.model.on("remove", this.remove, this); this.model.on("destroy", this.remove, this); this.model.on("open", this.openChat, this); }, render: function render() { var that = this; if (!this.mayBeShown()) { this.$el.hide(); return this; } var item = this.model, ask = item.get('ask'), chat_status = item.get('chat_status'), requesting = item.get('requesting'), subscription = item.get('subscription'); var classes_to_remove = ['current-xmpp-contact', 'pending-xmpp-contact', 'requesting-xmpp-contact'].concat(_.keys(STATUSES)); _.each(classes_to_remove, function (cls) { if (_.includes(that.el.className, cls)) { that.el.classList.remove(cls); } }); this.$el.addClass(chat_status).data('status', chat_status); if (ask === 'subscribe' || subscription === 'from') { /* ask === 'subscribe' * Means we have asked to subscribe to them. * * subscription === 'from' * They are subscribed to use, but not vice versa. * We assume that there is a pending subscription * from us to them (otherwise we're in a state not * supported by converse.js). * * So in both cases the user is a "pending" contact. */ this.el.classList.add('pending-xmpp-contact'); this.$el.html(tpl_pending_contact(_.extend(item.toJSON(), { 'desc_remove': __(___('Click to remove %1$s as a contact'), item.get('fullname')), 'allow_chat_pending_contacts': _converse.allow_chat_pending_contacts }))); } else if (requesting === true) { this.el.classList.add('requesting-xmpp-contact'); this.$el.html(tpl_requesting_contact(_.extend(item.toJSON(), { 'desc_accept': __(___("Click to accept the contact request from %1$s"), item.get('fullname')), 'desc_decline': __(___("Click to decline the contact request from %1$s"), item.get('fullname')), 'allow_chat_pending_contacts': _converse.allow_chat_pending_contacts }))); } else if (subscription === 'both' || subscription === 'to') { this.el.classList.add('current-xmpp-contact'); this.el.classList.remove(_.without(['both', 'to'], subscription)[0]); this.el.classList.add(subscription); this.renderRosterItem(item); } return this; }, renderRosterItem: function renderRosterItem(item) { var chat_status = item.get('chat_status'); this.$el.html(tpl_roster_item(_.extend(item.toJSON(), { 'desc_status': STATUSES[chat_status || 'offline'], 'desc_chat': __('Click to chat with this contact'), 'desc_remove': __(___('Click to remove %1$s as a contact'), item.get('fullname')), 'title_fullname': __('Name'), 'allow_contact_removal': _converse.allow_contact_removal, 'num_unread': item.get('num_unread') || 0 }))); return this; }, isGroupCollapsed: function isGroupCollapsed() { /* Check whether the group in which this contact appears is * collapsed. */ // XXX: this sucks and is fragile. // It's because I tried to do the "right thing" // and use definition lists to represent roster groups. // If roster group items were inside the group elements, we // would simplify things by not having to check whether the // group is collapsed or not. var name = this.$el.prevAll('dt:first').data('group'); var group = _.head(_converse.rosterview.model.where({ 'name': name.toString() })); if (group.get('state') === _converse.CLOSED) { return true; } return false; }, mayBeShown: function mayBeShown() { /* Return a boolean indicating whether this contact should * generally be visible in the roster. * * It doesn't check for the more specific case of whether * the group it's in is collapsed (see isGroupCollapsed). */ var chatStatus = this.model.get('chat_status'); if (_converse.show_only_online_users && chatStatus !== 'online' || _converse.hide_offline_users && chatStatus === 'offline') { // If pending or requesting, show if (this.model.get('ask') === 'subscribe' || this.model.get('subscription') === 'from' || this.model.get('requesting') === true) { return true; } return false; } return true; }, openChat: function openChat(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } return _converse.chatboxviews.showChat(this.model.attributes, true); }, removeContact: function removeContact(ev) { var _this = this; if (ev && ev.preventDefault) { ev.preventDefault(); } if (!_converse.allow_contact_removal) { return; } var result = confirm(__("Are you sure you want to remove this contact?")); if (result === true) { var iq = $iq({ type: 'set' }).c('query', { xmlns: Strophe.NS.ROSTER }).c('item', { jid: this.model.get('jid'), subscription: "remove" }); _converse.connection.sendIQ(iq, function (iq) { _this.model.destroy(); _this.remove(); }, function (err) { alert(__('Sorry, there was an error while trying to remove %1$s as a contact.', name)); _converse.log(err, Strophe.LogLevel.ERROR); }); } }, acceptRequest: function acceptRequest(ev) { var _this2 = this; if (ev && ev.preventDefault) { ev.preventDefault(); } _converse.roster.sendContactAddIQ(this.model.get('jid'), this.model.get('fullname'), [], function () { _this2.model.authorize().subscribe(); }); }, declineRequest: function declineRequest(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } var result = confirm(__("Are you sure you want to decline this contact request?")); if (result === true) { this.model.unauthorize().destroy(); } return this; } }); _converse.RosterGroupView = Backbone.Overview.extend({ tagName: 'dt', className: 'roster-group', events: { "click a.group-toggle": "toggle" }, initialize: function initialize() { this.model.contacts.on("add", this.addContact, this); this.model.contacts.on("change:subscription", this.onContactSubscriptionChange, this); this.model.contacts.on("change:requesting", this.onContactRequestChange, this); this.model.contacts.on("change:chat_status", function (contact) { // This might be optimized by instead of first sorting, // finding the correct position in positionContact this.model.contacts.sort(); this.positionContact(contact).render(); }, this); this.model.contacts.on("destroy", this.onRemove, this); this.model.contacts.on("remove", this.onRemove, this); _converse.roster.on('change:groups', this.onContactGroupChange, this); }, render: function render() { this.el.setAttribute('data-group', this.model.get('name')); var html = tpl_group_header({ label_group: this.model.get('name'), desc_group_toggle: this.model.get('description'), toggle_state: this.model.get('state') }); this.el.innerHTML = html; return this; }, addContact: function addContact(contact) { var view = new _converse.RosterContactView({ model: contact }); this.add(contact.get('id'), view); view = this.positionContact(contact).render(); if (view.mayBeShown()) { if (this.model.get('state') === _converse.CLOSED) { if (view.$el[0].style.display !== "none") { view.$el.hide(); } if (!this.$el.is(':visible')) { this.$el.show(); } } else { if (this.$el[0].style.display !== "block") { this.show(); } } } }, positionContact: function positionContact(contact) { /* Place the contact's DOM element in the correct alphabetical * position amongst the other contacts in this group. */ var view = this.get(contact.get('id')); var index = this.model.contacts.indexOf(contact); view.$el.detach(); if (index === 0) { this.$el.after(view.$el); } else if (index === this.model.contacts.length - 1) { this.$el.nextUntil('dt').last().after(view.$el); } else { this.$el.nextUntil('dt').eq(index).before(view.$el); } return view; }, show: function show() { this.$el.show(); _.each(this.getAll(), function (view) { if (view.mayBeShown() && !view.isGroupCollapsed()) { view.$el.show(); } }); return this; }, hide: function hide() { this.$el.nextUntil('dt').addBack().hide(); }, filter: function filter(q, type) { var _this3 = this; /* Filter the group's contacts based on the query "q". * The query is matched against the contact's full name. * If all contacts are filtered out (i.e. hidden), then the * group must be filtered out as well. */ var matches = void 0; if (q.length === 0) { if (this.model.get('state') === _converse.OPENED) { this.model.contacts.each(function (item) { var view = _this3.get(item.get('id')); if (view.mayBeShown() && !view.isGroupCollapsed()) { view.$el.show(); } }); } this.showIfNecessary(); } else { q = q.toLowerCase(); if (type === 'state') { if (this.model.get('name') === HEADER_REQUESTING_CONTACTS) { // When filtering by chat state, we still want to // show requesting contacts, even though they don't // have the state in question. matches = this.model.contacts.filter(function (contact) { return utils.contains.not('chat_status', q)(contact) && !contact.get('requesting'); }); } else if (q === 'unread_messages') { matches = this.model.contacts.filter({ 'num_unread': 0 }); } else { matches = this.model.contacts.filter(utils.contains.not('chat_status', q)); } } else { matches = this.model.contacts.filter(utils.contains.not('fullname', q)); } if (matches.length === this.model.contacts.length) { // hide the whole group this.hide(); } else { _.each(matches, function (item) { _this3.get(item.get('id')).$el.hide(); }); if (this.model.get('state') === _converse.OPENED) { _.each(this.model.contacts.reject(utils.contains.not('fullname', q)), function (item) { _this3.get(item.get('id')).$el.show(); }); } this.showIfNecessary(); } } }, showIfNecessary: function showIfNecessary() { if (!this.$el.is(':visible') && this.model.contacts.length > 0) { this.$el.show(); } }, toggle: function toggle(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } var $el = $(ev.target); if ($el.hasClass("icon-opened")) { this.$el.nextUntil('dt').slideUp(); this.model.save({ state: _converse.CLOSED }); $el.removeClass("icon-opened").addClass("icon-closed"); } else { $el.removeClass("icon-closed").addClass("icon-opened"); this.model.save({ state: _converse.OPENED }); this.filter(_converse.rosterview.$('.roster-filter').val() || '', _converse.rosterview.$('.filter-type').val()); } }, onContactGroupChange: function onContactGroupChange(contact) { var in_this_group = _.includes(contact.get('groups'), this.model.get('name')); var cid = contact.get('id'); var in_this_overview = !this.get(cid); if (in_this_group && !in_this_overview) { this.model.contacts.remove(cid); } else if (!in_this_group && in_this_overview) { this.addContact(contact); } }, onContactSubscriptionChange: function onContactSubscriptionChange(contact) { if (this.model.get('name') === HEADER_PENDING_CONTACTS && contact.get('subscription') !== 'from') { this.model.contacts.remove(contact.get('id')); } }, onContactRequestChange: function onContactRequestChange(contact) { if (this.model.get('name') === HEADER_REQUESTING_CONTACTS && !contact.get('requesting')) { /* We suppress events, otherwise the remove event will * also cause the contact's view to be removed from the * "Pending Contacts" group. */ this.model.contacts.remove(contact.get('id'), { 'silent': true }); // Since we suppress events, we make sure the view and // contact are removed from this group. this.get(contact.get('id')).remove(); this.onRemove(contact); } }, onRemove: function onRemove(contact) { this.remove(contact.get('id')); if (this.model.contacts.length === 0) { this.$el.hide(); } } }); /* -------- Event Handlers ----------- */ var onChatBoxMaximized = function onChatBoxMaximized(chatboxview) { /* When a chat box gets maximized, the num_unread counter needs * to be cleared, but if chatbox is scrolled up, then num_unread should not be cleared. */ var chatbox = chatboxview.model; if (chatbox.get('type') !== 'chatroom') { var contact = _.head(_converse.roster.where({ 'jid': chatbox.get('jid') })); if (!_.isUndefined(contact) && !chatbox.isScrolledUp()) { contact.save({ 'num_unread': 0 }); } } }; var onMessageReceived = function onMessageReceived(data) { /* Given a newly received message, update the unread counter on * the relevant roster contact. */ var chatbox = data.chatbox; if (_.isUndefined(chatbox)) { return; } if (_.isNull(data.stanza.querySelector('body'))) { return; // The message has no text } if (chatbox.get('type') !== 'chatroom' && utils.isNewMessage(data.stanza) && chatbox.newMessageWillBeHidden()) { var contact = _.head(_converse.roster.where({ 'jid': chatbox.get('jid') })); if (!_.isUndefined(contact)) { contact.save({ 'num_unread': contact.get('num_unread') + 1 }); } } }; var onChatBoxScrolledDown = function onChatBoxScrolledDown(data) { var chatbox = data.chatbox; if (_.isUndefined(chatbox)) { return; } var contact = _.head(_converse.roster.where({ 'jid': chatbox.get('jid') })); if (!_.isUndefined(contact)) { contact.save({ 'num_unread': 0 }); } }; var initRoster = function initRoster() { /* Create an instance of RosterView once the RosterGroups * collection has been created (in converse-core.js) */ _converse.rosterview = new _converse.RosterView({ 'model': _converse.rostergroups }); _converse.rosterview.render(); _converse.emit('rosterViewInitialized'); }; _converse.api.listen.on('rosterInitialized', initRoster); _converse.api.listen.on('rosterReadyAfterReconnection', initRoster); _converse.api.listen.on('message', onMessageReceived); _converse.api.listen.on('chatBoxMaximized', onChatBoxMaximized); _converse.api.listen.on('chatBoxScrolledDown', onChatBoxScrolledDown); } }); }); //# sourceMappingURL=converse-rosterview.js.map; // Converse.js (A browser based XMPP chat client) // http://conversejs.org // // Copyright (c) 2012-2017, Jan-Carel Brand // Licensed under the Mozilla Public License (MPLv2) // /*global define */ (function (root, factory) { define('converse-controlbox',["jquery.noconflict", "converse-core", "lodash.fp", "virtual-dom", "vdom-parser", "tpl!add_contact_dropdown", "tpl!add_contact_form", "tpl!converse_brand_heading", "tpl!change_status_message", "tpl!chat_status", "tpl!choose_status", "tpl!contacts_panel", "tpl!contacts_tab", "tpl!controlbox", "tpl!controlbox_toggle", "tpl!login_panel", "tpl!search_contact", "tpl!status_option", "tpl!spinner", "converse-chatview", "converse-rosterview"], factory); })(undefined, function ($, converse, fp, vdom, vdom_parser, tpl_add_contact_dropdown, tpl_add_contact_form, tpl_brand_heading, tpl_change_status_message, tpl_chat_status, tpl_choose_status, tpl_contacts_panel, tpl_contacts_tab, tpl_controlbox, tpl_controlbox_toggle, tpl_login_panel, tpl_search_contact, tpl_status_option, tpl_spinner) { "use strict"; var USERS_PANEL_ID = 'users'; var CHATBOX_TYPE = 'chatbox'; var _converse$env = converse.env, Strophe = _converse$env.Strophe, Backbone = _converse$env.Backbone, Promise = _converse$env.Promise, utils = _converse$env.utils, _ = _converse$env._, moment = _converse$env.moment; var CONNECTION_STATUS_CSS_CLASS = { 'Error': 'error', 'Connecting': 'info', 'Connection failure': 'error', 'Authenticating': 'info', 'Authentication failure': 'error', 'Connected': 'info', 'Disconnected': 'error', 'Disconnecting': 'warn', 'Attached': 'info', 'Redirect': 'info', 'Reconnecting': 'warn' }; var PRETTY_CONNECTION_STATUS = { 0: 'Error', 1: 'Connecting', 2: 'Connection failure', 3: 'Authenticating', 4: 'Authentication failure', 5: 'Connected', 6: 'Disconnected', 7: 'Disconnecting', 8: 'Attached', 9: 'Redirect', 10: 'Reconnecting' }; var REPORTABLE_STATUSES = [0, // ERROR' 1, // CONNECTING 2, // CONNFAIL 3, // AUTHENTICATING 4, // AUTHFAIL 7, // DISCONNECTING 10 // RECONNECTING ]; converse.plugins.add('converse-controlbox', { overrides: { // Overrides mentioned here will be picked up by converse.js's // plugin architecture they will replace existing methods on the // relevant objects or classes. // // New functions which don't exist yet can also be added. _tearDown: function _tearDown() { this.__super__._tearDown.apply(this, arguments); if (this.rosterview) { // Removes roster groups this.rosterview.model.off().reset(); this.rosterview.each(function (groupview) { groupview.removeAll(); groupview.remove(); }); this.rosterview.removeAll().remove(); } }, clearSession: function clearSession() { this.__super__.clearSession.apply(this, arguments); var controlbox = this.chatboxes.get('controlbox'); if (controlbox && controlbox.collection && controlbox.collection.browserStorage) { controlbox.save({ 'connected': false }); } }, ChatBoxes: { chatBoxMayBeShown: function chatBoxMayBeShown(chatbox) { return this.__super__.chatBoxMayBeShown.apply(this, arguments) && chatbox.get('id') !== 'controlbox'; }, onChatBoxesFetched: function onChatBoxesFetched(collection, resp) { this.__super__.onChatBoxesFetched.apply(this, arguments); var _converse = this.__super__._converse; if (!_.includes(_.map(collection, 'id'), 'controlbox')) { _converse.addControlBox(); } this.get('controlbox').save({ connected: true }); } }, ChatBoxViews: { onChatBoxAdded: function onChatBoxAdded(item) { var _converse = this.__super__._converse; if (item.get('box_id') === 'controlbox') { var view = this.get(item.get('id')); if (view) { view.model = item; view.initialize(); return view; } else { view = new _converse.ControlBoxView({ model: item }); return this.add(item.get('id'), view); } } else { return this.__super__.onChatBoxAdded.apply(this, arguments); } }, closeAllChatBoxes: function closeAllChatBoxes() { var _converse = this.__super__._converse; this.each(function (view) { if (view.model.get('id') === 'controlbox' && (_converse.disconnection_cause !== _converse.LOGOUT || _converse.show_controlbox_by_default)) { return; } view.close(); }); return this; }, getChatBoxWidth: function getChatBoxWidth(view) { var _converse = this.__super__._converse; var controlbox = this.get('controlbox'); if (view.model.get('id') === 'controlbox') { /* We return the width of the controlbox or its toggle, * depending on which is visible. */ if (!controlbox || !controlbox.$el.is(':visible')) { return _converse.controlboxtoggle.$el.outerWidth(true); } else { return controlbox.$el.outerWidth(true); } } else { return this.__super__.getChatBoxWidth.apply(this, arguments); } } }, ChatBox: { initialize: function initialize() { if (this.get('id') === 'controlbox') { this.set({ 'time_opened': moment(0).valueOf() }); } else { this.__super__.initialize.apply(this, arguments); } } }, ChatBoxView: { insertIntoDOM: function insertIntoDOM() { var view = this.__super__._converse.chatboxviews.get("controlbox"); if (view) { view.el.insertAdjacentElement('afterend', this.el); } else { this.__super__.insertIntoDOM.apply(this, arguments); } return this; } } }, initialize: function initialize() { /* The initialize function gets called as soon as the plugin is * loaded by converse.js's plugin machinery. */ var _converse = this._converse, __ = _converse.__; _converse.api.settings.update({ allow_logout: true, default_domain: undefined, locked_domain: undefined, show_controlbox_by_default: false, sticky_controlbox: false, xhr_user_search: false, xhr_user_search_url: '' }); _converse.api.promises.add('controlboxInitialized'); var LABEL_CONTACTS = __('Contacts'); _converse.addControlBox = function () { _converse.chatboxes.add({ id: 'controlbox', box_id: 'controlbox', type: 'controlbox', closed: !_converse.show_controlbox_by_default }); }; _converse.ControlBoxView = _converse.ChatBoxView.extend({ tagName: 'div', className: 'chatbox fade-in', id: 'controlbox', events: { 'click a.close-chatbox-button': 'close', 'click ul#controlbox-tabs li a': 'switchTab' }, initialize: function initialize() { if (_.isUndefined(_converse.controlboxtoggle)) { _converse.controlboxtoggle = new _converse.ControlBoxToggle(); this.$el.insertAfter(_converse.controlboxtoggle.$el); } this.model.on('change:connected', this.onConnected, this); this.model.on('destroy', this.hide, this); this.model.on('hide', this.hide, this); this.model.on('show', this.show, this); this.model.on('change:closed', this.ensureClosedState, this); this.render(); if (this.model.get('connected')) { _converse.api.waitUntil('rosterViewInitialized').then(this.insertRoster.bind(this)).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); } _converse.emit('controlboxInitialized'); }, render: function render() { if (this.model.get('connected')) { if (_.isUndefined(this.model.get('closed'))) { this.model.set('closed', !_converse.show_controlbox_by_default); } } if (!this.model.get('closed')) { this.show(); } else { this.hide(); } this.el.innerHTML = tpl_controlbox(_.extend(this.model.toJSON(), { 'sticky_controlbox': _converse.sticky_controlbox })); if (!_converse.connection.connected || !_converse.connection.authenticated || _converse.connection.disconnecting) { this.renderLoginPanel(); } else if (this.model.get('connected') && (!this.contactspanel || !this.contactspanel.$el.is(':visible'))) { this.renderContactsPanel(); } return this; }, onConnected: function onConnected() { if (this.model.get('connected')) { this.render(); _converse.api.waitUntil('rosterViewInitialized').then(this.insertRoster.bind(this)).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); this.model.save(); } }, insertRoster: function insertRoster() { /* Place the rosterview inside the "Contacts" panel. */ this.contactspanel.el.insertAdjacentElement('beforeEnd', _converse.rosterview.el); return this; }, createBrandHeadingHTML: function createBrandHeadingHTML() { return tpl_brand_heading(); }, insertBrandHeading: function insertBrandHeading() { var heading_el = this.el.querySelector('.brand-heading-container'); if (_.isNull(heading_el)) { var el = this.el.querySelector('.controlbox-head'); el.insertAdjacentHTML('beforeend', this.createBrandHeadingHTML()); } else { heading_el.outerHTML = this.createBrandHeadingHTML(); } }, renderLoginPanel: function renderLoginPanel() { this.el.classList.add("logged-out"); if (_.isNil(this.loginpanel)) { this.loginpanel = new _converse.LoginPanel({ 'model': new _converse.LoginPanelModel() }); var panes = this.el.querySelector('.controlbox-panes'); panes.innerHTML = ''; panes.appendChild(this.loginpanel.render().el); this.insertBrandHeading(); } else { this.loginpanel.render(); } return this; }, renderContactsPanel: function renderContactsPanel() { /* Renders the "Contacts" panel of the controlbox. * * This will only be called after the user has already been * logged in. */ if (this.loginpanel) { this.loginpanel.remove(); delete this.loginpanel; } this.el.classList.remove("logged-out"); if (_.isUndefined(this.model.get('active-panel'))) { this.model.save({ 'active-panel': USERS_PANEL_ID }); } this.contactspanel = new _converse.ContactsPanel({ '$parent': this.$el.find('.controlbox-panes') }); this.contactspanel.insertIntoDOM(); _converse.xmppstatusview = new _converse.XMPPStatusView({ 'model': _converse.xmppstatus }); _converse.xmppstatusview.render(); }, close: function close(ev) { if (ev && ev.preventDefault) { ev.preventDefault(); } if (_converse.sticky_controlbox) { return; } if (_converse.connection.connected && !_converse.connection.disconnecting) { this.model.save({ 'closed': true }); } else { this.model.trigger('hide'); } _converse.emit('controlBoxClosed', this); return this; }, ensureClosedState: function ensureClosedState() { if (this.model.get('closed')) { this.hide(); } else { this.show(); } }, hide: function hide(callback) { if (_converse.sticky_controlbox) { return; } this.$el.addClass('hidden'); utils.refreshWebkit(); _converse.emit('chatBoxClosed', this); if (!_converse.connection.connected) { _converse.controlboxtoggle.render(); } _converse.controlboxtoggle.show(callback); return this; }, onControlBoxToggleHidden: function onControlBoxToggleHidden() { _converse.controlboxtoggle.updateOnlineCount(); utils.refreshWebkit(); this.model.set('closed', false); this.el.classList.remove('hidden'); _converse.emit('controlBoxOpened', this); }, show: function show() { _converse.controlboxtoggle.hide(this.onControlBoxToggleHidden.bind(this)); return this; }, switchTab: function switchTab(ev) { // TODO: automatically focus the relevant input if (ev && ev.preventDefault) { ev.preventDefault(); } var $tab = $(ev.target), $sibling = $tab.parent().siblings('li').children('a'), $tab_panel = $($tab.attr('href')); $($sibling.attr('href')).addClass('hidden'); $sibling.removeClass('current'); $tab.addClass('current'); $tab_panel.removeClass('hidden'); if (!_.isUndefined(_converse.chatboxes.browserStorage)) { this.model.save({ 'active-panel': $tab.data('id') }); } return this; }, showHelpMessages: function showHelpMessages() { /* Override showHelpMessages in ChatBoxView, for now do nothing. * * Parameters: * (Array) msgs: Array of messages */ return; } }); _converse.LoginPanelModel = Backbone.Model.extend({ defaults: { 'errors': [] } }); _converse.LoginPanel = Backbone.View.extend({ tagName: 'div', id: "converse-login-panel", className: 'controlbox-pane fade-in', events: { 'submit form#converse-login': 'authenticate', 'blur input': 'validate' }, initialize: function initialize(cfg) { this.model.on('change', this.render, this); this.listenTo(_converse.connfeedback, 'change', this.render); }, render: function render() { var connection_status = _converse.connfeedback.get('connection_status'); var feedback_class = void 0, pretty_status = void 0; if (_.includes(REPORTABLE_STATUSES, connection_status)) { pretty_status = PRETTY_CONNECTION_STATUS[connection_status]; feedback_class = CONNECTION_STATUS_CSS_CLASS[pretty_status]; } var html = tpl_login_panel(_.extend(this.model.toJSON(), { '__': __, '_converse': _converse, 'ANONYMOUS': _converse.ANONYMOUS, 'EXTERNAL': _converse.EXTERNAL, 'LOGIN': _converse.LOGIN, 'PREBIND': _converse.PREBIND, 'auto_login': _converse.auto_login, 'authentication': _converse.authentication, 'connection_status': connection_status, 'conn_feedback_class': feedback_class, 'conn_feedback_subject': pretty_status, 'conn_feedback_message': _converse.connfeedback.get('message'), 'placeholder_username': (_converse.locked_domain || _converse.default_domain) && __('Username') || __('user@domain') })); var form = this.el.querySelector('form'); if (_.isNull(form)) { this.el.innerHTML = html; } else { var patches = vdom.diff(vdom_parser(form), vdom_parser(html)); vdom.patch(form, patches); } return this; }, validate: function validate() { var form = this.el.querySelector('form'); var jid = form.querySelector('input[name=jid]').value; var password = _.get(form.querySelector('input[name=password]'), 'value'); var errors = []; if (!jid || !_converse.locked_domain && !_converse.default_domain && _.filter(jid.split('@')).length < 2) { errors.push(errors, 'invalid_jid'); } if (!password && _converse.authentication !== _converse.EXTERNAL) { errors.push(errors, 'password_required'); } this.model.set('errors', errors); return errors.length == 0; }, authenticate: function authenticate(ev) { /* Authenticate the user based on a form submission event. */ if (ev && ev.preventDefault) { ev.preventDefault(); } if (_converse.authentication === _converse.ANONYMOUS) { this.connect(_converse.jid, null); return; } if (!this.validate()) { return; } var jid = ev.target.querySelector('input[name=jid]').value; var password = _.get(ev.target.querySelector('input[name=password]'), 'value'); if (_converse.locked_domain) { jid = Strophe.escapeNode(jid) + '@' + _converse.locked_domain; } else if (_converse.default_domain && !_.includes(jid, '@')) { jid = jid + '@' + _converse.default_domain; } this.connect(jid, password); return false; }, connect: function connect(jid, password) { if (jid) { var resource = Strophe.getResourceFromJid(jid); if (!resource) { jid = jid.toLowerCase() + _converse.generateResource(); } else { jid = Strophe.getBareJidFromJid(jid).toLowerCase() + '/' + resource; } } _converse.connection.reset(); _converse.connection.connect(jid, password, _converse.onConnectStatusChanged); } }); _converse.XMPPStatusView = Backbone.View.extend({ el: "form#set-xmpp-status", events: { "click a.choose-xmpp-status": "toggleOptions", "click #fancy-xmpp-status-select a.change-xmpp-status-message": "renderStatusChangeForm", "submit": "setStatusMessage", "click .dropdown dd ul li a": "setStatus" }, initialize: function initialize() { this.model.on("change:status", this.updateStatusUI, this); this.model.on("change:status_message", this.updateStatusUI, this); this.model.on("update-status-ui", this.updateStatusUI, this); }, render: function render() { // Replace the default dropdown with something nicer var $select = this.$el.find('select#select-xmpp-status'); var chat_status = this.model.get('status') || 'offline'; var options = $('option', $select); var options_list = []; this.$el.html(tpl_choose_status()); this.$el.find('#fancy-xmpp-status-select').html(tpl_chat_status({ 'status_message': this.model.get('status_message') || __("I am %1$s", this.getPrettyStatus(chat_status)), 'chat_status': chat_status, 'desc_custom_status': __('Click here to write a custom status message'), 'desc_change_status': __('Click to change your chat status') })); // iterate through all the