├── .github
└── workflows
│ └── release.yml
├── .gitignore
├── LICENSE
├── README.md
├── emoji.go
├── go.mod
├── go.sum
└── main.go
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: release
2 |
3 | on:
4 | push:
5 | tags:
6 | - "v*"
7 |
8 | permissions:
9 | contents: write
10 |
11 | jobs:
12 | release:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - uses: actions/checkout@v2
16 | - uses: cli/gh-extension-precompile@v1
17 | with:
18 | go_version: "1.18"
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist
2 | bin
3 |
4 | # Binaries for programs and plugins
5 | *.exe
6 | *.exe~
7 | *.dll
8 | *.so
9 | *.dylib
10 |
11 | # Test binary, built with `go test -c`
12 | *.test
13 |
14 | # Output of the go coverage tool, specifically when used with LiteIDE
15 | *.out
16 |
17 | # Dependency directories (remove the comment below to include it)
18 | # vendor/
19 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU AFFERO GENERAL PUBLIC LICENSE
2 | Version 3, 19 November 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU Affero General Public License is a free, copyleft license for
11 | software and other kinds of works, specifically designed to ensure
12 | cooperation with the community in the case of network server software.
13 |
14 | The licenses for most software and other practical works are designed
15 | to take away your freedom to share and change the works. By contrast,
16 | our General Public Licenses are intended to guarantee your freedom to
17 | share and change all versions of a program--to make sure it remains free
18 | software for all its users.
19 |
20 | When we speak of free software, we are referring to freedom, not
21 | price. Our General Public Licenses are designed to make sure that you
22 | have the freedom to distribute copies of free software (and charge for
23 | them if you wish), that you receive source code or can get it if you
24 | want it, that you can change the software or use pieces of it in new
25 | free programs, and that you know you can do these things.
26 |
27 | Developers that use our General Public Licenses protect your rights
28 | with two steps: (1) assert copyright on the software, and (2) offer
29 | you this License which gives you legal permission to copy, distribute
30 | and/or modify the software.
31 |
32 | A secondary benefit of defending all users' freedom is that
33 | improvements made in alternate versions of the program, if they
34 | receive widespread use, become available for other developers to
35 | incorporate. Many developers of free software are heartened and
36 | encouraged by the resulting cooperation. However, in the case of
37 | software used on network servers, this result may fail to come about.
38 | The GNU General Public License permits making a modified version and
39 | letting the public access it on a server without ever releasing its
40 | source code to the public.
41 |
42 | The GNU Affero General Public License is designed specifically to
43 | ensure that, in such cases, the modified source code becomes available
44 | to the community. It requires the operator of a network server to
45 | provide the source code of the modified version running there to the
46 | users of that server. Therefore, public use of a modified version, on
47 | a publicly accessible server, gives the public access to the source
48 | code of the modified version.
49 |
50 | An older license, called the Affero General Public License and
51 | published by Affero, was designed to accomplish similar goals. This is
52 | a different license, not a version of the Affero GPL, but Affero has
53 | released a new version of the Affero GPL which permits relicensing under
54 | this license.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | TERMS AND CONDITIONS
60 |
61 | 0. Definitions.
62 |
63 | "This License" refers to version 3 of the GNU Affero General Public License.
64 |
65 | "Copyright" also means copyright-like laws that apply to other kinds of
66 | works, such as semiconductor masks.
67 |
68 | "The Program" refers to any copyrightable work licensed under this
69 | License. Each licensee is addressed as "you". "Licensees" and
70 | "recipients" may be individuals or organizations.
71 |
72 | To "modify" a work means to copy from or adapt all or part of the work
73 | in a fashion requiring copyright permission, other than the making of an
74 | exact copy. The resulting work is called a "modified version" of the
75 | earlier work or a work "based on" the earlier work.
76 |
77 | A "covered work" means either the unmodified Program or a work based
78 | on the Program.
79 |
80 | To "propagate" a work means to do anything with it that, without
81 | permission, would make you directly or secondarily liable for
82 | infringement under applicable copyright law, except executing it on a
83 | computer or modifying a private copy. Propagation includes copying,
84 | distribution (with or without modification), making available to the
85 | public, and in some countries other activities as well.
86 |
87 | To "convey" a work means any kind of propagation that enables other
88 | parties to make or receive copies. Mere interaction with a user through
89 | a computer network, with no transfer of a copy, is not conveying.
90 |
91 | An interactive user interface displays "Appropriate Legal Notices"
92 | to the extent that it includes a convenient and prominently visible
93 | feature that (1) displays an appropriate copyright notice, and (2)
94 | tells the user that there is no warranty for the work (except to the
95 | extent that warranties are provided), that licensees may convey the
96 | work under this License, and how to view a copy of this License. If
97 | the interface presents a list of user commands or options, such as a
98 | menu, a prominent item in the list meets this criterion.
99 |
100 | 1. Source Code.
101 |
102 | The "source code" for a work means the preferred form of the work
103 | for making modifications to it. "Object code" means any non-source
104 | form of a work.
105 |
106 | A "Standard Interface" means an interface that either is an official
107 | standard defined by a recognized standards body, or, in the case of
108 | interfaces specified for a particular programming language, one that
109 | is widely used among developers working in that language.
110 |
111 | The "System Libraries" of an executable work include anything, other
112 | than the work as a whole, that (a) is included in the normal form of
113 | packaging a Major Component, but which is not part of that Major
114 | Component, and (b) serves only to enable use of the work with that
115 | Major Component, or to implement a Standard Interface for which an
116 | implementation is available to the public in source code form. A
117 | "Major Component", in this context, means a major essential component
118 | (kernel, window system, and so on) of the specific operating system
119 | (if any) on which the executable work runs, or a compiler used to
120 | produce the work, or an object code interpreter used to run it.
121 |
122 | The "Corresponding Source" for a work in object code form means all
123 | the source code needed to generate, install, and (for an executable
124 | work) run the object code and to modify the work, including scripts to
125 | control those activities. However, it does not include the work's
126 | System Libraries, or general-purpose tools or generally available free
127 | programs which are used unmodified in performing those activities but
128 | which are not part of the work. For example, Corresponding Source
129 | includes interface definition files associated with source files for
130 | the work, and the source code for shared libraries and dynamically
131 | linked subprograms that the work is specifically designed to require,
132 | such as by intimate data communication or control flow between those
133 | subprograms and other parts of the work.
134 |
135 | The Corresponding Source need not include anything that users
136 | can regenerate automatically from other parts of the Corresponding
137 | Source.
138 |
139 | The Corresponding Source for a work in source code form is that
140 | same work.
141 |
142 | 2. Basic Permissions.
143 |
144 | All rights granted under this License are granted for the term of
145 | copyright on the Program, and are irrevocable provided the stated
146 | conditions are met. This License explicitly affirms your unlimited
147 | permission to run the unmodified Program. The output from running a
148 | covered work is covered by this License only if the output, given its
149 | content, constitutes a covered work. This License acknowledges your
150 | rights of fair use or other equivalent, as provided by copyright law.
151 |
152 | You may make, run and propagate covered works that you do not
153 | convey, without conditions so long as your license otherwise remains
154 | in force. You may convey covered works to others for the sole purpose
155 | of having them make modifications exclusively for you, or provide you
156 | with facilities for running those works, provided that you comply with
157 | the terms of this License in conveying all material for which you do
158 | not control copyright. Those thus making or running the covered works
159 | for you must do so exclusively on your behalf, under your direction
160 | and control, on terms that prohibit them from making any copies of
161 | your copyrighted material outside their relationship with you.
162 |
163 | Conveying under any other circumstances is permitted solely under
164 | the conditions stated below. Sublicensing is not allowed; section 10
165 | makes it unnecessary.
166 |
167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
168 |
169 | No covered work shall be deemed part of an effective technological
170 | measure under any applicable law fulfilling obligations under article
171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
172 | similar laws prohibiting or restricting circumvention of such
173 | measures.
174 |
175 | When you convey a covered work, you waive any legal power to forbid
176 | circumvention of technological measures to the extent such circumvention
177 | is effected by exercising rights under this License with respect to
178 | the covered work, and you disclaim any intention to limit operation or
179 | modification of the work as a means of enforcing, against the work's
180 | users, your or third parties' legal rights to forbid circumvention of
181 | technological measures.
182 |
183 | 4. Conveying Verbatim Copies.
184 |
185 | You may convey verbatim copies of the Program's source code as you
186 | receive it, in any medium, provided that you conspicuously and
187 | appropriately publish on each copy an appropriate copyright notice;
188 | keep intact all notices stating that this License and any
189 | non-permissive terms added in accord with section 7 apply to the code;
190 | keep intact all notices of the absence of any warranty; and give all
191 | recipients a copy of this License along with the Program.
192 |
193 | You may charge any price or no price for each copy that you convey,
194 | and you may offer support or warranty protection for a fee.
195 |
196 | 5. Conveying Modified Source Versions.
197 |
198 | You may convey a work based on the Program, or the modifications to
199 | produce it from the Program, in the form of source code under the
200 | terms of section 4, provided that you also meet all of these conditions:
201 |
202 | a) The work must carry prominent notices stating that you modified
203 | it, and giving a relevant date.
204 |
205 | b) The work must carry prominent notices stating that it is
206 | released under this License and any conditions added under section
207 | 7. This requirement modifies the requirement in section 4 to
208 | "keep intact all notices".
209 |
210 | c) You must license the entire work, as a whole, under this
211 | License to anyone who comes into possession of a copy. This
212 | License will therefore apply, along with any applicable section 7
213 | additional terms, to the whole of the work, and all its parts,
214 | regardless of how they are packaged. This License gives no
215 | permission to license the work in any other way, but it does not
216 | invalidate such permission if you have separately received it.
217 |
218 | d) If the work has interactive user interfaces, each must display
219 | Appropriate Legal Notices; however, if the Program has interactive
220 | interfaces that do not display Appropriate Legal Notices, your
221 | work need not make them do so.
222 |
223 | A compilation of a covered work with other separate and independent
224 | works, which are not by their nature extensions of the covered work,
225 | and which are not combined with it such as to form a larger program,
226 | in or on a volume of a storage or distribution medium, is called an
227 | "aggregate" if the compilation and its resulting copyright are not
228 | used to limit the access or legal rights of the compilation's users
229 | beyond what the individual works permit. Inclusion of a covered work
230 | in an aggregate does not cause this License to apply to the other
231 | parts of the aggregate.
232 |
233 | 6. Conveying Non-Source Forms.
234 |
235 | You may convey a covered work in object code form under the terms
236 | of sections 4 and 5, provided that you also convey the
237 | machine-readable Corresponding Source under the terms of this License,
238 | in one of these ways:
239 |
240 | a) Convey the object code in, or embodied in, a physical product
241 | (including a physical distribution medium), accompanied by the
242 | Corresponding Source fixed on a durable physical medium
243 | customarily used for software interchange.
244 |
245 | b) Convey the object code in, or embodied in, a physical product
246 | (including a physical distribution medium), accompanied by a
247 | written offer, valid for at least three years and valid for as
248 | long as you offer spare parts or customer support for that product
249 | model, to give anyone who possesses the object code either (1) a
250 | copy of the Corresponding Source for all the software in the
251 | product that is covered by this License, on a durable physical
252 | medium customarily used for software interchange, for a price no
253 | more than your reasonable cost of physically performing this
254 | conveying of source, or (2) access to copy the
255 | Corresponding Source from a network server at no charge.
256 |
257 | c) Convey individual copies of the object code with a copy of the
258 | written offer to provide the Corresponding Source. This
259 | alternative is allowed only occasionally and noncommercially, and
260 | only if you received the object code with such an offer, in accord
261 | with subsection 6b.
262 |
263 | d) Convey the object code by offering access from a designated
264 | place (gratis or for a charge), and offer equivalent access to the
265 | Corresponding Source in the same way through the same place at no
266 | further charge. You need not require recipients to copy the
267 | Corresponding Source along with the object code. If the place to
268 | copy the object code is a network server, the Corresponding Source
269 | may be on a different server (operated by you or a third party)
270 | that supports equivalent copying facilities, provided you maintain
271 | clear directions next to the object code saying where to find the
272 | Corresponding Source. Regardless of what server hosts the
273 | Corresponding Source, you remain obligated to ensure that it is
274 | available for as long as needed to satisfy these requirements.
275 |
276 | e) Convey the object code using peer-to-peer transmission, provided
277 | you inform other peers where the object code and Corresponding
278 | Source of the work are being offered to the general public at no
279 | charge under subsection 6d.
280 |
281 | A separable portion of the object code, whose source code is excluded
282 | from the Corresponding Source as a System Library, need not be
283 | included in conveying the object code work.
284 |
285 | A "User Product" is either (1) a "consumer product", which means any
286 | tangible personal property which is normally used for personal, family,
287 | or household purposes, or (2) anything designed or sold for incorporation
288 | into a dwelling. In determining whether a product is a consumer product,
289 | doubtful cases shall be resolved in favor of coverage. For a particular
290 | product received by a particular user, "normally used" refers to a
291 | typical or common use of that class of product, regardless of the status
292 | of the particular user or of the way in which the particular user
293 | actually uses, or expects or is expected to use, the product. A product
294 | is a consumer product regardless of whether the product has substantial
295 | commercial, industrial or non-consumer uses, unless such uses represent
296 | the only significant mode of use of the product.
297 |
298 | "Installation Information" for a User Product means any methods,
299 | procedures, authorization keys, or other information required to install
300 | and execute modified versions of a covered work in that User Product from
301 | a modified version of its Corresponding Source. The information must
302 | suffice to ensure that the continued functioning of the modified object
303 | code is in no case prevented or interfered with solely because
304 | modification has been made.
305 |
306 | If you convey an object code work under this section in, or with, or
307 | specifically for use in, a User Product, and the conveying occurs as
308 | part of a transaction in which the right of possession and use of the
309 | User Product is transferred to the recipient in perpetuity or for a
310 | fixed term (regardless of how the transaction is characterized), the
311 | Corresponding Source conveyed under this section must be accompanied
312 | by the Installation Information. But this requirement does not apply
313 | if neither you nor any third party retains the ability to install
314 | modified object code on the User Product (for example, the work has
315 | been installed in ROM).
316 |
317 | The requirement to provide Installation Information does not include a
318 | requirement to continue to provide support service, warranty, or updates
319 | for a work that has been modified or installed by the recipient, or for
320 | the User Product in which it has been modified or installed. Access to a
321 | network may be denied when the modification itself materially and
322 | adversely affects the operation of the network or violates the rules and
323 | protocols for communication across the network.
324 |
325 | Corresponding Source conveyed, and Installation Information provided,
326 | in accord with this section must be in a format that is publicly
327 | documented (and with an implementation available to the public in
328 | source code form), and must require no special password or key for
329 | unpacking, reading or copying.
330 |
331 | 7. Additional Terms.
332 |
333 | "Additional permissions" are terms that supplement the terms of this
334 | License by making exceptions from one or more of its conditions.
335 | Additional permissions that are applicable to the entire Program shall
336 | be treated as though they were included in this License, to the extent
337 | that they are valid under applicable law. If additional permissions
338 | apply only to part of the Program, that part may be used separately
339 | under those permissions, but the entire Program remains governed by
340 | this License without regard to the additional permissions.
341 |
342 | When you convey a copy of a covered work, you may at your option
343 | remove any additional permissions from that copy, or from any part of
344 | it. (Additional permissions may be written to require their own
345 | removal in certain cases when you modify the work.) You may place
346 | additional permissions on material, added by you to a covered work,
347 | for which you have or can give appropriate copyright permission.
348 |
349 | Notwithstanding any other provision of this License, for material you
350 | add to a covered work, you may (if authorized by the copyright holders of
351 | that material) supplement the terms of this License with terms:
352 |
353 | a) Disclaiming warranty or limiting liability differently from the
354 | terms of sections 15 and 16 of this License; or
355 |
356 | b) Requiring preservation of specified reasonable legal notices or
357 | author attributions in that material or in the Appropriate Legal
358 | Notices displayed by works containing it; or
359 |
360 | c) Prohibiting misrepresentation of the origin of that material, or
361 | requiring that modified versions of such material be marked in
362 | reasonable ways as different from the original version; or
363 |
364 | d) Limiting the use for publicity purposes of names of licensors or
365 | authors of the material; or
366 |
367 | e) Declining to grant rights under trademark law for use of some
368 | trade names, trademarks, or service marks; or
369 |
370 | f) Requiring indemnification of licensors and authors of that
371 | material by anyone who conveys the material (or modified versions of
372 | it) with contractual assumptions of liability to the recipient, for
373 | any liability that these contractual assumptions directly impose on
374 | those licensors and authors.
375 |
376 | All other non-permissive additional terms are considered "further
377 | restrictions" within the meaning of section 10. If the Program as you
378 | received it, or any part of it, contains a notice stating that it is
379 | governed by this License along with a term that is a further
380 | restriction, you may remove that term. If a license document contains
381 | a further restriction but permits relicensing or conveying under this
382 | License, you may add to a covered work material governed by the terms
383 | of that license document, provided that the further restriction does
384 | not survive such relicensing or conveying.
385 |
386 | If you add terms to a covered work in accord with this section, you
387 | must place, in the relevant source files, a statement of the
388 | additional terms that apply to those files, or a notice indicating
389 | where to find the applicable terms.
390 |
391 | Additional terms, permissive or non-permissive, may be stated in the
392 | form of a separately written license, or stated as exceptions;
393 | the above requirements apply either way.
394 |
395 | 8. Termination.
396 |
397 | You may not propagate or modify a covered work except as expressly
398 | provided under this License. Any attempt otherwise to propagate or
399 | modify it is void, and will automatically terminate your rights under
400 | this License (including any patent licenses granted under the third
401 | paragraph of section 11).
402 |
403 | However, if you cease all violation of this License, then your
404 | license from a particular copyright holder is reinstated (a)
405 | provisionally, unless and until the copyright holder explicitly and
406 | finally terminates your license, and (b) permanently, if the copyright
407 | holder fails to notify you of the violation by some reasonable means
408 | prior to 60 days after the cessation.
409 |
410 | Moreover, your license from a particular copyright holder is
411 | reinstated permanently if the copyright holder notifies you of the
412 | violation by some reasonable means, this is the first time you have
413 | received notice of violation of this License (for any work) from that
414 | copyright holder, and you cure the violation prior to 30 days after
415 | your receipt of the notice.
416 |
417 | Termination of your rights under this section does not terminate the
418 | licenses of parties who have received copies or rights from you under
419 | this License. If your rights have been terminated and not permanently
420 | reinstated, you do not qualify to receive new licenses for the same
421 | material under section 10.
422 |
423 | 9. Acceptance Not Required for Having Copies.
424 |
425 | You are not required to accept this License in order to receive or
426 | run a copy of the Program. Ancillary propagation of a covered work
427 | occurring solely as a consequence of using peer-to-peer transmission
428 | to receive a copy likewise does not require acceptance. However,
429 | nothing other than this License grants you permission to propagate or
430 | modify any covered work. These actions infringe copyright if you do
431 | not accept this License. Therefore, by modifying or propagating a
432 | covered work, you indicate your acceptance of this License to do so.
433 |
434 | 10. Automatic Licensing of Downstream Recipients.
435 |
436 | Each time you convey a covered work, the recipient automatically
437 | receives a license from the original licensors, to run, modify and
438 | propagate that work, subject to this License. You are not responsible
439 | for enforcing compliance by third parties with this License.
440 |
441 | An "entity transaction" is a transaction transferring control of an
442 | organization, or substantially all assets of one, or subdividing an
443 | organization, or merging organizations. If propagation of a covered
444 | work results from an entity transaction, each party to that
445 | transaction who receives a copy of the work also receives whatever
446 | licenses to the work the party's predecessor in interest had or could
447 | give under the previous paragraph, plus a right to possession of the
448 | Corresponding Source of the work from the predecessor in interest, if
449 | the predecessor has it or can get it with reasonable efforts.
450 |
451 | You may not impose any further restrictions on the exercise of the
452 | rights granted or affirmed under this License. For example, you may
453 | not impose a license fee, royalty, or other charge for exercise of
454 | rights granted under this License, and you may not initiate litigation
455 | (including a cross-claim or counterclaim in a lawsuit) alleging that
456 | any patent claim is infringed by making, using, selling, offering for
457 | sale, or importing the Program or any portion of it.
458 |
459 | 11. Patents.
460 |
461 | A "contributor" is a copyright holder who authorizes use under this
462 | License of the Program or a work on which the Program is based. The
463 | work thus licensed is called the contributor's "contributor version".
464 |
465 | A contributor's "essential patent claims" are all patent claims
466 | owned or controlled by the contributor, whether already acquired or
467 | hereafter acquired, that would be infringed by some manner, permitted
468 | by this License, of making, using, or selling its contributor version,
469 | but do not include claims that would be infringed only as a
470 | consequence of further modification of the contributor version. For
471 | purposes of this definition, "control" includes the right to grant
472 | patent sublicenses in a manner consistent with the requirements of
473 | this License.
474 |
475 | Each contributor grants you a non-exclusive, worldwide, royalty-free
476 | patent license under the contributor's essential patent claims, to
477 | make, use, sell, offer for sale, import and otherwise run, modify and
478 | propagate the contents of its contributor version.
479 |
480 | In the following three paragraphs, a "patent license" is any express
481 | agreement or commitment, however denominated, not to enforce a patent
482 | (such as an express permission to practice a patent or covenant not to
483 | sue for patent infringement). To "grant" such a patent license to a
484 | party means to make such an agreement or commitment not to enforce a
485 | patent against the party.
486 |
487 | If you convey a covered work, knowingly relying on a patent license,
488 | and the Corresponding Source of the work is not available for anyone
489 | to copy, free of charge and under the terms of this License, through a
490 | publicly available network server or other readily accessible means,
491 | then you must either (1) cause the Corresponding Source to be so
492 | available, or (2) arrange to deprive yourself of the benefit of the
493 | patent license for this particular work, or (3) arrange, in a manner
494 | consistent with the requirements of this License, to extend the patent
495 | license to downstream recipients. "Knowingly relying" means you have
496 | actual knowledge that, but for the patent license, your conveying the
497 | covered work in a country, or your recipient's use of the covered work
498 | in a country, would infringe one or more identifiable patents in that
499 | country that you have reason to believe are valid.
500 |
501 | If, pursuant to or in connection with a single transaction or
502 | arrangement, you convey, or propagate by procuring conveyance of, a
503 | covered work, and grant a patent license to some of the parties
504 | receiving the covered work authorizing them to use, propagate, modify
505 | or convey a specific copy of the covered work, then the patent license
506 | you grant is automatically extended to all recipients of the covered
507 | work and works based on it.
508 |
509 | A patent license is "discriminatory" if it does not include within
510 | the scope of its coverage, prohibits the exercise of, or is
511 | conditioned on the non-exercise of one or more of the rights that are
512 | specifically granted under this License. You may not convey a covered
513 | work if you are a party to an arrangement with a third party that is
514 | in the business of distributing software, under which you make payment
515 | to the third party based on the extent of your activity of conveying
516 | the work, and under which the third party grants, to any of the
517 | parties who would receive the covered work from you, a discriminatory
518 | patent license (a) in connection with copies of the covered work
519 | conveyed by you (or copies made from those copies), or (b) primarily
520 | for and in connection with specific products or compilations that
521 | contain the covered work, unless you entered into that arrangement,
522 | or that patent license was granted, prior to 28 March 2007.
523 |
524 | Nothing in this License shall be construed as excluding or limiting
525 | any implied license or other defenses to infringement that may
526 | otherwise be available to you under applicable patent law.
527 |
528 | 12. No Surrender of Others' Freedom.
529 |
530 | If conditions are imposed on you (whether by court order, agreement or
531 | otherwise) that contradict the conditions of this License, they do not
532 | excuse you from the conditions of this License. If you cannot convey a
533 | covered work so as to satisfy simultaneously your obligations under this
534 | License and any other pertinent obligations, then as a consequence you may
535 | not convey it at all. For example, if you agree to terms that obligate you
536 | to collect a royalty for further conveying from those to whom you convey
537 | the Program, the only way you could satisfy both those terms and this
538 | License would be to refrain entirely from conveying the Program.
539 |
540 | 13. Remote Network Interaction; Use with the GNU General Public License.
541 |
542 | Notwithstanding any other provision of this License, if you modify the
543 | Program, your modified version must prominently offer all users
544 | interacting with it remotely through a computer network (if your version
545 | supports such interaction) an opportunity to receive the Corresponding
546 | Source of your version by providing access to the Corresponding Source
547 | from a network server at no charge, through some standard or customary
548 | means of facilitating copying of software. This Corresponding Source
549 | shall include the Corresponding Source for any work covered by version 3
550 | of the GNU General Public License that is incorporated pursuant to the
551 | following paragraph.
552 |
553 | Notwithstanding any other provision of this License, you have
554 | permission to link or combine any covered work with a work licensed
555 | under version 3 of the GNU General Public License into a single
556 | combined work, and to convey the resulting work. The terms of this
557 | License will continue to apply to the part which is the covered work,
558 | but the work with which it is combined will remain governed by version
559 | 3 of the GNU General Public License.
560 |
561 | 14. Revised Versions of this License.
562 |
563 | The Free Software Foundation may publish revised and/or new versions of
564 | the GNU Affero General Public License from time to time. Such new versions
565 | will be similar in spirit to the present version, but may differ in detail to
566 | address new problems or concerns.
567 |
568 | Each version is given a distinguishing version number. If the
569 | Program specifies that a certain numbered version of the GNU Affero General
570 | Public License "or any later version" applies to it, you have the
571 | option of following the terms and conditions either of that numbered
572 | version or of any later version published by the Free Software
573 | Foundation. If the Program does not specify a version number of the
574 | GNU Affero General Public License, you may choose any version ever published
575 | by the Free Software Foundation.
576 |
577 | If the Program specifies that a proxy can decide which future
578 | versions of the GNU Affero General Public License can be used, that proxy's
579 | public statement of acceptance of a version permanently authorizes you
580 | to choose that version for the Program.
581 |
582 | Later license versions may give you additional or different
583 | permissions. However, no additional obligations are imposed on any
584 | author or copyright holder as a result of your choosing to follow a
585 | later version.
586 |
587 | 15. Disclaimer of Warranty.
588 |
589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
597 |
598 | 16. Limitation of Liability.
599 |
600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
608 | SUCH DAMAGES.
609 |
610 | 17. Interpretation of Sections 15 and 16.
611 |
612 | If the disclaimer of warranty and limitation of liability provided
613 | above cannot be given local legal effect according to their terms,
614 | reviewing courts shall apply local law that most closely approximates
615 | an absolute waiver of all civil liability in connection with the
616 | Program, unless a warranty or assumption of liability accompanies a
617 | copy of the Program in return for a fee.
618 |
619 | END OF TERMS AND CONDITIONS
620 |
621 | How to Apply These Terms to Your New Programs
622 |
623 | If you develop a new program, and you want it to be of the greatest
624 | possible use to the public, the best way to achieve this is to make it
625 | free software which everyone can redistribute and change under these terms.
626 |
627 | To do so, attach the following notices to the program. It is safest
628 | to attach them to the start of each source file to most effectively
629 | state the exclusion of warranty; and each file should have at least
630 | the "copyright" line and a pointer to where the full notice is found.
631 |
632 |
633 | Copyright (C)
634 |
635 | This program is free software: you can redistribute it and/or modify
636 | it under the terms of the GNU Affero General Public License as published
637 | by the Free Software Foundation, either version 3 of the License, or
638 | (at your option) any later version.
639 |
640 | This program is distributed in the hope that it will be useful,
641 | but WITHOUT ANY WARRANTY; without even the implied warranty of
642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
643 | GNU Affero General Public License for more details.
644 |
645 | You should have received a copy of the GNU Affero General Public License
646 | along with this program. If not, see .
647 |
648 | Also add information on how to contact you by electronic and paper mail.
649 |
650 | If your software can interact with users remotely through a computer
651 | network, you should also make sure that it provides a way for users to
652 | get its source. For example, if your program is a web application, its
653 | interface could display a "Source" link that leads users to an archive
654 | of the code. There are many ways you could offer source, and different
655 | solutions will be better for different programs; see section 13 for the
656 | specific requirements.
657 |
658 | You should also get your employer (if you work as a programmer) or school,
659 | if any, to sign a "copyright disclaimer" for the program, if necessary.
660 | For more information on this, and how to apply and follow the GNU AGPL, see
661 | .
662 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # gh user-status
2 |
3 | being an extension for interacting with the status on a GitHub profile.
4 |
5 | ## installation
6 |
7 | ```
8 | gh extension install vilmibm/gh-user-status
9 | ```
10 |
11 | ## usage
12 |
13 | - `gh user-status set`
14 | - `gh user-status set` interactively set status
15 | - `gh user-status set --limited "vacation"` set a status with limited availability
16 | - `gh user-status set --expiry 1h "leave me alone"` set with 1 hour expiry
17 | - `gh user-status set --emoji "pizza" "eating lunch"` set with an emoji
18 | - `gh user-status get`
19 | - `gh user-status get` see your status
20 | - `gh user-status get mislav` see another user's status
21 |
22 | By default, the :thought_balloon: emoji is used.
23 |
24 | Limiting visibility of the status to an organization is not yet supported.
25 |
26 | ## author
27 |
28 | vilmibm
29 |
--------------------------------------------------------------------------------
/emoji.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "strings"
4 |
5 | // heavily borrowed from https://github.com/yuin/goldmark-emoji/
6 |
7 | type emojiManager struct {
8 | emojis []emoji
9 | }
10 |
11 | func (em emojiManager) Emojis() []emoji {
12 | return em.emojis
13 | }
14 |
15 | func (em emojiManager) ReplaceAll(s string) string {
16 | out := []string{}
17 | bySpace := strings.Split(s, " ")
18 | for _, piece := range bySpace {
19 | if strings.HasPrefix(piece, ":") && strings.HasSuffix(piece, ":") {
20 | for _, e := range em.emojis {
21 | for _, n := range e.names {
22 | if piece == ":"+n+":" {
23 | out = append(out, string(e.codepoint))
24 | }
25 | }
26 | }
27 | } else {
28 | out = append(out, piece)
29 | }
30 | }
31 | return strings.Join(out, " ")
32 | }
33 |
34 | type emoji struct {
35 | desc string
36 | codepoint []int32
37 | names []string
38 | }
39 |
40 | func newEmoji(desc string, codepoint []int32, names ...string) emoji {
41 | return emoji{
42 | desc: desc,
43 | codepoint: codepoint,
44 | names: names,
45 | }
46 | }
47 |
48 | func newEmojiManager() emojiManager {
49 | emojis := []emoji{
50 | newEmoji("grinning face", []int32{128512}, "grinning"),
51 | newEmoji("grinning face with big eyes", []int32{128515}, "smiley"),
52 | newEmoji("grinning face with smiling eyes", []int32{128516}, "smile"),
53 | newEmoji("beaming face with smiling eyes", []int32{128513}, "grin"),
54 | newEmoji("grinning squinting face", []int32{128518}, "laughing", "satisfied"),
55 | newEmoji("grinning face with sweat", []int32{128517}, "sweat_smile"),
56 | newEmoji("rolling on the floor laughing", []int32{129315}, "rofl"),
57 | newEmoji("face with tears of joy", []int32{128514}, "joy"),
58 | newEmoji("slightly smiling face", []int32{128578}, "slightly_smiling_face"),
59 | newEmoji("upside-down face", []int32{128579}, "upside_down_face"),
60 | newEmoji("winking face", []int32{128521}, "wink"),
61 | newEmoji("smiling face with smiling eyes", []int32{128522}, "blush"),
62 | newEmoji("smiling face with halo", []int32{128519}, "innocent"),
63 | newEmoji("smiling face with hearts", []int32{129392}, "smiling_face_with_three_hearts"),
64 | newEmoji("smiling face with heart-eyes", []int32{128525}, "heart_eyes"),
65 | newEmoji("star-struck", []int32{129321}, "star_struck"),
66 | newEmoji("face blowing a kiss", []int32{128536}, "kissing_heart"),
67 | newEmoji("kissing face", []int32{128535}, "kissing"),
68 | newEmoji("smiling face", []int32{9786, 65039}, "relaxed"),
69 | newEmoji("kissing face with closed eyes", []int32{128538}, "kissing_closed_eyes"),
70 | newEmoji("kissing face with smiling eyes", []int32{128537}, "kissing_smiling_eyes"),
71 | newEmoji("face savoring food", []int32{128523}, "yum"),
72 | newEmoji("face with tongue", []int32{128539}, "stuck_out_tongue"),
73 | newEmoji("winking face with tongue", []int32{128540}, "stuck_out_tongue_winking_eye"),
74 | newEmoji("zany face", []int32{129322}, "zany_face"),
75 | newEmoji("squinting face with tongue", []int32{128541}, "stuck_out_tongue_closed_eyes"),
76 | newEmoji("money-mouth face", []int32{129297}, "money_mouth_face"),
77 | newEmoji("hugging face", []int32{129303}, "hugs"),
78 | newEmoji("face with hand over mouth", []int32{129325}, "hand_over_mouth"),
79 | newEmoji("shushing face", []int32{129323}, "shushing_face"),
80 | newEmoji("thinking face", []int32{129300}, "thinking"),
81 | newEmoji("zipper-mouth face", []int32{129296}, "zipper_mouth_face"),
82 | newEmoji("face with raised eyebrow", []int32{129320}, "raised_eyebrow"),
83 | newEmoji("neutral face", []int32{128528}, "neutral_face"),
84 | newEmoji("expressionless face", []int32{128529}, "expressionless"),
85 | newEmoji("face without mouth", []int32{128566}, "no_mouth"),
86 | newEmoji("smirking face", []int32{128527}, "smirk"),
87 | newEmoji("unamused face", []int32{128530}, "unamused"),
88 | newEmoji("face with rolling eyes", []int32{128580}, "roll_eyes"),
89 | newEmoji("grimacing face", []int32{128556}, "grimacing"),
90 | newEmoji("lying face", []int32{129317}, "lying_face"),
91 | newEmoji("relieved face", []int32{128524}, "relieved"),
92 | newEmoji("pensive face", []int32{128532}, "pensive"),
93 | newEmoji("sleepy face", []int32{128554}, "sleepy"),
94 | newEmoji("drooling face", []int32{129316}, "drooling_face"),
95 | newEmoji("sleeping face", []int32{128564}, "sleeping"),
96 | newEmoji("face with medical mask", []int32{128567}, "mask"),
97 | newEmoji("face with thermometer", []int32{129298}, "face_with_thermometer"),
98 | newEmoji("face with head-bandage", []int32{129301}, "face_with_head_bandage"),
99 | newEmoji("nauseated face", []int32{129314}, "nauseated_face"),
100 | newEmoji("face vomiting", []int32{129326}, "vomiting_face"),
101 | newEmoji("sneezing face", []int32{129319}, "sneezing_face"),
102 | newEmoji("hot face", []int32{129397}, "hot_face"),
103 | newEmoji("cold face", []int32{129398}, "cold_face"),
104 | newEmoji("woozy face", []int32{129396}, "woozy_face"),
105 | newEmoji("dizzy face", []int32{128565}, "dizzy_face"),
106 | newEmoji("exploding head", []int32{129327}, "exploding_head"),
107 | newEmoji("cowboy hat face", []int32{129312}, "cowboy_hat_face"),
108 | newEmoji("partying face", []int32{129395}, "partying_face"),
109 | newEmoji("smiling face with sunglasses", []int32{128526}, "sunglasses"),
110 | newEmoji("nerd face", []int32{129299}, "nerd_face"),
111 | newEmoji("face with monocle", []int32{129488}, "monocle_face"),
112 | newEmoji("confused face", []int32{128533}, "confused"),
113 | newEmoji("worried face", []int32{128543}, "worried"),
114 | newEmoji("slightly frowning face", []int32{128577}, "slightly_frowning_face"),
115 | newEmoji("frowning face", []int32{9785, 65039}, "frowning_face"),
116 | newEmoji("face with open mouth", []int32{128558}, "open_mouth"),
117 | newEmoji("hushed face", []int32{128559}, "hushed"),
118 | newEmoji("astonished face", []int32{128562}, "astonished"),
119 | newEmoji("flushed face", []int32{128563}, "flushed"),
120 | newEmoji("pleading face", []int32{129402}, "pleading_face"),
121 | newEmoji("frowning face with open mouth", []int32{128550}, "frowning"),
122 | newEmoji("anguished face", []int32{128551}, "anguished"),
123 | newEmoji("fearful face", []int32{128552}, "fearful"),
124 | newEmoji("anxious face with sweat", []int32{128560}, "cold_sweat"),
125 | newEmoji("sad but relieved face", []int32{128549}, "disappointed_relieved"),
126 | newEmoji("crying face", []int32{128546}, "cry"),
127 | newEmoji("loudly crying face", []int32{128557}, "sob"),
128 | newEmoji("face screaming in fear", []int32{128561}, "scream"),
129 | newEmoji("confounded face", []int32{128534}, "confounded"),
130 | newEmoji("persevering face", []int32{128547}, "persevere"),
131 | newEmoji("disappointed face", []int32{128542}, "disappointed"),
132 | newEmoji("downcast face with sweat", []int32{128531}, "sweat"),
133 | newEmoji("weary face", []int32{128553}, "weary"),
134 | newEmoji("tired face", []int32{128555}, "tired_face"),
135 | newEmoji("yawning face", []int32{129393}, "yawning_face"),
136 | newEmoji("face with steam from nose", []int32{128548}, "triumph"),
137 | newEmoji("pouting face", []int32{128545}, "rage", "pout"),
138 | newEmoji("angry face", []int32{128544}, "angry"),
139 | newEmoji("face with symbols on mouth", []int32{129324}, "cursing_face"),
140 | newEmoji("smiling face with horns", []int32{128520}, "smiling_imp"),
141 | newEmoji("angry face with horns", []int32{128127}, "imp"),
142 | newEmoji("skull", []int32{128128}, "skull"),
143 | newEmoji("skull and crossbones", []int32{9760, 65039}, "skull_and_crossbones"),
144 | newEmoji("pile of poo", []int32{128169}, "hankey", "poop", "shit"),
145 | newEmoji("clown face", []int32{129313}, "clown_face"),
146 | newEmoji("ogre", []int32{128121}, "japanese_ogre"),
147 | newEmoji("goblin", []int32{128122}, "japanese_goblin"),
148 | newEmoji("ghost", []int32{128123}, "ghost"),
149 | newEmoji("alien", []int32{128125}, "alien"),
150 | newEmoji("alien monster", []int32{128126}, "space_invader"),
151 | newEmoji("robot", []int32{129302}, "robot"),
152 | newEmoji("grinning cat", []int32{128570}, "smiley_cat"),
153 | newEmoji("grinning cat with smiling eyes", []int32{128568}, "smile_cat"),
154 | newEmoji("cat with tears of joy", []int32{128569}, "joy_cat"),
155 | newEmoji("smiling cat with heart-eyes", []int32{128571}, "heart_eyes_cat"),
156 | newEmoji("cat with wry smile", []int32{128572}, "smirk_cat"),
157 | newEmoji("kissing cat", []int32{128573}, "kissing_cat"),
158 | newEmoji("weary cat", []int32{128576}, "scream_cat"),
159 | newEmoji("crying cat", []int32{128575}, "crying_cat_face"),
160 | newEmoji("pouting cat", []int32{128574}, "pouting_cat"),
161 | newEmoji("see-no-evil monkey", []int32{128584}, "see_no_evil"),
162 | newEmoji("hear-no-evil monkey", []int32{128585}, "hear_no_evil"),
163 | newEmoji("speak-no-evil monkey", []int32{128586}, "speak_no_evil"),
164 | newEmoji("kiss mark", []int32{128139}, "kiss"),
165 | newEmoji("love letter", []int32{128140}, "love_letter"),
166 | newEmoji("heart with arrow", []int32{128152}, "cupid"),
167 | newEmoji("heart with ribbon", []int32{128157}, "gift_heart"),
168 | newEmoji("sparkling heart", []int32{128150}, "sparkling_heart"),
169 | newEmoji("growing heart", []int32{128151}, "heartpulse"),
170 | newEmoji("beating heart", []int32{128147}, "heartbeat"),
171 | newEmoji("revolving hearts", []int32{128158}, "revolving_hearts"),
172 | newEmoji("two hearts", []int32{128149}, "two_hearts"),
173 | newEmoji("heart decoration", []int32{128159}, "heart_decoration"),
174 | newEmoji("heart exclamation", []int32{10083, 65039}, "heavy_heart_exclamation"),
175 | newEmoji("broken heart", []int32{128148}, "broken_heart"),
176 | newEmoji("red heart", []int32{10084, 65039}, "heart"),
177 | newEmoji("orange heart", []int32{129505}, "orange_heart"),
178 | newEmoji("yellow heart", []int32{128155}, "yellow_heart"),
179 | newEmoji("green heart", []int32{128154}, "green_heart"),
180 | newEmoji("blue heart", []int32{128153}, "blue_heart"),
181 | newEmoji("purple heart", []int32{128156}, "purple_heart"),
182 | newEmoji("brown heart", []int32{129294}, "brown_heart"),
183 | newEmoji("black heart", []int32{128420}, "black_heart"),
184 | newEmoji("white heart", []int32{129293}, "white_heart"),
185 | newEmoji("hundred points", []int32{128175}, "100"),
186 | newEmoji("anger symbol", []int32{128162}, "anger"),
187 | newEmoji("collision", []int32{128165}, "boom", "collision"),
188 | newEmoji("dizzy", []int32{128171}, "dizzy"),
189 | newEmoji("sweat droplets", []int32{128166}, "sweat_drops"),
190 | newEmoji("dashing away", []int32{128168}, "dash"),
191 | newEmoji("hole", []int32{128371, 65039}, "hole"),
192 | newEmoji("bomb", []int32{128163}, "bomb"),
193 | newEmoji("speech balloon", []int32{128172}, "speech_balloon"),
194 | newEmoji("eye in speech bubble", []int32{128065, 65039, 8205, 128488, 65039}, "eye_speech_bubble"),
195 | newEmoji("left speech bubble", []int32{128488, 65039}, "left_speech_bubble"),
196 | newEmoji("right anger bubble", []int32{128495, 65039}, "right_anger_bubble"),
197 | newEmoji("thought balloon", []int32{128173}, "thought_balloon"),
198 | newEmoji("zzz", []int32{128164}, "zzz"),
199 | newEmoji("waving hand", []int32{128075}, "wave"),
200 | newEmoji("raised back of hand", []int32{129306}, "raised_back_of_hand"),
201 | newEmoji("hand with fingers splayed", []int32{128400, 65039}, "raised_hand_with_fingers_splayed"),
202 | newEmoji("raised hand", []int32{9995}, "hand", "raised_hand"),
203 | newEmoji("vulcan salute", []int32{128406}, "vulcan_salute"),
204 | newEmoji("OK hand", []int32{128076}, "ok_hand"),
205 | newEmoji("pinching hand", []int32{129295}, "pinching_hand"),
206 | newEmoji("victory hand", []int32{9996, 65039}, "v"),
207 | newEmoji("crossed fingers", []int32{129310}, "crossed_fingers"),
208 | newEmoji("love-you gesture", []int32{129311}, "love_you_gesture"),
209 | newEmoji("sign of the horns", []int32{129304}, "metal"),
210 | newEmoji("call me hand", []int32{129305}, "call_me_hand"),
211 | newEmoji("backhand index pointing left", []int32{128072}, "point_left"),
212 | newEmoji("backhand index pointing right", []int32{128073}, "point_right"),
213 | newEmoji("backhand index pointing up", []int32{128070}, "point_up_2"),
214 | newEmoji("middle finger", []int32{128405}, "middle_finger", "fu"),
215 | newEmoji("backhand index pointing down", []int32{128071}, "point_down"),
216 | newEmoji("index pointing up", []int32{9757, 65039}, "point_up"),
217 | newEmoji("thumbs up", []int32{128077}, "+1", "thumbsup"),
218 | newEmoji("thumbs down", []int32{128078}, "-1", "thumbsdown"),
219 | newEmoji("raised fist", []int32{9994}, "fist_raised", "fist"),
220 | newEmoji("oncoming fist", []int32{128074}, "fist_oncoming", "facepunch", "punch"),
221 | newEmoji("left-facing fist", []int32{129307}, "fist_left"),
222 | newEmoji("right-facing fist", []int32{129308}, "fist_right"),
223 | newEmoji("clapping hands", []int32{128079}, "clap"),
224 | newEmoji("raising hands", []int32{128588}, "raised_hands"),
225 | newEmoji("open hands", []int32{128080}, "open_hands"),
226 | newEmoji("palms up together", []int32{129330}, "palms_up_together"),
227 | newEmoji("handshake", []int32{129309}, "handshake"),
228 | newEmoji("folded hands", []int32{128591}, "pray"),
229 | newEmoji("writing hand", []int32{9997, 65039}, "writing_hand"),
230 | newEmoji("nail polish", []int32{128133}, "nail_care"),
231 | newEmoji("selfie", []int32{129331}, "selfie"),
232 | newEmoji("flexed biceps", []int32{128170}, "muscle"),
233 | newEmoji("mechanical arm", []int32{129470}, "mechanical_arm"),
234 | newEmoji("mechanical leg", []int32{129471}, "mechanical_leg"),
235 | newEmoji("leg", []int32{129461}, "leg"),
236 | newEmoji("foot", []int32{129462}, "foot"),
237 | newEmoji("ear", []int32{128066}, "ear"),
238 | newEmoji("ear with hearing aid", []int32{129467}, "ear_with_hearing_aid"),
239 | newEmoji("nose", []int32{128067}, "nose"),
240 | newEmoji("brain", []int32{129504}, "brain"),
241 | newEmoji("tooth", []int32{129463}, "tooth"),
242 | newEmoji("bone", []int32{129460}, "bone"),
243 | newEmoji("eyes", []int32{128064}, "eyes"),
244 | newEmoji("eye", []int32{128065, 65039}, "eye"),
245 | newEmoji("tongue", []int32{128069}, "tongue"),
246 | newEmoji("mouth", []int32{128068}, "lips"),
247 | newEmoji("baby", []int32{128118}, "baby"),
248 | newEmoji("child", []int32{129490}, "child"),
249 | newEmoji("boy", []int32{128102}, "boy"),
250 | newEmoji("girl", []int32{128103}, "girl"),
251 | newEmoji("person", []int32{129489}, "adult"),
252 | newEmoji("person: blond hair", []int32{128113}, "blond_haired_person"),
253 | newEmoji("man", []int32{128104}, "man"),
254 | newEmoji("man: beard", []int32{129492}, "bearded_person"),
255 | newEmoji("man: red hair", []int32{128104, 8205, 129456}, "red_haired_man"),
256 | newEmoji("man: curly hair", []int32{128104, 8205, 129457}, "curly_haired_man"),
257 | newEmoji("man: white hair", []int32{128104, 8205, 129459}, "white_haired_man"),
258 | newEmoji("man: bald", []int32{128104, 8205, 129458}, "bald_man"),
259 | newEmoji("woman", []int32{128105}, "woman"),
260 | newEmoji("woman: red hair", []int32{128105, 8205, 129456}, "red_haired_woman"),
261 | newEmoji("person: red hair", []int32{129489, 8205, 129456}, "person_red_hair"),
262 | newEmoji("woman: curly hair", []int32{128105, 8205, 129457}, "curly_haired_woman"),
263 | newEmoji("person: curly hair", []int32{129489, 8205, 129457}, "person_curly_hair"),
264 | newEmoji("woman: white hair", []int32{128105, 8205, 129459}, "white_haired_woman"),
265 | newEmoji("person: white hair", []int32{129489, 8205, 129459}, "person_white_hair"),
266 | newEmoji("woman: bald", []int32{128105, 8205, 129458}, "bald_woman"),
267 | newEmoji("person: bald", []int32{129489, 8205, 129458}, "person_bald"),
268 | newEmoji("woman: blond hair", []int32{128113, 8205, 9792, 65039}, "blond_haired_woman", "blonde_woman"),
269 | newEmoji("man: blond hair", []int32{128113, 8205, 9794, 65039}, "blond_haired_man"),
270 | newEmoji("older person", []int32{129491}, "older_adult"),
271 | newEmoji("old man", []int32{128116}, "older_man"),
272 | newEmoji("old woman", []int32{128117}, "older_woman"),
273 | newEmoji("person frowning", []int32{128589}, "frowning_person"),
274 | newEmoji("man frowning", []int32{128589, 8205, 9794, 65039}, "frowning_man"),
275 | newEmoji("woman frowning", []int32{128589, 8205, 9792, 65039}, "frowning_woman"),
276 | newEmoji("person pouting", []int32{128590}, "pouting_face"),
277 | newEmoji("man pouting", []int32{128590, 8205, 9794, 65039}, "pouting_man"),
278 | newEmoji("woman pouting", []int32{128590, 8205, 9792, 65039}, "pouting_woman"),
279 | newEmoji("person gesturing NO", []int32{128581}, "no_good"),
280 | newEmoji("man gesturing NO", []int32{128581, 8205, 9794, 65039}, "no_good_man", "ng_man"),
281 | newEmoji("woman gesturing NO", []int32{128581, 8205, 9792, 65039}, "no_good_woman", "ng_woman"),
282 | newEmoji("person gesturing OK", []int32{128582}, "ok_person"),
283 | newEmoji("man gesturing OK", []int32{128582, 8205, 9794, 65039}, "ok_man"),
284 | newEmoji("woman gesturing OK", []int32{128582, 8205, 9792, 65039}, "ok_woman"),
285 | newEmoji("person tipping hand", []int32{128129}, "tipping_hand_person", "information_desk_person"),
286 | newEmoji("man tipping hand", []int32{128129, 8205, 9794, 65039}, "tipping_hand_man", "sassy_man"),
287 | newEmoji("woman tipping hand", []int32{128129, 8205, 9792, 65039}, "tipping_hand_woman", "sassy_woman"),
288 | newEmoji("person raising hand", []int32{128587}, "raising_hand"),
289 | newEmoji("man raising hand", []int32{128587, 8205, 9794, 65039}, "raising_hand_man"),
290 | newEmoji("woman raising hand", []int32{128587, 8205, 9792, 65039}, "raising_hand_woman"),
291 | newEmoji("deaf person", []int32{129487}, "deaf_person"),
292 | newEmoji("deaf man", []int32{129487, 8205, 9794, 65039}, "deaf_man"),
293 | newEmoji("deaf woman", []int32{129487, 8205, 9792, 65039}, "deaf_woman"),
294 | newEmoji("person bowing", []int32{128583}, "bow"),
295 | newEmoji("man bowing", []int32{128583, 8205, 9794, 65039}, "bowing_man"),
296 | newEmoji("woman bowing", []int32{128583, 8205, 9792, 65039}, "bowing_woman"),
297 | newEmoji("person facepalming", []int32{129318}, "facepalm"),
298 | newEmoji("man facepalming", []int32{129318, 8205, 9794, 65039}, "man_facepalming"),
299 | newEmoji("woman facepalming", []int32{129318, 8205, 9792, 65039}, "woman_facepalming"),
300 | newEmoji("person shrugging", []int32{129335}, "shrug"),
301 | newEmoji("man shrugging", []int32{129335, 8205, 9794, 65039}, "man_shrugging"),
302 | newEmoji("woman shrugging", []int32{129335, 8205, 9792, 65039}, "woman_shrugging"),
303 | newEmoji("health worker", []int32{129489, 8205, 9877, 65039}, "health_worker"),
304 | newEmoji("man health worker", []int32{128104, 8205, 9877, 65039}, "man_health_worker"),
305 | newEmoji("woman health worker", []int32{128105, 8205, 9877, 65039}, "woman_health_worker"),
306 | newEmoji("student", []int32{129489, 8205, 127891}, "student"),
307 | newEmoji("man student", []int32{128104, 8205, 127891}, "man_student"),
308 | newEmoji("woman student", []int32{128105, 8205, 127891}, "woman_student"),
309 | newEmoji("teacher", []int32{129489, 8205, 127979}, "teacher"),
310 | newEmoji("man teacher", []int32{128104, 8205, 127979}, "man_teacher"),
311 | newEmoji("woman teacher", []int32{128105, 8205, 127979}, "woman_teacher"),
312 | newEmoji("judge", []int32{129489, 8205, 9878, 65039}, "judge"),
313 | newEmoji("man judge", []int32{128104, 8205, 9878, 65039}, "man_judge"),
314 | newEmoji("woman judge", []int32{128105, 8205, 9878, 65039}, "woman_judge"),
315 | newEmoji("farmer", []int32{129489, 8205, 127806}, "farmer"),
316 | newEmoji("man farmer", []int32{128104, 8205, 127806}, "man_farmer"),
317 | newEmoji("woman farmer", []int32{128105, 8205, 127806}, "woman_farmer"),
318 | newEmoji("cook", []int32{129489, 8205, 127859}, "cook"),
319 | newEmoji("man cook", []int32{128104, 8205, 127859}, "man_cook"),
320 | newEmoji("woman cook", []int32{128105, 8205, 127859}, "woman_cook"),
321 | newEmoji("mechanic", []int32{129489, 8205, 128295}, "mechanic"),
322 | newEmoji("man mechanic", []int32{128104, 8205, 128295}, "man_mechanic"),
323 | newEmoji("woman mechanic", []int32{128105, 8205, 128295}, "woman_mechanic"),
324 | newEmoji("factory worker", []int32{129489, 8205, 127981}, "factory_worker"),
325 | newEmoji("man factory worker", []int32{128104, 8205, 127981}, "man_factory_worker"),
326 | newEmoji("woman factory worker", []int32{128105, 8205, 127981}, "woman_factory_worker"),
327 | newEmoji("office worker", []int32{129489, 8205, 128188}, "office_worker"),
328 | newEmoji("man office worker", []int32{128104, 8205, 128188}, "man_office_worker"),
329 | newEmoji("woman office worker", []int32{128105, 8205, 128188}, "woman_office_worker"),
330 | newEmoji("scientist", []int32{129489, 8205, 128300}, "scientist"),
331 | newEmoji("man scientist", []int32{128104, 8205, 128300}, "man_scientist"),
332 | newEmoji("woman scientist", []int32{128105, 8205, 128300}, "woman_scientist"),
333 | newEmoji("technologist", []int32{129489, 8205, 128187}, "technologist"),
334 | newEmoji("man technologist", []int32{128104, 8205, 128187}, "man_technologist"),
335 | newEmoji("woman technologist", []int32{128105, 8205, 128187}, "woman_technologist"),
336 | newEmoji("singer", []int32{129489, 8205, 127908}, "singer"),
337 | newEmoji("man singer", []int32{128104, 8205, 127908}, "man_singer"),
338 | newEmoji("woman singer", []int32{128105, 8205, 127908}, "woman_singer"),
339 | newEmoji("artist", []int32{129489, 8205, 127912}, "artist"),
340 | newEmoji("man artist", []int32{128104, 8205, 127912}, "man_artist"),
341 | newEmoji("woman artist", []int32{128105, 8205, 127912}, "woman_artist"),
342 | newEmoji("pilot", []int32{129489, 8205, 9992, 65039}, "pilot"),
343 | newEmoji("man pilot", []int32{128104, 8205, 9992, 65039}, "man_pilot"),
344 | newEmoji("woman pilot", []int32{128105, 8205, 9992, 65039}, "woman_pilot"),
345 | newEmoji("astronaut", []int32{129489, 8205, 128640}, "astronaut"),
346 | newEmoji("man astronaut", []int32{128104, 8205, 128640}, "man_astronaut"),
347 | newEmoji("woman astronaut", []int32{128105, 8205, 128640}, "woman_astronaut"),
348 | newEmoji("firefighter", []int32{129489, 8205, 128658}, "firefighter"),
349 | newEmoji("man firefighter", []int32{128104, 8205, 128658}, "man_firefighter"),
350 | newEmoji("woman firefighter", []int32{128105, 8205, 128658}, "woman_firefighter"),
351 | newEmoji("police officer", []int32{128110}, "police_officer", "cop"),
352 | newEmoji("man police officer", []int32{128110, 8205, 9794, 65039}, "policeman"),
353 | newEmoji("woman police officer", []int32{128110, 8205, 9792, 65039}, "policewoman"),
354 | newEmoji("detective", []int32{128373, 65039}, "detective"),
355 | newEmoji("man detective", []int32{128373, 65039, 8205, 9794, 65039}, "male_detective"),
356 | newEmoji("woman detective", []int32{128373, 65039, 8205, 9792, 65039}, "female_detective"),
357 | newEmoji("guard", []int32{128130}, "guard"),
358 | newEmoji("man guard", []int32{128130, 8205, 9794, 65039}, "guardsman"),
359 | newEmoji("woman guard", []int32{128130, 8205, 9792, 65039}, "guardswoman"),
360 | newEmoji("construction worker", []int32{128119}, "construction_worker"),
361 | newEmoji("man construction worker", []int32{128119, 8205, 9794, 65039}, "construction_worker_man"),
362 | newEmoji("woman construction worker", []int32{128119, 8205, 9792, 65039}, "construction_worker_woman"),
363 | newEmoji("prince", []int32{129332}, "prince"),
364 | newEmoji("princess", []int32{128120}, "princess"),
365 | newEmoji("person wearing turban", []int32{128115}, "person_with_turban"),
366 | newEmoji("man wearing turban", []int32{128115, 8205, 9794, 65039}, "man_with_turban"),
367 | newEmoji("woman wearing turban", []int32{128115, 8205, 9792, 65039}, "woman_with_turban"),
368 | newEmoji("person with skullcap", []int32{128114}, "man_with_gua_pi_mao"),
369 | newEmoji("woman with headscarf", []int32{129493}, "woman_with_headscarf"),
370 | newEmoji("man in tuxedo", []int32{129333, 8205, 9794, 65039}, "man_in_tuxedo"),
371 | newEmoji("woman with veil", []int32{128112, 8205, 9792, 65039}, "bride_with_veil"),
372 | newEmoji("pregnant woman", []int32{129328}, "pregnant_woman"),
373 | newEmoji("breast-feeding", []int32{129329}, "breast_feeding"),
374 | newEmoji("baby angel", []int32{128124}, "angel"),
375 | newEmoji("Santa Claus", []int32{127877}, "santa"),
376 | newEmoji("Mrs. Claus", []int32{129334}, "mrs_claus"),
377 | newEmoji("superhero", []int32{129464}, "superhero"),
378 | newEmoji("man superhero", []int32{129464, 8205, 9794, 65039}, "superhero_man"),
379 | newEmoji("woman superhero", []int32{129464, 8205, 9792, 65039}, "superhero_woman"),
380 | newEmoji("supervillain", []int32{129465}, "supervillain"),
381 | newEmoji("man supervillain", []int32{129465, 8205, 9794, 65039}, "supervillain_man"),
382 | newEmoji("woman supervillain", []int32{129465, 8205, 9792, 65039}, "supervillain_woman"),
383 | newEmoji("mage", []int32{129497}, "mage"),
384 | newEmoji("man mage", []int32{129497, 8205, 9794, 65039}, "mage_man"),
385 | newEmoji("woman mage", []int32{129497, 8205, 9792, 65039}, "mage_woman"),
386 | newEmoji("fairy", []int32{129498}, "fairy"),
387 | newEmoji("man fairy", []int32{129498, 8205, 9794, 65039}, "fairy_man"),
388 | newEmoji("woman fairy", []int32{129498, 8205, 9792, 65039}, "fairy_woman"),
389 | newEmoji("vampire", []int32{129499}, "vampire"),
390 | newEmoji("man vampire", []int32{129499, 8205, 9794, 65039}, "vampire_man"),
391 | newEmoji("woman vampire", []int32{129499, 8205, 9792, 65039}, "vampire_woman"),
392 | newEmoji("merperson", []int32{129500}, "merperson"),
393 | newEmoji("merman", []int32{129500, 8205, 9794, 65039}, "merman"),
394 | newEmoji("mermaid", []int32{129500, 8205, 9792, 65039}, "mermaid"),
395 | newEmoji("elf", []int32{129501}, "elf"),
396 | newEmoji("man elf", []int32{129501, 8205, 9794, 65039}, "elf_man"),
397 | newEmoji("woman elf", []int32{129501, 8205, 9792, 65039}, "elf_woman"),
398 | newEmoji("genie", []int32{129502}, "genie"),
399 | newEmoji("man genie", []int32{129502, 8205, 9794, 65039}, "genie_man"),
400 | newEmoji("woman genie", []int32{129502, 8205, 9792, 65039}, "genie_woman"),
401 | newEmoji("zombie", []int32{129503}, "zombie"),
402 | newEmoji("man zombie", []int32{129503, 8205, 9794, 65039}, "zombie_man"),
403 | newEmoji("woman zombie", []int32{129503, 8205, 9792, 65039}, "zombie_woman"),
404 | newEmoji("person getting massage", []int32{128134}, "massage"),
405 | newEmoji("man getting massage", []int32{128134, 8205, 9794, 65039}, "massage_man"),
406 | newEmoji("woman getting massage", []int32{128134, 8205, 9792, 65039}, "massage_woman"),
407 | newEmoji("person getting haircut", []int32{128135}, "haircut"),
408 | newEmoji("man getting haircut", []int32{128135, 8205, 9794, 65039}, "haircut_man"),
409 | newEmoji("woman getting haircut", []int32{128135, 8205, 9792, 65039}, "haircut_woman"),
410 | newEmoji("person walking", []int32{128694}, "walking"),
411 | newEmoji("man walking", []int32{128694, 8205, 9794, 65039}, "walking_man"),
412 | newEmoji("woman walking", []int32{128694, 8205, 9792, 65039}, "walking_woman"),
413 | newEmoji("person standing", []int32{129485}, "standing_person"),
414 | newEmoji("man standing", []int32{129485, 8205, 9794, 65039}, "standing_man"),
415 | newEmoji("woman standing", []int32{129485, 8205, 9792, 65039}, "standing_woman"),
416 | newEmoji("person kneeling", []int32{129486}, "kneeling_person"),
417 | newEmoji("man kneeling", []int32{129486, 8205, 9794, 65039}, "kneeling_man"),
418 | newEmoji("woman kneeling", []int32{129486, 8205, 9792, 65039}, "kneeling_woman"),
419 | newEmoji("person with white cane", []int32{129489, 8205, 129455}, "person_with_probing_cane"),
420 | newEmoji("man with white cane", []int32{128104, 8205, 129455}, "man_with_probing_cane"),
421 | newEmoji("woman with white cane", []int32{128105, 8205, 129455}, "woman_with_probing_cane"),
422 | newEmoji("person in motorized wheelchair", []int32{129489, 8205, 129468}, "person_in_motorized_wheelchair"),
423 | newEmoji("man in motorized wheelchair", []int32{128104, 8205, 129468}, "man_in_motorized_wheelchair"),
424 | newEmoji("woman in motorized wheelchair", []int32{128105, 8205, 129468}, "woman_in_motorized_wheelchair"),
425 | newEmoji("person in manual wheelchair", []int32{129489, 8205, 129469}, "person_in_manual_wheelchair"),
426 | newEmoji("man in manual wheelchair", []int32{128104, 8205, 129469}, "man_in_manual_wheelchair"),
427 | newEmoji("woman in manual wheelchair", []int32{128105, 8205, 129469}, "woman_in_manual_wheelchair"),
428 | newEmoji("person running", []int32{127939}, "runner", "running"),
429 | newEmoji("man running", []int32{127939, 8205, 9794, 65039}, "running_man"),
430 | newEmoji("woman running", []int32{127939, 8205, 9792, 65039}, "running_woman"),
431 | newEmoji("woman dancing", []int32{128131}, "woman_dancing", "dancer"),
432 | newEmoji("man dancing", []int32{128378}, "man_dancing"),
433 | newEmoji("person in suit levitating", []int32{128372, 65039}, "business_suit_levitating"),
434 | newEmoji("people with bunny ears", []int32{128111}, "dancers"),
435 | newEmoji("men with bunny ears", []int32{128111, 8205, 9794, 65039}, "dancing_men"),
436 | newEmoji("women with bunny ears", []int32{128111, 8205, 9792, 65039}, "dancing_women"),
437 | newEmoji("person in steamy room", []int32{129494}, "sauna_person"),
438 | newEmoji("man in steamy room", []int32{129494, 8205, 9794, 65039}, "sauna_man"),
439 | newEmoji("woman in steamy room", []int32{129494, 8205, 9792, 65039}, "sauna_woman"),
440 | newEmoji("person climbing", []int32{129495}, "climbing"),
441 | newEmoji("man climbing", []int32{129495, 8205, 9794, 65039}, "climbing_man"),
442 | newEmoji("woman climbing", []int32{129495, 8205, 9792, 65039}, "climbing_woman"),
443 | newEmoji("person fencing", []int32{129338}, "person_fencing"),
444 | newEmoji("horse racing", []int32{127943}, "horse_racing"),
445 | newEmoji("skier", []int32{9975, 65039}, "skier"),
446 | newEmoji("snowboarder", []int32{127938}, "snowboarder"),
447 | newEmoji("person golfing", []int32{127948, 65039}, "golfing"),
448 | newEmoji("man golfing", []int32{127948, 65039, 8205, 9794, 65039}, "golfing_man"),
449 | newEmoji("woman golfing", []int32{127948, 65039, 8205, 9792, 65039}, "golfing_woman"),
450 | newEmoji("person surfing", []int32{127940}, "surfer"),
451 | newEmoji("man surfing", []int32{127940, 8205, 9794, 65039}, "surfing_man"),
452 | newEmoji("woman surfing", []int32{127940, 8205, 9792, 65039}, "surfing_woman"),
453 | newEmoji("person rowing boat", []int32{128675}, "rowboat"),
454 | newEmoji("man rowing boat", []int32{128675, 8205, 9794, 65039}, "rowing_man"),
455 | newEmoji("woman rowing boat", []int32{128675, 8205, 9792, 65039}, "rowing_woman"),
456 | newEmoji("person swimming", []int32{127946}, "swimmer"),
457 | newEmoji("man swimming", []int32{127946, 8205, 9794, 65039}, "swimming_man"),
458 | newEmoji("woman swimming", []int32{127946, 8205, 9792, 65039}, "swimming_woman"),
459 | newEmoji("person bouncing ball", []int32{9977, 65039}, "bouncing_ball_person"),
460 | newEmoji("man bouncing ball", []int32{9977, 65039, 8205, 9794, 65039}, "bouncing_ball_man", "basketball_man"),
461 | newEmoji("woman bouncing ball", []int32{9977, 65039, 8205, 9792, 65039}, "bouncing_ball_woman", "basketball_woman"),
462 | newEmoji("person lifting weights", []int32{127947, 65039}, "weight_lifting"),
463 | newEmoji("man lifting weights", []int32{127947, 65039, 8205, 9794, 65039}, "weight_lifting_man"),
464 | newEmoji("woman lifting weights", []int32{127947, 65039, 8205, 9792, 65039}, "weight_lifting_woman"),
465 | newEmoji("person biking", []int32{128692}, "bicyclist"),
466 | newEmoji("man biking", []int32{128692, 8205, 9794, 65039}, "biking_man"),
467 | newEmoji("woman biking", []int32{128692, 8205, 9792, 65039}, "biking_woman"),
468 | newEmoji("person mountain biking", []int32{128693}, "mountain_bicyclist"),
469 | newEmoji("man mountain biking", []int32{128693, 8205, 9794, 65039}, "mountain_biking_man"),
470 | newEmoji("woman mountain biking", []int32{128693, 8205, 9792, 65039}, "mountain_biking_woman"),
471 | newEmoji("person cartwheeling", []int32{129336}, "cartwheeling"),
472 | newEmoji("man cartwheeling", []int32{129336, 8205, 9794, 65039}, "man_cartwheeling"),
473 | newEmoji("woman cartwheeling", []int32{129336, 8205, 9792, 65039}, "woman_cartwheeling"),
474 | newEmoji("people wrestling", []int32{129340}, "wrestling"),
475 | newEmoji("men wrestling", []int32{129340, 8205, 9794, 65039}, "men_wrestling"),
476 | newEmoji("women wrestling", []int32{129340, 8205, 9792, 65039}, "women_wrestling"),
477 | newEmoji("person playing water polo", []int32{129341}, "water_polo"),
478 | newEmoji("man playing water polo", []int32{129341, 8205, 9794, 65039}, "man_playing_water_polo"),
479 | newEmoji("woman playing water polo", []int32{129341, 8205, 9792, 65039}, "woman_playing_water_polo"),
480 | newEmoji("person playing handball", []int32{129342}, "handball_person"),
481 | newEmoji("man playing handball", []int32{129342, 8205, 9794, 65039}, "man_playing_handball"),
482 | newEmoji("woman playing handball", []int32{129342, 8205, 9792, 65039}, "woman_playing_handball"),
483 | newEmoji("person juggling", []int32{129337}, "juggling_person"),
484 | newEmoji("man juggling", []int32{129337, 8205, 9794, 65039}, "man_juggling"),
485 | newEmoji("woman juggling", []int32{129337, 8205, 9792, 65039}, "woman_juggling"),
486 | newEmoji("person in lotus position", []int32{129496}, "lotus_position"),
487 | newEmoji("man in lotus position", []int32{129496, 8205, 9794, 65039}, "lotus_position_man"),
488 | newEmoji("woman in lotus position", []int32{129496, 8205, 9792, 65039}, "lotus_position_woman"),
489 | newEmoji("person taking bath", []int32{128704}, "bath"),
490 | newEmoji("person in bed", []int32{128716}, "sleeping_bed"),
491 | newEmoji("people holding hands", []int32{129489, 8205, 129309, 8205, 129489}, "people_holding_hands"),
492 | newEmoji("women holding hands", []int32{128109}, "two_women_holding_hands"),
493 | newEmoji("woman and man holding hands", []int32{128107}, "couple"),
494 | newEmoji("men holding hands", []int32{128108}, "two_men_holding_hands"),
495 | newEmoji("kiss", []int32{128143}, "couplekiss"),
496 | newEmoji("kiss: woman, man", []int32{128105, 8205, 10084, 65039, 8205, 128139, 8205, 128104}, "couplekiss_man_woman"),
497 | newEmoji("kiss: man, man", []int32{128104, 8205, 10084, 65039, 8205, 128139, 8205, 128104}, "couplekiss_man_man"),
498 | newEmoji("kiss: woman, woman", []int32{128105, 8205, 10084, 65039, 8205, 128139, 8205, 128105}, "couplekiss_woman_woman"),
499 | newEmoji("couple with heart", []int32{128145}, "couple_with_heart"),
500 | newEmoji("couple with heart: woman, man", []int32{128105, 8205, 10084, 65039, 8205, 128104}, "couple_with_heart_woman_man"),
501 | newEmoji("couple with heart: man, man", []int32{128104, 8205, 10084, 65039, 8205, 128104}, "couple_with_heart_man_man"),
502 | newEmoji("couple with heart: woman, woman", []int32{128105, 8205, 10084, 65039, 8205, 128105}, "couple_with_heart_woman_woman"),
503 | newEmoji("family", []int32{128106}, "family"),
504 | newEmoji("family: man, woman, boy", []int32{128104, 8205, 128105, 8205, 128102}, "family_man_woman_boy"),
505 | newEmoji("family: man, woman, girl", []int32{128104, 8205, 128105, 8205, 128103}, "family_man_woman_girl"),
506 | newEmoji("family: man, woman, girl, boy", []int32{128104, 8205, 128105, 8205, 128103, 8205, 128102}, "family_man_woman_girl_boy"),
507 | newEmoji("family: man, woman, boy, boy", []int32{128104, 8205, 128105, 8205, 128102, 8205, 128102}, "family_man_woman_boy_boy"),
508 | newEmoji("family: man, woman, girl, girl", []int32{128104, 8205, 128105, 8205, 128103, 8205, 128103}, "family_man_woman_girl_girl"),
509 | newEmoji("family: man, man, boy", []int32{128104, 8205, 128104, 8205, 128102}, "family_man_man_boy"),
510 | newEmoji("family: man, man, girl", []int32{128104, 8205, 128104, 8205, 128103}, "family_man_man_girl"),
511 | newEmoji("family: man, man, girl, boy", []int32{128104, 8205, 128104, 8205, 128103, 8205, 128102}, "family_man_man_girl_boy"),
512 | newEmoji("family: man, man, boy, boy", []int32{128104, 8205, 128104, 8205, 128102, 8205, 128102}, "family_man_man_boy_boy"),
513 | newEmoji("family: man, man, girl, girl", []int32{128104, 8205, 128104, 8205, 128103, 8205, 128103}, "family_man_man_girl_girl"),
514 | newEmoji("family: woman, woman, boy", []int32{128105, 8205, 128105, 8205, 128102}, "family_woman_woman_boy"),
515 | newEmoji("family: woman, woman, girl", []int32{128105, 8205, 128105, 8205, 128103}, "family_woman_woman_girl"),
516 | newEmoji("family: woman, woman, girl, boy", []int32{128105, 8205, 128105, 8205, 128103, 8205, 128102}, "family_woman_woman_girl_boy"),
517 | newEmoji("family: woman, woman, boy, boy", []int32{128105, 8205, 128105, 8205, 128102, 8205, 128102}, "family_woman_woman_boy_boy"),
518 | newEmoji("family: woman, woman, girl, girl", []int32{128105, 8205, 128105, 8205, 128103, 8205, 128103}, "family_woman_woman_girl_girl"),
519 | newEmoji("family: man, boy", []int32{128104, 8205, 128102}, "family_man_boy"),
520 | newEmoji("family: man, boy, boy", []int32{128104, 8205, 128102, 8205, 128102}, "family_man_boy_boy"),
521 | newEmoji("family: man, girl", []int32{128104, 8205, 128103}, "family_man_girl"),
522 | newEmoji("family: man, girl, boy", []int32{128104, 8205, 128103, 8205, 128102}, "family_man_girl_boy"),
523 | newEmoji("family: man, girl, girl", []int32{128104, 8205, 128103, 8205, 128103}, "family_man_girl_girl"),
524 | newEmoji("family: woman, boy", []int32{128105, 8205, 128102}, "family_woman_boy"),
525 | newEmoji("family: woman, boy, boy", []int32{128105, 8205, 128102, 8205, 128102}, "family_woman_boy_boy"),
526 | newEmoji("family: woman, girl", []int32{128105, 8205, 128103}, "family_woman_girl"),
527 | newEmoji("family: woman, girl, boy", []int32{128105, 8205, 128103, 8205, 128102}, "family_woman_girl_boy"),
528 | newEmoji("family: woman, girl, girl", []int32{128105, 8205, 128103, 8205, 128103}, "family_woman_girl_girl"),
529 | newEmoji("speaking head", []int32{128483, 65039}, "speaking_head"),
530 | newEmoji("bust in silhouette", []int32{128100}, "bust_in_silhouette"),
531 | newEmoji("busts in silhouette", []int32{128101}, "busts_in_silhouette"),
532 | newEmoji("footprints", []int32{128099}, "footprints"),
533 | newEmoji("monkey face", []int32{128053}, "monkey_face"),
534 | newEmoji("monkey", []int32{128018}, "monkey"),
535 | newEmoji("gorilla", []int32{129421}, "gorilla"),
536 | newEmoji("orangutan", []int32{129447}, "orangutan"),
537 | newEmoji("dog face", []int32{128054}, "dog"),
538 | newEmoji("dog", []int32{128021}, "dog2"),
539 | newEmoji("guide dog", []int32{129454}, "guide_dog"),
540 | newEmoji("service dog", []int32{128021, 8205, 129466}, "service_dog"),
541 | newEmoji("poodle", []int32{128041}, "poodle"),
542 | newEmoji("wolf", []int32{128058}, "wolf"),
543 | newEmoji("fox", []int32{129418}, "fox_face"),
544 | newEmoji("raccoon", []int32{129437}, "raccoon"),
545 | newEmoji("cat face", []int32{128049}, "cat"),
546 | newEmoji("cat", []int32{128008}, "cat2"),
547 | newEmoji("lion", []int32{129409}, "lion"),
548 | newEmoji("tiger face", []int32{128047}, "tiger"),
549 | newEmoji("tiger", []int32{128005}, "tiger2"),
550 | newEmoji("leopard", []int32{128006}, "leopard"),
551 | newEmoji("horse face", []int32{128052}, "horse"),
552 | newEmoji("horse", []int32{128014}, "racehorse"),
553 | newEmoji("unicorn", []int32{129412}, "unicorn"),
554 | newEmoji("zebra", []int32{129427}, "zebra"),
555 | newEmoji("deer", []int32{129420}, "deer"),
556 | newEmoji("cow face", []int32{128046}, "cow"),
557 | newEmoji("ox", []int32{128002}, "ox"),
558 | newEmoji("water buffalo", []int32{128003}, "water_buffalo"),
559 | newEmoji("cow", []int32{128004}, "cow2"),
560 | newEmoji("pig face", []int32{128055}, "pig"),
561 | newEmoji("pig", []int32{128022}, "pig2"),
562 | newEmoji("boar", []int32{128023}, "boar"),
563 | newEmoji("pig nose", []int32{128061}, "pig_nose"),
564 | newEmoji("ram", []int32{128015}, "ram"),
565 | newEmoji("ewe", []int32{128017}, "sheep"),
566 | newEmoji("goat", []int32{128016}, "goat"),
567 | newEmoji("camel", []int32{128042}, "dromedary_camel"),
568 | newEmoji("two-hump camel", []int32{128043}, "camel"),
569 | newEmoji("llama", []int32{129433}, "llama"),
570 | newEmoji("giraffe", []int32{129426}, "giraffe"),
571 | newEmoji("elephant", []int32{128024}, "elephant"),
572 | newEmoji("rhinoceros", []int32{129423}, "rhinoceros"),
573 | newEmoji("hippopotamus", []int32{129435}, "hippopotamus"),
574 | newEmoji("mouse face", []int32{128045}, "mouse"),
575 | newEmoji("mouse", []int32{128001}, "mouse2"),
576 | newEmoji("rat", []int32{128000}, "rat"),
577 | newEmoji("hamster", []int32{128057}, "hamster"),
578 | newEmoji("rabbit face", []int32{128048}, "rabbit"),
579 | newEmoji("rabbit", []int32{128007}, "rabbit2"),
580 | newEmoji("chipmunk", []int32{128063, 65039}, "chipmunk"),
581 | newEmoji("hedgehog", []int32{129428}, "hedgehog"),
582 | newEmoji("bat", []int32{129415}, "bat"),
583 | newEmoji("bear", []int32{128059}, "bear"),
584 | newEmoji("koala", []int32{128040}, "koala"),
585 | newEmoji("panda", []int32{128060}, "panda_face"),
586 | newEmoji("sloth", []int32{129445}, "sloth"),
587 | newEmoji("otter", []int32{129446}, "otter"),
588 | newEmoji("skunk", []int32{129448}, "skunk"),
589 | newEmoji("kangaroo", []int32{129432}, "kangaroo"),
590 | newEmoji("badger", []int32{129441}, "badger"),
591 | newEmoji("paw prints", []int32{128062}, "feet", "paw_prints"),
592 | newEmoji("turkey", []int32{129411}, "turkey"),
593 | newEmoji("chicken", []int32{128020}, "chicken"),
594 | newEmoji("rooster", []int32{128019}, "rooster"),
595 | newEmoji("hatching chick", []int32{128035}, "hatching_chick"),
596 | newEmoji("baby chick", []int32{128036}, "baby_chick"),
597 | newEmoji("front-facing baby chick", []int32{128037}, "hatched_chick"),
598 | newEmoji("bird", []int32{128038}, "bird"),
599 | newEmoji("penguin", []int32{128039}, "penguin"),
600 | newEmoji("dove", []int32{128330, 65039}, "dove"),
601 | newEmoji("eagle", []int32{129413}, "eagle"),
602 | newEmoji("duck", []int32{129414}, "duck"),
603 | newEmoji("swan", []int32{129442}, "swan"),
604 | newEmoji("owl", []int32{129417}, "owl"),
605 | newEmoji("flamingo", []int32{129449}, "flamingo"),
606 | newEmoji("peacock", []int32{129434}, "peacock"),
607 | newEmoji("parrot", []int32{129436}, "parrot"),
608 | newEmoji("crocodile", []int32{128010}, "crocodile"),
609 | newEmoji("turtle", []int32{128034}, "turtle"),
610 | newEmoji("lizard", []int32{129422}, "lizard"),
611 | newEmoji("snake", []int32{128013}, "snake"),
612 | newEmoji("dragon face", []int32{128050}, "dragon_face"),
613 | newEmoji("dragon", []int32{128009}, "dragon"),
614 | newEmoji("sauropod", []int32{129429}, "sauropod"),
615 | newEmoji("T-Rex", []int32{129430}, "t-rex"),
616 | newEmoji("spouting whale", []int32{128051}, "whale"),
617 | newEmoji("whale", []int32{128011}, "whale2"),
618 | newEmoji("dolphin", []int32{128044}, "dolphin", "flipper"),
619 | newEmoji("fish", []int32{128031}, "fish"),
620 | newEmoji("tropical fish", []int32{128032}, "tropical_fish"),
621 | newEmoji("blowfish", []int32{128033}, "blowfish"),
622 | newEmoji("shark", []int32{129416}, "shark"),
623 | newEmoji("octopus", []int32{128025}, "octopus"),
624 | newEmoji("spiral shell", []int32{128026}, "shell"),
625 | newEmoji("snail", []int32{128012}, "snail"),
626 | newEmoji("butterfly", []int32{129419}, "butterfly"),
627 | newEmoji("bug", []int32{128027}, "bug"),
628 | newEmoji("ant", []int32{128028}, "ant"),
629 | newEmoji("honeybee", []int32{128029}, "bee", "honeybee"),
630 | newEmoji("beetle", []int32{129714}, "beetle"),
631 | newEmoji("cricket", []int32{129431}, "cricket"),
632 | newEmoji("spider", []int32{128375, 65039}, "spider"),
633 | newEmoji("spider web", []int32{128376, 65039}, "spider_web"),
634 | newEmoji("scorpion", []int32{129410}, "scorpion"),
635 | newEmoji("mosquito", []int32{129439}, "mosquito"),
636 | newEmoji("microbe", []int32{129440}, "microbe"),
637 | newEmoji("bouquet", []int32{128144}, "bouquet"),
638 | newEmoji("cherry blossom", []int32{127800}, "cherry_blossom"),
639 | newEmoji("white flower", []int32{128174}, "white_flower"),
640 | newEmoji("rosette", []int32{127989, 65039}, "rosette"),
641 | newEmoji("rose", []int32{127801}, "rose"),
642 | newEmoji("wilted flower", []int32{129344}, "wilted_flower"),
643 | newEmoji("hibiscus", []int32{127802}, "hibiscus"),
644 | newEmoji("sunflower", []int32{127803}, "sunflower"),
645 | newEmoji("blossom", []int32{127804}, "blossom"),
646 | newEmoji("tulip", []int32{127799}, "tulip"),
647 | newEmoji("seedling", []int32{127793}, "seedling"),
648 | newEmoji("evergreen tree", []int32{127794}, "evergreen_tree"),
649 | newEmoji("deciduous tree", []int32{127795}, "deciduous_tree"),
650 | newEmoji("palm tree", []int32{127796}, "palm_tree"),
651 | newEmoji("cactus", []int32{127797}, "cactus"),
652 | newEmoji("sheaf of rice", []int32{127806}, "ear_of_rice"),
653 | newEmoji("herb", []int32{127807}, "herb"),
654 | newEmoji("shamrock", []int32{9752, 65039}, "shamrock"),
655 | newEmoji("four leaf clover", []int32{127808}, "four_leaf_clover"),
656 | newEmoji("maple leaf", []int32{127809}, "maple_leaf"),
657 | newEmoji("fallen leaf", []int32{127810}, "fallen_leaf"),
658 | newEmoji("leaf fluttering in wind", []int32{127811}, "leaves"),
659 | newEmoji("grapes", []int32{127815}, "grapes"),
660 | newEmoji("melon", []int32{127816}, "melon"),
661 | newEmoji("watermelon", []int32{127817}, "watermelon"),
662 | newEmoji("tangerine", []int32{127818}, "tangerine", "orange", "mandarin"),
663 | newEmoji("lemon", []int32{127819}, "lemon"),
664 | newEmoji("banana", []int32{127820}, "banana"),
665 | newEmoji("pineapple", []int32{127821}, "pineapple"),
666 | newEmoji("mango", []int32{129389}, "mango"),
667 | newEmoji("red apple", []int32{127822}, "apple"),
668 | newEmoji("green apple", []int32{127823}, "green_apple"),
669 | newEmoji("pear", []int32{127824}, "pear"),
670 | newEmoji("peach", []int32{127825}, "peach"),
671 | newEmoji("cherries", []int32{127826}, "cherries"),
672 | newEmoji("strawberry", []int32{127827}, "strawberry"),
673 | newEmoji("kiwi fruit", []int32{129373}, "kiwi_fruit"),
674 | newEmoji("tomato", []int32{127813}, "tomato"),
675 | newEmoji("coconut", []int32{129381}, "coconut"),
676 | newEmoji("avocado", []int32{129361}, "avocado"),
677 | newEmoji("potato", []int32{129364}, "potato"),
678 | newEmoji("carrot", []int32{129365}, "carrot"),
679 | newEmoji("ear of corn", []int32{127805}, "corn"),
680 | newEmoji("hot pepper", []int32{127798, 65039}, "hot_pepper"),
681 | newEmoji("cucumber", []int32{129362}, "cucumber"),
682 | newEmoji("leafy green", []int32{129388}, "leafy_green"),
683 | newEmoji("broccoli", []int32{129382}, "broccoli"),
684 | newEmoji("garlic", []int32{129476}, "garlic"),
685 | newEmoji("onion", []int32{129477}, "onion"),
686 | newEmoji("mushroom", []int32{127812}, "mushroom"),
687 | newEmoji("peanuts", []int32{129372}, "peanuts"),
688 | newEmoji("chestnut", []int32{127792}, "chestnut"),
689 | newEmoji("bread", []int32{127838}, "bread"),
690 | newEmoji("croissant", []int32{129360}, "croissant"),
691 | newEmoji("baguette bread", []int32{129366}, "baguette_bread"),
692 | newEmoji("pretzel", []int32{129384}, "pretzel"),
693 | newEmoji("bagel", []int32{129391}, "bagel"),
694 | newEmoji("pancakes", []int32{129374}, "pancakes"),
695 | newEmoji("waffle", []int32{129479}, "waffle"),
696 | newEmoji("cheese wedge", []int32{129472}, "cheese"),
697 | newEmoji("meat on bone", []int32{127830}, "meat_on_bone"),
698 | newEmoji("poultry leg", []int32{127831}, "poultry_leg"),
699 | newEmoji("cut of meat", []int32{129385}, "cut_of_meat"),
700 | newEmoji("bacon", []int32{129363}, "bacon"),
701 | newEmoji("hamburger", []int32{127828}, "hamburger"),
702 | newEmoji("french fries", []int32{127839}, "fries"),
703 | newEmoji("pizza", []int32{127829}, "pizza"),
704 | newEmoji("hot dog", []int32{127789}, "hotdog"),
705 | newEmoji("sandwich", []int32{129386}, "sandwich"),
706 | newEmoji("taco", []int32{127790}, "taco"),
707 | newEmoji("burrito", []int32{127791}, "burrito"),
708 | newEmoji("stuffed flatbread", []int32{129369}, "stuffed_flatbread"),
709 | newEmoji("falafel", []int32{129478}, "falafel"),
710 | newEmoji("egg", []int32{129370}, "egg"),
711 | newEmoji("cooking", []int32{127859}, "fried_egg"),
712 | newEmoji("shallow pan of food", []int32{129368}, "shallow_pan_of_food"),
713 | newEmoji("pot of food", []int32{127858}, "stew"),
714 | newEmoji("bowl with spoon", []int32{129379}, "bowl_with_spoon"),
715 | newEmoji("green salad", []int32{129367}, "green_salad"),
716 | newEmoji("popcorn", []int32{127871}, "popcorn"),
717 | newEmoji("butter", []int32{129480}, "butter"),
718 | newEmoji("salt", []int32{129474}, "salt"),
719 | newEmoji("canned food", []int32{129387}, "canned_food"),
720 | newEmoji("bento box", []int32{127857}, "bento"),
721 | newEmoji("rice cracker", []int32{127832}, "rice_cracker"),
722 | newEmoji("rice ball", []int32{127833}, "rice_ball"),
723 | newEmoji("cooked rice", []int32{127834}, "rice"),
724 | newEmoji("curry rice", []int32{127835}, "curry"),
725 | newEmoji("steaming bowl", []int32{127836}, "ramen"),
726 | newEmoji("spaghetti", []int32{127837}, "spaghetti"),
727 | newEmoji("roasted sweet potato", []int32{127840}, "sweet_potato"),
728 | newEmoji("oden", []int32{127842}, "oden"),
729 | newEmoji("sushi", []int32{127843}, "sushi"),
730 | newEmoji("fried shrimp", []int32{127844}, "fried_shrimp"),
731 | newEmoji("fish cake with swirl", []int32{127845}, "fish_cake"),
732 | newEmoji("moon cake", []int32{129390}, "moon_cake"),
733 | newEmoji("dango", []int32{127841}, "dango"),
734 | newEmoji("dumpling", []int32{129375}, "dumpling"),
735 | newEmoji("fortune cookie", []int32{129376}, "fortune_cookie"),
736 | newEmoji("takeout box", []int32{129377}, "takeout_box"),
737 | newEmoji("crab", []int32{129408}, "crab"),
738 | newEmoji("lobster", []int32{129438}, "lobster"),
739 | newEmoji("shrimp", []int32{129424}, "shrimp"),
740 | newEmoji("squid", []int32{129425}, "squid"),
741 | newEmoji("oyster", []int32{129450}, "oyster"),
742 | newEmoji("soft ice cream", []int32{127846}, "icecream"),
743 | newEmoji("shaved ice", []int32{127847}, "shaved_ice"),
744 | newEmoji("ice cream", []int32{127848}, "ice_cream"),
745 | newEmoji("doughnut", []int32{127849}, "doughnut"),
746 | newEmoji("cookie", []int32{127850}, "cookie"),
747 | newEmoji("birthday cake", []int32{127874}, "birthday"),
748 | newEmoji("shortcake", []int32{127856}, "cake"),
749 | newEmoji("cupcake", []int32{129473}, "cupcake"),
750 | newEmoji("pie", []int32{129383}, "pie"),
751 | newEmoji("chocolate bar", []int32{127851}, "chocolate_bar"),
752 | newEmoji("candy", []int32{127852}, "candy"),
753 | newEmoji("lollipop", []int32{127853}, "lollipop"),
754 | newEmoji("custard", []int32{127854}, "custard"),
755 | newEmoji("honey pot", []int32{127855}, "honey_pot"),
756 | newEmoji("baby bottle", []int32{127868}, "baby_bottle"),
757 | newEmoji("glass of milk", []int32{129371}, "milk_glass"),
758 | newEmoji("hot beverage", []int32{9749}, "coffee"),
759 | newEmoji("teacup without handle", []int32{127861}, "tea"),
760 | newEmoji("sake", []int32{127862}, "sake"),
761 | newEmoji("bottle with popping cork", []int32{127870}, "champagne"),
762 | newEmoji("wine glass", []int32{127863}, "wine_glass"),
763 | newEmoji("cocktail glass", []int32{127864}, "cocktail"),
764 | newEmoji("tropical drink", []int32{127865}, "tropical_drink"),
765 | newEmoji("beer mug", []int32{127866}, "beer"),
766 | newEmoji("clinking beer mugs", []int32{127867}, "beers"),
767 | newEmoji("clinking glasses", []int32{129346}, "clinking_glasses"),
768 | newEmoji("tumbler glass", []int32{129347}, "tumbler_glass"),
769 | newEmoji("cup with straw", []int32{129380}, "cup_with_straw"),
770 | newEmoji("beverage box", []int32{129475}, "beverage_box"),
771 | newEmoji("mate", []int32{129481}, "mate"),
772 | newEmoji("ice", []int32{129482}, "ice_cube"),
773 | newEmoji("chopsticks", []int32{129378}, "chopsticks"),
774 | newEmoji("fork and knife with plate", []int32{127869, 65039}, "plate_with_cutlery"),
775 | newEmoji("fork and knife", []int32{127860}, "fork_and_knife"),
776 | newEmoji("spoon", []int32{129348}, "spoon"),
777 | newEmoji("kitchen knife", []int32{128298}, "hocho", "knife"),
778 | newEmoji("amphora", []int32{127994}, "amphora"),
779 | newEmoji("globe showing Europe-Africa", []int32{127757}, "earth_africa"),
780 | newEmoji("globe showing Americas", []int32{127758}, "earth_americas"),
781 | newEmoji("globe showing Asia-Australia", []int32{127759}, "earth_asia"),
782 | newEmoji("globe with meridians", []int32{127760}, "globe_with_meridians"),
783 | newEmoji("world map", []int32{128506, 65039}, "world_map"),
784 | newEmoji("map of Japan", []int32{128510}, "japan"),
785 | newEmoji("compass", []int32{129517}, "compass"),
786 | newEmoji("snow-capped mountain", []int32{127956, 65039}, "mountain_snow"),
787 | newEmoji("mountain", []int32{9968, 65039}, "mountain"),
788 | newEmoji("volcano", []int32{127755}, "volcano"),
789 | newEmoji("mount fuji", []int32{128507}, "mount_fuji"),
790 | newEmoji("camping", []int32{127957, 65039}, "camping"),
791 | newEmoji("beach with umbrella", []int32{127958, 65039}, "beach_umbrella"),
792 | newEmoji("desert", []int32{127964, 65039}, "desert"),
793 | newEmoji("desert island", []int32{127965, 65039}, "desert_island"),
794 | newEmoji("national park", []int32{127966, 65039}, "national_park"),
795 | newEmoji("stadium", []int32{127967, 65039}, "stadium"),
796 | newEmoji("classical building", []int32{127963, 65039}, "classical_building"),
797 | newEmoji("building construction", []int32{127959, 65039}, "building_construction"),
798 | newEmoji("brick", []int32{129521}, "bricks"),
799 | newEmoji("houses", []int32{127960, 65039}, "houses"),
800 | newEmoji("derelict house", []int32{127962, 65039}, "derelict_house"),
801 | newEmoji("house", []int32{127968}, "house"),
802 | newEmoji("house with garden", []int32{127969}, "house_with_garden"),
803 | newEmoji("office building", []int32{127970}, "office"),
804 | newEmoji("Japanese post office", []int32{127971}, "post_office"),
805 | newEmoji("post office", []int32{127972}, "european_post_office"),
806 | newEmoji("hospital", []int32{127973}, "hospital"),
807 | newEmoji("bank", []int32{127974}, "bank"),
808 | newEmoji("hotel", []int32{127976}, "hotel"),
809 | newEmoji("love hotel", []int32{127977}, "love_hotel"),
810 | newEmoji("convenience store", []int32{127978}, "convenience_store"),
811 | newEmoji("school", []int32{127979}, "school"),
812 | newEmoji("department store", []int32{127980}, "department_store"),
813 | newEmoji("factory", []int32{127981}, "factory"),
814 | newEmoji("Japanese castle", []int32{127983}, "japanese_castle"),
815 | newEmoji("castle", []int32{127984}, "european_castle"),
816 | newEmoji("wedding", []int32{128146}, "wedding"),
817 | newEmoji("Tokyo tower", []int32{128508}, "tokyo_tower"),
818 | newEmoji("Statue of Liberty", []int32{128509}, "statue_of_liberty"),
819 | newEmoji("church", []int32{9962}, "church"),
820 | newEmoji("mosque", []int32{128332}, "mosque"),
821 | newEmoji("hindu temple", []int32{128725}, "hindu_temple"),
822 | newEmoji("synagogue", []int32{128333}, "synagogue"),
823 | newEmoji("shinto shrine", []int32{9961, 65039}, "shinto_shrine"),
824 | newEmoji("kaaba", []int32{128331}, "kaaba"),
825 | newEmoji("fountain", []int32{9970}, "fountain"),
826 | newEmoji("tent", []int32{9978}, "tent"),
827 | newEmoji("foggy", []int32{127745}, "foggy"),
828 | newEmoji("night with stars", []int32{127747}, "night_with_stars"),
829 | newEmoji("cityscape", []int32{127961, 65039}, "cityscape"),
830 | newEmoji("sunrise over mountains", []int32{127748}, "sunrise_over_mountains"),
831 | newEmoji("sunrise", []int32{127749}, "sunrise"),
832 | newEmoji("cityscape at dusk", []int32{127750}, "city_sunset"),
833 | newEmoji("sunset", []int32{127751}, "city_sunrise"),
834 | newEmoji("bridge at night", []int32{127753}, "bridge_at_night"),
835 | newEmoji("hot springs", []int32{9832, 65039}, "hotsprings"),
836 | newEmoji("carousel horse", []int32{127904}, "carousel_horse"),
837 | newEmoji("ferris wheel", []int32{127905}, "ferris_wheel"),
838 | newEmoji("roller coaster", []int32{127906}, "roller_coaster"),
839 | newEmoji("barber pole", []int32{128136}, "barber"),
840 | newEmoji("circus tent", []int32{127914}, "circus_tent"),
841 | newEmoji("locomotive", []int32{128642}, "steam_locomotive"),
842 | newEmoji("railway car", []int32{128643}, "railway_car"),
843 | newEmoji("high-speed train", []int32{128644}, "bullettrain_side"),
844 | newEmoji("bullet train", []int32{128645}, "bullettrain_front"),
845 | newEmoji("train", []int32{128646}, "train2"),
846 | newEmoji("metro", []int32{128647}, "metro"),
847 | newEmoji("light rail", []int32{128648}, "light_rail"),
848 | newEmoji("station", []int32{128649}, "station"),
849 | newEmoji("tram", []int32{128650}, "tram"),
850 | newEmoji("monorail", []int32{128669}, "monorail"),
851 | newEmoji("mountain railway", []int32{128670}, "mountain_railway"),
852 | newEmoji("tram car", []int32{128651}, "train"),
853 | newEmoji("bus", []int32{128652}, "bus"),
854 | newEmoji("oncoming bus", []int32{128653}, "oncoming_bus"),
855 | newEmoji("trolleybus", []int32{128654}, "trolleybus"),
856 | newEmoji("minibus", []int32{128656}, "minibus"),
857 | newEmoji("ambulance", []int32{128657}, "ambulance"),
858 | newEmoji("fire engine", []int32{128658}, "fire_engine"),
859 | newEmoji("police car", []int32{128659}, "police_car"),
860 | newEmoji("oncoming police car", []int32{128660}, "oncoming_police_car"),
861 | newEmoji("taxi", []int32{128661}, "taxi"),
862 | newEmoji("oncoming taxi", []int32{128662}, "oncoming_taxi"),
863 | newEmoji("automobile", []int32{128663}, "car", "red_car"),
864 | newEmoji("oncoming automobile", []int32{128664}, "oncoming_automobile"),
865 | newEmoji("sport utility vehicle", []int32{128665}, "blue_car"),
866 | newEmoji("delivery truck", []int32{128666}, "truck"),
867 | newEmoji("articulated lorry", []int32{128667}, "articulated_lorry"),
868 | newEmoji("tractor", []int32{128668}, "tractor"),
869 | newEmoji("racing car", []int32{127950, 65039}, "racing_car"),
870 | newEmoji("motorcycle", []int32{127949, 65039}, "motorcycle"),
871 | newEmoji("motor scooter", []int32{128757}, "motor_scooter"),
872 | newEmoji("manual wheelchair", []int32{129469}, "manual_wheelchair"),
873 | newEmoji("motorized wheelchair", []int32{129468}, "motorized_wheelchair"),
874 | newEmoji("auto rickshaw", []int32{128762}, "auto_rickshaw"),
875 | newEmoji("bicycle", []int32{128690}, "bike"),
876 | newEmoji("kick scooter", []int32{128756}, "kick_scooter"),
877 | newEmoji("skateboard", []int32{128761}, "skateboard"),
878 | newEmoji("bus stop", []int32{128655}, "busstop"),
879 | newEmoji("motorway", []int32{128739, 65039}, "motorway"),
880 | newEmoji("railway track", []int32{128740, 65039}, "railway_track"),
881 | newEmoji("oil drum", []int32{128738, 65039}, "oil_drum"),
882 | newEmoji("fuel pump", []int32{9981}, "fuelpump"),
883 | newEmoji("police car light", []int32{128680}, "rotating_light"),
884 | newEmoji("horizontal traffic light", []int32{128677}, "traffic_light"),
885 | newEmoji("vertical traffic light", []int32{128678}, "vertical_traffic_light"),
886 | newEmoji("stop sign", []int32{128721}, "stop_sign"),
887 | newEmoji("construction", []int32{128679}, "construction"),
888 | newEmoji("anchor", []int32{9875}, "anchor"),
889 | newEmoji("sailboat", []int32{9973}, "boat", "sailboat"),
890 | newEmoji("canoe", []int32{128758}, "canoe"),
891 | newEmoji("speedboat", []int32{128676}, "speedboat"),
892 | newEmoji("passenger ship", []int32{128755, 65039}, "passenger_ship"),
893 | newEmoji("ferry", []int32{9972, 65039}, "ferry"),
894 | newEmoji("motor boat", []int32{128741, 65039}, "motor_boat"),
895 | newEmoji("ship", []int32{128674}, "ship"),
896 | newEmoji("airplane", []int32{9992, 65039}, "airplane"),
897 | newEmoji("small airplane", []int32{128745, 65039}, "small_airplane"),
898 | newEmoji("airplane departure", []int32{128747}, "flight_departure"),
899 | newEmoji("airplane arrival", []int32{128748}, "flight_arrival"),
900 | newEmoji("parachute", []int32{129666}, "parachute"),
901 | newEmoji("seat", []int32{128186}, "seat"),
902 | newEmoji("helicopter", []int32{128641}, "helicopter"),
903 | newEmoji("suspension railway", []int32{128671}, "suspension_railway"),
904 | newEmoji("mountain cableway", []int32{128672}, "mountain_cableway"),
905 | newEmoji("aerial tramway", []int32{128673}, "aerial_tramway"),
906 | newEmoji("satellite", []int32{128752, 65039}, "artificial_satellite"),
907 | newEmoji("rocket", []int32{128640}, "rocket"),
908 | newEmoji("flying saucer", []int32{128760}, "flying_saucer"),
909 | newEmoji("bellhop bell", []int32{128718, 65039}, "bellhop_bell"),
910 | newEmoji("luggage", []int32{129523}, "luggage"),
911 | newEmoji("hourglass done", []int32{8987}, "hourglass"),
912 | newEmoji("hourglass not done", []int32{9203}, "hourglass_flowing_sand"),
913 | newEmoji("watch", []int32{8986}, "watch"),
914 | newEmoji("alarm clock", []int32{9200}, "alarm_clock"),
915 | newEmoji("stopwatch", []int32{9201, 65039}, "stopwatch"),
916 | newEmoji("timer clock", []int32{9202, 65039}, "timer_clock"),
917 | newEmoji("mantelpiece clock", []int32{128368, 65039}, "mantelpiece_clock"),
918 | newEmoji("twelve o’clock", []int32{128347}, "clock12"),
919 | newEmoji("twelve-thirty", []int32{128359}, "clock1230"),
920 | newEmoji("one o’clock", []int32{128336}, "clock1"),
921 | newEmoji("one-thirty", []int32{128348}, "clock130"),
922 | newEmoji("two o’clock", []int32{128337}, "clock2"),
923 | newEmoji("two-thirty", []int32{128349}, "clock230"),
924 | newEmoji("three o’clock", []int32{128338}, "clock3"),
925 | newEmoji("three-thirty", []int32{128350}, "clock330"),
926 | newEmoji("four o’clock", []int32{128339}, "clock4"),
927 | newEmoji("four-thirty", []int32{128351}, "clock430"),
928 | newEmoji("five o’clock", []int32{128340}, "clock5"),
929 | newEmoji("five-thirty", []int32{128352}, "clock530"),
930 | newEmoji("six o’clock", []int32{128341}, "clock6"),
931 | newEmoji("six-thirty", []int32{128353}, "clock630"),
932 | newEmoji("seven o’clock", []int32{128342}, "clock7"),
933 | newEmoji("seven-thirty", []int32{128354}, "clock730"),
934 | newEmoji("eight o’clock", []int32{128343}, "clock8"),
935 | newEmoji("eight-thirty", []int32{128355}, "clock830"),
936 | newEmoji("nine o’clock", []int32{128344}, "clock9"),
937 | newEmoji("nine-thirty", []int32{128356}, "clock930"),
938 | newEmoji("ten o’clock", []int32{128345}, "clock10"),
939 | newEmoji("ten-thirty", []int32{128357}, "clock1030"),
940 | newEmoji("eleven o’clock", []int32{128346}, "clock11"),
941 | newEmoji("eleven-thirty", []int32{128358}, "clock1130"),
942 | newEmoji("new moon", []int32{127761}, "new_moon"),
943 | newEmoji("waxing crescent moon", []int32{127762}, "waxing_crescent_moon"),
944 | newEmoji("first quarter moon", []int32{127763}, "first_quarter_moon"),
945 | newEmoji("waxing gibbous moon", []int32{127764}, "moon", "waxing_gibbous_moon"),
946 | newEmoji("full moon", []int32{127765}, "full_moon"),
947 | newEmoji("waning gibbous moon", []int32{127766}, "waning_gibbous_moon"),
948 | newEmoji("last quarter moon", []int32{127767}, "last_quarter_moon"),
949 | newEmoji("waning crescent moon", []int32{127768}, "waning_crescent_moon"),
950 | newEmoji("crescent moon", []int32{127769}, "crescent_moon"),
951 | newEmoji("new moon face", []int32{127770}, "new_moon_with_face"),
952 | newEmoji("first quarter moon face", []int32{127771}, "first_quarter_moon_with_face"),
953 | newEmoji("last quarter moon face", []int32{127772}, "last_quarter_moon_with_face"),
954 | newEmoji("thermometer", []int32{127777, 65039}, "thermometer"),
955 | newEmoji("sun", []int32{9728, 65039}, "sunny"),
956 | newEmoji("full moon face", []int32{127773}, "full_moon_with_face"),
957 | newEmoji("sun with face", []int32{127774}, "sun_with_face"),
958 | newEmoji("ringed planet", []int32{129680}, "ringed_planet"),
959 | newEmoji("star", []int32{11088}, "star"),
960 | newEmoji("glowing star", []int32{127775}, "star2"),
961 | newEmoji("shooting star", []int32{127776}, "stars"),
962 | newEmoji("milky way", []int32{127756}, "milky_way"),
963 | newEmoji("cloud", []int32{9729, 65039}, "cloud"),
964 | newEmoji("sun behind cloud", []int32{9925}, "partly_sunny"),
965 | newEmoji("cloud with lightning and rain", []int32{9928, 65039}, "cloud_with_lightning_and_rain"),
966 | newEmoji("sun behind small cloud", []int32{127780, 65039}, "sun_behind_small_cloud"),
967 | newEmoji("sun behind large cloud", []int32{127781, 65039}, "sun_behind_large_cloud"),
968 | newEmoji("sun behind rain cloud", []int32{127782, 65039}, "sun_behind_rain_cloud"),
969 | newEmoji("cloud with rain", []int32{127783, 65039}, "cloud_with_rain"),
970 | newEmoji("cloud with snow", []int32{127784, 65039}, "cloud_with_snow"),
971 | newEmoji("cloud with lightning", []int32{127785, 65039}, "cloud_with_lightning"),
972 | newEmoji("tornado", []int32{127786, 65039}, "tornado"),
973 | newEmoji("fog", []int32{127787, 65039}, "fog"),
974 | newEmoji("wind face", []int32{127788, 65039}, "wind_face"),
975 | newEmoji("cyclone", []int32{127744}, "cyclone"),
976 | newEmoji("rainbow", []int32{127752}, "rainbow"),
977 | newEmoji("closed umbrella", []int32{127746}, "closed_umbrella"),
978 | newEmoji("umbrella", []int32{9730, 65039}, "open_umbrella"),
979 | newEmoji("umbrella with rain drops", []int32{9748}, "umbrella"),
980 | newEmoji("umbrella on ground", []int32{9969, 65039}, "parasol_on_ground"),
981 | newEmoji("high voltage", []int32{9889}, "zap"),
982 | newEmoji("snowflake", []int32{10052, 65039}, "snowflake"),
983 | newEmoji("snowman", []int32{9731, 65039}, "snowman_with_snow"),
984 | newEmoji("snowman without snow", []int32{9924}, "snowman"),
985 | newEmoji("comet", []int32{9732, 65039}, "comet"),
986 | newEmoji("fire", []int32{128293}, "fire"),
987 | newEmoji("droplet", []int32{128167}, "droplet"),
988 | newEmoji("water wave", []int32{127754}, "ocean"),
989 | newEmoji("jack-o-lantern", []int32{127875}, "jack_o_lantern"),
990 | newEmoji("Christmas tree", []int32{127876}, "christmas_tree"),
991 | newEmoji("fireworks", []int32{127878}, "fireworks"),
992 | newEmoji("sparkler", []int32{127879}, "sparkler"),
993 | newEmoji("firecracker", []int32{129512}, "firecracker"),
994 | newEmoji("sparkles", []int32{10024}, "sparkles"),
995 | newEmoji("balloon", []int32{127880}, "balloon"),
996 | newEmoji("party popper", []int32{127881}, "tada"),
997 | newEmoji("confetti ball", []int32{127882}, "confetti_ball"),
998 | newEmoji("tanabata tree", []int32{127883}, "tanabata_tree"),
999 | newEmoji("pine decoration", []int32{127885}, "bamboo"),
1000 | newEmoji("Japanese dolls", []int32{127886}, "dolls"),
1001 | newEmoji("carp streamer", []int32{127887}, "flags"),
1002 | newEmoji("wind chime", []int32{127888}, "wind_chime"),
1003 | newEmoji("moon viewing ceremony", []int32{127889}, "rice_scene"),
1004 | newEmoji("red envelope", []int32{129511}, "red_envelope"),
1005 | newEmoji("ribbon", []int32{127872}, "ribbon"),
1006 | newEmoji("wrapped gift", []int32{127873}, "gift"),
1007 | newEmoji("reminder ribbon", []int32{127895, 65039}, "reminder_ribbon"),
1008 | newEmoji("admission tickets", []int32{127903, 65039}, "tickets"),
1009 | newEmoji("ticket", []int32{127915}, "ticket"),
1010 | newEmoji("military medal", []int32{127894, 65039}, "medal_military"),
1011 | newEmoji("trophy", []int32{127942}, "trophy"),
1012 | newEmoji("sports medal", []int32{127941}, "medal_sports"),
1013 | newEmoji("1st place medal", []int32{129351}, "1st_place_medal"),
1014 | newEmoji("2nd place medal", []int32{129352}, "2nd_place_medal"),
1015 | newEmoji("3rd place medal", []int32{129353}, "3rd_place_medal"),
1016 | newEmoji("soccer ball", []int32{9917}, "soccer"),
1017 | newEmoji("baseball", []int32{9918}, "baseball"),
1018 | newEmoji("softball", []int32{129358}, "softball"),
1019 | newEmoji("basketball", []int32{127936}, "basketball"),
1020 | newEmoji("volleyball", []int32{127952}, "volleyball"),
1021 | newEmoji("american football", []int32{127944}, "football"),
1022 | newEmoji("rugby football", []int32{127945}, "rugby_football"),
1023 | newEmoji("tennis", []int32{127934}, "tennis"),
1024 | newEmoji("flying disc", []int32{129359}, "flying_disc"),
1025 | newEmoji("bowling", []int32{127923}, "bowling"),
1026 | newEmoji("cricket game", []int32{127951}, "cricket_game"),
1027 | newEmoji("field hockey", []int32{127953}, "field_hockey"),
1028 | newEmoji("ice hockey", []int32{127954}, "ice_hockey"),
1029 | newEmoji("lacrosse", []int32{129357}, "lacrosse"),
1030 | newEmoji("ping pong", []int32{127955}, "ping_pong"),
1031 | newEmoji("badminton", []int32{127992}, "badminton"),
1032 | newEmoji("boxing glove", []int32{129354}, "boxing_glove"),
1033 | newEmoji("martial arts uniform", []int32{129355}, "martial_arts_uniform"),
1034 | newEmoji("goal net", []int32{129349}, "goal_net"),
1035 | newEmoji("flag in hole", []int32{9971}, "golf"),
1036 | newEmoji("ice skate", []int32{9976, 65039}, "ice_skate"),
1037 | newEmoji("fishing pole", []int32{127907}, "fishing_pole_and_fish"),
1038 | newEmoji("diving mask", []int32{129343}, "diving_mask"),
1039 | newEmoji("running shirt", []int32{127933}, "running_shirt_with_sash"),
1040 | newEmoji("skis", []int32{127935}, "ski"),
1041 | newEmoji("sled", []int32{128759}, "sled"),
1042 | newEmoji("curling stone", []int32{129356}, "curling_stone"),
1043 | newEmoji("direct hit", []int32{127919}, "dart"),
1044 | newEmoji("yo-yo", []int32{129664}, "yo_yo"),
1045 | newEmoji("kite", []int32{129665}, "kite"),
1046 | newEmoji("pool 8 ball", []int32{127921}, "8ball"),
1047 | newEmoji("crystal ball", []int32{128302}, "crystal_ball"),
1048 | newEmoji("nazar amulet", []int32{129535}, "nazar_amulet"),
1049 | newEmoji("video game", []int32{127918}, "video_game"),
1050 | newEmoji("joystick", []int32{128377, 65039}, "joystick"),
1051 | newEmoji("slot machine", []int32{127920}, "slot_machine"),
1052 | newEmoji("game die", []int32{127922}, "game_die"),
1053 | newEmoji("puzzle piece", []int32{129513}, "jigsaw"),
1054 | newEmoji("teddy bear", []int32{129528}, "teddy_bear"),
1055 | newEmoji("spade suit", []int32{9824, 65039}, "spades"),
1056 | newEmoji("heart suit", []int32{9829, 65039}, "hearts"),
1057 | newEmoji("diamond suit", []int32{9830, 65039}, "diamonds"),
1058 | newEmoji("club suit", []int32{9827, 65039}, "clubs"),
1059 | newEmoji("chess pawn", []int32{9823, 65039}, "chess_pawn"),
1060 | newEmoji("joker", []int32{127183}, "black_joker"),
1061 | newEmoji("mahjong red dragon", []int32{126980}, "mahjong"),
1062 | newEmoji("flower playing cards", []int32{127924}, "flower_playing_cards"),
1063 | newEmoji("performing arts", []int32{127917}, "performing_arts"),
1064 | newEmoji("framed picture", []int32{128444, 65039}, "framed_picture"),
1065 | newEmoji("artist palette", []int32{127912}, "art"),
1066 | newEmoji("thread", []int32{129525}, "thread"),
1067 | newEmoji("yarn", []int32{129526}, "yarn"),
1068 | newEmoji("glasses", []int32{128083}, "eyeglasses"),
1069 | newEmoji("sunglasses", []int32{128374, 65039}, "dark_sunglasses"),
1070 | newEmoji("goggles", []int32{129405}, "goggles"),
1071 | newEmoji("lab coat", []int32{129404}, "lab_coat"),
1072 | newEmoji("safety vest", []int32{129466}, "safety_vest"),
1073 | newEmoji("necktie", []int32{128084}, "necktie"),
1074 | newEmoji("t-shirt", []int32{128085}, "shirt", "tshirt"),
1075 | newEmoji("jeans", []int32{128086}, "jeans"),
1076 | newEmoji("scarf", []int32{129507}, "scarf"),
1077 | newEmoji("gloves", []int32{129508}, "gloves"),
1078 | newEmoji("coat", []int32{129509}, "coat"),
1079 | newEmoji("socks", []int32{129510}, "socks"),
1080 | newEmoji("dress", []int32{128087}, "dress"),
1081 | newEmoji("kimono", []int32{128088}, "kimono"),
1082 | newEmoji("sari", []int32{129403}, "sari"),
1083 | newEmoji("one-piece swimsuit", []int32{129649}, "one_piece_swimsuit"),
1084 | newEmoji("briefs", []int32{129650}, "swim_brief"),
1085 | newEmoji("shorts", []int32{129651}, "shorts"),
1086 | newEmoji("bikini", []int32{128089}, "bikini"),
1087 | newEmoji("woman’s clothes", []int32{128090}, "womans_clothes"),
1088 | newEmoji("purse", []int32{128091}, "purse"),
1089 | newEmoji("handbag", []int32{128092}, "handbag"),
1090 | newEmoji("clutch bag", []int32{128093}, "pouch"),
1091 | newEmoji("shopping bags", []int32{128717, 65039}, "shopping"),
1092 | newEmoji("backpack", []int32{127890}, "school_satchel"),
1093 | newEmoji("man’s shoe", []int32{128094}, "mans_shoe", "shoe"),
1094 | newEmoji("running shoe", []int32{128095}, "athletic_shoe"),
1095 | newEmoji("hiking boot", []int32{129406}, "hiking_boot"),
1096 | newEmoji("flat shoe", []int32{129407}, "flat_shoe"),
1097 | newEmoji("high-heeled shoe", []int32{128096}, "high_heel"),
1098 | newEmoji("woman’s sandal", []int32{128097}, "sandal"),
1099 | newEmoji("ballet shoes", []int32{129648}, "ballet_shoes"),
1100 | newEmoji("woman’s boot", []int32{128098}, "boot"),
1101 | newEmoji("crown", []int32{128081}, "crown"),
1102 | newEmoji("woman’s hat", []int32{128082}, "womans_hat"),
1103 | newEmoji("top hat", []int32{127913}, "tophat"),
1104 | newEmoji("graduation cap", []int32{127891}, "mortar_board"),
1105 | newEmoji("billed cap", []int32{129506}, "billed_cap"),
1106 | newEmoji("rescue worker’s helmet", []int32{9937, 65039}, "rescue_worker_helmet"),
1107 | newEmoji("prayer beads", []int32{128255}, "prayer_beads"),
1108 | newEmoji("lipstick", []int32{128132}, "lipstick"),
1109 | newEmoji("ring", []int32{128141}, "ring"),
1110 | newEmoji("gem stone", []int32{128142}, "gem"),
1111 | newEmoji("muted speaker", []int32{128263}, "mute"),
1112 | newEmoji("speaker low volume", []int32{128264}, "speaker"),
1113 | newEmoji("speaker medium volume", []int32{128265}, "sound"),
1114 | newEmoji("speaker high volume", []int32{128266}, "loud_sound"),
1115 | newEmoji("loudspeaker", []int32{128226}, "loudspeaker"),
1116 | newEmoji("megaphone", []int32{128227}, "mega"),
1117 | newEmoji("postal horn", []int32{128239}, "postal_horn"),
1118 | newEmoji("bell", []int32{128276}, "bell"),
1119 | newEmoji("bell with slash", []int32{128277}, "no_bell"),
1120 | newEmoji("musical score", []int32{127932}, "musical_score"),
1121 | newEmoji("musical note", []int32{127925}, "musical_note"),
1122 | newEmoji("musical notes", []int32{127926}, "notes"),
1123 | newEmoji("studio microphone", []int32{127897, 65039}, "studio_microphone"),
1124 | newEmoji("level slider", []int32{127898, 65039}, "level_slider"),
1125 | newEmoji("control knobs", []int32{127899, 65039}, "control_knobs"),
1126 | newEmoji("microphone", []int32{127908}, "microphone"),
1127 | newEmoji("headphone", []int32{127911}, "headphones"),
1128 | newEmoji("radio", []int32{128251}, "radio"),
1129 | newEmoji("saxophone", []int32{127927}, "saxophone"),
1130 | newEmoji("guitar", []int32{127928}, "guitar"),
1131 | newEmoji("musical keyboard", []int32{127929}, "musical_keyboard"),
1132 | newEmoji("trumpet", []int32{127930}, "trumpet"),
1133 | newEmoji("violin", []int32{127931}, "violin"),
1134 | newEmoji("banjo", []int32{129685}, "banjo"),
1135 | newEmoji("drum", []int32{129345}, "drum"),
1136 | newEmoji("mobile phone", []int32{128241}, "iphone"),
1137 | newEmoji("mobile phone with arrow", []int32{128242}, "calling"),
1138 | newEmoji("telephone", []int32{9742, 65039}, "phone", "telephone"),
1139 | newEmoji("telephone receiver", []int32{128222}, "telephone_receiver"),
1140 | newEmoji("pager", []int32{128223}, "pager"),
1141 | newEmoji("fax machine", []int32{128224}, "fax"),
1142 | newEmoji("battery", []int32{128267}, "battery"),
1143 | newEmoji("electric plug", []int32{128268}, "electric_plug"),
1144 | newEmoji("laptop", []int32{128187}, "computer"),
1145 | newEmoji("desktop computer", []int32{128421, 65039}, "desktop_computer"),
1146 | newEmoji("printer", []int32{128424, 65039}, "printer"),
1147 | newEmoji("keyboard", []int32{9000, 65039}, "keyboard"),
1148 | newEmoji("computer mouse", []int32{128433, 65039}, "computer_mouse"),
1149 | newEmoji("trackball", []int32{128434, 65039}, "trackball"),
1150 | newEmoji("computer disk", []int32{128189}, "minidisc"),
1151 | newEmoji("floppy disk", []int32{128190}, "floppy_disk"),
1152 | newEmoji("optical disk", []int32{128191}, "cd"),
1153 | newEmoji("dvd", []int32{128192}, "dvd"),
1154 | newEmoji("abacus", []int32{129518}, "abacus"),
1155 | newEmoji("movie camera", []int32{127909}, "movie_camera"),
1156 | newEmoji("film frames", []int32{127902, 65039}, "film_strip"),
1157 | newEmoji("film projector", []int32{128253, 65039}, "film_projector"),
1158 | newEmoji("clapper board", []int32{127916}, "clapper"),
1159 | newEmoji("television", []int32{128250}, "tv"),
1160 | newEmoji("camera", []int32{128247}, "camera"),
1161 | newEmoji("camera with flash", []int32{128248}, "camera_flash"),
1162 | newEmoji("video camera", []int32{128249}, "video_camera"),
1163 | newEmoji("videocassette", []int32{128252}, "vhs"),
1164 | newEmoji("magnifying glass tilted left", []int32{128269}, "mag"),
1165 | newEmoji("magnifying glass tilted right", []int32{128270}, "mag_right"),
1166 | newEmoji("candle", []int32{128367, 65039}, "candle"),
1167 | newEmoji("light bulb", []int32{128161}, "bulb"),
1168 | newEmoji("flashlight", []int32{128294}, "flashlight"),
1169 | newEmoji("red paper lantern", []int32{127982}, "izakaya_lantern", "lantern"),
1170 | newEmoji("diya lamp", []int32{129684}, "diya_lamp"),
1171 | newEmoji("notebook with decorative cover", []int32{128212}, "notebook_with_decorative_cover"),
1172 | newEmoji("closed book", []int32{128213}, "closed_book"),
1173 | newEmoji("open book", []int32{128214}, "book", "open_book"),
1174 | newEmoji("green book", []int32{128215}, "green_book"),
1175 | newEmoji("blue book", []int32{128216}, "blue_book"),
1176 | newEmoji("orange book", []int32{128217}, "orange_book"),
1177 | newEmoji("books", []int32{128218}, "books"),
1178 | newEmoji("notebook", []int32{128211}, "notebook"),
1179 | newEmoji("ledger", []int32{128210}, "ledger"),
1180 | newEmoji("page with curl", []int32{128195}, "page_with_curl"),
1181 | newEmoji("scroll", []int32{128220}, "scroll"),
1182 | newEmoji("page facing up", []int32{128196}, "page_facing_up"),
1183 | newEmoji("newspaper", []int32{128240}, "newspaper"),
1184 | newEmoji("rolled-up newspaper", []int32{128478, 65039}, "newspaper_roll"),
1185 | newEmoji("bookmark tabs", []int32{128209}, "bookmark_tabs"),
1186 | newEmoji("bookmark", []int32{128278}, "bookmark"),
1187 | newEmoji("label", []int32{127991, 65039}, "label"),
1188 | newEmoji("money bag", []int32{128176}, "moneybag"),
1189 | newEmoji("yen banknote", []int32{128180}, "yen"),
1190 | newEmoji("dollar banknote", []int32{128181}, "dollar"),
1191 | newEmoji("euro banknote", []int32{128182}, "euro"),
1192 | newEmoji("pound banknote", []int32{128183}, "pound"),
1193 | newEmoji("money with wings", []int32{128184}, "money_with_wings"),
1194 | newEmoji("credit card", []int32{128179}, "credit_card"),
1195 | newEmoji("receipt", []int32{129534}, "receipt"),
1196 | newEmoji("chart increasing with yen", []int32{128185}, "chart"),
1197 | newEmoji("envelope", []int32{9993, 65039}, "envelope"),
1198 | newEmoji("e-mail", []int32{128231}, "email", "e-mail"),
1199 | newEmoji("incoming envelope", []int32{128232}, "incoming_envelope"),
1200 | newEmoji("envelope with arrow", []int32{128233}, "envelope_with_arrow"),
1201 | newEmoji("outbox tray", []int32{128228}, "outbox_tray"),
1202 | newEmoji("inbox tray", []int32{128229}, "inbox_tray"),
1203 | newEmoji("package", []int32{128230}, "package"),
1204 | newEmoji("closed mailbox with raised flag", []int32{128235}, "mailbox"),
1205 | newEmoji("closed mailbox with lowered flag", []int32{128234}, "mailbox_closed"),
1206 | newEmoji("open mailbox with raised flag", []int32{128236}, "mailbox_with_mail"),
1207 | newEmoji("open mailbox with lowered flag", []int32{128237}, "mailbox_with_no_mail"),
1208 | newEmoji("postbox", []int32{128238}, "postbox"),
1209 | newEmoji("ballot box with ballot", []int32{128499, 65039}, "ballot_box"),
1210 | newEmoji("pencil", []int32{9999, 65039}, "pencil2"),
1211 | newEmoji("black nib", []int32{10002, 65039}, "black_nib"),
1212 | newEmoji("fountain pen", []int32{128395, 65039}, "fountain_pen"),
1213 | newEmoji("pen", []int32{128394, 65039}, "pen"),
1214 | newEmoji("paintbrush", []int32{128396, 65039}, "paintbrush"),
1215 | newEmoji("crayon", []int32{128397, 65039}, "crayon"),
1216 | newEmoji("memo", []int32{128221}, "memo", "pencil"),
1217 | newEmoji("briefcase", []int32{128188}, "briefcase"),
1218 | newEmoji("file folder", []int32{128193}, "file_folder"),
1219 | newEmoji("open file folder", []int32{128194}, "open_file_folder"),
1220 | newEmoji("card index dividers", []int32{128450, 65039}, "card_index_dividers"),
1221 | newEmoji("calendar", []int32{128197}, "date"),
1222 | newEmoji("tear-off calendar", []int32{128198}, "calendar"),
1223 | newEmoji("spiral notepad", []int32{128466, 65039}, "spiral_notepad"),
1224 | newEmoji("spiral calendar", []int32{128467, 65039}, "spiral_calendar"),
1225 | newEmoji("card index", []int32{128199}, "card_index"),
1226 | newEmoji("chart increasing", []int32{128200}, "chart_with_upwards_trend"),
1227 | newEmoji("chart decreasing", []int32{128201}, "chart_with_downwards_trend"),
1228 | newEmoji("bar chart", []int32{128202}, "bar_chart"),
1229 | newEmoji("clipboard", []int32{128203}, "clipboard"),
1230 | newEmoji("pushpin", []int32{128204}, "pushpin"),
1231 | newEmoji("round pushpin", []int32{128205}, "round_pushpin"),
1232 | newEmoji("paperclip", []int32{128206}, "paperclip"),
1233 | newEmoji("linked paperclips", []int32{128391, 65039}, "paperclips"),
1234 | newEmoji("straight ruler", []int32{128207}, "straight_ruler"),
1235 | newEmoji("triangular ruler", []int32{128208}, "triangular_ruler"),
1236 | newEmoji("scissors", []int32{9986, 65039}, "scissors"),
1237 | newEmoji("card file box", []int32{128451, 65039}, "card_file_box"),
1238 | newEmoji("file cabinet", []int32{128452, 65039}, "file_cabinet"),
1239 | newEmoji("wastebasket", []int32{128465, 65039}, "wastebasket"),
1240 | newEmoji("locked", []int32{128274}, "lock"),
1241 | newEmoji("unlocked", []int32{128275}, "unlock"),
1242 | newEmoji("locked with pen", []int32{128271}, "lock_with_ink_pen"),
1243 | newEmoji("locked with key", []int32{128272}, "closed_lock_with_key"),
1244 | newEmoji("key", []int32{128273}, "key"),
1245 | newEmoji("old key", []int32{128477, 65039}, "old_key"),
1246 | newEmoji("hammer", []int32{128296}, "hammer"),
1247 | newEmoji("axe", []int32{129683}, "axe"),
1248 | newEmoji("pick", []int32{9935, 65039}, "pick"),
1249 | newEmoji("hammer and pick", []int32{9874, 65039}, "hammer_and_pick"),
1250 | newEmoji("hammer and wrench", []int32{128736, 65039}, "hammer_and_wrench"),
1251 | newEmoji("dagger", []int32{128481, 65039}, "dagger"),
1252 | newEmoji("crossed swords", []int32{9876, 65039}, "crossed_swords"),
1253 | newEmoji("pistol", []int32{128299}, "gun"),
1254 | newEmoji("bow and arrow", []int32{127993}, "bow_and_arrow"),
1255 | newEmoji("shield", []int32{128737, 65039}, "shield"),
1256 | newEmoji("wrench", []int32{128295}, "wrench"),
1257 | newEmoji("nut and bolt", []int32{128297}, "nut_and_bolt"),
1258 | newEmoji("gear", []int32{9881, 65039}, "gear"),
1259 | newEmoji("clamp", []int32{128476, 65039}, "clamp"),
1260 | newEmoji("balance scale", []int32{9878, 65039}, "balance_scale"),
1261 | newEmoji("white cane", []int32{129455}, "probing_cane"),
1262 | newEmoji("link", []int32{128279}, "link"),
1263 | newEmoji("chains", []int32{9939, 65039}, "chains"),
1264 | newEmoji("toolbox", []int32{129520}, "toolbox"),
1265 | newEmoji("magnet", []int32{129522}, "magnet"),
1266 | newEmoji("alembic", []int32{9879, 65039}, "alembic"),
1267 | newEmoji("test tube", []int32{129514}, "test_tube"),
1268 | newEmoji("petri dish", []int32{129515}, "petri_dish"),
1269 | newEmoji("dna", []int32{129516}, "dna"),
1270 | newEmoji("microscope", []int32{128300}, "microscope"),
1271 | newEmoji("telescope", []int32{128301}, "telescope"),
1272 | newEmoji("satellite antenna", []int32{128225}, "satellite"),
1273 | newEmoji("syringe", []int32{128137}, "syringe"),
1274 | newEmoji("drop of blood", []int32{129656}, "drop_of_blood"),
1275 | newEmoji("pill", []int32{128138}, "pill"),
1276 | newEmoji("adhesive bandage", []int32{129657}, "adhesive_bandage"),
1277 | newEmoji("stethoscope", []int32{129658}, "stethoscope"),
1278 | newEmoji("door", []int32{128682}, "door"),
1279 | newEmoji("bed", []int32{128719, 65039}, "bed"),
1280 | newEmoji("couch and lamp", []int32{128715, 65039}, "couch_and_lamp"),
1281 | newEmoji("chair", []int32{129681}, "chair"),
1282 | newEmoji("toilet", []int32{128701}, "toilet"),
1283 | newEmoji("shower", []int32{128703}, "shower"),
1284 | newEmoji("bathtub", []int32{128705}, "bathtub"),
1285 | newEmoji("razor", []int32{129682}, "razor"),
1286 | newEmoji("lotion bottle", []int32{129524}, "lotion_bottle"),
1287 | newEmoji("safety pin", []int32{129527}, "safety_pin"),
1288 | newEmoji("broom", []int32{129529}, "broom"),
1289 | newEmoji("basket", []int32{129530}, "basket"),
1290 | newEmoji("roll of paper", []int32{129531}, "roll_of_paper"),
1291 | newEmoji("soap", []int32{129532}, "soap"),
1292 | newEmoji("sponge", []int32{129533}, "sponge"),
1293 | newEmoji("fire extinguisher", []int32{129519}, "fire_extinguisher"),
1294 | newEmoji("shopping cart", []int32{128722}, "shopping_cart"),
1295 | newEmoji("cigarette", []int32{128684}, "smoking"),
1296 | newEmoji("coffin", []int32{9904, 65039}, "coffin"),
1297 | newEmoji("funeral urn", []int32{9905, 65039}, "funeral_urn"),
1298 | newEmoji("moai", []int32{128511}, "moyai"),
1299 | newEmoji("ATM sign", []int32{127975}, "atm"),
1300 | newEmoji("litter in bin sign", []int32{128686}, "put_litter_in_its_place"),
1301 | newEmoji("potable water", []int32{128688}, "potable_water"),
1302 | newEmoji("wheelchair symbol", []int32{9855}, "wheelchair"),
1303 | newEmoji("men’s room", []int32{128697}, "mens"),
1304 | newEmoji("women’s room", []int32{128698}, "womens"),
1305 | newEmoji("restroom", []int32{128699}, "restroom"),
1306 | newEmoji("baby symbol", []int32{128700}, "baby_symbol"),
1307 | newEmoji("water closet", []int32{128702}, "wc"),
1308 | newEmoji("passport control", []int32{128706}, "passport_control"),
1309 | newEmoji("customs", []int32{128707}, "customs"),
1310 | newEmoji("baggage claim", []int32{128708}, "baggage_claim"),
1311 | newEmoji("left luggage", []int32{128709}, "left_luggage"),
1312 | newEmoji("warning", []int32{9888, 65039}, "warning"),
1313 | newEmoji("children crossing", []int32{128696}, "children_crossing"),
1314 | newEmoji("no entry", []int32{9940}, "no_entry"),
1315 | newEmoji("prohibited", []int32{128683}, "no_entry_sign"),
1316 | newEmoji("no bicycles", []int32{128691}, "no_bicycles"),
1317 | newEmoji("no smoking", []int32{128685}, "no_smoking"),
1318 | newEmoji("no littering", []int32{128687}, "do_not_litter"),
1319 | newEmoji("non-potable water", []int32{128689}, "non-potable_water"),
1320 | newEmoji("no pedestrians", []int32{128695}, "no_pedestrians"),
1321 | newEmoji("no mobile phones", []int32{128245}, "no_mobile_phones"),
1322 | newEmoji("no one under eighteen", []int32{128286}, "underage"),
1323 | newEmoji("radioactive", []int32{9762, 65039}, "radioactive"),
1324 | newEmoji("biohazard", []int32{9763, 65039}, "biohazard"),
1325 | newEmoji("up arrow", []int32{11014, 65039}, "arrow_up"),
1326 | newEmoji("up-right arrow", []int32{8599, 65039}, "arrow_upper_right"),
1327 | newEmoji("right arrow", []int32{10145, 65039}, "arrow_right"),
1328 | newEmoji("down-right arrow", []int32{8600, 65039}, "arrow_lower_right"),
1329 | newEmoji("down arrow", []int32{11015, 65039}, "arrow_down"),
1330 | newEmoji("down-left arrow", []int32{8601, 65039}, "arrow_lower_left"),
1331 | newEmoji("left arrow", []int32{11013, 65039}, "arrow_left"),
1332 | newEmoji("up-left arrow", []int32{8598, 65039}, "arrow_upper_left"),
1333 | newEmoji("up-down arrow", []int32{8597, 65039}, "arrow_up_down"),
1334 | newEmoji("left-right arrow", []int32{8596, 65039}, "left_right_arrow"),
1335 | newEmoji("right arrow curving left", []int32{8617, 65039}, "leftwards_arrow_with_hook"),
1336 | newEmoji("left arrow curving right", []int32{8618, 65039}, "arrow_right_hook"),
1337 | newEmoji("right arrow curving up", []int32{10548, 65039}, "arrow_heading_up"),
1338 | newEmoji("right arrow curving down", []int32{10549, 65039}, "arrow_heading_down"),
1339 | newEmoji("clockwise vertical arrows", []int32{128259}, "arrows_clockwise"),
1340 | newEmoji("counterclockwise arrows button", []int32{128260}, "arrows_counterclockwise"),
1341 | newEmoji("BACK arrow", []int32{128281}, "back"),
1342 | newEmoji("END arrow", []int32{128282}, "end"),
1343 | newEmoji("ON! arrow", []int32{128283}, "on"),
1344 | newEmoji("SOON arrow", []int32{128284}, "soon"),
1345 | newEmoji("TOP arrow", []int32{128285}, "top"),
1346 | newEmoji("place of worship", []int32{128720}, "place_of_worship"),
1347 | newEmoji("atom symbol", []int32{9883, 65039}, "atom_symbol"),
1348 | newEmoji("om", []int32{128329, 65039}, "om"),
1349 | newEmoji("star of David", []int32{10017, 65039}, "star_of_david"),
1350 | newEmoji("wheel of dharma", []int32{9784, 65039}, "wheel_of_dharma"),
1351 | newEmoji("yin yang", []int32{9775, 65039}, "yin_yang"),
1352 | newEmoji("latin cross", []int32{10013, 65039}, "latin_cross"),
1353 | newEmoji("orthodox cross", []int32{9766, 65039}, "orthodox_cross"),
1354 | newEmoji("star and crescent", []int32{9770, 65039}, "star_and_crescent"),
1355 | newEmoji("peace symbol", []int32{9774, 65039}, "peace_symbol"),
1356 | newEmoji("menorah", []int32{128334}, "menorah"),
1357 | newEmoji("dotted six-pointed star", []int32{128303}, "six_pointed_star"),
1358 | newEmoji("Aries", []int32{9800}, "aries"),
1359 | newEmoji("Taurus", []int32{9801}, "taurus"),
1360 | newEmoji("Gemini", []int32{9802}, "gemini"),
1361 | newEmoji("Cancer", []int32{9803}, "cancer"),
1362 | newEmoji("Leo", []int32{9804}, "leo"),
1363 | newEmoji("Virgo", []int32{9805}, "virgo"),
1364 | newEmoji("Libra", []int32{9806}, "libra"),
1365 | newEmoji("Scorpio", []int32{9807}, "scorpius"),
1366 | newEmoji("Sagittarius", []int32{9808}, "sagittarius"),
1367 | newEmoji("Capricorn", []int32{9809}, "capricorn"),
1368 | newEmoji("Aquarius", []int32{9810}, "aquarius"),
1369 | newEmoji("Pisces", []int32{9811}, "pisces"),
1370 | newEmoji("Ophiuchus", []int32{9934}, "ophiuchus"),
1371 | newEmoji("shuffle tracks button", []int32{128256}, "twisted_rightwards_arrows"),
1372 | newEmoji("repeat button", []int32{128257}, "repeat"),
1373 | newEmoji("repeat single button", []int32{128258}, "repeat_one"),
1374 | newEmoji("play button", []int32{9654, 65039}, "arrow_forward"),
1375 | newEmoji("fast-forward button", []int32{9193}, "fast_forward"),
1376 | newEmoji("next track button", []int32{9197, 65039}, "next_track_button"),
1377 | newEmoji("play or pause button", []int32{9199, 65039}, "play_or_pause_button"),
1378 | newEmoji("reverse button", []int32{9664, 65039}, "arrow_backward"),
1379 | newEmoji("fast reverse button", []int32{9194}, "rewind"),
1380 | newEmoji("last track button", []int32{9198, 65039}, "previous_track_button"),
1381 | newEmoji("upwards button", []int32{128316}, "arrow_up_small"),
1382 | newEmoji("fast up button", []int32{9195}, "arrow_double_up"),
1383 | newEmoji("downwards button", []int32{128317}, "arrow_down_small"),
1384 | newEmoji("fast down button", []int32{9196}, "arrow_double_down"),
1385 | newEmoji("pause button", []int32{9208, 65039}, "pause_button"),
1386 | newEmoji("stop button", []int32{9209, 65039}, "stop_button"),
1387 | newEmoji("record button", []int32{9210, 65039}, "record_button"),
1388 | newEmoji("eject button", []int32{9167, 65039}, "eject_button"),
1389 | newEmoji("cinema", []int32{127910}, "cinema"),
1390 | newEmoji("dim button", []int32{128261}, "low_brightness"),
1391 | newEmoji("bright button", []int32{128262}, "high_brightness"),
1392 | newEmoji("antenna bars", []int32{128246}, "signal_strength"),
1393 | newEmoji("vibration mode", []int32{128243}, "vibration_mode"),
1394 | newEmoji("mobile phone off", []int32{128244}, "mobile_phone_off"),
1395 | newEmoji("female sign", []int32{9792, 65039}, "female_sign"),
1396 | newEmoji("male sign", []int32{9794, 65039}, "male_sign"),
1397 | newEmoji("multiply", []int32{10006, 65039}, "heavy_multiplication_x"),
1398 | newEmoji("plus", []int32{10133}, "heavy_plus_sign"),
1399 | newEmoji("minus", []int32{10134}, "heavy_minus_sign"),
1400 | newEmoji("divide", []int32{10135}, "heavy_division_sign"),
1401 | newEmoji("infinity", []int32{9854, 65039}, "infinity"),
1402 | newEmoji("double exclamation mark", []int32{8252, 65039}, "bangbang"),
1403 | newEmoji("exclamation question mark", []int32{8265, 65039}, "interrobang"),
1404 | newEmoji("question mark", []int32{10067}, "question"),
1405 | newEmoji("white question mark", []int32{10068}, "grey_question"),
1406 | newEmoji("white exclamation mark", []int32{10069}, "grey_exclamation"),
1407 | newEmoji("exclamation mark", []int32{10071}, "exclamation", "heavy_exclamation_mark"),
1408 | newEmoji("wavy dash", []int32{12336, 65039}, "wavy_dash"),
1409 | newEmoji("currency exchange", []int32{128177}, "currency_exchange"),
1410 | newEmoji("heavy dollar sign", []int32{128178}, "heavy_dollar_sign"),
1411 | newEmoji("medical symbol", []int32{9877, 65039}, "medical_symbol"),
1412 | newEmoji("recycling symbol", []int32{9851, 65039}, "recycle"),
1413 | newEmoji("fleur-de-lis", []int32{9884, 65039}, "fleur_de_lis"),
1414 | newEmoji("trident emblem", []int32{128305}, "trident"),
1415 | newEmoji("name badge", []int32{128219}, "name_badge"),
1416 | newEmoji("Japanese symbol for beginner", []int32{128304}, "beginner"),
1417 | newEmoji("hollow red circle", []int32{11093}, "o"),
1418 | newEmoji("check mark button", []int32{9989}, "white_check_mark"),
1419 | newEmoji("check box with check", []int32{9745, 65039}, "ballot_box_with_check"),
1420 | newEmoji("check mark", []int32{10004, 65039}, "heavy_check_mark"),
1421 | newEmoji("cross mark", []int32{10060}, "x"),
1422 | newEmoji("cross mark button", []int32{10062}, "negative_squared_cross_mark"),
1423 | newEmoji("curly loop", []int32{10160}, "curly_loop"),
1424 | newEmoji("double curly loop", []int32{10175}, "loop"),
1425 | newEmoji("part alternation mark", []int32{12349, 65039}, "part_alternation_mark"),
1426 | newEmoji("eight-spoked asterisk", []int32{10035, 65039}, "eight_spoked_asterisk"),
1427 | newEmoji("eight-pointed star", []int32{10036, 65039}, "eight_pointed_black_star"),
1428 | newEmoji("sparkle", []int32{10055, 65039}, "sparkle"),
1429 | newEmoji("copyright", []int32{169, 65039}, "copyright"),
1430 | newEmoji("registered", []int32{174, 65039}, "registered"),
1431 | newEmoji("trade mark", []int32{8482, 65039}, "tm"),
1432 | newEmoji("keycap: #", []int32{35, 65039, 8419}, "hash"),
1433 | newEmoji("keycap: *", []int32{42, 65039, 8419}, "asterisk"),
1434 | newEmoji("keycap: 0", []int32{48, 65039, 8419}, "zero"),
1435 | newEmoji("keycap: 1", []int32{49, 65039, 8419}, "one"),
1436 | newEmoji("keycap: 2", []int32{50, 65039, 8419}, "two"),
1437 | newEmoji("keycap: 3", []int32{51, 65039, 8419}, "three"),
1438 | newEmoji("keycap: 4", []int32{52, 65039, 8419}, "four"),
1439 | newEmoji("keycap: 5", []int32{53, 65039, 8419}, "five"),
1440 | newEmoji("keycap: 6", []int32{54, 65039, 8419}, "six"),
1441 | newEmoji("keycap: 7", []int32{55, 65039, 8419}, "seven"),
1442 | newEmoji("keycap: 8", []int32{56, 65039, 8419}, "eight"),
1443 | newEmoji("keycap: 9", []int32{57, 65039, 8419}, "nine"),
1444 | newEmoji("keycap: 10", []int32{128287}, "keycap_ten"),
1445 | newEmoji("input latin uppercase", []int32{128288}, "capital_abcd"),
1446 | newEmoji("input latin lowercase", []int32{128289}, "abcd"),
1447 | newEmoji("input numbers", []int32{128290}, "1234"),
1448 | newEmoji("input symbols", []int32{128291}, "symbols"),
1449 | newEmoji("input latin letters", []int32{128292}, "abc"),
1450 | newEmoji("A button (blood type)", []int32{127344, 65039}, "a"),
1451 | newEmoji("AB button (blood type)", []int32{127374}, "ab"),
1452 | newEmoji("B button (blood type)", []int32{127345, 65039}, "b"),
1453 | newEmoji("CL button", []int32{127377}, "cl"),
1454 | newEmoji("COOL button", []int32{127378}, "cool"),
1455 | newEmoji("FREE button", []int32{127379}, "free"),
1456 | newEmoji("information", []int32{8505, 65039}, "information_source"),
1457 | newEmoji("ID button", []int32{127380}, "id"),
1458 | newEmoji("circled M", []int32{9410, 65039}, "m"),
1459 | newEmoji("NEW button", []int32{127381}, "new"),
1460 | newEmoji("NG button", []int32{127382}, "ng"),
1461 | newEmoji("O button (blood type)", []int32{127358, 65039}, "o2"),
1462 | newEmoji("OK button", []int32{127383}, "ok"),
1463 | newEmoji("P button", []int32{127359, 65039}, "parking"),
1464 | newEmoji("SOS button", []int32{127384}, "sos"),
1465 | newEmoji("UP! button", []int32{127385}, "up"),
1466 | newEmoji("VS button", []int32{127386}, "vs"),
1467 | newEmoji("Japanese “here” button", []int32{127489}, "koko"),
1468 | newEmoji("Japanese “service charge” button", []int32{127490, 65039}, "sa"),
1469 | newEmoji("Japanese “monthly amount” button", []int32{127543, 65039}, "u6708"),
1470 | newEmoji("Japanese “not free of charge” button", []int32{127542}, "u6709"),
1471 | newEmoji("Japanese “reserved” button", []int32{127535}, "u6307"),
1472 | newEmoji("Japanese “bargain” button", []int32{127568}, "ideograph_advantage"),
1473 | newEmoji("Japanese “discount” button", []int32{127545}, "u5272"),
1474 | newEmoji("Japanese “free of charge” button", []int32{127514}, "u7121"),
1475 | newEmoji("Japanese “prohibited” button", []int32{127538}, "u7981"),
1476 | newEmoji("Japanese “acceptable” button", []int32{127569}, "accept"),
1477 | newEmoji("Japanese “application” button", []int32{127544}, "u7533"),
1478 | newEmoji("Japanese “passing grade” button", []int32{127540}, "u5408"),
1479 | newEmoji("Japanese “vacancy” button", []int32{127539}, "u7a7a"),
1480 | newEmoji("Japanese “congratulations” button", []int32{12951, 65039}, "congratulations"),
1481 | newEmoji("Japanese “secret” button", []int32{12953, 65039}, "secret"),
1482 | newEmoji("Japanese “open for business” button", []int32{127546}, "u55b6"),
1483 | newEmoji("Japanese “no vacancy” button", []int32{127541}, "u6e80"),
1484 | newEmoji("red circle", []int32{128308}, "red_circle"),
1485 | newEmoji("orange circle", []int32{128992}, "orange_circle"),
1486 | newEmoji("yellow circle", []int32{128993}, "yellow_circle"),
1487 | newEmoji("green circle", []int32{128994}, "green_circle"),
1488 | newEmoji("blue circle", []int32{128309}, "large_blue_circle"),
1489 | newEmoji("purple circle", []int32{128995}, "purple_circle"),
1490 | newEmoji("brown circle", []int32{128996}, "brown_circle"),
1491 | newEmoji("black circle", []int32{9899}, "black_circle"),
1492 | newEmoji("white circle", []int32{9898}, "white_circle"),
1493 | newEmoji("red square", []int32{128997}, "red_square"),
1494 | newEmoji("orange square", []int32{128999}, "orange_square"),
1495 | newEmoji("yellow square", []int32{129000}, "yellow_square"),
1496 | newEmoji("green square", []int32{129001}, "green_square"),
1497 | newEmoji("blue square", []int32{128998}, "blue_square"),
1498 | newEmoji("purple square", []int32{129002}, "purple_square"),
1499 | newEmoji("brown square", []int32{129003}, "brown_square"),
1500 | newEmoji("black large square", []int32{11035}, "black_large_square"),
1501 | newEmoji("white large square", []int32{11036}, "white_large_square"),
1502 | newEmoji("black medium square", []int32{9724, 65039}, "black_medium_square"),
1503 | newEmoji("white medium square", []int32{9723, 65039}, "white_medium_square"),
1504 | newEmoji("black medium-small square", []int32{9726}, "black_medium_small_square"),
1505 | newEmoji("white medium-small square", []int32{9725}, "white_medium_small_square"),
1506 | newEmoji("black small square", []int32{9642, 65039}, "black_small_square"),
1507 | newEmoji("white small square", []int32{9643, 65039}, "white_small_square"),
1508 | newEmoji("large orange diamond", []int32{128310}, "large_orange_diamond"),
1509 | newEmoji("large blue diamond", []int32{128311}, "large_blue_diamond"),
1510 | newEmoji("small orange diamond", []int32{128312}, "small_orange_diamond"),
1511 | newEmoji("small blue diamond", []int32{128313}, "small_blue_diamond"),
1512 | newEmoji("red triangle pointed up", []int32{128314}, "small_red_triangle"),
1513 | newEmoji("red triangle pointed down", []int32{128315}, "small_red_triangle_down"),
1514 | newEmoji("diamond with a dot", []int32{128160}, "diamond_shape_with_a_dot_inside"),
1515 | newEmoji("radio button", []int32{128280}, "radio_button"),
1516 | newEmoji("white square button", []int32{128307}, "white_square_button"),
1517 | newEmoji("black square button", []int32{128306}, "black_square_button"),
1518 | newEmoji("chequered flag", []int32{127937}, "checkered_flag"),
1519 | newEmoji("triangular flag", []int32{128681}, "triangular_flag_on_post"),
1520 | newEmoji("crossed flags", []int32{127884}, "crossed_flags"),
1521 | newEmoji("black flag", []int32{127988}, "black_flag"),
1522 | newEmoji("white flag", []int32{127987, 65039}, "white_flag"),
1523 | newEmoji("rainbow flag", []int32{127987, 65039, 8205, 127752}, "rainbow_flag"),
1524 | newEmoji("pirate flag", []int32{127988, 8205, 9760, 65039}, "pirate_flag"),
1525 | newEmoji("flag: Ascension Island", []int32{127462, 127464}, "ascension_island"),
1526 | newEmoji("flag: Andorra", []int32{127462, 127465}, "andorra"),
1527 | newEmoji("flag: United Arab Emirates", []int32{127462, 127466}, "united_arab_emirates"),
1528 | newEmoji("flag: Afghanistan", []int32{127462, 127467}, "afghanistan"),
1529 | newEmoji("flag: Antigua & Barbuda", []int32{127462, 127468}, "antigua_barbuda"),
1530 | newEmoji("flag: Anguilla", []int32{127462, 127470}, "anguilla"),
1531 | newEmoji("flag: Albania", []int32{127462, 127473}, "albania"),
1532 | newEmoji("flag: Armenia", []int32{127462, 127474}, "armenia"),
1533 | newEmoji("flag: Angola", []int32{127462, 127476}, "angola"),
1534 | newEmoji("flag: Antarctica", []int32{127462, 127478}, "antarctica"),
1535 | newEmoji("flag: Argentina", []int32{127462, 127479}, "argentina"),
1536 | newEmoji("flag: American Samoa", []int32{127462, 127480}, "american_samoa"),
1537 | newEmoji("flag: Austria", []int32{127462, 127481}, "austria"),
1538 | newEmoji("flag: Australia", []int32{127462, 127482}, "australia"),
1539 | newEmoji("flag: Aruba", []int32{127462, 127484}, "aruba"),
1540 | newEmoji("flag: Åland Islands", []int32{127462, 127485}, "aland_islands"),
1541 | newEmoji("flag: Azerbaijan", []int32{127462, 127487}, "azerbaijan"),
1542 | newEmoji("flag: Bosnia & Herzegovina", []int32{127463, 127462}, "bosnia_herzegovina"),
1543 | newEmoji("flag: Barbados", []int32{127463, 127463}, "barbados"),
1544 | newEmoji("flag: Bangladesh", []int32{127463, 127465}, "bangladesh"),
1545 | newEmoji("flag: Belgium", []int32{127463, 127466}, "belgium"),
1546 | newEmoji("flag: Burkina Faso", []int32{127463, 127467}, "burkina_faso"),
1547 | newEmoji("flag: Bulgaria", []int32{127463, 127468}, "bulgaria"),
1548 | newEmoji("flag: Bahrain", []int32{127463, 127469}, "bahrain"),
1549 | newEmoji("flag: Burundi", []int32{127463, 127470}, "burundi"),
1550 | newEmoji("flag: Benin", []int32{127463, 127471}, "benin"),
1551 | newEmoji("flag: St. Barthélemy", []int32{127463, 127473}, "st_barthelemy"),
1552 | newEmoji("flag: Bermuda", []int32{127463, 127474}, "bermuda"),
1553 | newEmoji("flag: Brunei", []int32{127463, 127475}, "brunei"),
1554 | newEmoji("flag: Bolivia", []int32{127463, 127476}, "bolivia"),
1555 | newEmoji("flag: Caribbean Netherlands", []int32{127463, 127478}, "caribbean_netherlands"),
1556 | newEmoji("flag: Brazil", []int32{127463, 127479}, "brazil"),
1557 | newEmoji("flag: Bahamas", []int32{127463, 127480}, "bahamas"),
1558 | newEmoji("flag: Bhutan", []int32{127463, 127481}, "bhutan"),
1559 | newEmoji("flag: Bouvet Island", []int32{127463, 127483}, "bouvet_island"),
1560 | newEmoji("flag: Botswana", []int32{127463, 127484}, "botswana"),
1561 | newEmoji("flag: Belarus", []int32{127463, 127486}, "belarus"),
1562 | newEmoji("flag: Belize", []int32{127463, 127487}, "belize"),
1563 | newEmoji("flag: Canada", []int32{127464, 127462}, "canada"),
1564 | newEmoji("flag: Cocos (Keeling) Islands", []int32{127464, 127464}, "cocos_islands"),
1565 | newEmoji("flag: Congo - Kinshasa", []int32{127464, 127465}, "congo_kinshasa"),
1566 | newEmoji("flag: Central African Republic", []int32{127464, 127467}, "central_african_republic"),
1567 | newEmoji("flag: Congo - Brazzaville", []int32{127464, 127468}, "congo_brazzaville"),
1568 | newEmoji("flag: Switzerland", []int32{127464, 127469}, "switzerland"),
1569 | newEmoji("flag: Côte d’Ivoire", []int32{127464, 127470}, "cote_divoire"),
1570 | newEmoji("flag: Cook Islands", []int32{127464, 127472}, "cook_islands"),
1571 | newEmoji("flag: Chile", []int32{127464, 127473}, "chile"),
1572 | newEmoji("flag: Cameroon", []int32{127464, 127474}, "cameroon"),
1573 | newEmoji("flag: China", []int32{127464, 127475}, "cn"),
1574 | newEmoji("flag: Colombia", []int32{127464, 127476}, "colombia"),
1575 | newEmoji("flag: Clipperton Island", []int32{127464, 127477}, "clipperton_island"),
1576 | newEmoji("flag: Costa Rica", []int32{127464, 127479}, "costa_rica"),
1577 | newEmoji("flag: Cuba", []int32{127464, 127482}, "cuba"),
1578 | newEmoji("flag: Cape Verde", []int32{127464, 127483}, "cape_verde"),
1579 | newEmoji("flag: Curaçao", []int32{127464, 127484}, "curacao"),
1580 | newEmoji("flag: Christmas Island", []int32{127464, 127485}, "christmas_island"),
1581 | newEmoji("flag: Cyprus", []int32{127464, 127486}, "cyprus"),
1582 | newEmoji("flag: Czechia", []int32{127464, 127487}, "czech_republic"),
1583 | newEmoji("flag: Germany", []int32{127465, 127466}, "de"),
1584 | newEmoji("flag: Diego Garcia", []int32{127465, 127468}, "diego_garcia"),
1585 | newEmoji("flag: Djibouti", []int32{127465, 127471}, "djibouti"),
1586 | newEmoji("flag: Denmark", []int32{127465, 127472}, "denmark"),
1587 | newEmoji("flag: Dominica", []int32{127465, 127474}, "dominica"),
1588 | newEmoji("flag: Dominican Republic", []int32{127465, 127476}, "dominican_republic"),
1589 | newEmoji("flag: Algeria", []int32{127465, 127487}, "algeria"),
1590 | newEmoji("flag: Ceuta & Melilla", []int32{127466, 127462}, "ceuta_melilla"),
1591 | newEmoji("flag: Ecuador", []int32{127466, 127464}, "ecuador"),
1592 | newEmoji("flag: Estonia", []int32{127466, 127466}, "estonia"),
1593 | newEmoji("flag: Egypt", []int32{127466, 127468}, "egypt"),
1594 | newEmoji("flag: Western Sahara", []int32{127466, 127469}, "western_sahara"),
1595 | newEmoji("flag: Eritrea", []int32{127466, 127479}, "eritrea"),
1596 | newEmoji("flag: Spain", []int32{127466, 127480}, "es"),
1597 | newEmoji("flag: Ethiopia", []int32{127466, 127481}, "ethiopia"),
1598 | newEmoji("flag: European Union", []int32{127466, 127482}, "eu", "european_union"),
1599 | newEmoji("flag: Finland", []int32{127467, 127470}, "finland"),
1600 | newEmoji("flag: Fiji", []int32{127467, 127471}, "fiji"),
1601 | newEmoji("flag: Falkland Islands", []int32{127467, 127472}, "falkland_islands"),
1602 | newEmoji("flag: Micronesia", []int32{127467, 127474}, "micronesia"),
1603 | newEmoji("flag: Faroe Islands", []int32{127467, 127476}, "faroe_islands"),
1604 | newEmoji("flag: France", []int32{127467, 127479}, "fr"),
1605 | newEmoji("flag: Gabon", []int32{127468, 127462}, "gabon"),
1606 | newEmoji("flag: United Kingdom", []int32{127468, 127463}, "gb", "uk"),
1607 | newEmoji("flag: Grenada", []int32{127468, 127465}, "grenada"),
1608 | newEmoji("flag: Georgia", []int32{127468, 127466}, "georgia"),
1609 | newEmoji("flag: French Guiana", []int32{127468, 127467}, "french_guiana"),
1610 | newEmoji("flag: Guernsey", []int32{127468, 127468}, "guernsey"),
1611 | newEmoji("flag: Ghana", []int32{127468, 127469}, "ghana"),
1612 | newEmoji("flag: Gibraltar", []int32{127468, 127470}, "gibraltar"),
1613 | newEmoji("flag: Greenland", []int32{127468, 127473}, "greenland"),
1614 | newEmoji("flag: Gambia", []int32{127468, 127474}, "gambia"),
1615 | newEmoji("flag: Guinea", []int32{127468, 127475}, "guinea"),
1616 | newEmoji("flag: Guadeloupe", []int32{127468, 127477}, "guadeloupe"),
1617 | newEmoji("flag: Equatorial Guinea", []int32{127468, 127478}, "equatorial_guinea"),
1618 | newEmoji("flag: Greece", []int32{127468, 127479}, "greece"),
1619 | newEmoji("flag: South Georgia & South Sandwich Islands", []int32{127468, 127480}, "south_georgia_south_sandwich_islands"),
1620 | newEmoji("flag: Guatemala", []int32{127468, 127481}, "guatemala"),
1621 | newEmoji("flag: Guam", []int32{127468, 127482}, "guam"),
1622 | newEmoji("flag: Guinea-Bissau", []int32{127468, 127484}, "guinea_bissau"),
1623 | newEmoji("flag: Guyana", []int32{127468, 127486}, "guyana"),
1624 | newEmoji("flag: Hong Kong SAR China", []int32{127469, 127472}, "hong_kong"),
1625 | newEmoji("flag: Heard & McDonald Islands", []int32{127469, 127474}, "heard_mcdonald_islands"),
1626 | newEmoji("flag: Honduras", []int32{127469, 127475}, "honduras"),
1627 | newEmoji("flag: Croatia", []int32{127469, 127479}, "croatia"),
1628 | newEmoji("flag: Haiti", []int32{127469, 127481}, "haiti"),
1629 | newEmoji("flag: Hungary", []int32{127469, 127482}, "hungary"),
1630 | newEmoji("flag: Canary Islands", []int32{127470, 127464}, "canary_islands"),
1631 | newEmoji("flag: Indonesia", []int32{127470, 127465}, "indonesia"),
1632 | newEmoji("flag: Ireland", []int32{127470, 127466}, "ireland"),
1633 | newEmoji("flag: Israel", []int32{127470, 127473}, "israel"),
1634 | newEmoji("flag: Isle of Man", []int32{127470, 127474}, "isle_of_man"),
1635 | newEmoji("flag: India", []int32{127470, 127475}, "india"),
1636 | newEmoji("flag: British Indian Ocean Territory", []int32{127470, 127476}, "british_indian_ocean_territory"),
1637 | newEmoji("flag: Iraq", []int32{127470, 127478}, "iraq"),
1638 | newEmoji("flag: Iran", []int32{127470, 127479}, "iran"),
1639 | newEmoji("flag: Iceland", []int32{127470, 127480}, "iceland"),
1640 | newEmoji("flag: Italy", []int32{127470, 127481}, "it"),
1641 | newEmoji("flag: Jersey", []int32{127471, 127466}, "jersey"),
1642 | newEmoji("flag: Jamaica", []int32{127471, 127474}, "jamaica"),
1643 | newEmoji("flag: Jordan", []int32{127471, 127476}, "jordan"),
1644 | newEmoji("flag: Japan", []int32{127471, 127477}, "jp"),
1645 | newEmoji("flag: Kenya", []int32{127472, 127466}, "kenya"),
1646 | newEmoji("flag: Kyrgyzstan", []int32{127472, 127468}, "kyrgyzstan"),
1647 | newEmoji("flag: Cambodia", []int32{127472, 127469}, "cambodia"),
1648 | newEmoji("flag: Kiribati", []int32{127472, 127470}, "kiribati"),
1649 | newEmoji("flag: Comoros", []int32{127472, 127474}, "comoros"),
1650 | newEmoji("flag: St. Kitts & Nevis", []int32{127472, 127475}, "st_kitts_nevis"),
1651 | newEmoji("flag: North Korea", []int32{127472, 127477}, "north_korea"),
1652 | newEmoji("flag: South Korea", []int32{127472, 127479}, "kr"),
1653 | newEmoji("flag: Kuwait", []int32{127472, 127484}, "kuwait"),
1654 | newEmoji("flag: Cayman Islands", []int32{127472, 127486}, "cayman_islands"),
1655 | newEmoji("flag: Kazakhstan", []int32{127472, 127487}, "kazakhstan"),
1656 | newEmoji("flag: Laos", []int32{127473, 127462}, "laos"),
1657 | newEmoji("flag: Lebanon", []int32{127473, 127463}, "lebanon"),
1658 | newEmoji("flag: St. Lucia", []int32{127473, 127464}, "st_lucia"),
1659 | newEmoji("flag: Liechtenstein", []int32{127473, 127470}, "liechtenstein"),
1660 | newEmoji("flag: Sri Lanka", []int32{127473, 127472}, "sri_lanka"),
1661 | newEmoji("flag: Liberia", []int32{127473, 127479}, "liberia"),
1662 | newEmoji("flag: Lesotho", []int32{127473, 127480}, "lesotho"),
1663 | newEmoji("flag: Lithuania", []int32{127473, 127481}, "lithuania"),
1664 | newEmoji("flag: Luxembourg", []int32{127473, 127482}, "luxembourg"),
1665 | newEmoji("flag: Latvia", []int32{127473, 127483}, "latvia"),
1666 | newEmoji("flag: Libya", []int32{127473, 127486}, "libya"),
1667 | newEmoji("flag: Morocco", []int32{127474, 127462}, "morocco"),
1668 | newEmoji("flag: Monaco", []int32{127474, 127464}, "monaco"),
1669 | newEmoji("flag: Moldova", []int32{127474, 127465}, "moldova"),
1670 | newEmoji("flag: Montenegro", []int32{127474, 127466}, "montenegro"),
1671 | newEmoji("flag: St. Martin", []int32{127474, 127467}, "st_martin"),
1672 | newEmoji("flag: Madagascar", []int32{127474, 127468}, "madagascar"),
1673 | newEmoji("flag: Marshall Islands", []int32{127474, 127469}, "marshall_islands"),
1674 | newEmoji("flag: North Macedonia", []int32{127474, 127472}, "macedonia"),
1675 | newEmoji("flag: Mali", []int32{127474, 127473}, "mali"),
1676 | newEmoji("flag: Myanmar (Burma)", []int32{127474, 127474}, "myanmar"),
1677 | newEmoji("flag: Mongolia", []int32{127474, 127475}, "mongolia"),
1678 | newEmoji("flag: Macao SAR China", []int32{127474, 127476}, "macau"),
1679 | newEmoji("flag: Northern Mariana Islands", []int32{127474, 127477}, "northern_mariana_islands"),
1680 | newEmoji("flag: Martinique", []int32{127474, 127478}, "martinique"),
1681 | newEmoji("flag: Mauritania", []int32{127474, 127479}, "mauritania"),
1682 | newEmoji("flag: Montserrat", []int32{127474, 127480}, "montserrat"),
1683 | newEmoji("flag: Malta", []int32{127474, 127481}, "malta"),
1684 | newEmoji("flag: Mauritius", []int32{127474, 127482}, "mauritius"),
1685 | newEmoji("flag: Maldives", []int32{127474, 127483}, "maldives"),
1686 | newEmoji("flag: Malawi", []int32{127474, 127484}, "malawi"),
1687 | newEmoji("flag: Mexico", []int32{127474, 127485}, "mexico"),
1688 | newEmoji("flag: Malaysia", []int32{127474, 127486}, "malaysia"),
1689 | newEmoji("flag: Mozambique", []int32{127474, 127487}, "mozambique"),
1690 | newEmoji("flag: Namibia", []int32{127475, 127462}, "namibia"),
1691 | newEmoji("flag: New Caledonia", []int32{127475, 127464}, "new_caledonia"),
1692 | newEmoji("flag: Niger", []int32{127475, 127466}, "niger"),
1693 | newEmoji("flag: Norfolk Island", []int32{127475, 127467}, "norfolk_island"),
1694 | newEmoji("flag: Nigeria", []int32{127475, 127468}, "nigeria"),
1695 | newEmoji("flag: Nicaragua", []int32{127475, 127470}, "nicaragua"),
1696 | newEmoji("flag: Netherlands", []int32{127475, 127473}, "netherlands"),
1697 | newEmoji("flag: Norway", []int32{127475, 127476}, "norway"),
1698 | newEmoji("flag: Nepal", []int32{127475, 127477}, "nepal"),
1699 | newEmoji("flag: Nauru", []int32{127475, 127479}, "nauru"),
1700 | newEmoji("flag: Niue", []int32{127475, 127482}, "niue"),
1701 | newEmoji("flag: New Zealand", []int32{127475, 127487}, "new_zealand"),
1702 | newEmoji("flag: Oman", []int32{127476, 127474}, "oman"),
1703 | newEmoji("flag: Panama", []int32{127477, 127462}, "panama"),
1704 | newEmoji("flag: Peru", []int32{127477, 127466}, "peru"),
1705 | newEmoji("flag: French Polynesia", []int32{127477, 127467}, "french_polynesia"),
1706 | newEmoji("flag: Papua New Guinea", []int32{127477, 127468}, "papua_new_guinea"),
1707 | newEmoji("flag: Philippines", []int32{127477, 127469}, "philippines"),
1708 | newEmoji("flag: Pakistan", []int32{127477, 127472}, "pakistan"),
1709 | newEmoji("flag: Poland", []int32{127477, 127473}, "poland"),
1710 | newEmoji("flag: St. Pierre & Miquelon", []int32{127477, 127474}, "st_pierre_miquelon"),
1711 | newEmoji("flag: Pitcairn Islands", []int32{127477, 127475}, "pitcairn_islands"),
1712 | newEmoji("flag: Puerto Rico", []int32{127477, 127479}, "puerto_rico"),
1713 | newEmoji("flag: Palestinian Territories", []int32{127477, 127480}, "palestinian_territories"),
1714 | newEmoji("flag: Portugal", []int32{127477, 127481}, "portugal"),
1715 | newEmoji("flag: Palau", []int32{127477, 127484}, "palau"),
1716 | newEmoji("flag: Paraguay", []int32{127477, 127486}, "paraguay"),
1717 | newEmoji("flag: Qatar", []int32{127478, 127462}, "qatar"),
1718 | newEmoji("flag: Réunion", []int32{127479, 127466}, "reunion"),
1719 | newEmoji("flag: Romania", []int32{127479, 127476}, "romania"),
1720 | newEmoji("flag: Serbia", []int32{127479, 127480}, "serbia"),
1721 | newEmoji("flag: Russia", []int32{127479, 127482}, "ru"),
1722 | newEmoji("flag: Rwanda", []int32{127479, 127484}, "rwanda"),
1723 | newEmoji("flag: Saudi Arabia", []int32{127480, 127462}, "saudi_arabia"),
1724 | newEmoji("flag: Solomon Islands", []int32{127480, 127463}, "solomon_islands"),
1725 | newEmoji("flag: Seychelles", []int32{127480, 127464}, "seychelles"),
1726 | newEmoji("flag: Sudan", []int32{127480, 127465}, "sudan"),
1727 | newEmoji("flag: Sweden", []int32{127480, 127466}, "sweden"),
1728 | newEmoji("flag: Singapore", []int32{127480, 127468}, "singapore"),
1729 | newEmoji("flag: St. Helena", []int32{127480, 127469}, "st_helena"),
1730 | newEmoji("flag: Slovenia", []int32{127480, 127470}, "slovenia"),
1731 | newEmoji("flag: Svalbard & Jan Mayen", []int32{127480, 127471}, "svalbard_jan_mayen"),
1732 | newEmoji("flag: Slovakia", []int32{127480, 127472}, "slovakia"),
1733 | newEmoji("flag: Sierra Leone", []int32{127480, 127473}, "sierra_leone"),
1734 | newEmoji("flag: San Marino", []int32{127480, 127474}, "san_marino"),
1735 | newEmoji("flag: Senegal", []int32{127480, 127475}, "senegal"),
1736 | newEmoji("flag: Somalia", []int32{127480, 127476}, "somalia"),
1737 | newEmoji("flag: Suriname", []int32{127480, 127479}, "suriname"),
1738 | newEmoji("flag: South Sudan", []int32{127480, 127480}, "south_sudan"),
1739 | newEmoji("flag: São Tomé & Príncipe", []int32{127480, 127481}, "sao_tome_principe"),
1740 | newEmoji("flag: El Salvador", []int32{127480, 127483}, "el_salvador"),
1741 | newEmoji("flag: Sint Maarten", []int32{127480, 127485}, "sint_maarten"),
1742 | newEmoji("flag: Syria", []int32{127480, 127486}, "syria"),
1743 | newEmoji("flag: Eswatini", []int32{127480, 127487}, "swaziland"),
1744 | newEmoji("flag: Tristan da Cunha", []int32{127481, 127462}, "tristan_da_cunha"),
1745 | newEmoji("flag: Turks & Caicos Islands", []int32{127481, 127464}, "turks_caicos_islands"),
1746 | newEmoji("flag: Chad", []int32{127481, 127465}, "chad"),
1747 | newEmoji("flag: French Southern Territories", []int32{127481, 127467}, "french_southern_territories"),
1748 | newEmoji("flag: Togo", []int32{127481, 127468}, "togo"),
1749 | newEmoji("flag: Thailand", []int32{127481, 127469}, "thailand"),
1750 | newEmoji("flag: Tajikistan", []int32{127481, 127471}, "tajikistan"),
1751 | newEmoji("flag: Tokelau", []int32{127481, 127472}, "tokelau"),
1752 | newEmoji("flag: Timor-Leste", []int32{127481, 127473}, "timor_leste"),
1753 | newEmoji("flag: Turkmenistan", []int32{127481, 127474}, "turkmenistan"),
1754 | newEmoji("flag: Tunisia", []int32{127481, 127475}, "tunisia"),
1755 | newEmoji("flag: Tonga", []int32{127481, 127476}, "tonga"),
1756 | newEmoji("flag: Turkey", []int32{127481, 127479}, "tr"),
1757 | newEmoji("flag: Trinidad & Tobago", []int32{127481, 127481}, "trinidad_tobago"),
1758 | newEmoji("flag: Tuvalu", []int32{127481, 127483}, "tuvalu"),
1759 | newEmoji("flag: Taiwan", []int32{127481, 127484}, "taiwan"),
1760 | newEmoji("flag: Tanzania", []int32{127481, 127487}, "tanzania"),
1761 | newEmoji("flag: Ukraine", []int32{127482, 127462}, "ukraine"),
1762 | newEmoji("flag: Uganda", []int32{127482, 127468}, "uganda"),
1763 | newEmoji("flag: U.S. Outlying Islands", []int32{127482, 127474}, "us_outlying_islands"),
1764 | newEmoji("flag: United Nations", []int32{127482, 127475}, "united_nations"),
1765 | newEmoji("flag: United States", []int32{127482, 127480}, "us"),
1766 | newEmoji("flag: Uruguay", []int32{127482, 127486}, "uruguay"),
1767 | newEmoji("flag: Uzbekistan", []int32{127482, 127487}, "uzbekistan"),
1768 | newEmoji("flag: Vatican City", []int32{127483, 127462}, "vatican_city"),
1769 | newEmoji("flag: St. Vincent & Grenadines", []int32{127483, 127464}, "st_vincent_grenadines"),
1770 | newEmoji("flag: Venezuela", []int32{127483, 127466}, "venezuela"),
1771 | newEmoji("flag: British Virgin Islands", []int32{127483, 127468}, "british_virgin_islands"),
1772 | newEmoji("flag: U.S. Virgin Islands", []int32{127483, 127470}, "us_virgin_islands"),
1773 | newEmoji("flag: Vietnam", []int32{127483, 127475}, "vietnam"),
1774 | newEmoji("flag: Vanuatu", []int32{127483, 127482}, "vanuatu"),
1775 | newEmoji("flag: Wallis & Futuna", []int32{127484, 127467}, "wallis_futuna"),
1776 | newEmoji("flag: Samoa", []int32{127484, 127480}, "samoa"),
1777 | newEmoji("flag: Kosovo", []int32{127485, 127472}, "kosovo"),
1778 | newEmoji("flag: Yemen", []int32{127486, 127466}, "yemen"),
1779 | newEmoji("flag: Mayotte", []int32{127486, 127481}, "mayotte"),
1780 | newEmoji("flag: South Africa", []int32{127487, 127462}, "south_africa"),
1781 | newEmoji("flag: Zambia", []int32{127487, 127474}, "zambia"),
1782 | newEmoji("flag: Zimbabwe", []int32{127487, 127484}, "zimbabwe"),
1783 | newEmoji("flag: England", []int32{127988, 917607, 917602, 917605, 917614, 917607, 917631}, "england"),
1784 | newEmoji("flag: Scotland", []int32{127988, 917607, 917602, 917619, 917603, 917620, 917631}, "scotland"),
1785 | newEmoji("flag: Wales", []int32{127988, 917607, 917602, 917623, 917612, 917619, 917631}, "wales"),
1786 | }
1787 | return emojiManager{emojis: emojis}
1788 | }
1789 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/vilmibm/gh-user-status
2 |
3 | go 1.16
4 |
5 | require (
6 | github.com/AlecAivazis/survey/v2 v2.2.16
7 | github.com/cli/safeexec v1.0.0
8 | github.com/spf13/cobra v1.2.1
9 | )
10 |
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2 | cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
3 | cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
4 | cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
5 | cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
6 | cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
7 | cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
8 | cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
9 | cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
10 | cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
11 | cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
12 | cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
13 | cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
14 | cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
15 | cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
16 | cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
17 | cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
18 | cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
19 | cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
20 | cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
21 | cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
22 | cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
23 | cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
24 | cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
25 | cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
26 | cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
27 | cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
28 | cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
29 | cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
30 | cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
31 | cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
32 | cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
33 | cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
34 | cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
35 | cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
36 | cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
37 | cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
38 | cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
39 | dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
40 | github.com/AlecAivazis/survey/v2 v2.2.16 h1:KJ4fLFqY/NfR5OaFLcf4pThxrlV2YCHGCnCHAKLsJ+U=
41 | github.com/AlecAivazis/survey/v2 v2.2.16/go.mod h1:TH2kPCDU3Kqq7pLbnCWwZXDBjnhZtmsCle5EiYDJ2fg=
42 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
43 | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
44 | github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw=
45 | github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
46 | github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
47 | github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
48 | github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
49 | github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
50 | github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
51 | github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
52 | github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
53 | github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
54 | github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
55 | github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
56 | github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI=
57 | github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q=
58 | github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
59 | github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
60 | github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
61 | github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
62 | github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
63 | github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
64 | github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
65 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
66 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
67 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
68 | github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
69 | github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
70 | github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
71 | github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
72 | github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
73 | github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
74 | github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
75 | github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
76 | github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
77 | github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
78 | github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
79 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
80 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
81 | github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
82 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
83 | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
84 | github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
85 | github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
86 | github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
87 | github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
88 | github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
89 | github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
90 | github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
91 | github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
92 | github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
93 | github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
94 | github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
95 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
96 | github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
97 | github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
98 | github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
99 | github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
100 | github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
101 | github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
102 | github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
103 | github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
104 | github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
105 | github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
106 | github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
107 | github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
108 | github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
109 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
110 | github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
111 | github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
112 | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
113 | github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
114 | github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
115 | github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
116 | github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
117 | github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
118 | github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
119 | github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
120 | github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
121 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
122 | github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
123 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
124 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
125 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
126 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
127 | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
128 | github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
129 | github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
130 | github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
131 | github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
132 | github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
133 | github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
134 | github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
135 | github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
136 | github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
137 | github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
138 | github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
139 | github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
140 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
141 | github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
142 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
143 | github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
144 | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
145 | github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
146 | github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
147 | github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
148 | github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
149 | github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
150 | github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
151 | github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
152 | github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
153 | github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
154 | github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
155 | github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
156 | github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
157 | github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
158 | github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
159 | github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
160 | github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
161 | github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
162 | github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
163 | github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
164 | github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
165 | github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
166 | github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ=
167 | github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A=
168 | github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
169 | github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
170 | github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
171 | github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
172 | github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
173 | github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
174 | github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
175 | github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
176 | github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
177 | github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
178 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
179 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
180 | github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
181 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
182 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
183 | github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ=
184 | github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
185 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
186 | github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
187 | github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
188 | github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
189 | github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
190 | github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
191 | github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
192 | github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
193 | github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
194 | github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
195 | github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
196 | github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
197 | github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
198 | github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
199 | github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
200 | github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
201 | github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
202 | github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
203 | github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
204 | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
205 | github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
206 | github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
207 | github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
208 | github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
209 | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
210 | github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
211 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
212 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
213 | github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
214 | github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
215 | github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
216 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
217 | github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
218 | github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
219 | github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
220 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
221 | github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
222 | github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
223 | github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
224 | github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
225 | github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw=
226 | github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
227 | github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
228 | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
229 | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
230 | github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
231 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
232 | github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
233 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
234 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
235 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
236 | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
237 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
238 | github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
239 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
240 | github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
241 | github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
242 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
243 | github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
244 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
245 | github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
246 | go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
247 | go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
248 | go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
249 | go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
250 | go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
251 | go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
252 | go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
253 | go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
254 | go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
255 | go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
256 | go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
257 | go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
258 | go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
259 | golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
260 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
261 | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
262 | golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
263 | golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
264 | golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
265 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
266 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
267 | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
268 | golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
269 | golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
270 | golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
271 | golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
272 | golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
273 | golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
274 | golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
275 | golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
276 | golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
277 | golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
278 | golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
279 | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
280 | golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
281 | golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
282 | golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
283 | golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
284 | golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
285 | golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
286 | golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
287 | golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
288 | golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
289 | golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
290 | golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
291 | golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
292 | golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
293 | golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
294 | golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
295 | golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
296 | golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
297 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
298 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
299 | golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
300 | golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
301 | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
302 | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
303 | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
304 | golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
305 | golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
306 | golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
307 | golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
308 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
309 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
310 | golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
311 | golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
312 | golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
313 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
314 | golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
315 | golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
316 | golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
317 | golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
318 | golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
319 | golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
320 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
321 | golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
322 | golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
323 | golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
324 | golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
325 | golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
326 | golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
327 | golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
328 | golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
329 | golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
330 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
331 | golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
332 | golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
333 | golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
334 | golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
335 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
336 | golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
337 | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
338 | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
339 | golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
340 | golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
341 | golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
342 | golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
343 | golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
344 | golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
345 | golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
346 | golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
347 | golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
348 | golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
349 | golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
350 | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
351 | golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
352 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
353 | golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
354 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
355 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
356 | golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
357 | golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
358 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
359 | golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
360 | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
361 | golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
362 | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
363 | golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
364 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
365 | golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
366 | golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
367 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
368 | golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
369 | golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
370 | golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
371 | golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
372 | golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
373 | golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
374 | golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
375 | golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
376 | golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
377 | golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
378 | golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
379 | golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
380 | golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
381 | golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
382 | golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
383 | golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
384 | golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
385 | golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
386 | golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
387 | golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
388 | golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
389 | golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
390 | golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
391 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
392 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
393 | golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
394 | golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
395 | golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
396 | golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
397 | golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
398 | golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
399 | golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
400 | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
401 | golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
402 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=
403 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
404 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
405 | golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w=
406 | golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
407 | golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
408 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
409 | golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
410 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
411 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
412 | golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
413 | golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
414 | golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
415 | golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
416 | golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
417 | golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
418 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
419 | golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
420 | golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
421 | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
422 | golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
423 | golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
424 | golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
425 | golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
426 | golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
427 | golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
428 | golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
429 | golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
430 | golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
431 | golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
432 | golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
433 | golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
434 | golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
435 | golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
436 | golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
437 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
438 | golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
439 | golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
440 | golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
441 | golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
442 | golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
443 | golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
444 | golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
445 | golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
446 | golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
447 | golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
448 | golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
449 | golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
450 | golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
451 | golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
452 | golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
453 | golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
454 | golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
455 | golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
456 | golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
457 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
458 | golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
459 | golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
460 | golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
461 | golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
462 | golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
463 | golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
464 | golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
465 | golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
466 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
467 | golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
468 | golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
469 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
470 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
471 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
472 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
473 | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
474 | google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
475 | google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
476 | google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
477 | google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
478 | google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
479 | google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
480 | google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
481 | google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
482 | google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
483 | google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
484 | google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
485 | google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
486 | google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
487 | google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
488 | google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
489 | google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
490 | google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
491 | google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
492 | google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
493 | google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
494 | google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
495 | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
496 | google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
497 | google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
498 | google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
499 | google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
500 | google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
501 | google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
502 | google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
503 | google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
504 | google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
505 | google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
506 | google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
507 | google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
508 | google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
509 | google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
510 | google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
511 | google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
512 | google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
513 | google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
514 | google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
515 | google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
516 | google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
517 | google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
518 | google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
519 | google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
520 | google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
521 | google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
522 | google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
523 | google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
524 | google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
525 | google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
526 | google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
527 | google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
528 | google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
529 | google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
530 | google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
531 | google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
532 | google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
533 | google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
534 | google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
535 | google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
536 | google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
537 | google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
538 | google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
539 | google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
540 | google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
541 | google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
542 | google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
543 | google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
544 | google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
545 | google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
546 | google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
547 | google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
548 | google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
549 | google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
550 | google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
551 | google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
552 | google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
553 | google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
554 | google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
555 | google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
556 | google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
557 | google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
558 | google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
559 | google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
560 | google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
561 | google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
562 | google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
563 | google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
564 | google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
565 | google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
566 | google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
567 | google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
568 | google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
569 | google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
570 | google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
571 | google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
572 | google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
573 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
574 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
575 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
576 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
577 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
578 | gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
579 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
580 | gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
581 | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
582 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
583 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
584 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
585 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
586 | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
587 | honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
588 | honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
589 | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
590 | honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
591 | honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
592 | honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
593 | rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
594 | rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
595 | rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
596 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "bytes"
5 | "encoding/json"
6 | "errors"
7 | "fmt"
8 | "os"
9 | "os/exec"
10 | "strings"
11 | "time"
12 |
13 | "github.com/AlecAivazis/survey/v2"
14 | "github.com/cli/safeexec"
15 | "github.com/spf13/cobra"
16 | )
17 |
18 | func rootCmd() *cobra.Command {
19 | return &cobra.Command{
20 | Use: "user-status",
21 | }
22 | }
23 |
24 | type setOptions struct {
25 | Message string
26 | Limited bool
27 | Expiry time.Duration
28 | Emoji string
29 | OrgName string
30 | }
31 |
32 | func prompt(em emojiManager, opts *setOptions) error {
33 | emojiChoices := []string{}
34 | for _, e := range em.Emojis() {
35 | emojiChoices = append(emojiChoices, fmt.Sprintf("%s %s %s", string(e.codepoint), e.names, e.desc))
36 | }
37 | qs := []*survey.Question{
38 | {
39 | Name: "status",
40 | Prompt: &survey.Input{Message: "Status"},
41 | Validate: survey.Required,
42 | },
43 | {
44 | Name: "emoji",
45 | Prompt: &survey.Select{
46 | Message: "Emoji",
47 | Options: emojiChoices,
48 | Default: 147,
49 | },
50 | },
51 | {
52 | Name: "limited",
53 | Prompt: &survey.Confirm{
54 | Message: "Indicate limited availability?",
55 | },
56 | },
57 | {
58 | Name: "expiry",
59 | Prompt: &survey.Select{
60 | Message: "Clear status in",
61 | Options: []string{
62 | "Never",
63 | "30m",
64 | "1h",
65 | "4h",
66 | "24h",
67 | "7d",
68 | },
69 | },
70 | },
71 | }
72 | answers := struct {
73 | Status string
74 | Emoji int
75 | Limited bool
76 | Expiry string
77 | }{}
78 | err := survey.Ask(qs, &answers)
79 | if err != nil {
80 | return err
81 | }
82 |
83 | if answers.Expiry == "Never" {
84 | answers.Expiry = "0s"
85 | }
86 |
87 | if answers.Expiry == "7d" {
88 | answers.Expiry = "168h"
89 | }
90 |
91 | opts.Expiry, _ = time.ParseDuration(answers.Expiry)
92 | opts.Message = answers.Status
93 | opts.Emoji = em.Emojis()[answers.Emoji].names[0]
94 | opts.Limited = answers.Limited
95 |
96 | return nil
97 | }
98 |
99 | func setCmd() *cobra.Command {
100 | opts := setOptions{}
101 | cmd := &cobra.Command{
102 | Use: "set ",
103 | Short: "set your GitHub status",
104 | Args: cobra.MaximumNArgs(1),
105 | RunE: func(cmd *cobra.Command, args []string) error {
106 | if len(args) > 0 {
107 | opts.Message = args[0]
108 | }
109 | return runSet(opts)
110 | },
111 | }
112 | cmd.Flags().StringVarP(&opts.Emoji, "emoji", "e", "thought_balloon", "Emoji for status")
113 | cmd.Flags().BoolVarP(&opts.Limited, "limited", "l", false, "Indicate limited availability")
114 | cmd.Flags().DurationVarP(&opts.Expiry, "expiry", "E", time.Duration(0), "Expire status after this duration")
115 | cmd.Flags().StringVarP(&opts.OrgName, "org", "o", "", "Limit status visibility to an organization")
116 |
117 | return cmd
118 | }
119 |
120 | func runSet(opts setOptions) error {
121 | em := newEmojiManager()
122 | if opts.Message == "" {
123 | err := prompt(em, &opts)
124 | if err != nil {
125 | return err
126 | }
127 | }
128 | // TODO org flag -- punted on this bc i have to resolve an org ID and it didn't feel worth it.
129 | mutation := `mutation($emoji: String!, $message: String!, $limited: Boolean!, $expiry: DateTime) {
130 | changeUserStatus(input: {emoji: $emoji, message: $message, limitedAvailability: $limited, expiresAt: $expiry}) {
131 | status {
132 | message
133 | emoji
134 | }
135 | }
136 | }`
137 |
138 | limited := "false"
139 | if opts.Limited {
140 | limited = "true"
141 | }
142 |
143 | expiry := "null"
144 | if opts.Expiry > time.Duration(0) {
145 | expiry = time.Now().Add(opts.Expiry).Format("2006-01-02T15:04:05-0700")
146 | }
147 |
148 | emoji := fmt.Sprintf(":%s:", opts.Emoji)
149 |
150 | cmdArgs := []string{
151 | "api", "graphql",
152 | "-f", fmt.Sprintf("query=%s", mutation),
153 | "-f", fmt.Sprintf("message=%s", opts.Message),
154 | "-f", fmt.Sprintf("emoji=%s", emoji),
155 | "-F", fmt.Sprintf("limited=%s", limited),
156 | "-F", fmt.Sprintf("expiry=%s", expiry),
157 | }
158 |
159 | out, stderr, err := gh(cmdArgs...)
160 | if err != nil {
161 | if !strings.Contains(stderr.String(), "one of the following scopes: ['user']") {
162 | return err
163 | }
164 |
165 | fmt.Println("! Sorry, this extension requires the 'user' scope.")
166 | answer := false
167 | err = survey.AskOne(
168 | &survey.Confirm{
169 | Message: "Would you like to add the user scope now?",
170 | Default: true,
171 | }, &answer)
172 | if err != nil {
173 | return fmt.Errorf("could not prompt: %w", err)
174 | }
175 | if !answer {
176 | return nil
177 | }
178 | if err = ghWithInput("auth", "refresh", "-s", "user"); err != nil {
179 | return err
180 | }
181 | out, _, err = gh(cmdArgs...)
182 | if err != nil {
183 | return err
184 | }
185 | }
186 |
187 | type response struct {
188 | Data struct {
189 | ChangeUserStatus struct {
190 | Status status
191 | }
192 | }
193 | }
194 | var resp response
195 | err = json.Unmarshal(out.Bytes(), &resp)
196 | if err != nil {
197 | return fmt.Errorf("failed to deserialize JSON: %w", err)
198 | }
199 |
200 | if resp.Data.ChangeUserStatus.Status.Emoji != emoji {
201 | return errors.New("failed to set status. Perhaps try another emoji")
202 | }
203 |
204 | msg := fmt.Sprintf("✓ Status set to %s %s", emoji, opts.Message)
205 | fmt.Println(em.ReplaceAll(msg))
206 |
207 | return nil
208 | }
209 |
210 | type getOptions struct {
211 | Login string
212 | }
213 |
214 | func getCmd() *cobra.Command {
215 | return &cobra.Command{
216 | Use: "get []",
217 | Short: "get a GitHub user's status or your own",
218 | Args: cobra.MaximumNArgs(1),
219 | RunE: func(cmd *cobra.Command, args []string) error {
220 | opts := getOptions{}
221 | if len(args) > 0 {
222 | opts.Login = args[0]
223 | }
224 | return runGet(opts)
225 | },
226 | }
227 | }
228 |
229 | type status struct {
230 | IndicatesLimitedAvailability bool
231 | Message string
232 | Emoji string
233 | }
234 |
235 | func runGet(opts getOptions) error {
236 | em := newEmojiManager()
237 |
238 | s, err := apiStatus(opts.Login)
239 | if err != nil {
240 | return err
241 | }
242 |
243 | availability := ""
244 | if s.IndicatesLimitedAvailability {
245 | availability = "(availability is limited)"
246 | }
247 | msg := fmt.Sprintf("%s %s %s", s.Emoji, s.Message, availability)
248 |
249 | fmt.Println(em.ReplaceAll(msg))
250 |
251 | return nil
252 | }
253 |
254 | func apiStatus(login string) (*status, error) {
255 | key := "user"
256 | query := fmt.Sprintf(
257 | `query { user(login:"%s") { status { indicatesLimitedAvailability message emoji }}}`,
258 | login)
259 | if login == "" {
260 | key = "viewer"
261 | query = `query {viewer { status { indicatesLimitedAvailability message emoji }}}`
262 | }
263 |
264 | args := []string{"api", "graphql", "-f", fmt.Sprintf("query=%s", query)}
265 | sout, _, err := gh(args...)
266 | if err != nil {
267 | return nil, err
268 | }
269 |
270 | resp := map[string]map[string]map[string]status{}
271 |
272 | err = json.Unmarshal(sout.Bytes(), &resp)
273 | if err != nil {
274 | return nil, fmt.Errorf("failed to deserialize JSON: %w", err)
275 | }
276 |
277 | s, ok := resp["data"][key]["status"]
278 | if !ok {
279 | return nil, errors.New("failed to deserialize JSON")
280 | }
281 |
282 | return &s, nil
283 | }
284 |
285 | func main() {
286 | rc := rootCmd()
287 | rc.AddCommand(setCmd())
288 | rc.AddCommand(getCmd())
289 |
290 | if err := rc.Execute(); err != nil {
291 | // TODO not bothering as long as cobra is also printing error
292 | //fmt.Println(err)
293 | os.Exit(1)
294 | }
295 | }
296 |
297 | // gh shells out to gh, returning STDOUT/STDERR and any error
298 | func gh(args ...string) (sout, eout bytes.Buffer, err error) {
299 | ghBin, err := safeexec.LookPath("gh")
300 | if err != nil {
301 | err = fmt.Errorf("could not find gh. Is it installed? error: %w", err)
302 | return
303 | }
304 |
305 | cmd := exec.Command(ghBin, args...)
306 | cmd.Stderr = &eout
307 | cmd.Stdout = &sout
308 |
309 | err = cmd.Run()
310 | if err != nil {
311 | err = fmt.Errorf("failed to run gh. error: %w, stderr: %s", err, eout.String())
312 | return
313 | }
314 |
315 | return
316 | }
317 |
318 | // gh shells out to gh, connecting IO handles for user input
319 | func ghWithInput(args ...string) error {
320 | ghBin, err := safeexec.LookPath("gh")
321 | if err != nil {
322 | return fmt.Errorf("could not find gh. Is it installed? error: %w", err)
323 | }
324 |
325 | cmd := exec.Command(ghBin, args...)
326 | cmd.Stderr = os.Stderr
327 | cmd.Stdout = os.Stdout
328 | cmd.Stdin = os.Stdin
329 |
330 | err = cmd.Run()
331 | if err != nil {
332 | return fmt.Errorf("failed to run gh. error: %w", err)
333 | }
334 |
335 | return nil
336 | }
337 |
--------------------------------------------------------------------------------