UNPKG

thelounge

Version:

The self-hosted Web IRC client

1 lines 225 kB
!function(e){function t(t){for(var n,o,r=t[0],l=t[1],c=t[2],u=0,h=[];u<r.length;u++)o=r[u],s[o]&&h.push(s[o][0]),s[o]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(d&&d(t);h.length;)h.shift()();return i.push.apply(i,c||[]),a()}function a(){for(var e,t=0;t<i.length;t++){for(var a=i[t],n=!0,r=1;r<a.length;r++){var l=a[r];0!==s[l]&&(n=!1)}n&&(i.splice(t--,1),e=o(o.s=a[0]))}return e}var n={},s={1:0},i=[];function o(t){if(n[t])return n[t].exports;var a=n[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,o),a.l=!0,a.exports}o.m=e,o.c=n,o.d=function(e,t,a){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(a,n,function(t){return e[t]}.bind(null,n));return a},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="/";var r=window.webpackJsonp=window.webpackJsonp||[],l=r.push.bind(r);r.push=t,r=r.slice();for(var c=0;c<r.length;c++)t(r[c]);var d=l;i.push([63,2]),a()}([,function(e,t,a){"use strict";const n=a(4),s=a(64)({transports:n(document.body).data("transports"),path:window.location.pathname+"socket.io/",autoConnect:!1,reconnection:!n(document.body).hasClass("public")});e.exports=s;const{vueApp:i}=a(5),{requestIdleCallback:o}=a(6);function r(e){const t=e.message||e;i.isConnected=!1,i.currentUserVisibleError="Waiting to reconnect… (".concat(t,")"),n("#loading-page-message").text(i.currentUserVisibleError),s.io.skipReconnect&&o(()=>s.connect(),2e3)}s.on("disconnect",r),s.on("connect_error",r),s.on("error",r),s.on("reconnecting",function(e){i.currentUserVisibleError="Reconnecting… (attempt ".concat(e,")"),n("#loading-page-message").text(i.currentUserVisibleError)}),s.on("connecting",function(){i.currentUserVisibleError="Connecting…",n("#loading-page-message").text(i.currentUserVisibleError)}),s.on("connect",function(){s.sendBuffer=[],i.currentUserVisibleError="Finalizing connection…",n("#loading-page-message").text(i.currentUserVisibleError)}),s.on("authorized",function(){i.currentUserVisibleError="Loading messages…",n("#loading-page-message").text(i.currentUserVisibleError)})},function(e,t,a){"use strict";var n={name:"Username",props:{user:Object,active:Boolean,onHover:Function},methods:{hover(){return this.onHover(this.user)}}},s=a(0),i=Object(s.a)(n,function(){var e=this,t=e.$createElement;return(e._self._c||t)("span",e._g({class:["user",e.$options.filters.colorClass(e.user.nick),{active:e.active}],attrs:{"data-name":e.user.nick,role:"button"}},e.onHover?{mouseover:e.hover}:{}),[e._v(e._s(e.user.mode)+e._s(e.user.nick))])},[],!1,null,null,null);t.a=i.exports},function(e,t,a){"use strict";const n=a(100);var s={name:"ParsedMessage",functional:!0,props:{text:String,message:Object,network:Object},render:(e,t)=>n(e,void 0!==t.props.text?t.props.text:t.props.message.text,t.props.message,t.props.network)},i=a(0),o=Object(i.a)(s,void 0,void 0,!1,null,null,null);t.a=o.exports},,function(e,t,a){"use strict";const n=a(86).default,s=a(200).default,i=a(168),o=a(53),r=a(169),l=a(51);n.filter("localetime",o),n.filter("friendlysize",r),n.filter("colorClass",l),n.filter("roundBadgeNumber",i);const c=new n({el:"#viewport",data:{activeChannel:null,appName:document.title,currentUserVisibleError:null,initialized:!1,isAutoCompleting:!1,isConnected:!1,isFileUploadEnabled:!1,isNotified:!1,networks:[],settings:{syncSettings:!1,advanced:!1,autocomplete:!0,nickPostfix:"",coloredNicks:!0,desktopNotifications:!1,highlights:"",links:!0,motd:!0,notification:!0,notifyAllMessages:!1,showSeconds:!1,statusMessages:"condensed",theme:document.getElementById("theme").dataset.serverTheme,media:!0,userStyles:""}},mounted(){n.nextTick(()=>window.vueMounted())},render(e){return e(s,{props:this})}});n.config.errorHandler=function(e){console.error(e),c.currentUserVisibleError="Vue error: ".concat(e.message,". Please check devtools and report it in #thelounge")},e.exports={vueApp:c,findChannel:function(e){for(const t of c.networks)for(const a of t.channels)if(a.id===e)return{network:t,channel:a};return null},initChannel:function(e){e.pendingMessage="",e.inputHistoryPosition=0,e.inputHistory=[""],e.historyLoading=!1,e.scrolledToBottom=!0,"channel"===e.type&&(e.usersOutdated=!0)}}},function(e,t,a){"use strict";const n=a(4),s=a(55),i=n("#viewport"),{vueApp:o}=a(5);e.exports={mobileViewportPixels:768,findCurrentNetworkChan:function(e){return e=e.toLowerCase(),o.activeChannel.network.channels.find(t=>t.name.toLowerCase()===e)},serverHash:-1,confirmExit:function(){n(document.body).hasClass("public")&&(window.onbeforeunload=function(){return"Are you sure you want to navigate away from this page?"})},scrollIntoViewNicely:function(e){e.scrollIntoView({block:"center",inline:"nearest"})},hasRoleInChannel:function(e,t,a){if(!e||!t)return!1;const i=e.attr("data-id"),o=n("#sidebar .network").has('.chan[data-id="'.concat(i,'"]')),r=a||o.attr("data-nick");return e.find('.names .user[data-name="'.concat(s(r),'"]')).first().parent().is("."+t.join(", ."))},move:function(e,t,a){if(a>=e.length){let t=a-e.length;for(;1+t--;)this.push(void 0)}return e.splice(a,0,e.splice(t,1)[0]),e},closeChan:function(e){const t=a(1);let n="/close";if(e.hasClass("lobby")){n="/quit";const t=e.find(".name").html();if(!confirm("Are you sure you want to remove ".concat(t,"?")))return!1}return t.emit("input",{target:Number(e.attr("data-id")),text:n}),e.css({transition:"none",opacity:.4}),!1},synchronizeNotifiedState:function(){!function(){let e=o.appName;o.activeChannel&&(e="".concat(o.activeChannel.channel.name," — ").concat(e));let t=0;for(const e of o.networks)for(const a of e.channels)t+=a.highlight;t>0&&(e="(".concat(t,") ").concat(e));document.title=e}();let e=!1;for(const t of o.networks)for(const a of t.channels)if(a.highlight>0){e=!0;break}!function(e){if(o.isNotified!==e){o.isNotified=e;const t=r.prop("href");r.prop("href",r.data("other")),r.data("other",t)}i.toggleClass("notified",e)}(e)},togglePasswordField:function(e){n(e).on("click",function(){const e=n(this),t=e.closest("div").find("input");t.attr("type","password"===t.attr("type")?"text":"password"),l(e),l(e.find("span")),e.toggleClass("visible")})},requestIdleCallback:function(e,t){window.requestIdleCallback?window.requestIdleCallback(e,{timeout:t}):e()}};const r=n("#favicon");function l(e){const t=e.data("alt-label");e.data("alt-label",e.attr("aria-label")).attr("aria-label",t)}},,function(e,t,a){"use strict";e.exports=function(){return function(){}}},,,function(e,t,a){"use strict";e.exports={set(e,t){try{window.localStorage.setItem(e,t)}catch(e){}},get(e){try{return window.localStorage.getItem(e)}catch(e){return null}},remove(e){try{window.localStorage.removeItem(e)}catch(e){}},clear(){try{window.localStorage.clear()}catch(e){}}}},function(e,t,a){"use strict";const n=a(128);e.exports=n.keys().reduce((e,t)=>{let a=e;return t.substr(2).split("/").forEach(e=>{e.endsWith(".tpl")?a[e.substr(0,e.length-4)]=n(t):a[e]=a[e]||{},a=a[e]}),e},{})},,,,function(e,t,a){var n=a(7);e.exports=(n.default||n).template({compiler:[7,">= 4.0.0"],main:function(e,t,a,n,s){return'<span class="reveal-password tooltipped tooltipped-n tooltipped-no-delay" aria-label="Show password" data-alt-label="Hide password"><span type="button" aria-label="Show password" data-alt-label="Hide password"></span></span>'},useData:!0})},function(e,t,a){"use strict";const n=a(125);e.exports=n.keys().reduce((e,t)=>(e["message-"+t.substring(2,t.length-4)]=n(t).default,e),{})},function(e,t,a){"use strict";const n=["away","back","chghost","join","part","quit","nick","kick","mode"],s="."+n.join(", .");e.exports={colorCodeMap:[["00","White"],["01","Black"],["02","Blue"],["03","Green"],["04","Red"],["05","Brown"],["06","Magenta"],["07","Orange"],["08","Yellow"],["09","Light Green"],["10","Cyan"],["11","Light Cyan"],["12","Light Blue"],["13","Pink"],["14","Grey"],["15","Light Grey"]],commands:[],condensedTypes:n,condensedTypesQuery:s,timeFormats:{msgDefault:"HH:mm",msgWithSeconds:"HH:mm:ss"}}},,,function(e,t,a){"use strict";e.exports=function(e,t,a){if(3!==arguments.length)throw new Error("Handlebars helper `equal` expects 3 arguments");return(e=e.toString())===(t=t.toString())?a.fn(this):a.inverse(this)}},,,,,function(e,t,a){"use strict";const n=a(4),s=a(11),i=a(1);let o,r,l=null;function c(){return o.prop("disabled",!0),navigator.serviceWorker.ready.then(e=>e.pushManager.getSubscription().then(t=>t?(i.emit("push:unregister"),t.unsubscribe()):e.pushManager.subscribe({applicationServerKey:u(r),userVisibleOnly:!0}).then(e=>{const t=e.getKey?e.getKey("p256dh"):"",a=t?window.btoa(String.fromCharCode(...new Uint8Array(t))):"",n=e.getKey?e.getKey("auth"):"",o=n?window.btoa(String.fromCharCode(...new Uint8Array(n))):"";return i.emit("push:register",{token:s.get("token"),endpoint:e.endpoint,keys:{p256dh:a,auth:o}}),!0})).then(e=>{e&&d().prop("disabled",!1)})).catch(e=>{n("#pushNotificationsUnsupported").find("span").text("An error has occurred: ".concat(e)).end().show()}),!1}function d(){const e=o.text();return o.text(o.data("text-alternate")).data("text-alternate",e)}function u(e){const t=(e+"=".repeat((4-e.length%4)%4)).replace(/-/g,"+").replace(/_/g,"/"),a=window.atob(t),n=new Uint8Array(a.length);for(let e=0;e<a.length;++e)n[e]=a.charCodeAt(e);return n}"serviceWorker"in navigator&&navigator.serviceWorker.addEventListener("message",e=>{e.data&&"open"===e.data.type&&n("#sidebar").find('.chan[data-target="#'.concat(e.data.channel,'"]')).trigger("click")}),e.exports.hasServiceWorker=!1,e.exports.configurePushNotifications=((e,t)=>{r=t,!0===l&&!1===e&&(o.prop("disabled",!0),navigator.serviceWorker.ready.then(e=>e.pushManager.getSubscription()).then(e=>e&&e.unsubscribe()).then(e=>{e&&d().prop("disabled",!1)}))}),e.exports.initialize=(()=>{o=n("#pushNotifications"),"https:"!==location.protocol&&"localhost"!==location.hostname&&"127.0.0.1"!==location.hostname||(n("#pushNotificationsHttps").hide(),"serviceWorker"in navigator&&navigator.serviceWorker.register("service-worker.js").then(t=>{if(e.exports.hasServiceWorker=!0,t.pushManager)return t.pushManager.getSubscription().then(e=>{n("#pushNotificationsUnsupported").hide(),o.prop("disabled",!1).on("click",c),(l=!!e)&&d()})}).catch(e=>{n("#pushNotificationsUnsupported span").text(e)}))})},,,,,,,,function(e,t,a){"use strict";const n=a(4),s=a(58),i=a(19),{Textcomplete:o,Textarea:r}=a(158),l=a(167),c=a(18),{vueApp:d}=a(5);let u,h,p=!1;e.exports={enable:function(e){p=!0;let t=0,a="",s=[];(u=n(e)).on("input.tabcomplete",e=>{"autocomplete"!==e.detail&&(t=0,s=[],a="")}),i(u.get(0)).bind("tab",e=>{if(d.isAutoCompleting)return;e.preventDefault();const n=u.val();if(u.get(0).selectionStart!==n.length)return;if(0===t){if(0===(a=n.split(/\s/).pop()).length)return;if(0===(s=y(a,!1)).length)return}const i=u.get(0).selectionStart-a.length,o=f.replace([0,s[t%s.length]],i);u.val(n.substr(0,i)+o),u.get(0).dispatchEvent(new CustomEvent("input",{detail:"autocomplete"})),a=o,t++},"keydown");const l=new r(u.get(0));(h=new o(l,{dropdown:{className:"textcomplete-menu",placement:"top"}})).register([g,f,b,w,v,_]),h.on("rendered",()=>{h.dropdown.items.length>0&&h.dropdown.items[0].activate()}),h.on("show",()=>{d.isAutoCompleting=!0}),h.on("hidden",()=>{d.isAutoCompleting=!1}),n("#form").on("submit.tabcomplete",()=>{h.hide()})},disable(){p&&(n("#form").off("submit.tabcomplete"),u.off("input.tabcomplete"),i(u.get(0)).unbind("tab","keydown"),h.destroy(),p=!1,d.isAutoCompleting=!1)}};const m=Object.keys(l),g={id:"emoji",match:/\B:([-+\w:?]{2,}):?$/,search(e,t){t(k(e=e.replace(/:$/,""),m))},template:([e,t])=>'<span class="emoji">'.concat(l[t],"</span> ").concat(e),replace:([,e])=>l[e],index:1},f={id:"nicks",match:/\B(@([a-zA-Z_[\]\\^{}|`@][a-zA-Z0-9_[\]\\^{}|`-]*)?)$/,search(e,t){"@"===(e=e.slice(1))[0]?t(y(e.slice(1),!0).map(e=>["@"+e[0],"@"+e[1]])):t(y(e,!0))},template:([e])=>e,replace:([,e],t=1)=>d.settings.nickPostfix?t>0&&/\s/.test(n("#input").val())?e+" ":e+d.settings.nickPostfix:e,index:1},b={id:"chans",match:/\B((#|\+|&|![A-Z0-9]{5})([^\x00\x0A\x0D\x20\x2C\x3A]+(:[^\x00\x0A\x0D\x20\x2C\x3A]*)?)?)$/,search(e,t,a){t(function(e){const t=[];for(const e of d.activeChannel.network.channels)"channel"===e.type&&t.push(e.name);return k(e,t)}(a[0]))},template:([e])=>e,replace:([,e])=>e,index:1},w={id:"commands",match:/^\/(\w*)$/,search(e,t){t(function(e){const t=c.commands.slice();return k(e,t)}("/"+e))},template:([e])=>e,replace:([,e])=>e,index:1},v={id:"foreground-colors",match:/\x03(\d{0,2}|[A-Za-z ]{0,10})$/,search(e,t){e=e.toLowerCase(),t(c.colorCodeMap.filter(t=>s.test(e,t[0])||s.test(e,t[1])).map(t=>s.test(e,t[1])?[t[0],s.match(e,t[1],{pre:"<b>",post:"</b>"}).rendered]:t))},template:e=>'<span class="irc-fg'.concat(parseInt(e[0],10),'">').concat(e[1],"</span>"),replace:e=>""+e[0],index:1},_={id:"background-colors",match:/\x03(\d{2}),(\d{0,2}|[A-Za-z ]{0,10})$/,search(e,t,a){e=e.toLowerCase(),t(c.colorCodeMap.filter(t=>s.test(e,t[0])||s.test(e,t[1])).map(t=>s.test(e,t[1])?[t[0],s.match(e,t[1],{pre:"<b>",post:"</b>"}).rendered]:t).map(e=>e.concat(a[1])))},template:e=>'<span class="irc-fg'.concat(parseInt(e[2],10)," irc-bg irc-bg").concat(parseInt(e[0],10),'">').concat(e[1],"</span>"),replace:e=>"$1,"+e[0],index:2};function k(e,t){return s.filter(e,t,{pre:"<b>",post:"</b>"}).map(e=>[e.string,e.original])}function y(e,t){const a=function(){if(d.activeChannel.channel.users.length>0)return d.activeChannel.channel.users.slice().sort((e,t)=>t.lastMessage-e.lastMessage).map(e=>e.nick);const e=d.activeChannel.network.nick,t=d.activeChannel.channel.name;return e!==t&&"query"===d.activeChannel.channel.type?[t,e]:[e]}();return e=e.toLowerCase(),t?k(e,a):n.grep(a,t=>!t.toLowerCase().indexOf(e))}},,function(e,t,a){"use strict";const n=a(4),s=a(11),i=a(1),{vueApp:o}=a(5);a(34);const r=n("#windows"),l=n("#settings"),c=n("#theme"),d=n("#user-specified-css"),u=/[?&]nocss/;let h,p,m,g,f;const b=o.settings,w=["syncSettings"],v=["highlights"];let _=JSON.parse(s.get("settings"))||!1;if(_)for(const e in b)"highlights"===e&&"object"==typeof _[e]&&(_[e]=_[e].join(", ")),void 0!==_[e]&&typeof b[e]==typeof _[e]&&(b[e]=_[e]);else b.syncSettings=!0;function k(){"denied"===Notification.permission?f.show():f.hide()}function y(e,t){"syncSettings"===e&&t?(h.hide(),m.hide()):"theme"===e?(t="themes/".concat(t,".css"),c.attr("href")!==t&&c.attr("href",t)):"userStyles"!==e||u.test(window.location.search)?"desktopNotifications"===e?"Notification"in window&&t&&"granted"!==Notification.permission?Notification.requestPermission(k):t||f.hide():"advanced"===e&&n("#settings [data-advanced]").toggle(b[e]):d.html(t)}function C(e,t){i.emit("setting:set",{name:e,value:t})}function x(e,t,a){b[e]!==t&&(b[e]=t,s.set("settings",JSON.stringify(b)),y(e,t),"syncSettings"===e&&t?(i.emit("setting:get"),h.hide(),p.hide(),m.hide()):"syncSettings"===e&&(h.show(),m.show()),b.syncSettings&&!w.includes(e)&&a?C(e,t):v.includes(e)&&a&&C(e,t))}function S(e=!1){if(b.syncSettings||e){for(const e in b)w.includes(e)?v.includes(e)&&C(e,b[e]):C(e,b[e]);h.hide(),p.hide(),m.hide()}else h.hide(),m.hide(),p.show()}function j(e,t,a){"userStyles"===e?l.find("#user-specified-css-input").val(t):"highlights"===e?l.find("input[name=".concat(e,"]")).val(t):"nickPostfix"===e?l.find("input[name=".concat(e,"]")).val(t):"statusMessages"===e?l.find("input[name=".concat(e,"][value=").concat(t,"]")).prop("checked",!0):"theme"===e?l.find("#theme-select").val(t):"boolean"==typeof t&&l.find("input[name=".concat(e,"]")).prop("checked",t),a?x(e,t,!1):y(e,t)}"string"!=typeof _.userStyles||u.test(window.location.search)||d.html(_.userStyles),"string"==typeof _.theme&&c.attr("href")!=="themes/".concat(_.theme,".css")&&c.attr("href","themes/".concat(_.theme,".css")),_=null,e.exports={alwaysSync:v,noSync:w,initialized:!1,settings:b,syncAllSettings:S,processSetting:j,initialize:function(){f=l.find("#warnBlockedDesktopNotifications"),g=l.find("#warnUnsupportedDesktopNotifications"),h=l.find(".sync-warning-override"),p=l.find(".sync-warning-base"),m=l.find(".force-sync-button"),f.hide(),e.exports.initialized=!0;for(const e in b)j(e,b[e],!1);"Notification"in window?(g.hide(),r.on("show","#settings",k)):g.show();l.on("change","input, select, textarea",function(e){if(e.originalEvent){const e=n(this),t=e.prop("type"),a=e.prop("name");"radio"===t?e.prop("checked")&&x(a,e.val(),!0):"checkbox"===t?(x(a,e.prop("checked"),!0),b[a]=e.prop("checked")):"password"!==t&&x(a,e.val(),!0)}}),l.find("#forceSync").on("click",()=>{S(!0)}),i.emit("setting:get");const t=n("#make-default-client");window.navigator.registerProtocolHandler?(t.on("click",function(){const e=document.location.origin+document.location.pathname+"?uri=%s";return window.navigator.registerProtocolHandler("irc",e,"The Lounge"),window.navigator.registerProtocolHandler("ircs",e,"The Lounge"),!1}),n("#native-app").prop("hidden",!1)):t.hide()}}},,,,,,,,,,,,,,,function(e,t,a){"use strict";e.exports=function(e){let t=0;for(let a=0;a<e.length;a++)t+=e.charCodeAt(a);return"color-"+(1+t%32)}},,function(e,t,a){"use strict";const n=a(33);e.exports=function(e){return n(e).format("D MMMM YYYY, HH:mm:ss")}},function(e,t,a){"use strict";const n=a(154);e.exports=n.keys().reduce((e,t)=>{const a=t.substring(2,t.length-3);return"index"===a?e:(e[a]=n(t),e)},{})},,function(e,t,a){"use strict";const n=a(1),s=a(57).update;const i=new class{init(){this.xhr=null,this.fileQueue=[],this.overlay=document.getElementById("upload-overlay"),this.uploadInput=document.getElementById("upload-input"),this.uploadProgressbar=document.getElementById("upload-progressbar"),this.uploadInput.addEventListener("change",e=>this.filesChanged(e)),document.addEventListener("dragenter",e=>this.dragEnter(e)),document.addEventListener("dragover",e=>this.dragOver(e)),document.addEventListener("dragleave",e=>this.dragLeave(e)),document.addEventListener("drop",e=>this.drop(e)),document.addEventListener("paste",e=>this.paste(e))}dragOver(e){e.preventDefault()}dragEnter(e){e.preventDefault(),!e.relatedTarget&&e.dataTransfer.types.includes("Files")&&this.overlay.classList.add("is-dragover")}dragLeave(e){e.preventDefault(),e.relatedTarget||this.overlay.classList.remove("is-dragover")}drop(e){let t;e.preventDefault(),this.overlay.classList.remove("is-dragover"),t=e.dataTransfer.items?Array.from(e.dataTransfer.items).filter(e=>"file"===e.kind).map(e=>e.getAsFile()):Array.from(e.dataTransfer.files),this.triggerUpload(t)}paste(e){const t=e.clipboardData.items,a=[];for(const e of t)"file"===e.kind&&a.push(e.getAsFile());0!==a.length&&(e.preventDefault(),this.triggerUpload(a))}filesChanged(){const e=Array.from(this.uploadInput.files);this.triggerUpload(e)}triggerUpload(e){if(!e.length)return;const t=0===this.fileQueue.length;for(const t of e)this.maxFileSize>0&&t.size>this.maxFileSize?this.handleResponse({error:"File ".concat(t.name," is over the maximum allowed size")}):this.fileQueue.push(t);t&&this.fileQueue.length>0&&this.dequeueNextFile()}dequeueNextFile(){const e=this.fileQueue.shift();n.emit("upload:auth"),n.once("upload:auth",t=>{this.uploadSingleFile(e,t)})}setProgress(e){this.uploadProgressbar.classList.toggle("upload-progressbar-visible",e>0),this.uploadProgressbar.style.width=e+"%"}uploadSingleFile(e,t){const a=new XMLHttpRequest;this.xhr=a,a.upload.addEventListener("progress",e=>{const t=Math.floor(e.loaded/e.total*1e3)/10;this.setProgress(t)},!1),a.onreadystatechange=(()=>{if(a.readyState===XMLHttpRequest.DONE){let e;this.xhr=null;try{e=JSON.parse(a.responseText)}catch(t){e={error:"Upload aborted: HTTP ".concat(a.status)}}this.handleResponse(e),this.fileQueue.length>0&&this.dequeueNextFile()}});const n=new FormData;n.append("file",e),a.open("POST","uploads/new/".concat(t)),a.send(n)}handleResponse(e){if(this.setProgress(0),e.error){const{vueApp:t}=a(5);t.currentUserVisibleError=e.error}else e.url&&this.insertUploadUrl(e.url)}insertUploadUrl(e){const t=new URL(e,location).toString(),a=document.getElementById("input"),n=a.selectionStart,i=n>0?a.value.substr(0,n)+" ":"",o=a.value.substr(n),r=i+t+" ";s(a,r+o),a.selectionStart=a.selectionEnd=r.length}abort(){this.fileQueue=[],this.xhr&&(this.xhr.abort(),this.xhr=null)}};e.exports={abort:()=>i.abort(),initialize:function(){return i.init(),i},setMaxFileSize:function(e){i.maxFileSize=e}}},,,,function(e,t,a){"use strict";const n=document.getElementById("viewport"),s=document.getElementById("sidebar"),i=document.getElementById("sidebar-overlay");let o=null,r=null,l=0,c=0,d=!1,u=!1,h=!1;class p{static enable(){document.body.addEventListener("touchstart",m,{passive:!0})}static toggle(e){d=e,n.classList.toggle("menu-open",e)}static isOpen(){return d}}function m(e){if(o=r=e.touches.item(0),1!==e.touches.length)return void f();const t=window.getComputedStyle(s);c=parseFloat(t.width),h="absolute"===t.position,(!d||o.screenX>c)&&(l=Date.now(),document.body.addEventListener("touchmove",g,{passive:!0}),document.body.addEventListener("touchend",f,{passive:!0}))}function g(e){const t=r=e.touches.item(0);let a=t.screenX-o.screenX;const l=t.screenY-o.screenY;if(!u){if(Math.abs(l/a)>=1)return void f();const e=window.devicePixelRatio||2;Math.abs(a)>e&&(n.classList.toggle("menu-dragging",!0),u=!0)}h&&(d&&(a+=c),a>c?a=c:a<0&&(a=0),s.style.transform="translate3d("+a+"px, 0, 0)",i.style.opacity=a/c)}function f(){const e=r.screenX-o.screenX,t=Math.abs(e);(t>c/2||Date.now()-l<180&&t>50)&&p.toggle(e>0),document.body.removeEventListener("touchmove",g),document.body.removeEventListener("touchend",f),n.classList.toggle("menu-dragging",!1),s.style.transform=null,i.style.opacity=null,o=null,r=null,l=0,u=!1}e.exports=p},function(e,t,a){"use strict";const n=a(11),s=a(191);e.exports=class{static signout(){n.clear(),s.reload()}}},,function(e,t,a){"use strict";const n=a(4),s=a(1),{vueApp:i,findChannel:o}=a(5);window.vueMounted=(()=>{a(170);const e=a(60),t=a(196),r=a(11),l=a(6);a(26),a(198);const c=n("#sidebar, #footer"),d=n("#viewport");function u(e,t){r.set(e,t),i.$emit("resize")}n("#sidebar-overlay").on("click",()=>{e.toggle(!1),n(window).outerWidth()>l.mobileViewportPixels&&u("thelounge.state.sidebar",!1)}),n("#windows").on("click","button.lt",()=>{const t=!e.isOpen();e.toggle(t),n(window).outerWidth()>l.mobileViewportPixels&&u("thelounge.state.sidebar",t)}),d.on("click",".rt",function(){const e=!d.hasClass("userlist-open");return d.toggleClass("userlist-open",e),u("thelounge.state.userlist",e),!1}),d.on("contextmenu",".network .chan",function(e){return t.createContextMenu(n(this),e).show()}),d.on("click contextmenu",".user",function(e){return!window.getSelection().isCollapsed||t.createContextMenu(n(this),e).show()}),d.on("click","#chat .menu",function(e){return e.currentTarget=n('#sidebar .chan[data-id="'.concat(n(this).closest(".chan").attr("data-id"),'"]'))[0],t.createContextMenu(n(this),e).show()}),navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i)&&n(document.body).addClass("is-apple"),d.on("click",".inline-channel",function(){const e=n(this).attr("data-chan"),t=l.findCurrentNetworkChan(e);t&&n('#sidebar .chan[data-id="'.concat(t.id,'"]')).trigger("click"),s.emit("input",{target:i.activeChannel.channel.id,text:"/join "+e})});const h=function(t,{keepSidebarOpen:a,pushState:r,replaceHistory:c}={}){const d=n(this),u=d.attr("data-target");if(!u)return;const h=d.parents("#sidebar, #footer").length>0,p=h?o(Number(d.attr("data-id"))):null;if(i.activeChannel){const{channel:e}=i.activeChannel;if(p&&e===p.channel)return;e.messages.length>0&&(e.firstUnread=e.messages[e.messages.length-1].id),e.messages.length>100&&(e.messages.splice(0,e.messages.length-100),e.moreHistoryAvailable=!0)}h&&(i.activeChannel=p,p&&(p.channel.highlight=0,p.channel.unread=0),s.emit("open",p?p.channel.id:null),!a&&n(window).outerWidth()<=l.mobileViewportPixels&&e.toggle(!1)),n("#windows > .active").removeClass("active");const m=n(u).addClass("active").trigger("show");if(l.synchronizeNotifiedState(),d.hasClass("chan")&&i.$nextTick(()=>n("#chat-container").addClass("active")),m.find(".chat").length>0&&"special"!==p.type&&n("#input").trigger("ontouchstart"in window?"blur":"focus"),p&&p.channel.usersOutdated&&(p.channel.usersOutdated=!1,s.emit("names",{target:p.channel.id})),!1===r)return!1;const g={};return d.prop("id")?g.clickTarget="#".concat(d.prop("id")):d.hasClass("chan")?g.clickTarget='#sidebar .chan[data-id="'.concat(d.attr("data-id"),'"]'):g.clickTarget='#footer button[data-target="'.concat(u,'"]'),history&&history.pushState&&(c&&history.replaceState?history.replaceState(g,null,u):history.pushState(g,null,u)),!1};c.on("click",".chan, button",h),n("#help").on("click","#view-changelog, #back-to-help",h),n("#changelog").on("click","#back-to-help",h),c.on("click",".close",function(){l.closeChan(n(this).closest(".chan"))}),n(document).on("visibilitychange focus click",()=>{l.synchronizeNotifiedState()}),window.addEventListener("popstate",e=>{const{state:t}=e;if(!t)return;let{clickTarget:a}=t;if(a){!a.includes(".toggle-thumbnail")&&n("#image-viewer").hasClass("opened")&&(a+=", #image-viewer"),n(a).trigger("click",{pushState:!1})}}),s.open()})},,,,,,,,,,,,,,,,,,,,function(e,t){},,,,,,,,,,,,,,,,,function(e,t,a){"use strict";const n=a(101),s=a(102),i=a(108),o=a(116),r=a(118),l=a(119),c=a(51),d=a(122),u=a(202).default,h=/[\u{1F3FB}-\u{1F3FF}]/gu;e.exports=function(e,t,a,p){const m=n(t),g=m.map(e=>e.text).join(""),f=p?p.serverOptions.CHANTYPES:["#","&"],b=p?p.serverOptions.PREFIX:["!","@","%","+"],w=s(g,f,b),v=i(g),_=o(g),k=r(g,a&&a.users||[]),y=w.concat(v).concat(_).concat(k);return l(y,m,g).map(t=>{const n=t.fragments.map(t=>(function(e,t){const a=[];e.bold&&a.push("irc-bold"),void 0!==e.textColor&&a.push("irc-fg"+e.textColor),void 0!==e.bgColor&&a.push("irc-bg"+e.bgColor),e.italic&&a.push("irc-italic"),e.underline&&a.push("irc-underline"),e.strikethrough&&a.push("irc-strikethrough"),e.monospace&&a.push("irc-monospace");const n={};let s=!1;return a.length>0&&(s=!0,n.class=a),e.hexColor&&(s=!0,n.style={color:"#".concat(e.hexColor)},e.hexBgColor&&(n.style["background-color"]="#".concat(e.hexBgColor))),s?t("span",n,e.text):e.text})(t,e));if(t.link){const s=a&&a.previews.find(e=>e.link===t.link),i=e("a",{attrs:{href:t.link,target:"_blank",rel:"noopener"}},n);return s?[i,e(u,{class:["toggle-button","toggle-preview"],props:{link:s}},n)]:i}if(t.channel)return e("span",{class:["inline-channel"],attrs:{role:"button",tabindex:0,"data-chan":t.channel}},n);if(t.emoji){const a=t.emoji.replace(h,""),s=d[a]?"Emoji: ".concat(d[a]):null;return e("span",{class:["emoji"],attrs:{role:"img","aria-label":s,title:s}},n)}return t.nick?e("span",{class:["user",c(t.nick)],attrs:{role:"button","data-name":t.nick}},n):n})}},function(e,t,a){"use strict";const n="",s="",i="",o="",r="",l="",c="",d="",u="",h=/^(\d{1,2})(?:,(\d{1,2}))?/,p=/^([0-9a-f]{6})(?:,([0-9a-f]{6}))?/i,m=/[\u0000-\u0009\u000B-\u001F]/g;const g=["bold","textColor","bgColor","hexColor","hexBgColor","italic","underline","strikethrough","monospace"];e.exports=function(e){return function(e){const t=[];let a,g,f,b,w,v,_,k,y,C,x=0,S=0;const j=()=>{g=!1,f=void 0,b=void 0,w=void 0,v=void 0,_=!1,k=!1,y=!1,C=!1};j();const M=()=>{const a=e.slice(x,S).replace(m,"");if(a.length){const e=t.length?t[t.length-1].end:0;t.push({bold:g,textColor:f,bgColor:b,hexColor:w,hexBgColor:v,italic:_,underline:k,strikethrough:y,monospace:C,text:a,start:e,end:e+a.length})}x=S+1};for(;S<e.length;){switch(e[S]){case o:M(),j();break;case n:M(),g=!g;break;case s:M(),(a=e.slice(S+1).match(h))?(f=Number(a[1]),a[2]&&(b=Number(a[2])),S+=a[0].length,x=S+1):(f=void 0,b=void 0);break;case i:M(),(a=e.slice(S+1).match(p))?(w=a[1].toUpperCase(),a[2]&&(v=a[2].toUpperCase()),S+=a[0].length,x=S+1):(w=void 0,v=void 0);break;case r:{M();const e=b;b=f,f=e;break}case l:M(),_=!_;break;case c:M(),k=!k;break;case d:M(),y=!y;break;case u:M(),C=!C}S+=1}return M(),t}(e).reduce((e,t)=>{if(e.length){const a=e[e.length-1];if(g.every(e=>t[e]===a[e]))return a.text+=t.text,a.end+=t.text.length,e}return e.concat([t])},[])}},function(e,t,a){"use strict";const n=a(103);e.exports=function(e,t,a){const s=a.map(n).join(""),i=t.map(n).join(""),o="(?:^|\\s)[".concat(s,"]*([").concat(i,"][^ ]+)"),r=new RegExp(o,"g"),l=[];let c;do{(c=r.exec(e))&&l.push({start:c.index+c[0].length-c[1].length,end:c.index+c[0].length,channel:c[1]})}while(c);return l}},,,,,,function(e,t,a){"use strict";const n=a(109);n.prototype.normalize=function(e){e.schema||(e.schema="http:",e.url="http://"+e.url),"//"===e.schema&&(e.schema="http:",e.url="http:"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)};const s=n().tlds(a(115)).tlds("onion",!0),i=["sftp","smb","file","irc","ircs","svn","git","steam","mumble","ts3server","svn+ssh","ssh"];for(const e of i)s.add(e+":","http:");e.exports=function(e){const t=s.match(e);return t?t.map(e=>({start:e.index,end:e.lastIndex,link:e.url})):[]}},,,,,,,,function(e,t,a){"use strict";const n=a(117)();e.exports=function(e){const t=[];let a;for(;a=n.exec(e);)t.push({start:a.index,end:a.index+a[0].length,emoji:a[0]});return t}},,function(e,t,a){"use strict";const n=/([\w[\]\\`^{|}-]+)/g;e.exports=function(e,t){const a=[];if(0===t.length)return a;let s;for(;s=n.exec(e);)t.indexOf(s[1])>-1&&a.push({start:s.index,end:s.index+s[1].length,nick:s[1]});return a}},function(e,t,a){"use strict";const n=a(120),s=a(121);function i(e,t){return e.start-t.start||t.end-e.end}e.exports=function(e,t,a){return(e=e.sort(i).reduce((e,t)=>e.some(e=>n(e,t))?e:e.concat([t]),[])).concat(s(e,a)).sort(i).map(e=>(e.fragments=t.filter(t=>n(e,t)).map(t=>(function(e,t){const a=t.start,n=Math.max(t.start,e.start),s=Math.min(t.end,e.end),i=t.text.slice(n-a,s-a);return Object.assign({},t,{start:n,end:s,text:i})})(e,t)),e))}},function(e,t,a){"use strict";e.exports=function(e,t){return e.start<=t.start&&t.start<e.end||e.start<t.end&&t.end<=e.end||t.start<=e.start&&e.start<t.end||t.start<e.end&&e.end<=t.end}},function(e,t,a){"use strict";e.exports=function(e,t){let a=0;const n=e.reduce((e,t)=>(t.start>a&&e.push({start:a,end:t.start}),a=t.end,e),[]);return a<t.length&&n.push({start:a,end:t.length}),n}},function(e){e.exports={"😀":"grinning face","😃":"grinning face with big eyes","😄":"grinning face with smiling eyes","😁":"beaming face with smiling eyes","😆":"grinning squinting face","😅":"grinning face with sweat","🤣":"rolling on the floor laughing","😂":"face with tears of joy","🙂":"slightly smiling face","🙃":"upside-down face","😉":"winking face","😊":"smiling face with smiling eyes","😇":"smiling face with halo","🥰":"smiling face with hearts","😍":"smiling face with heart-eyes","🤩":"star-struck","😘":"face blowing a kiss","😗":"kissing face","☺️":"smiling face","😚":"kissing face with closed eyes","😙":"kissing face with smiling eyes","😋":"face savoring food","😛":"face with tongue","😜":"winking face with tongue","🤪":"zany face","😝":"squinting face with tongue","🤑":"money-mouth face","🤗":"hugging face","🤭":"face with hand over mouth","🤫":"shushing face","🤔":"thinking face","🤐":"zipper-mouth face","🤨":"face with raised eyebrow","😐":"neutral face","😑":"expressionless face","😶":"face without mouth","😏":"smirking face","😒":"unamused face","🙄":"face with rolling eyes","😬":"grimacing face","🤥":"lying face","😌":"relieved face","😔":"pensive face","😪":"sleepy face","🤤":"drooling face","😴":"sleeping face","😷":"face with medical mask","🤒":"face with thermometer","🤕":"face with head-bandage","🤢":"nauseated face","🤮":"face vomiting","🤧":"sneezing face","🥵":"hot face","🥶":"cold face","🥴":"woozy face","😵":"dizzy face","🤯":"exploding head","🤠":"cowboy hat face","🥳":"partying face","😎":"smiling face with sunglasses","🤓":"nerd face","🧐":"face with monocle","😕":"confused face","😟":"worried face","🙁":"slightly frowning face","☹️":"frowning face","😮":"face with open mouth","😯":"hushed face","😲":"astonished face","😳":"flushed face","🥺":"pleading face","😦":"frowning face with open mouth","😧":"anguished face","😨":"fearful face","😰":"anxious face with sweat","😥":"sad but relieved face","😢":"crying face","😭":"loudly crying face","😱":"face screaming in fear","😖":"confounded face","😣":"persevering face","😞":"disappointed face","😓":"downcast face with sweat","😩":"weary face","😫":"tired face","🥱":"yawning face","😤":"face with steam from nose","😡":"pouting face","😠":"angry face","🤬":"face with symbols on mouth","😈":"smiling face with horns","👿":"angry face with horns","💀":"skull","☠️":"skull and crossbones","💩":"pile of poo","🤡":"clown face","👹":"ogre","👺":"goblin","👻":"ghost","👽":"alien","👾":"alien monster","🤖":"robot","😺":"grinning cat","😸":"grinning cat with smiling eyes","😹":"cat with tears of joy","😻":"smiling cat with heart-eyes","😼":"cat with wry smile","😽":"kissing cat","🙀":"weary cat","😿":"crying cat","😾":"pouting cat","🙈":"see-no-evil monkey","🙉":"hear-no-evil monkey","🙊":"speak-no-evil monkey","💋":"kiss mark","💌":"love letter","💘":"heart with arrow","💝":"heart with ribbon","💖":"sparkling heart","💗":"growing heart","💓":"beating heart","💞":"revolving hearts","💕":"two hearts","💟":"heart decoration","❣️":"heart exclamation","💔":"broken heart","❤️":"red heart","🧡":"orange heart","💛":"yellow heart","💚":"green heart","💙":"blue heart","💜":"purple heart","🤎":"brown heart","🖤":"black heart","🤍":"white heart","💯":"hundred points","💢":"anger symbol","💥":"collision","💫":"dizzy","💦":"sweat droplets","💨":"dashing away","🕳️":"hole","💣":"bomb","💬":"speech balloon","👁️‍🗨️":"eye in speech bubble","🗨️":"left speech bubble","🗯️":"right anger bubble","💭":"thought balloon","💤":"zzz","👋":"waving hand","🤚":"raised back of hand","🖐️":"hand with fingers splayed","✋":"raised hand","🖖":"vulcan salute","👌":"OK hand","🤏":"pinching hand","✌️":"victory hand","🤞":"crossed fingers","🤟":"love-you gesture","🤘":"sign of the horns","🤙":"call me hand","👈":"backhand index pointing left","👉":"backhand index pointing right","👆":"backhand index pointing up","🖕":"middle finger","👇":"backhand index pointing down","☝️":"index pointing up","👍":"thumbs up","👎":"thumbs down","✊":"raised fist","👊":"oncoming fist","🤛":"left-facing fist","🤜":"right-facing fist","👏":"clapping hands","🙌":"raising hands","👐":"open hands","🤲":"palms up together","🤝":"handshake","🙏":"folded hands","✍️":"writing hand","💅":"nail polish","🤳":"selfie","💪":"flexed biceps","🦾":"mechanical arm","🦿":"mechanical leg","🦵":"leg","🦶":"foot","👂":"ear","🦻":"ear with hearing aid","👃":"nose","🧠":"brain","🦷":"tooth","🦴":"bone","👀":"eyes","👁️":"eye","👅":"tongue","👄":"mouth","👶":"baby","🧒":"child","👦":"boy","👧":"girl","🧑":"person","👱":"person: blond hair","👨":"man","🧔":"man: beard","👱‍♂️":"man: blond hair","👨‍🦰":"man: red hair","👨‍🦱":"man: curly hair","👨‍🦳":"man: white hair","👨‍🦲":"man: bald","👩":"woman","👱‍♀️":"woman: blond hair","👩‍🦰":"woman: red hair","👩‍🦱":"woman: curly hair","👩‍🦳":"woman: white hair","👩‍🦲":"woman: bald","🧓":"older person","👴":"old man","👵":"old woman","🙍":"person frowning","🙍‍♂️":"man frowning","🙍‍♀️":"woman frowning","🙎":"person pouting","🙎‍♂️":"man pouting","🙎‍♀️":"woman pouting","🙅":"person gesturing NO","🙅‍♂️":"man gesturing NO","🙅‍♀️":"woman gesturing NO","🙆":"person gesturing OK","🙆‍♂️":"man gesturing OK","🙆‍♀️":"woman gesturing OK","💁":"person tipping hand","💁‍♂️":"man tipping hand","💁‍♀️":"woman tipping hand","🙋":"person raising hand","🙋‍♂️":"man raising hand","🙋‍♀️":"woman raising hand","🧏":"deaf person","🧏‍♂️":"deaf man","🧏‍♀️":"deaf woman","🙇":"person bowing","🙇‍♂️":"man bowing","🙇‍♀️":"woman bowing","🤦":"person facepalming","🤦‍♂️":"man facepalming","🤦‍♀️":"woman facepalming","🤷":"person shrugging","🤷‍♂️":"man shrugging","🤷‍♀️":"woman shrugging","👨‍⚕️":"man health worker","👩‍⚕️":"woman health worker","👨‍🎓":"man student","👩‍🎓":"woman student","👨‍🏫":"man teacher","👩‍🏫":"woman teacher","👨‍⚖️":"man judge","👩‍⚖️":"woman judge","👨‍🌾":"man farmer","👩‍🌾":"woman farmer","👨‍🍳":"man cook","👩‍🍳":"woman cook","👨‍🔧":"man mechanic","👩‍🔧":"woman mechanic","👨‍🏭":"man factory worker","👩‍🏭":"woman factory worker","👨‍💼":"man office worker","👩‍💼":"woman office worker","👨‍🔬":"man scientist","👩‍🔬":"woman scientist","👨‍💻":"man technologist","👩‍💻":"woman technologist","👨‍🎤":"man singer","👩‍🎤":"woman singer","👨‍🎨":"man artist","👩‍🎨":"woman artist","👨‍✈️":"man pilot","👩‍✈️":"woman pilot","👨‍🚀":"man astronaut","👩‍🚀":"woman astronaut","👨‍🚒":"man firefighter","👩‍🚒":"woman firefighter","👮":"police officer","👮‍♂️":"man police officer","👮‍♀️":"woman police officer","🕵️":"detective","🕵️‍♂️":"man detective","🕵️‍♀️":"woman detective","💂":"guard","💂‍♂️":"man guard","💂‍♀️":"woman guard","👷":"construction worker","👷‍♂️":"man construction worker","👷‍♀️":"woman construction worker","🤴":"prince","👸":"princess","👳":"person wearing turban","👳‍♂️":"man wearing turban","👳‍♀️":"woman wearing turban","👲":"man with Chinese cap","🧕":"woman with headscarf","🤵":"man in tuxedo","👰":"bride with veil","🤰":"pregnant woman","🤱":"breast-feeding","👼":"baby angel","🎅":"Santa Claus","🤶":"Mrs. Claus","🦸":"superhero","🦸‍♂️":"man superhero","🦸‍♀️":"woman superhero","🦹":"supervillain","🦹‍♂️":"man supervillain","🦹‍♀️":"woman supervillain","🧙":"mage","🧙‍♂️":"man mage","🧙‍♀️":"woman mage","🧚":"fairy","🧚‍♂️":"man fairy","🧚‍♀️":"woman fairy","🧛":"vampire","🧛‍♂️":"man vampire","🧛‍♀️":"woman vampire","🧜":"merperson","🧜‍♂️":"merman","🧜‍♀️":"mermaid","🧝":"elf","🧝‍♂️":"man elf","🧝‍♀️":"woman elf","🧞":"genie","🧞‍♂️":"man genie","🧞‍♀️":"woman genie","🧟":"zombie","🧟‍♂️":"man zombie","🧟‍♀️":"woman zombie","💆":"person getting massage","💆‍♂️":"man getting massage","💆‍♀️":"woman getting massage","💇":"person getting haircut","💇‍♂️":"man getting haircut","💇‍♀️":"woman getting haircut","🚶":"person walking","🚶‍♂️":"man walking","🚶‍♀️":"woman walking","🧍":"person standing","🧍‍♂️":"man standing","🧍‍♀️":"woman standing","🧎":"person kneeling","🧎‍♂️":"man kneeling","🧎‍♀️":"woman kneeling","👨‍🦯":"man with probing cane","👩‍🦯":"woman with probing cane","👨‍🦼":"man in motorized wheelchair","👩‍🦼":"woman in motorized wheelchair","👨‍🦽":"man in manual wheelchair","👩‍🦽":"woman in manual wheelchair","🏃":"person running","🏃‍♂️":"man running","🏃‍♀️":"woman running","💃":"woman dancing","🕺":"man dancing","🕴️":"man in suit levitating","👯":"people with bunny ears","👯‍♂️":"men with bunny ears","👯‍♀️":"women with bunny ears","🧖":"person in steamy room","🧖‍♂️":"man in steamy room","🧖‍♀️":"woman in steamy room","🧗":"person climbing","🧗‍♂️":"man climbing","🧗‍♀️":"woman climbing","🤺":"person fencing","🏇":"horse racing","⛷️":"skier","🏂":"snowboarder","🏌️":"person golfing","🏌️‍♂️":"man golfing","🏌️‍♀️":"woman golfing","🏄":"person surfing","🏄‍♂️":"man surfing","🏄‍♀️":"woman surfing","🚣":"person rowing boat","🚣‍♂️":"man rowing boat","🚣‍♀️":"woman rowing boat","🏊":"person swimming","🏊‍♂️":"man swimming","🏊‍♀️":"woman swimming","⛹️":"person bouncing ball","⛹️‍♂️":"man bouncing ball","⛹️‍♀️":"woman bouncing ball","🏋️":"person lifting weights","🏋️‍♂️":"man lifting weights","🏋️‍♀️":"woman lifting weights","🚴":"person biking","🚴‍♂️":"man biking","🚴‍♀️":"woman biking","🚵":"person mountain biking","🚵‍♂️":"man mountain biking","🚵‍♀️":"woman mountain biking","🤸":"person cartwheeling","🤸‍♂️":"man cartwheeling","🤸‍♀️":"woman cartwheeling","🤼":"people wrestling","🤼‍♂️":"men wrestling","🤼‍♀️":"women wrestling","🤽":"person playing water polo","🤽‍♂️":"man playing water polo","🤽‍♀️":"woman playing water polo","🤾":"person playing handball","🤾‍♂️":"man playing handball","🤾‍♀️":"woman playing handball","🤹":"person juggling","🤹‍♂️":"man juggling","🤹‍♀️":"woman juggling","🧘":"person in lotus position","🧘‍♂️":"man in lotus position","🧘‍♀️":"woman in lotus position","🛀":"person taking bath","🛌":"person in bed","🧑‍🤝‍🧑":"people holding hands","👭":"women holding hands","👫":"woman and man holding hands","👬":"men holding hands","💏":"kiss","👩‍❤️‍💋‍👨":"kiss: woman, man","👨‍❤️‍💋‍👨":"kiss: man, man","👩‍❤️‍💋‍👩":"kiss: woman, woman","💑":"couple with heart","👩‍❤️‍👨":"couple with heart: woman, man","👨‍❤️‍👨":"couple with heart: man, man","👩‍❤️‍👩":"couple with heart: woman, woman","👪":"family","👨‍👩‍👦":"family: man, woman, boy","👨‍👩‍👧":"family: man, woman, girl","👨‍👩‍👧‍👦":"family: man, woman, girl, boy","👨‍👩‍👦‍👦":"family: man, woman, boy, boy","👨‍👩‍👧‍👧":"family: man, woman, girl, girl","👨‍👨‍👦":"family: man, man, boy","👨‍👨‍👧":"family: man, man, girl","👨‍👨‍👧‍👦":"family: man, man, girl, boy","👨‍👨‍👦‍👦":"family: man, man, boy, boy","👨‍👨‍👧‍👧":"family: man, man, girl, girl","👩‍👩‍👦":"family: woman, woman, boy","👩‍👩‍👧":"family: woman, woman, girl","👩‍👩‍👧‍👦":"family: woman, woman, girl, boy","👩‍👩‍👦‍👦":"family: woman, woman, boy, boy","👩‍👩‍👧‍👧":"family: woman, woman, girl, girl","👨‍👦":"family: man, boy","👨‍👦‍👦":"family: man, boy, boy","👨‍👧":"family: man, girl","👨‍👧‍👦":"family: man, girl, boy","👨‍👧‍👧":"family: man, girl, girl","👩‍👦":"family: woman, boy","👩‍👦‍👦":"family: woman, boy, boy","👩‍👧":"family: woman, girl","👩‍👧‍👦":"family: woman, girl, boy","👩‍👧‍👧":"family: woman, girl, girl","🗣️":"speaking head","👤":"bust in silhouette","👥":"busts in silhouette","👣":"footprints","🐵":"monkey face","🐒":"monkey","🦍":"gorilla","🦧":"orangutan","🐶":"dog face","🐕":"dog","🦮":"guide dog","🐕‍🦺":"service dog","🐩":"poodle","🐺":"wolf","🦊":"fox","🦝":"raccoon","🐱":"cat face","🐈":"cat","🦁":"lion","🐯":"tiger face","🐅":"tiger","🐆":"leopard","🐴":"horse face","🐎":"horse","🦄":"unicorn","🦓":"zebra","🦌":"deer","🐮":"cow face","🐂":"ox","🐃":"water buffalo","🐄":"cow","🐷":"pig face","🐖":"pig","🐗":"boar","🐽":"pig nose","🐏":"ram","🐑":"ewe","🐐":"goat","🐪":"camel","🐫":"two-hump camel","🦙":"llama","🦒":"giraffe","🐘":"elephant","🦏":"rhinoceros","🦛":"hippopotamus","🐭":"mouse face","🐁":"mouse","🐀":"rat","🐹":"hamster","🐰":"rabbit face","🐇":"rabbit","🐿️":"chipmunk","🦔":"hedgehog","🦇":"bat","🐻":"bear","🐨":"koala","🐼":"panda","🦥":"sloth","🦦":"otter","🦨":"skunk","🦘":"kangaroo","🦡":"badger","🐾":"paw prints","🦃":"turkey","🐔":"chicken","🐓":"rooster","🐣":"hatching chick","🐤":"baby chick","🐥":"front-facing baby chick","🐦":"bird","🐧":"penguin","🕊️":"dove","🦅":"eagle","🦆":"duck","🦢":"swan","🦉":"owl","🦩":"flamingo","🦚":"peacock","🦜":"parrot","🐸":"frog","🐊":"crocodile","🐢":"turtle","🦎":"lizard","🐍":"snake","🐲":"dragon face","🐉":"dragon","🦕":"sauropod","🦖":"T-Rex","🐳":"spouting whale","🐋":"whale","🐬":"dolphin","🐟":"fish","🐠":"tropical fish","🐡":"blowfish","🦈":"shark","🐙":"octopus","🐚":"spiral shell","🐌":"snail","🦋":"butterfly","🐛":"bug","🐜":"ant","🐝":"honeybee","🐞":"lady beetle","🦗":"cricket","🕷️":"spider","🕸️":"spider web","🦂":"scorpion","🦟":"mosquito","🦠":"microbe","💐":"bouquet","🌸":"cherry blossom","💮":"white flower","🏵️":"rosette","🌹":"rose","🥀":"wilted flower","🌺":"hibiscus","🌻":"sunflower","🌼":"blossom","🌷":"tulip","🌱":"seedling","🌲":"evergreen tree","🌳":"deciduous tree","🌴":"palm tree","🌵":"cactus","🌾":"sheaf of rice","🌿":"herb","☘️":"shamrock","🍀":"four leaf clover","🍁":"maple leaf","🍂":"fallen leaf","🍃":"leaf fluttering in wind","🍇":"grapes","🍈":"melon","🍉":"watermelon","🍊":"tangerine","🍋":"lemon","🍌":"banana","🍍":"pineapple","🥭":"mango","🍎":"red apple","🍏":"green apple","🍐":"pear","🍑":"peach","🍒":"cherries","🍓":"strawberry","🥝":"kiwi fruit","🍅":"tomato","🥥":"coconut","🥑":"avocado","🍆":"eggplant","🥔":"potato","🥕":"carrot","🌽":"ear of corn","🌶️":"hot pepper","🥒":"cucumber","🥬":"leafy green","🥦":"broccoli","🧄":"garlic","🧅":"onion","🍄":"mushroom","🥜":"peanuts","🌰":"chestnut","🍞":"bread","🥐":"croissant","🥖":"baguette bread","🥨":"pretzel","🥯":"bagel","🥞":"pancakes","🧇":"waffle","🧀":"cheese wedge","🍖":"meat on bone","🍗":"poultry leg","🥩":"cut of meat","🥓":"bacon","🍔":"hamburger","🍟":"french fries","🍕":"pizza","🌭":"hot dog","🥪":"sandwich","🌮":"taco","🌯":"burrito","🥙":"stuffed flatbread","🧆":"falafel","🥚":"egg","🍳":"cooking","🥘":"shallow pan of food","🍲":"pot of food","🥣":"bowl with spoon","🥗":"green salad","🍿":"popcorn","🧈":"butter","🧂":"salt","🥫":"canned food","🍱":"bento box","🍘":"rice cracker","🍙":"rice ball","🍚":"cooked rice","🍛":"curry rice","🍜":"steaming bowl","🍝":"spaghetti","🍠":"roasted sweet potato","🍢":"oden","🍣":"sushi","🍤":"fried shrimp","🍥":"fish cake with swirl","🥮":"moon cake","🍡":"dango","🥟":"dumpling","🥠":"fortune cookie","🥡":"takeout box","🦀":"crab","🦞":"lobster","🦐":"shrimp","🦑":"squid","🦪":"oyster","🍦":"soft ice cream","🍧":"shaved ice","🍨":"ice cream","🍩":"doughnut","🍪":"cookie","🎂":"birthday cake","🍰":"shortcake","🧁":"cupcake","🥧":"pie","🍫":"chocolate bar","🍬":"candy","🍭":"lollipop","🍮":"custard","🍯":"honey pot","🍼":"baby bottle","🥛":"glass of milk","☕":"hot beverage","🍵":"teacup without handle","🍶":"sake","🍾":"bottle with popping cork","🍷":"wine glass","🍸":"cocktail glass","🍹":"tropical drink","🍺":"beer mug","🍻":"clinking beer mugs","🥂":"clinking glasses","🥃":"tumbler glass","🥤":"cup with straw","🧃":"beverage box","🧉":"mate","🧊":"ice cube","🥢":"chopsticks","🍽️":"fork and knife with plate","🍴":"fork and knife","🥄":"spoon","🔪":"kitchen knife","🏺":"amphora","🌍":"globe showing Europe-Africa","🌎":"globe showing Americas","🌏":"globe showing Asia-Australia","🌐":"globe with meridians","🗺️":"world map","🗾":"map of Japan","🧭":"compass","🏔️":"snow-capped mountain","⛰️":"mountain","🌋":"volcano","🗻":"mount fuji","🏕️":"camping","🏖️":"beach with umbrella","🏜️":"desert","🏝️":"desert island","🏞️":"national park","🏟️":"stadium","🏛️":"classical building","🏗️":"building construction","🧱":"brick","🏘️":"houses","🏚️":"derelict house","🏠":"house","🏡":"house with garden","🏢":"office building","🏣":"Japanese post office","🏤":"post office","🏥":"hospital","🏦":"bank","🏨":"hotel","🏩":"love hotel","🏪":"convenience store","🏫":"school","🏬":"department store","🏭":"factory","🏯":"Japanese castle","🏰":"castle","💒":"wedding","🗼":"Tokyo tower","🗽":"Statue of Liberty","⛪":"church","🕌":"mosque","🛕":"hindu temple","🕍":"synagogue","⛩️":"shinto shrine","🕋":"kaaba","⛲":"fountain","⛺":"tent","🌁":"foggy","🌃":"night with stars","🏙️":"cityscape","🌄":"sunrise over mountains","🌅":"sunrise","🌆":"cityscape at dusk","🌇":"sunset","🌉":"bridge at night","♨️":"hot springs","🎠":"carousel horse","🎡":"ferris wheel","🎢":"roller coaster","💈":"barber pole","🎪":"circus tent","🚂":"locomotive","🚃":"railway car","🚄":"high-speed train","🚅":"bullet train","🚆":"train","🚇":"metro","🚈":"light rail","🚉":"station","🚊":"tram","🚝":"monorail","🚞":"mountain railway","🚋":"tram car","🚌":"bus","🚍":"oncoming bus","🚎":"trolleybus","🚐":"minibus","🚑":"ambulance","🚒":"fire engine","🚓":"police car","🚔":"oncoming police car","🚕":"taxi","🚖":"oncoming taxi","🚗":"automobile","🚘":"oncoming automobile","🚙":"sport utility vehicle","🚚":"delivery truck","🚛":"articulated lorry","🚜":"tractor","🏎️":"racing car","🏍️":"motorcycle","🛵":"motor scooter","🦽":"manual wheelchair","🦼":"motorized wheelchair","🛺":"auto rickshaw","🚲":"bicycle","🛴":"kick scooter","🛹":"skateboard","🚏":"bus stop","🛣️":"motorway","🛤️":"railway track","🛢️":"oil drum","⛽":"fuel pump","🚨":"police car light","🚥":"horizontal traffic light","🚦":"vertical traffic light","🛑":"stop sign","🚧":"construction","⚓":"anchor","⛵":"sailboat","🛶":"canoe","🚤":"speedboat","🛳️":"passenger ship","⛴️":"ferry","🛥️":"motor boat","🚢":"ship","✈️":"airplane","🛩️":"small airplane","🛫":"airplane departure","🛬":"airplane arrival","🪂":"parachute","💺":"seat","🚁":"helicopter","🚟":"suspension railway","🚠":"mountain cableway","🚡":"aerial tramway","🛰️":"satellite","🚀":"rocket","🛸":"flying saucer","🛎️":"bellhop bell","🧳":"luggage","⌛":"hourglass done","⏳":"hourglass not done","⌚":"watch","⏰":"alarm clock","⏱️":"stopwatch","⏲️":"timer clock","🕰️":"mantelpiece clock","🕛":"twelve o’clock","🕧":"twelve-thirty","🕐":"one o’clock","🕜":"one-thirty","🕑":"two o’clock","🕝":"two-thirty","🕒":"three o’clock","🕞":"three-thirty","🕓":"four o’clock","🕟":"four-thirty","🕔":"five o’clock","🕠":"five-thirty","🕕":"six o’clock","🕡":"six-thirty","🕖":"seven o’clock","🕢":"seven-thirty","🕗":"eight o’clock","🕣":"eight-thirty","🕘":"nine o’clock","🕤":"nine-thirty","🕙":"ten o’clock","🕥":"ten-thirty","🕚":"eleven o’clock","🕦":"eleven-thirty","🌑":"new moon","🌒":"waxing crescent moon","🌓":"first quarter moon","🌔":"waxing gibbous moon","🌕":"full moon","🌖":"waning gibbous moon","🌗":"last quarter moon","🌘":"waning crescent moon","🌙":"crescent moon","🌚":"new moon face","🌛":"first quarter moon face","🌜":"last quarter moon face","🌡️":"thermometer","☀️":"sun","🌝":"full moon face","🌞":"sun with face","🪐":"ringed planet","⭐":"star","🌟":"glowing star","🌠":"shooting star","🌌":"milky way","☁️":"cloud","⛅":"sun behind cloud","⛈️":"cloud with lightning and rain","🌤️":"sun behind small cloud","🌥️":"sun behind large cloud","🌦️":"sun behind rain cloud","🌧️":"cloud with rain","🌨️":"cloud with snow","🌩️":"cloud with lightning","🌪️":"tornado","🌫️":"fog","🌬️":"wind face","🌀":"cyclone","🌈":"rainbow","🌂":"closed umbrella","☂️":"umbrel