├── .gitignore ├── LICENSE ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── public ├── README.md ├── index.html ├── logo.png ├── plugin.json └── preload.js ├── src ├── Finder.vue ├── components │ ├── Detail.vue │ ├── Setting.vue │ └── Tips.vue ├── constant.js ├── handler.js ├── icon.js ├── main.js ├── store.js └── tools.js ├── theme ├── fonts │ ├── element-icons.ttf │ └── element-icons.woff └── index.css └── vue.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | 23 | *.zip 24 | *.upx 25 | /output -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 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 General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mverything 2 | utools 插件, 用于在 macOS 提供与 Windows 中 Everything 插件类似的搜索体验. 3 | 插件基于`mdfind`命令, `mdfind`命令基于 Spotlight 构建索引, 所以, 如果禁用了 Spotlight, 那么插件也将无法使用. 4 | 插件可以被看做是 Spotlight 文件搜索的一个封装, 直接用 Spotlight 应该是相同的效果, 不过 all in one 总是舒服一点. 5 | 6 | 另外科普一下, Everything 是基于 NTFS 文件系统的特性实现实时搜索, 在 macOS 上无论如何也是很难达到 Everything 的速度的, 所以插件直接使用了『回合制搜索』(即输入完成后需要按一下回车再开始搜索)而不是『实时搜索』, 反正也做不到干脆放弃. 7 | 8 | # 版本 9 | - `0.1.6` 10 | 修复新版 utools 下无法打开文件的问题 11 | - `0.1.5` 12 | 1. 适配 utools 1.0.0-beta 13 | 2. 暂时由于新版 API 适配的原因, 原生预览无法使用, 暂时做屏蔽处理 14 | - `0.1.4` 15 | 插件预览可以预览非指定文件了! 16 | 1. 增加视频和音频文件的预览 17 | 2. 增加非指定文件的预览, 即在插件预览中除了原来的四大类型(图片, 音频, 视频, 文本)之外的部分文件也通过截图的方式实现预览, 如pdf, 但毕竟electron就是electron, 受限于性能, 这部分的预览只提供部分内容, 如pdf只预览第一页, 更多的内容通过原生预览操作 18 | - `0.1.3` 19 | 1. 右键菜单增加复制文件和删除文件的操作, 对应快捷键`c`和`delete` 20 | 2. 增加在插件预览的时候, 鼠标可以直接操作搜索结果, 切换预览的文件 21 | 3. 调整搜索结果行距间隔, 使得可以显示更多的结果 22 | 4. 调整一些键盘逻辑和样式 23 | - `0.1.2` 24 | 现在可以使用 macOS 原生预览啦! 25 | 1. 适配 utools 新版本 API 26 | 2. 增加在搜索结果界面点击`esc`键自动选中搜索文本, 方便直接修改 27 | 3. 增加使用 macOS 原生 QuickLook 进行文件预览, 设置中开启 28 | 4. 调整一些键盘逻辑和样式 29 | - `0.1.1` 30 | 1. 增加在预览状态下直接通过上下方向键切换预览的文件 31 | 2. 增加搜索当前文件夹, 可以通过复制文件夹和在文件夹选中状态下直接Tab键触发 32 | 3. 增加自定义文本和图片格式的后缀名, 用于拓展文本和图片格式的预览 33 | 4. 最近时间不多, 可能测试得不够, 可能会有没有照顾到的bug, 请及时反馈 34 | - `0.1.0` 35 | 各项功能的形式基本稳定下来, 以下为主要修改, 使用方法见后文 36 | 1. **键盘操作** 37 | **Space(空格)** 作为预览按键, 贴近 macOS 操作模式 38 | **→ (右方向键)** 改回使用默认方式打开文件 39 | 2. **样式** 40 | 搜索结果将文件名放在首位, 一眼就能看到 41 | 3. **预览** 42 | 增加文本文件, 图片和文件夹的内容预览, 方便直接浏览文件内容确定要找的文件 43 | 4. **快捷搜索** 44 | 增加自定义快捷搜索, 使用**正则表达式**对**全路径**进行过滤, 快捷过滤搜索结果更加随心 45 | 取消`f`和`F`关键词 46 | **仅搜索文件夹**只需要在输入框最前方加上**一个空格** 47 | **仅搜索文件**只需要在输入框最前面加上**两个空格** 48 | 以上两种过滤可以和自定义快捷搜索组合使用 49 | - `0.0.5` 50 | 1. 优化按键操作, 详情面板可通过`esc`键关闭并激活输入框, 左方向键可以也可以关闭详情面板 51 | - `0.0.4` 52 | 1. 增加文件详情面板 53 | 2. 修改快捷键逻辑, 单击右方向键为打开文件详情, 双击右方向键用默认方式打开文件 54 | 3. 修改升序降序按钮为图标 55 | - `0.0.3` 56 | 1. 增加操作提示说明板面 57 | 2. 增加按照文件名, 大小等信息过滤的按钮 58 | 3. 美化一些样式 59 | - `0.0.2` 60 | 调整不和谐的样式(底部蓝条, 宽度过大导致出现滚动条) 61 | - `0.0.1` 62 | 基本功能 63 | 64 | # 下载 65 | [插件主页](https://yuanliao.info/d/595/13) - [下载最新版](https://github.com/lanyuanxiaoyao/Mverything/releases/latest) - [历史版本](https://github.com/lanyuanxiaoyao/Mverything/releases) 66 | 67 | # 源码 68 | 没啥好敝帚自珍的. 69 | 70 | 传送门 → [Mverything](https://github.com/lanyuanxiaoyao/Mverything) 71 | 72 |
73 | GitHub package.json version 74 | GitHub release version 75 | GitHub top language 76 | GitHub 77 | GitHub stars 78 |
79 | 80 | # 操作 81 | ## 关键字 82 | `find`, `查找` 83 | 84 | ## 基本操作 85 | | 操作 | 功能 | 86 | | --- | --- | 87 | | `Enter(回车)` | 搜索 | 88 | | `Space(空格)` | 预览 | 89 | | `Arrow Right(右方向键)` | 默认方式打开文件 | 90 | | `Mouse Left(鼠标左键双击)` | 默认方式打开文件 | 91 | | `Mouse Right(鼠标右键单击)` | 快捷菜单 | 92 | 93 | ## 快捷搜索 94 | ### 默认 95 | 插件自带的快捷搜索有两个: 仅搜索文件夹和仅搜索文件 96 | **仅搜索文件夹**只需要在输入框最前方加上**一个空格** 97 | 98 | ![](https://s2.ax1x.com/2019/08/10/eOreXj.png) 99 | 100 | **仅搜索文件**只需要在输入框最前面加上**两个空格** 101 | 102 | ![](https://s2.ax1x.com/2019/08/10/eOrK7q.png) 103 | 104 | ### 自定义 105 | 可以在设置中自定义属于自己的快捷搜索, 自定义快捷搜索使用正则表达式对搜索结果的全路径进行匹配, 全路径的意思即包含完整路径和文件名的单行文本, 如`/Users/lanyuanxiaoyao/Library/Mobile Documents/iCloud~QReader~MarginStudy/Documents/Head First Java 第二版.pdf`, 这就是这个PDF文件的全路径, 自定义的快捷搜索将会对这样的文本进行匹配. 106 | 107 | 下面将使用一个例子来说明. 108 | 如果我想要在搜索结果里面过滤出图片文件, 那么可以在自定义快捷搜索里面添加: `pic&png|jpg|jpeg|bmp|svg|webp$`, 其中以`&`作为分隔符, `pic`是快捷搜索时使用的关键字, `\.(png|jpg|jpeg|bmp|svg|webp)$`为执行快捷搜索时使用的正则表达式 109 | 110 | ![](https://s2.ax1x.com/2019/08/10/eOsgRU.png) 111 | 112 | ![](https://s2.ax1x.com/2019/08/10/eOs5ZR.png) 113 | 114 | 添加完成后, 就可以在搜索的时候使用这个快捷搜索了, 如下图所示, 在输入框中输入`pic:icon`, 就会把带有"icon"的图片全部搜索出来了. 115 | 116 | ![](https://s2.ax1x.com/2019/08/10/eOsId1.png) 117 | 118 | *正则表达式的规则不再赘述, 可以自行百度* 119 | 120 | ### 其他 121 | 值得一提的是, 默认的快捷搜索和自定义的快捷搜索是可以组合使用的 122 | 123 | ## 高级查询 124 | 所谓高级查询就是`mdfind`命令自己支持的一些高级查询, 如`mdfind "kMDItemContentType=public.folder"`, 但是平心而论, 这些关键字实在是...一言难尽, 所以这些高级用法大家自己去找吧. 125 | 126 | ## 预览 127 | 目前可以对文本文件, 图片和文件夹进行预览 128 | 129 | ## 文本 130 | ![](https://s2.ax1x.com/2019/08/10/eO6bKe.png) 131 | 132 | ## 图片 133 | ![](https://s2.ax1x.com/2019/08/10/eO6XVA.png) 134 | 135 | ## 文件夹 136 | ![](https://s2.ax1x.com/2019/08/10/eOc9xS.png) 137 | 138 | # 截图 139 | 140 | ![安装界面](https://s2.ax1x.com/2019/08/08/eHPtb9.png) 141 | 142 | ![主界面](https://s2.ax1x.com/2019/08/10/eOctG6.png) 143 | 144 | ![搜索界面](https://s2.ax1x.com/2019/08/10/eOc2z8.png) 145 | 146 | ![设置界面](https://s2.ax1x.com/2019/08/10/eOcWQS.png) 147 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/app"] 3 | }; 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utools-find", 3 | "version": "0.1.6", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "chardet": "^0.8.0", 12 | "core-js": "^2.6.5", 13 | "element-ui": "^2.11.1", 14 | "iconv-lite": "^0.5.0", 15 | "node-spotlight": "^0.1.3", 16 | "vue": "^2.6.10", 17 | "vuex": "^3.1.1", 18 | "vxe-table": "^2.5.8", 19 | "xe-utils": "^2.2.2" 20 | }, 21 | "devDependencies": { 22 | "@vue/cli-plugin-babel": "^3.10.0", 23 | "@vue/cli-plugin-eslint": "^3.10.0", 24 | "@vue/cli-service": "^3.10.0", 25 | "@vue/eslint-config-prettier": "^5.0.0", 26 | "babel-eslint": "^10.0.1", 27 | "eslint": "^5.16.0", 28 | "eslint-plugin-prettier": "^3.1.0", 29 | "eslint-plugin-vue": "^5.0.0", 30 | "prettier": "^1.18.2", 31 | "uglifyjs-webpack-plugin": "^2.2.0", 32 | "vue-template-compiler": "^2.6.10" 33 | }, 34 | "eslintConfig": { 35 | "root": true, 36 | "env": { 37 | "node": true 38 | }, 39 | "extends": [ 40 | "plugin:vue/essential", 41 | "@vue/prettier" 42 | ], 43 | "rules": {}, 44 | "parserOptions": { 45 | "parser": "babel-eslint" 46 | } 47 | }, 48 | "postcss": { 49 | "plugins": { 50 | "autoprefixer": {} 51 | } 52 | }, 53 | "browserslist": [ 54 | "> 1%", 55 | "last 2 versions" 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /public/README.md: -------------------------------------------------------------------------------- 1 | # Mverything 2 | utools 插件, 用于在 macOS 提供与 Windows 中 Everything 插件类似的搜索体验. 3 | 插件基于`mdfind`命令, `mdfind`命令基于 Spotlight 构建索引, 所以, 如果禁用了 Spotlight, 那么插件也将无法使用. 4 | 插件可以被看做是 Spotlight 文件搜索的一个封装, 直接用 Spotlight 应该是相同的效果, 不过 all in one 总是舒服一点. 5 | 6 | 另外科普一下, Everything 是基于 NTFS 文件系统的特性实现实时搜索, 在 macOS 上无论如何也是很难达到 Everything 的速度的, 所以插件直接使用了『回合制搜索』(即输入完成后需要按一下回车再开始搜索)而不是『实时搜索』, 反正也做不到干脆放弃. 7 | 8 | # 版本 9 | - `0.1.6` 10 | 修复新版 utools 下无法打开文件的问题 11 | - `0.1.5` 12 | 1. 适配 utools 1.0.0-beta 13 | 2. 暂时由于新版 API 适配的原因, 原生预览无法使用, 暂时做屏蔽处理 14 | - `0.1.4` 15 | 插件预览可以预览非指定文件了! 16 | 1. 增加视频和音频文件的预览 17 | 2. 增加非指定文件的预览, 即在插件预览中除了原来的四大类型(图片, 音频, 视频, 文本)之外的部分文件也通过截图的方式实现预览, 如pdf, 但毕竟electron就是electron, 受限于性能, 这部分的预览只提供部分内容, 如pdf只预览第一页, 更多的内容通过原生预览操作 18 | - `0.1.3` 19 | 1. 右键菜单增加复制文件和删除文件的操作, 对应快捷键`c`和`delete` 20 | 2. 增加在插件预览的时候, 鼠标可以直接操作搜索结果, 切换预览的文件 21 | 3. 调整搜索结果行距间隔, 使得可以显示更多的结果 22 | 4. 调整一些键盘逻辑和样式 23 | - `0.1.2` 24 | 现在可以使用 macOS 原生预览啦! 25 | 1. 适配 utools 新版本 API 26 | 2. 增加在搜索结果界面点击`esc`键自动全选中搜索文本, 方便直接修改 27 | 3. 增加使用 macOS 原生 QuickLook 进行文件预览, 设置中开启 28 | 4. 调整一些键盘逻辑和样式 29 | - `0.1.1` 30 | 1. 增加在预览状态下直接通过上下方向键切换预览的文件 31 | 2. 增加搜索当前文件夹, 可以通过复制文件夹和在文件夹选中状态下直接Tab键触发 32 | 3. 增加自定义文本和图片格式的后缀名, 用于拓展文本和图片格式的预览 33 | 4. 最近时间不多, 可能测试得不够, 可能会有没有照顾到的bug, 请及时反馈 34 | - `0.1.0` 35 | 各项功能的形式基本稳定下来, 以下为主要修改, 使用方法见后文 36 | 1. **键盘操作** 37 | **Space(空格)** 作为预览按键, 贴近 macOS 操作模式 38 | **→ (右方向键)** 改回使用默认方式打开文件 39 | 2. **样式** 40 | 搜索结果将文件名放在首位, 一眼就能看到 41 | 3. **预览** 42 | 增加文本文件, 图片和文件夹的内容预览, 方便直接浏览文件内容确定要找的文件 43 | 4. **快捷搜索** 44 | 增加自定义快捷搜索, 使用**正则表达式**对**全路径**进行过滤, 快捷过滤搜索结果更加随心 45 | 取消`f`和`F`关键词 46 | **仅搜索文件夹**只需要在输入框最前方加上**一个空格** 47 | **仅搜索文件**只需要在输入框最前面加上**两个空格** 48 | 以上两种过滤可以和自定义快捷搜索组合使用 49 | - `0.0.5` 50 | 1. 优化按键操作, 详情面板可通过`esc`键关闭并激活输入框, 左方向键可以也可以关闭详情面板 51 | - `0.0.4` 52 | 1. 增加文件详情面板 53 | 2. 修改快捷键逻辑, 单击右方向键为打开文件详情, 双击右方向键用默认方式打开文件 54 | 3. 修改升序降序按钮为图标 55 | - `0.0.3` 56 | 1. 增加操作提示说明板面 57 | 2. 增加按照文件名, 大小等信息过滤的按钮 58 | 3. 美化一些样式 59 | - `0.0.2` 60 | 调整不和谐的样式(底部蓝条, 宽度过大导致出现滚动条) 61 | - `0.0.1` 62 | 基本功能 63 | 64 | # 下载 65 | [插件主页](https://yuanliao.info/d/595/13) - [下载最新版](https://github.com/lanyuanxiaoyao/Mverything/releases/latest) - [历史版本](https://github.com/lanyuanxiaoyao/Mverything/releases) 66 | 67 | # 源码 68 | 没啥好敝帚自珍的. 69 | 70 | 传送门 → [Mverything](https://github.com/lanyuanxiaoyao/Mverything) 71 | 72 |
73 | GitHub package.json version 74 | GitHub release version 75 | GitHub top language 76 | GitHub 77 | GitHub stars 78 |
79 | 80 | # 操作 81 | ## 关键字 82 | `find`, `查找` 83 | 84 | ## 基本操作 85 | | 操作 | 功能 | 86 | | --- | --- | 87 | | `Enter(回车)` | 搜索 | 88 | | `Space(空格)` | 预览 | 89 | | `Arrow Right(右方向键)` | 默认方式打开文件 | 90 | | `Mouse Left(鼠标左键双击)` | 默认方式打开文件 | 91 | | `Mouse Right(鼠标右键单击)` | 快捷菜单 | 92 | 93 | ## 快捷搜索 94 | ### 默认 95 | 插件自带的快捷搜索有两个: 仅搜索文件夹和仅搜索文件 96 | **仅搜索文件夹**只需要在输入框最前方加上**一个空格** 97 | 98 | ![](https://s2.ax1x.com/2019/08/10/eOreXj.png) 99 | 100 | **仅搜索文件**只需要在输入框最前面加上**两个空格** 101 | 102 | ![](https://s2.ax1x.com/2019/08/10/eOrK7q.png) 103 | 104 | ### 自定义 105 | 可以在设置中自定义属于自己的快捷搜索, 自定义快捷搜索使用正则表达式对搜索结果的全路径进行匹配, 全路径的意思即包含完整路径和文件名的单行文本, 如`/Users/lanyuanxiaoyao/Library/Mobile Documents/iCloud~QReader~MarginStudy/Documents/Head First Java 第二版.pdf`, 这就是这个PDF文件的全路径, 自定义的快捷搜索将会对这样的文本进行匹配. 106 | 107 | 下面将使用一个例子来说明. 108 | 如果我想要在搜索结果里面过滤出图片文件, 那么可以在自定义快捷搜索里面添加: `pic&png|jpg|jpeg|bmp|svg|webp$`, 其中以`&`作为分隔符, `pic`是快捷搜索时使用的关键字, `\.(png|jpg|jpeg|bmp|svg|webp)$`为执行快捷搜索时使用的正则表达式 109 | 110 | ![](https://s2.ax1x.com/2019/08/10/eOsgRU.png) 111 | 112 | ![](https://s2.ax1x.com/2019/08/10/eOs5ZR.png) 113 | 114 | 添加完成后, 就可以在搜索的时候使用这个快捷搜索了, 如下图所示, 在输入框中输入`pic:icon`, 就会把带有"icon"的图片全部搜索出来了. 115 | 116 | ![](https://s2.ax1x.com/2019/08/10/eOsId1.png) 117 | 118 | *正则表达式的规则不再赘述, 可以自行百度* 119 | 120 | ### 其他 121 | 值得一提的是, 默认的快捷搜索和自定义的快捷搜索是可以组合使用的 122 | 123 | ## 高级查询 124 | 所谓高级查询就是`mdfind`命令自己支持的一些高级查询, 如`mdfind "kMDItemContentType=public.folder"`, 但是平心而论, 这些关键字实在是...一言难尽, 所以这些高级用法大家自己去找吧. 125 | 126 | ## 预览 127 | 目前可以对文本文件, 图片和文件夹进行预览 128 | 129 | ## 文本 130 | ![](https://s2.ax1x.com/2019/08/10/eO6bKe.png) 131 | 132 | ## 图片 133 | ![](https://s2.ax1x.com/2019/08/10/eO6XVA.png) 134 | 135 | ## 文件夹 136 | ![](https://s2.ax1x.com/2019/08/10/eOc9xS.png) 137 | 138 | # 截图 139 | 140 | ![安装界面](https://s2.ax1x.com/2019/08/08/eHPtb9.png) 141 | 142 | ![主界面](https://s2.ax1x.com/2019/08/10/eOctG6.png) 143 | 144 | ![搜索界面](https://s2.ax1x.com/2019/08/10/eOc2z8.png) 145 | 146 | ![设置界面](https://s2.ax1x.com/2019/08/10/eOcWQS.png) 147 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Mverything 7 | 13 | 14 | 15 | 16 | 20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanyuanxiaoyao/Mverything/956c4e3fedb3325b03cce46b51f6f179e2d2986e/public/logo.png -------------------------------------------------------------------------------- /public/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "pluginName": "Mverything", 3 | "author": "lanyuanxiaoyao", 4 | "homepage": "http://lanyuanxiaoyao.com", 5 | "description": "Mac 上的 Everything", 6 | "version": "0.1.6", 7 | "logo": "logo.png", 8 | "main": "index.html", 9 | "preload": "preload.js", 10 | "platform": ["darwin"], 11 | "pluginSetting": { 12 | "single": true, 13 | "height": 590 14 | }, 15 | "features": [{ 16 | "code": "find", 17 | "explain": "查找 Mac 上的文件", 18 | "cmds": [ 19 | "find", 20 | "查找", 21 | { 22 | "type": "files", 23 | "label": "在此文件夹中搜索", 24 | "fileType": "directory", 25 | "minNum": 1, 26 | "maxNum": 1 27 | }, 28 | { 29 | "type": "window", 30 | "label": "在此文件夹中搜索", 31 | "match": { 32 | "bundleId": "com.apple.finder" 33 | } 34 | } 35 | ] 36 | }] 37 | } -------------------------------------------------------------------------------- /src/Finder.vue: -------------------------------------------------------------------------------- 1 | 324 | 325 | 911 | 912 | 968 | 980 | 981 | -------------------------------------------------------------------------------- /src/components/Detail.vue: -------------------------------------------------------------------------------- 1 | 110 | 111 | 174 | 175 | -------------------------------------------------------------------------------- /src/components/Setting.vue: -------------------------------------------------------------------------------- 1 | 140 | 141 | 235 | 236 | -------------------------------------------------------------------------------- /src/components/Tips.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 82 | 83 | -------------------------------------------------------------------------------- /src/constant.js: -------------------------------------------------------------------------------- 1 | export default { 2 | picture: "picture", 3 | text: "text", 4 | typeMap() { 5 | return { 6 | jpg: this.picture, 7 | png: this.picture, 8 | jpeg: this.picture, 9 | bmp: this.picture, 10 | svg: this.picture, 11 | webp: this.picture, 12 | ico: this.picture, 13 | gif: this.picture, 14 | txt: this.text 15 | }; 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /src/handler.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | import icons from "./icon"; 3 | export default { 4 | handle(items, highFilter, keyWord, keyMap) { 5 | console.log(highFilter, keyWord); 6 | 7 | if (highFilter !== "") { 8 | switch (highFilter) { 9 | // file 10 | case "f": 11 | items = items.filter( 12 | item => item.kMDItemContentType !== "public.folder" 13 | ); 14 | break; 15 | // folder 16 | case "F": 17 | items = items.filter( 18 | item => item.kMDItemContentType === "public.folder" 19 | ); 20 | } 21 | } 22 | 23 | if (keyWord !== "") { 24 | var regex = keyMap[keyWord]; 25 | if (regex) { 26 | items = items.filter(item => item.path.search(keyMap[keyWord]) > 0); 27 | } 28 | } 29 | 30 | var data = []; 31 | var length = items.length; 32 | for (var i = 0; i < length; i++) { 33 | var item = items[i]; 34 | if (item === undefined) { 35 | continue; 36 | } 37 | 38 | var icon = icons.icon(item); 39 | data.push({ 40 | path: item.path, 41 | icon: icon, 42 | name: item.kMDItemFSName, 43 | size: item.kMDItemFSSize, 44 | type: item.kMDItemContentType, 45 | kind: item.kMDItemKind, 46 | count: item.kMDItemFSNodeCount, 47 | createDate: item.kMDItemFSCreationDate, 48 | updateDate: item.kMDItemFSContentChangeDate, 49 | text: "", 50 | thumbnails: "", 51 | preview: "", 52 | files: [] 53 | }); 54 | } 55 | 56 | return data; 57 | }, 58 | sort(data, field, type) { 59 | return data.sort(this.sortByField(field, type)); 60 | }, 61 | sortByField(field, type) { 62 | return (a, b) => { 63 | var f1 = a[field]; 64 | var f2 = b[field]; 65 | return (f1 < f2 ? 1 : f1 > f2 ? -1 : 0) * type; 66 | }; 67 | } 68 | }; 69 | -------------------------------------------------------------------------------- /src/icon.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | import Tools from "./tools"; 3 | 4 | export default { 5 | icons() { 6 | return { 7 | word: 8 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAb1BMVEUAAAAYdtIZdtL6+vrj8v00htjL5PjO4fP09/n4+frd6fW81e9+seVdnt4kfdS40+6wz+2qy+yMuuZSmN0whNYsgdYeedTs8vemyeuHt+ZLlNtFkNrS4/PI3fHA2PCixuqexOp4reNuqOFjod9ZnN5mjmmSAAAAAnRSTlMAiJXwxioAAADJSURBVEjH7dK7koJAEIXh3f53nQEBAcX7Xd//GRUNOrFqjolF4AlOTfJNB90/A469zO+b4N+FBkYuNPDnQgQuROBCBC5E4EIELkTgQgQuNOD5gg+DcQgzsybs5s93GkBp8wgb62CRntDCytbAyaYwToMSaiuApu82DTrIraHvJZRpYDlZlROhCzATQA0lLOESyU0ABUxgE/uuFbCGjIXt702hgH4HTKwFmCrAArCyK5BVEjg+vq4y2JoEzhCrx6DDMM77Cz4LhpsbTWYPsaamtJkAAAAASUVORK5CYII=", 9 | powerpoint: 10 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAATlBMVEUAAAD/bQD/bQD/////8+D/cgj/fh7/48b/dA3/4sz/cAX/yJ7/8OT/2b3/0a//zqr/t4H//Pr/3ML/zKb/xZn/uof/pWL/pWH/mUz/jDbr9OTtAAAAAnRSTlMAiJXwxioAAACFSURBVEjH7dPJCoAwDEVRTRxb59n//1FTCLhx0YcgFXoX7epQGkgScPRYCoJCBARKERDInICACgCoAIAKAKgAgAoAqACAE37gLoLPgaldkz18Qc5aZ/yBXfqRefAHFdHO3ECgkMsgYINeaNtazhWc0gxMqevtcBIhn5Z+DALchwhegHC7APx/DM504b2GAAAAAElFTkSuQmCC", 11 | ogg: 12 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAbFBMVEUAAAD/wAb/wgf/xgD/wQf/wQj/wQb/wQfEcgX/8+DzsQbIdgX/yzP9vgfwrQb/3oX/3H/glwbrpgb7uwbPgQX2tAf4twfMfQXoogbKegXtqAblngbVhwbZjgXdkwbXiwXThgbimwbShAb/xyCzBLkBAAAAB3RSTlMAVbsIuT6drnBT7QAAAg1JREFUaN7t1tly2zAMBdAsdc2KEVtqjajV7v//YwmDIprlxUiQZCa4L9bcGfOIpCj7RqP5uBzursnPexZye7wqP+4lEVKEkQdUZJHff1CRRX6RIoiQIoiQIoiQIomQIomQIomQIomQIomQIomQIomQIomQIomQIomQIomQIomQIoeQciuEkPLuyN+Hl7kC4UcRRRRRRBFFPgkpi+C6J03rgqv/Lzos2Eg3WxPTVLl57A3k7J4VTeAiRSQwc5rXavaM2My5OPGQDowUf2m8oRRQnAzFMRC8SzsWYYMhWlDhYnNtBUu0xqLGpcNiYiA4QoBFamAqaSJ9GS8c8PFijJ8DFIWJKRlIBUPi5sLOxs9z3guL6wVbtFwKmIpjIEve8Dbdp80jjd77uIBDLCq8j1gUDAS2xNPCdccy7TeF9pt7TiZ6LnH0ZOWg2r4ZGV9D2uKSOiFUvCfSmEuqjGxYPH5l5Pme4JjWIpL642otF5n3Q5CnQA9Tj4jF4xrTMBGP7w46z3gsCKGh+UjAd0fMKZ34FY8nIUu6Dz5S2nQauyHtTrWvV5nmFKAIqPIQfLGf/QKYrXHsmNUvvUEEH7QJCi5SNgaTt8IZytDiz1qOLTjIsZ7270cDlTzo1mEx7MW55f6RCHNvh8Z35I7bAI3L0x0nKBb31f8SKaKIIooooogiinxL5HD35hxuNJoPyz9FKKu/elCzjQAAAABJRU5ErkJggg==", 13 | gis: 14 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAflBMVEUAAACczGabzWWqxnCczGWczmeczWWby2SczGUzaR7x+Ok6cSOAslKt1YDN5rHL5K6PwFyby2RqnUNPhDE4biGYyWNekjuGt1ZmmkFAdSaMvVqDtVRilT1UiDRIfSyUxV9ajTiSw155q01DeCl0p0pNgS9LgC1wokY1bB+m0XSICNMeAAAACHRSTlMAVbsIuT6dVGARlPYAAAHjSURBVGje7dbZUsMwDAVQtkJNA9hNnH3tzv//IJFLuIXmBRwVmNF9stUZndhOOr6SSC6X2c13cn/7I+R6/q3c3XIiUJiRJyh8yPMLFD7kEQojAoURgcKIQOFEoHAiUDgRKJwIFE4ECicChROBwolA4USgcCJQOBEonAgUPgTKAx8C5XpS5PXpPBMj4xFEEEEEEUSQ30RMXhS5GenWJYU2kyBNvFB9FmXjpjQJ3GhVUz1LrT+SZ+o9mT5FTDzU684XsWv1kd0pskQ9NJ6I61UWgXvuAIiNaA1B4eqFH2Jos1IaVf0gBpJQc9q/kB7CD8mpV+eOmfYLSEDvwrDUyg+h1pkb6TiOSyAF6Tm9fFrrzg/Z085j+uVMssTzY8S5h2cI3q4qmQ6x+pgTxFTKZRtMhSTKZQGkV9LDsRobLoTSlZErlxMg23GE0qSOyf2QTd9i7UbBOULJSUn9EGodmRGkret6RfXY/2NsVJ9kBKmGBaR0ah4IZUeHYs8ROqzMvv93tZ7ISlG3ctlGn5GG5uvlvqXfN34I7QsSAplvUF5bX8S2Q69DaYD0SjQY+QQXiaLNDmqxTfVxZWEYJm6k0zpS0W5vp7oSmfl4zP+6dwkiiCCCCCKIIIL8IWR2453ZlURysbwBsIK+36QdcJoAAAAASUVORK5CYII=", 15 | md: 16 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAulBMVEUAAABEWmVFWmREWmREWmRFWmRFWmRFW2VIV2NGRnVEWmNFWWNFWmREWGNFWmVDXl5FWmRFWmVGWmRFXGUzZmZFWmT////ByMuTn6VUZ3Df4+R0g4tkdn7q7O1GW2X8/P3Jz9JwgIibpqv5+vrx8/OFk5labXZJXmdfcnpNYWv19va9xciyu799jJPb3+Gttrt4h45qe4NQZG7h5ObV2tzP1de5wcWPnKLs7u/k5+nEy86hrLGZpKqKl55LU85eAAAAFXRSTlMAROLNHPnBSxYDqGZkMTATz6qlTgWcDiXiAAAB3UlEQVRo3u3Y2W7qMBSFYZfQAh3PtMyBQhgykQKl0Hl6/9eqSDEucSwlkjeq1P1fIfniEyxyEQuO4ziO48yaZwcEnTW18O/EA1HeSUtk1X+BMK+eGTWQVlsrRyDuSIi/IK8hfoO8Y1EDeTVxCPIOBfYQI4ysu2l/Nu3A7LG9CUaxOkpLIP/lpqGPfMtAHcKop446VRA5Rq5VXzpHBiPsNpXuEdnvGCduEXOWXuAaMWdJb6VrxJzlQVIhepZIUiF6lskVFaJnSa4lCRIGehbM1K/nGOlGepa5+hi5RvCgZolD9aUunSNpV/1y23mcI8ZfauhTIIhyjwwJglnu4TeQy0BaCyclkN3nY4wiBJHVCEYoh+hZhn4xgrENiVAWwXw7iAXBrNh4Q3kECzWIDfFfiowZqiDJnRrEgiC9M41hUglBHGaD2BF0nvPGdYpqCOabQawIJuGu0Y9RFYEyrAhGwVfjqofqCGyIbj7QxuAGNAgeNfIOKgQLdfQKOsSfyqypT4gguV8f3CegRLDqSnm7Ai2CuP8UV3sJWqCgXnsTClsuv9PrXBYjPwHZx1XUfi7VjkHeH9EAeY39XNnSXz43xVrxQJhXF1mtUzLGO22JbRfnBwSdXwiO4ziO44w+AJ4bCR4jXPfjAAAAAElFTkSuQmCC", 17 | gif: 18 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAdVBMVEUAAAA/UbQ/ULU5Vas/UbU+UrU/UbRAUrY/UbXo6vZgcMKhqtvM0etWZr6cpdl7h8xDVLdIWbnHzOqlrd1receZo9dSYr27wuRWZb7b3vGCjs/k5/V5hsxndsVZacDU2O6ep9lJW7lygMm0u+KutuCdptmOmdQ8X77dAAAACHRSTlMAVbsIuT6dVGARlPYAAAFZSURBVGje7dbbUoMwFIXhHqwSwJoSDiIFSj28/yOakNE1g8NFJatOx/1f5Wp/DBsYVpJ0vXabS7rf/gpZRxd1t2UiUMhIDIWHJHsoPERBISJQiAgUIgKFiUBhIlCYCBQmAoWJQGEiUJgIFCYChYlAYSJQmAgUJgKFh0B54CFQ1kGRMv6ZDojMJ4gggggiiCB/izy2bcdFhqJWtjopI1dqz0/WVei4GCntVF/dsRCdYViqSciLspk83zdu2gR5L8bipUjmjK+/rLcJcgiz+EHZxl3k9tBzkNaOajxnjEk4yNFfP2Igbu/ZLNLGrjIQop99E8R3CoSUyqdvG0lnkXPu6pYiZ/fNGk8xkJBPF0aTEd24u8JB0Kvb/EBGWmXrTx+mJiJRolAWkRD9rTTmwEB8sekbVWeFfx9MVVV5FJWVTd/cL5EggggiiCCCCCLIv0J2m8XtVpJ0tT4BD2a5PwqSzzUAAAAASUVORK5CYII=", 19 | code: 20 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAABAlBMVEUAAAA3ZtY/UbU7VbEhlvM7RMk/UbU/ULZAUrUhlvQ/UbU/UbU/UbYhlvM/UbVAUbVAULY/UbYilPc/UrQ+U7M9TrYjk+4/UbU/UbU+UbU+UbU/UbU/UbU/UbY/UbUhlvQ/UbVAULUhlvM/UbYhlvM/UbUhlvQhl/EhlvMhlvMhlvM/ULUhlvM/UbYglvIhl/MglvQhlvM/UbUhlvI/ULUhlvMhlvMglfM/U7YhlvNATrgflvUglvM+UbUhlvM+ULQhlfIglvU/UbU/UrQ/UbU+UrUglvMhlvMhlvM/UbVAUrQ/ULYgmPQflvMhmPJBUbMmmfIblPIime4kku0/UbUhlvOl1t8LAAAAVHRSTlMABPgJ+wHWPC329O3lxGtPQB4cGxIOCvDhxLSel4iEcWhT17GAWVgj8OjPz8m/trCglIB4d2tlXzQqJBjgrIhiTjHo29HIvbuqqXBJRkA6FxQTDw5ILesUAAACwUlEQVRo3uzT11LbYBQE4JWEELZjU+0EY4fE2Dj00HvvvR2//6sAY60G+HVcBv47fdfSrM5qFolEIpFIJL7DEOwrpCrVTVg22XhVqdZh00KjKVuANc+pMGQa9qw3QsuwZ54hdVjz0BNmzMKeNR4yDnvOGGJxkttsK4uvGljxEW+Vh6zinVw/utaXkUsPsbJhRs82Ik5Z3ABdGv4lIjODiDHEts4RyRdF5GcfujLSK29+bMA0zrbWQFvh44PogjcqTW4Nhlm29YhQkJGm3hF0zCkKpYfxSZ2HzEddZYRGPXTIH5PIXxAtM2QdNOAKFR105rdE9mGYDjNST4j0S6SEjvyRyAoMmzxkQXlnCarYryrDVGXIpHZ9Djqz3zEfpgrbKuCDkvIflaHThAPTIQ+5QBM5u0Ju0HboNOchxh5DDkBMmRPi9NWh00keaNHWvwKI8jNCnL4ydDq+B1q19V+poe30nQnlU5S2DFtHQqeeNvS2pfo7bMtBnI20MX116OkA8e6MtvQBlFoP3b2GYpEhN1DUjOkrQ69B4U+FGVMONLlP01fuvILmlocsQlfWpx+8tGfGKgjEQBDNVVaHcEU6EUTETltBRBuxUP//c2xcm0ccGNhCzPuB5TbJ7M4cinzr1sMrUubQdzCgW6JdzsHf0S1x8M4V3keRZyG8wtZjHLbvGkeMADxGaDjUuiEr5/iQUwFCVqRAsluXAiiQntTXT7cKoNSbQ2sTH7JutAFDyxi/tyhyEAeKy0lmjUWihuFdFYBFwliJRLewEvnL3Q7dcpc7rqkqHuCa6i3cjAcoJuKhS+sg4gFYB8cEiXgAJsixcyoeoJ3zjek1LNxUAIypabF1PDAs4qEbYQHiAWCEBTIeSADxQAKMBxJgPJAA4oEEGA8kwHggjToiHshgWo6IBwRunYgHGvzO34xOp9PpdP6AF/zooIWbzWc5AAAAAElFTkSuQmCC", 21 | psd: 22 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAkFBMVEUAAAA/UbQ/ULU5Vas+UrU/UbRAUrY/UbXo6vahqtve4fKcpdmlrd1gcMK7wuVodsXm6PWjrNxSYr1DVLeFkdCqst7O0+zCyOh6hsxHWLnh5PPHzOq5wOSUntaOmdSJlNFlc8RMXLrZ3PBZasDLz+vAxee0u+KYoteAjM51gspfbcFVZb7R1u2yueFqeMbR1e3ZOOtbAAAAB3RSTlMAVbsIPp1ULZjL1gAAAfpJREFUaN7t1tlWwjAQBmBFNCnV2B26UChlUVB8/7cz0zYO4I2QDkc9899kueBrJk3oDYdzvQwH5+T+7iLkVpyVwR0lggoxskWFDnFcVOgQiQohggohggohggolggolggolggolggolggolggolggolggolggolggolggolggodgsoDHYLKba9I8PQ94c8QyzDCCCOMMMLIr0GC+TzoExnJJlnyuDVTUQIzyUxAHiVktPTn9ghkKiBhYcYqbBCTOLVAMCVM+Dj2EYGsQhsk3mz8hW69QIjA051i//zejQHJN+4KlI0N8qzb3agt2AR2INVV+9CdqEUc0c5nlQ1iylQIMdPNGMax7riIiBWgtkikO8tuJfDE1W63qw6QKdTVFoEl5N2e5LXogkgES7RF1rrz3pVJenF9isASEzskKGVX83QsG2b9dIy86s6bBWKySAUovtcyJQWSmZujjltm1j9S1DgbOB6o1cmeLC0Qvyyj15Nrdw/KCyLN27ey2niMyvO8KVtxchhdeJqekCUswJx4H5EQ7v9JT4gPZy7sfnT6haQOvH1hT8hWglJGCtp5iyzUOJNmhdZId0eZFMf/J46wRlDxZJtxdYgsInExslZKbcVRajfJ5Ei9hDCYKcjamaR/8pOIEUYYYYQRRhhh5P8jw4F1hjccztXyCanBqxCbtXUfAAAAAElFTkSuQmCC", 23 | wma: 24 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAZlBMVEUAAAD/wAb/wgf/xgD/wQf/wQj/wQb/wQfEcgX/8+DflgbzsQbUhwbGdQXYjAX/yzP/3oX/3H/PgAXajwXwrQbmnwb8vAbspwbpowbjmwbLewXJeAX3tQfRgwX5uQbdkwbhmAb/xyDFtTbSAAAAB3RSTlMAVbsIuT6drnBT7QAAAmZJREFUaN7t1m1zmzAMB/A+LHNmjLvxFCBA2Pf/kpP8V1B2e6Vu7u026641LkU/yXa4PJUo8XFxerHE59d3Ic/OFJ9ecyKqZEbeoORFvn6Dkhf5IkpeRJWMiCoZEVVyIqrkRFTJiaiSE1ElJ6JKTkSVnIgqORFVciKq5ERUyYmokhNRJR+iynMmRJU/jnx/+zUMyPujIAUpSEEKUpB/DzlTLDS2NA40Rhp7V505RiQa0sQ7iZkmnQ1p6JGLjN0xAmmR6PKI4NbNgkjlNNYP4ybIjES3n5AJd0zIhLoqqXxBBiC8jmhOEJ1VBgRrEZwb+clGpkCkNbedFdGZCdm4dFmSGo35A4nOwde0Pf8f1WNAZBMGF2QRWhyqCqmuDueuViTQjCtaTMiakl9xZjEDEmTpZ1z64zhHXtPJhHBZlwWV+4Q5ILFJqfjWDkTWrmdpNSE9l8W1tVQxP94IEvz9SDT9gUReqdTvZkE6zr8j0zV1IMhKd+qU1k93ZMBGee7HgqTeI0GceOIfQRpeuy79OpaLO44oLFgQ3th65sr4ZPIGCTJzE3vF7XhBcPhwJOvBgsRzis41uNgOZKQeey79Jgi1pTFakB3PDKlMrluQOn1QA2drBemUINuAyEu2wTmj2hVxq7QWBfGPSG1BFnmty7vk9oDs4A9k5gY8R82bZ0Bczamm+0WvCFgviEy3YyNbC7Ji3+UtXimCje4OZOK+9D15tSAt9l0vFGmRSpAmDbrGnQG5hBDicYEcgYLGLoSdholmoxsCRecQkf/0V31bKUhBClKQghSkIAX5z5HTy2/H6alEiQ+LH2wWrAVqXSpiAAAAAElFTkSuQmCC", 25 | dll: 26 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAY1BMVEUAAABOt6tMtaxUq6pNtqxOta1MtqxMtq1NtqwAaVzg8vEVfnENdmkympAul4yi2NSe19JrwroQem0kjYEchnpErqM3oZYhin4EbWBCrKE/qJ4YgXZLtKoPeGtpwblevbQtlopek779AAAACHRSTlMAVbsIuT6dVGARlPYAAAEbSURBVGje7dbJTsNAEIThLBjGjM3i8XhNgPd/SjoZUAlxSjJlRUn9l+4+fQdbsldKLVexOaXH7VnI2p3Uw5aJQCEjH1B4yOsbFB7yDIWIQCEiUIgIFCYChYlAYSJQmAgUJgKFiUBhIlCYCBQmAoWJQGEiUJgIFB4C5YmHQFlnRT7f/5cdQUiIECFChAi5YaQqDw1NiOmu7arcby92NXmQVOAjVk9F5tAfrY6J1DZ7m3s2shtsmciI87Z8sZHWlsBGeltaNhKEXN0zmZd4u5q0UJFYWpGLRG/TOyJS+X1pDdMPMvjUaAiumOV7UrsjgiZD0JgBqTpHQ1p/aA7dLt2dR+OfK17534oQIUKECBEiRMh9IsXm4oqVUov1DYcdt3zdZD7tAAAAAElFTkSuQmCC", 27 | wav: 28 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAYFBMVEUAAAD/wAb/wgf/xgD/wQf/wQj/wQb/wQfEcgX/8+DUhwbIdwXgmAb/yzP/3oX/3H/zsAbdkwb3tgfuqgbLewX8vQf6ugbqpQbZjQXknAbOgAXoogbShQbWigXRgwX/xyAoi8qsAAAAB3RSTlMAVbsIuT6drnBT7QAAAjxJREFUaN7t1ttyozAMANBeNhsvuLs2l5gUyP7/X9aSsNSZPtmtOp1WekGBQcfIgsmdhcXnxemhJn4/NiH356r49aiJiKKMPJGii/z9R4ou8ocVTYQVTYQVTUQUTUQUTUQUTUQUTUQUTUQUTUQUTUQUTUQUTUQUTUQUTUQUTUQUPUSUeyVElA9H/j+9jQqkPQwxxBBDDDHkWyLJOXeDJB/3fJhdjgteCjnrMbvASU83dDmdqhCpNBz3BqnhoXTA9DlnG53tcxqrEFl5enXszlzZRfZ6XpRLFQiXCseyRzhiY+jZ+KkCP9QVsrkWWfJNK7XaXelnOh/lpF89XaXrW83Gcy1PVdxSHgxiyx3Ca6X2DskEWjUy4u0XB/FM2FwmaunhHMTK85FjqEYGKI4UlIfSUjYtUJJIyhJuUxXC7YamwTEAtuDpHaZt5ebcaOsiDFwDssEad+rNylVnfKSBt9lDddqysQGJcN+Ua2ctxlIkUdGpvP8B0Rl7Wodw8z3UzsDWlU1YSAN05a5eRnxVKxFeI1RIzvUTDRFPWcLZY9VDN1uQ2R2v9kDJRoPNgRhxHvevAcG+03p7TOKxURKpDPGth8U0Ibs7vuQbJusBSyzHEGPENgQaTbvMH6uALMTC319PyNiGJFc+87wDnt+PmQsHQuY2ZKB9l4Teuau8q5EHDga4GuG7d06KFqSZEw8x0G1I7LpufZ2M+ViWHCAfcKwx+7L/VgwxxBBDDDHEEEN+MnJ6eHec7iwsPi1eAN4UqYKopgjTAAAAAElFTkSuQmCC", 29 | shell: 30 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAqFBMVEUAAADP19vO2NvQ2N3O19vO19zO2d3P19zO2t0mMjjP2NyXoaYY//8zP0Udra+QpK4czM3L1NkkQ0klNz0a4uPDztO/y9CarLUgfYElPEIY9PQb09S7yM6su8KgsbmesLiUp7EjWl8mMzkY+fkZ6Oi8xcq1w8ocw8Sltr2WqrOcpaoep6kfl5ogjpIhc3cia3AjX2QkTFEZ6eodu70dtLYds7Ufn6Ifi4+96QqzAAAACXRSTlMAgIh3/jJ4dERAp1kSAAABQ0lEQVRo3u3YyVLCQBCAYdBhsROZ7CGEbCKyKri//5uZ1im5sJRmWhOq/8tw+6ro6VQqLY7juMbX6V1qqdc5YgjQlDisdEFb3YNIWx/SPoHYgQ+f+YGgQsa5lKldWpmUi4AGsXNZlgDM8VwIEiSQWAiQS8wnQXyJpQChxGwSRKSybAxwh+ecaPB2EmalUSpZmIhfI3XYE0Z+gCyvK7c8iRhXlTMYYYQRRhhh5D8Q9y+Q2dqlRyzzdnhDj5hmvCVHsOdHagSbvEWESKEUHA3hnjx4iom3hMvovo++FIt0450VNYIVHjniDMj/LnetRjIaUiG7y/XikF3hV0XEBfnGP31vYjTY070GZLKKdpfA3JNVHZnh05EW8TZ40CIbV/04OpMmvEgwwggjjDDCSH2RqVG5aT2+cJ8H0r/QVr/FcRzX8D4AlT7XtbfurrMAAAAASUVORK5CYII=", 31 | angular: 32 | "data:image/png;base64,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", 33 | zip: 34 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAclBMVEUAAAD/kAD/kQD/kQD/jgD/kAD/kQD/kgD/nwD/kQD/4LL/y4P/tVL/v2f/vWL/oST/zYb/yoL/u1//xnj/lQj/3qv/153/tE3/z4v/s07/rkL/pCr/mRL/0pH/w3D/uFn/rDv/zIX/pzL/nBr/sUb/2qNAsIUWAAAACXRSTlMAVbu5CT6dVAhJNunGAAABZ0lEQVRo3u3WX1eCMBzGcbWspvwpGEiAQmDv/y22wcUTCRe2PZ5j/b438+xiH5gTWUnS7dpurunp5VfIWl3VwyMTgUJGYig8JIyg8JAdFCIChYhAISJQmAgUJgKFiUBhIlCYCBQmAoWJQGEiUJgIFCYChYlAYSJQeAiUZx4CZe0VqePLtEdkOUEEEUQQQQT5y8jH7lsnpQIzvJn513Emy9OOjthS7RWJJggUV+ScjKV2b+opsk+SKLdK54SgwqwVqCnybkZ9xK24Iq1ZKtcziDqbD59eEG13pVVzSLUzeUEas1ChuEidmYXiecT6uQ/kNPxGLpBA67q0fugBqYbj+xNBWe+E4Pg2ahkplTtSDsd3ETl2yh3ROS52iqRBcCh7L4/6xF6tmkMO3v5Pent8KjKS4tlEQ6rhu92Phb4R3Agq7hlp9jZsV2uGxMxHZmzv6m1FEEEEEUQQQQQR5D8i241z25Uk3awv7GzNeHfPQK8AAAAASUVORK5CYII=", 35 | doc: 36 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAflBMVEUAAAC6acm5aMjGcMa6Z8i5Z8q7aMi6aMhKFIzz5fVTG5DGgdHbseLZreCeU7l+O6iGQaxaIJVQGZCTS7RNFo2zYsWwYMOrXcB5OKZ1NKNeI5djJplwMaFsLZ5nKpyCPqpXHZOkV7yPSLK3ZcabULioWr6YT7aKRK6hVbvBd82Na2eCAAAAB3RSTlMAVbsIuT6drnBT7QAAAgdJREFUaN7t1tt6qjAQBeAetnvcdFcgICdBARHt+79gs0LDfNqblnTaXmTdqINffjKBwJ2Pz/dl9fCZ/H1chNzTp/LnUR6BIow8sSKH/H9mRQ75x4ogwoogwoogwookwookwookwookwookwookwookwookwookwookwookwookwoocwsq9KALly5GXp/f5IOIWj3jEIx7xiEd+Atma0HWy5Bwl2VVp64IEa5O4yHm8MjW1JreFQ5WavzghSBrZaVS2FHSEXAL7l94NQcKpsudKfNS/c8WFYTmyr3fpPESPUy7GPkYFs2tQCIek1p/VcmRDlLfAUECzetu1Vh+xGIHduCC0wViZHhtdImRA5UTn6YBOiJY6IYTOJ0Sj/qgJOa7NnMpZBde4IWjGYVqSgsiyETW2j5R1XXdyQ3b6S4nTNZZlQ1vnuCD7abCIkWpGCo/cIHawM0bmNUm+EOGrK+F1VubQ3l7THOf75IKbge+TnOq5UCilGuc7Ps300HoXU9gXzZwUFsluWQ0a54J0se1KiS/Ht92sxNR0OjxVzFwXI3HVYiSVo3BKsTGWjULp8rZYbdKNWJxg6/g8UcNUiW6eMOOaE5EbUue2FKVTJQ1v1ZqWIYcQuX5tyMNdG1ThvBludoZoe9lXomxIxtMvf+/yiEc84hGPeMQjHvmFyOrBOas7H59vyysqPq3N7q+D/AAAAABJRU5ErkJggg==", 37 | file: 38 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAJFBMVEUAAACQyfmRyvqPxv+Py/mQyvuRyfmQyvnh9f6+4vug0/qZz/ohWhTlAAAAB3RSTlMAVbsIuT6drnBT7QAAAI9JREFUWMPtzbENQFAYRWFb6CV6O9jACiaQSKzABJhAYgTT+ZsbjeC8RHdP/+VkLrWmuK19IPlwW19BEtWUbLGBZI0NJMscG0im2EAyagOINoBoA4g2gGgDiDaAaAOINoBoA4g2hGgDiDaEaAOINpDEpqNk+kyOXX0mVyYmJiYmJiYmJiYmJr+QpnipzFxiJyWDEoYsQsYkAAAAAElFTkSuQmCC", 39 | tar: 40 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAdVBMVEUAAAD/kAD/kQD/jwD/kQD/kAD/kQD/kgD/kQD/4LL/vGD/skv/oSP/1pz/v2f/y4P/qzr/z4r/lgr/3Kn/0ZD/2qP/r0P/pCv/nx7/yHv/xHP/3q3/vWX/qTT/mxT/1Jf/uFj/tVD/rDz/wWv/zIX/tlH/2qW/7nVbAAAACHRSTlMAVbsIuT6dVGARlPYAAAG4SURBVGje7dbbcoIwEAZgD7UlCKIcBQUpat//EZvl4C/TK3HX6bT7XzhrmMlnTDY602hel9XikbwvJyFz56G8LSURKMKIB0UO2bhQ5BADRRCBIohAEUSgSCJQJBEokggUSQSKJAJFEoEiiUCRRKBIIlAkESiSCBRJBIocAuVDDoEyZ0Uq72fYEQRRRBFFFFFEkT+LJOY+nw7Ft1XWP193Dw5JnrIie6o2QIbEFSNSU+XfEGQ3Faldm8jOkFOR0VBsKB4Q33WPJxprJiK3TdgObyrTxgVCKwhJKRgQTHsw5jRGnJoKNuRiTHS2A/sxktLWcyGhXUW+tQPXMXK1RcCF0Cdeh8PUQGLs0/NITt9UO2U1IKemSS+GxpmQMDImcRyX1tMhyNFhQrbdSS1pB4DAYEEKW6bd9h/CERKFbMiXQZoeib0sojuHC8nMXQqcLmocnws53iMRkPZmLpkQqgp3uDRL9MkOvfgs4hmb8NYvZyApX5/UuKBo9gRI+8Oz4UBwd/S7kAFxcYqnIUUQBBm1e9AXlNzWqVPa17YLK3pW/uJ/K4oooogiiiiiiCL/FVktns5qptG8LN9EZboIaMmx3AAAAABJRU5ErkJggg==", 41 | otf: 42 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAb1BMVEUAAAC6acm5aMjGcMa6Z8i5Z8q7aMi5Z8i6aMhKFIzz5fW4ZsbGgdGJQ65+PKjbseLZreCmWb1lKJubULiUTLR5OKZ2NaRoK5xuL6BXHZO0ZMWgVbtgJJhbIJVOF4+tXsGpW7+HQayDPqtRGZDBd82cvnlEAAAACHRSTlMAVbsIuT6dVGARlPYAAAFgSURBVGje7dbbToNAFIXhHkRBCspxOFPR939GZw8k60JNWnBVjfu/6b7aX8LMJN1p2u3yDtd0f1yF7P2rujsyEShk5ASFhzw9Q+Ehj1CICBQiAoWIQGEiUJgIFCYChYlAYSJQmAgUJgKFiUBhIlCYCBQmAoWJQOEhUB54CJT9tyJvp49diGxLEUUUUUQRRX4QObftyEWauA5sXe7bOjuhwg8D9LIeGftgqQpZSNhjS8lCJrcsy438tn4U2+TzGRmyGSljV7sWCWXhJFMqH0yGeYzcNCPJxoNv7Y6hkSmz0ysHieyO1E2NrDtTkBgfabBjRkEKd6lccjr5p0ieSONqpHQX1dV/hSxVilx4JpmU/O7bJe+kY78TvPic9OKlejmUppOBhESyJZ3i3m1jIJLBJY19FtJUMEiIlFV1MNQlVhXGmHxBjG38O3+JFFFEEUUUUUQRRf4d4h025+007Wa9AxG2uzcZlFo0AAAAAElFTkSuQmCC", 43 | ttf: 44 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAY1BMVEUAAAC5aMi7aMe6aci6aMi0acO4Z8m6aMi2bci6aMhKFIzz5fVLFYyBPaqcUbi7aci0YsTGgdGkV7zetuTXp9+qXcBSGpFmKZqmWb6ZULeuX8KWTbWKRK6sXcF4NqXAdM1sLp6fGft1AAAACXRSTlMAu0BrzBEvpg42dNklAAAA9UlEQVRo3u3WyRKCMBREUWcNIgJOiKL+/1cKkbIr5YbBRtS+q7zVeVXJIgOlumw2rNN80QgZmVpNpkwEChmJ1lBoyHYDhYcsoRARKEQEChGBwkSgMBEoTAQKE4HCRKAwEShMBAoTgcJEoDARKEwEChOBwkOgjFkIlHcj1+i1iki7mAgSIkSIECFCPoCkvlMQuvPJBD6KmyKeUxC6c454qNdIuCry8i7FITPunFjEXz1K6yPIrr8zCGtbZG/KhPQHSWwhEXl2FlLtTo627AdelxAhzZFDXmpQMZdonB9v3/BbESJEiBAhQoQI+VdkNmzdaKBUR90BbhDOvKefx90AAAAASUVORK5CYII=", 45 | raw: 46 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAflBMVEUAAABFiv9Eiv85jf9GjP9Eiv9Eiv/j8v241v6cxP5Okf+hxv5jnv9fnP9Hjf/Y6/2z0/5SlP+Luf7d7v11q/7R5/1upv+Svf7g8P1Kjv+szv6jyP6Bsv58rv5oov9Yl/+ny/5xqP7H4P2Gtf7g7/3N5P282P7D3v2Zwv6Wv/7KXhRkAAAABnRSTlMAVbsIPp2VTiuNAAACa0lEQVRo3u3W6XLiMAwA4JayMkcwSQgk3EeBhfd/wdXhRJ3ZX5iK6UytmWJhSL7alk3eUqR4XfR7j8SfjyjkHR6K3ocloooxkolii4yHotgiThVDRBVDRBVDRBVLRBVLRBVLRBVLRBVLRBVLRBVLRBVLRBVLRBVLRBVLRBVLRBU7RJV3I0SVb0f22f/hH0DiIyEJSUhCEpKQlyMjCQ9fYyk9IVtS0rUYDyMuxHw9UWSAHRvOSsxybPfYrrCdYDuLRejabTe6M9+aYoHZBdsK21No/0YgqrRj2fI7np0Cs8YD1NS1lJEdopBhWedOr4YVmxXnc8z2APz5Th6PyiiERjDEdipdfuqUpOU5iuU+5e0iGplQMurWoUGS6+vG/3rB7FqwIhoZuXC5TAn97dr1GZPLK76kOoSnRtJAuwynnTyLSv8ASqkMz+9iESmfK/dkdH8/k9IFf6ZkhbNHX6QKvsUhm0V1P3f7785rmwccTlTDF5nADY1oG4FoXKXnRPPCE1S39UyTd5ziAMdCxyMDqa297PYsbG3WqL4LHNsVK/jsn0E+paMM6VR2IRypoGgP3fGFagJi1yR33dVX2pUYTcCKME6oJDlEIhPeB7IvRo3T4GqV/X9rtTIagUs4ymHjvkQzkoNFamrOySIeqbE5FyAn4WBNMQvlOnThOzknRTxSNFKyS7p11h2Nq3Zss/a4n0IsEkYw91Dpfepw78yFaj6GZYpHKvkJOfAu4dg5OeU9DXLd1tkwBhlg0HbwOSY1rPA1nBuePqIiPmBbYcsfHn/sI1FCEpKQhCQkIQlJyO9F+r2no/+WIsXL4h/7jJcEpWZxWQAAAABJRU5ErkJggg==", 47 | java: 48 | "data:image/png;base64,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", 49 | py: 50 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAA/1BMVEUAAAABd73/wggAeL4Cd73/wQcCd73/wwX/wQgCd73/wQj/wAwCd70EeL0Ddr3/wQf/wQcCeL3/wwAAcrr/wQf/wgcCeL4Cdr3/wQYAd73/wgL/wgD/4AD/wQcCd73/wgcCdr0Cd70Dd74Ad7wAd70Cd74Cd73/wQf/wQb/wgf/wgf/wggAd74Ad77/wQcCdr3/wQcBdr3/wQcBd70CeL3/wQj/wgb/wgf/wQcAdL8Cd73/wQf/wQcBd73/wQf/wQYCdr0Cdr3/wgb/wQcCd73/wQYDd77/wgYAerr/wQf/wQYCd73/wgf/wQb/wgb/wQj/wAj/wwkDdr3/wQcCd710CQFgAAAAU3RSTlMAqqoy75PBM+77zBTMQlU2wZMMBfKKdW0rGBEGAvrq3o2FSz8O5tvSoJdpYDcl7dO8trSvooR9TEMT9efZvK2km3x2cGNbTyYd88Wjm3pVPyAbxlnrk48AAALFSURBVGje7ddXd9pAEIbhj4DtCBOU0E3vBoMLxjT33uOS2f//W4LA5ySOdlcgDzm+0HPF3XuGXYEGHo/HI1X1hy8TpWKxlLisrIFftFw6you/5bsJ3pB/LyAkjD2+TPRUqATKXI0joWYwVc6ETmCTZZC80PKBQUU44BglKSxGqCYUkgyRkhjrjIBLQ0jtMUSK1oNXnX6S6jBEfliHqzudZaZIB5byYiP7kxvUXWxE1MvVzQex4MiEF/kskVu/Td0WSQff7DQHGbDYtkVW6Y/CYNGRiZ//I0IbcLQWLp36dAJOkVwKetfLwpFThHb0UxwJwRAhE2qbNcETeYTSqC6YIrEMVHyCK0LPUGgLN3y2iPZZeRBulACkbJFjyEUDwo02gKEtUlC+xrkRwtg52aQhlRAuGH6MBclmyHe3jDBsR6L9/XLxkOSvYdklux5kqvOPcboGy4AkmpDxCx0j8F5t25ecJvCyRRINyITVgW74NgqVl0OS+aLYERR8t9AwD0iqMc8N3r+GRnopR3LNOXbDfBsq2ddBI0Yq/dknMSqYiLROggdf38uRTmv2M0lME/EYzcuc+XbVJ5dqpUBzy2Vm/jcJY8yM0fzWITUSNgFrkNUDcqEBuZp8sW2QGxeQ60pX9HSO3LiB3Jn0SK6ImI5Esd1+A9AnN1pQGBmyyJKrQbJQ+cUViaWglGSKxIZQq+6zRNZT0CkyRIKtLLSqNcfI8ReNx97VDRy1DadIFh8XNngiev4QU0SvUuyE3vjtEXPlXzf4MOfb9d2LfJbIjhkx7xccWc8AiBQWGzmHJc4YUS5SfaZInKR2MZYNWofDELkguXgGmeY093HPpBAL3tl2BLcyW6S3AQZ90nsFg8gh6ZyARUr3hR2ugqlSIJXdNLhE4nckkTsegs9kZ3w/ztZ9/CkNfhHz6aIXX+qdb1yZaXg8Ho/cb4WcX1psRI9MAAAAAElFTkSuQmCC", 51 | xml: 52 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAaVBMVEUAAABOt6tMtaxUq6pNtqxOta1MtqxNtqwAaVzg8vEUfnFDrKJIsacYgXVrwrqi2NSe19JHsKYmkIQCa14umI0rlIkFbmFFr6Q9ppxLtKogin4chXkMdWkIcWU1n5Qxm48QeW05opdevbQRyyfXAAAAB3RSTlMAVbsIuT6drnBT7QAAAeRJREFUaN7t1utuwjAMBeDdmLu0u0B6L72w93/I2QnbqbZfQIymzUeIWkj1pyRWxI3Fcr1s7k7J4/1ZyC2dlId7TQSKMvICRQ95fYOihzxBUUSgKCJQFBEomggUTQSKJgJFE4GiiUDRRKBoIlA0ESiaCBRNBIomAkUTgaKHQLlVQqAkR95ffiY5giCGGGKIIYYY8ieROeNUUpVSlVw8SzFSzC6TFFzlUmzPQmjPr+6lWKR1FxBJTiFLCiQuoD32qCggsZQUWRKkG/ndnqjnR10AeSbJlAahKnTvan7sCEjdSd0nQkL7UgbAb4HIFnL2lyMYoMWFTftCfFxWI2USpKizEN8AcfyJA17vL0WwlLAQIDs2O6KBByAR0viA5Ctk4p8ORCOf1pgGicc70hpxvJrQt6nTIIcsZFohc8XDQKV8+TSIi8iyQkpu6YuBl9OlGeFWJks25QCkki2c+Dja4lIETYde5nY1XdSHOR6pSYK0GecQvlsgx4MaKE+CDPGuX+RSBCK3DWdOg+RejgBX/hGJD198Q1zMdCLSHy+UQrABSFAdrRGkOg1p/Oc2DRknB9JIszTI7DhhdlupSi52/JxFdS5ny3EE2Tpk+oX/VgwxxBBDDDHEEEP+M7K5uzibG4vlavkA6bipSuoQS3IAAAAASUVORK5CYII=", 53 | rar: 54 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAeFBMVEUAAAD/kAD/kQD/jwD/kQD/kAD/kQD/kQD/4LL/v2f/oST/2qP/y4P/vWL/u17/pzD/wGv/lQn/3av/367/s0v/mhT/qjb/uFf/rkH/nRv/3Kf/1Jj/0ZD/x3r/153/yn//xnb/w2//rDv/pSv/tU//zon/xHP/xHJhqd3gAAAAB3RSTlMAVbsIuT6drnBT7QAAAgVJREFUaN7t1tty4jAMBuAelhWkwa2JQ8ohEMKh7/+Ga7nO/pPdmxZVnU6r/wLkDOMviRWHG4vl8zK5e09+31+F3NK78uteE4GijBRQ9JDZHIoeMoWiiEBRRKAoIlA0ESiaCBRNBIomAkUTgaKJQNFEoGgiUDQRKJoIFE0EiiYCRQ+BcquEQPlwpC7+zxsRWQwxxBBDDDHk2yIP05T1drbCwW080o/f8YtdtxQinCpQTs3DFyBD9l6IcIZTDena/kUYFiCdc10Vvzf5WJlmfASyde4pnc3qeoSne8YcvkrIExAu63UsGhlCi6FIXhztxghdYnEQIru/i9LGJpjHUTFGXCwu0isZpvWxOh/jyI2RQyzmMmTJTewpVw1LmxHi+ZfP1yOu7xu+kJaGMz6mDlsNSNn3Ycsr5cXPyboejiyIGr6eVwQJJEV2BXF4NfZERfw6j5HqRGLEUQr3Fc/Gj0U9QjYkQULBMz144mymSMhIWyzzHiDprrrKrcO3CSnRXWe+izKEWt6heNyA4J7OCLYdCfLIcxzzq6R1nPxcZIR4OJMgeSk6ohonfGAOiOMm9zLkxHenpsC9TNgn/YC8LluQIX6RurjEVpsuaom9a89dfB3SlWVZpBWPxYX28XN4Qb7EOlCInyceHsuY1df9t2KIIYYYYoghhhjyU5HJnTiTG4vl0/IH8hin/lpU9H4AAAAASUVORK5CYII=", 55 | javascript: 56 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAqFBMVEUAAAD/1QD/1wD/1gAAAAE5MAHUsgAFBAH81AAQDQHcuQDMqwAJBwFgUQEiHQH40ABVRwEXEwHxygDqxADivgBaTAFBNgH1zgDtxwDfuwCUfQB5ZgFOQgE9MwE1LAEqIwEdGAEMCgHzzADmwQC+oAC3mgCojQCaggBzYQFwXgGwlACHcQBoVwFHOwEwKAHVswDPrgDDpADBogChhwCMdQDXtADLqgCBbACVKPu6AAAAA3RSTlMAgEC3KR0FAAAB2UlEQVRo3u3Z2XKCMBQG4GqihAjIpoD7vu+17fu/WYWECNrexOTCmfNfxcTxkywn4/gBgUAg755qRVmq/yIVpCwVQAABBBBAAAEEEEAAAQQQrUjUyPJV6gwonahE6jhLTXT417aV9ozsizakY2KRfaIFITYuxmvoQLq4HC9UjxwN/JC2eiSfLGdf41wrUo0QvujLW3vaS7G5+jUJ+bdne6BtrCdIPdJg7SsbSb61nJMja+/EoA4kZm2rrhNBQ/bCXBKNiDiLTkdfgQzGOI+5CjUh6BPfY9ihHgRtcSHWlmhB0MIsMv1YC4KmtlFQhr5aRITurLviqkZE4q0nlLNyRKQpruGWBkRkeuCX4wtIfqLPDwgV7zhhFl8WCVrDJt+ypWs2cK27wieMyiEknXCXKXZxEy08jAdRvix8K0+lkMYApxnMCGou+Set0sfoZc1e+RkNIoUMRXUaiXO3YTVY6Dd+zA+93MLP8VOsdHX9kSjBB0fwHTkErZ+QVdY/M555J5JEiIvLGQVPlZ7HukiXFVJ+FvOUD2zMsjGev1KF506hnif3/qRVNHrha/cJ2bheNuf2rDyQ/LTH2UT1u1TFzejTMPpzIKY0frvfjIAAIoFo+FsWAoFA3jy/zd9WWtgjjBcAAAAASUVORK5CYII=", 57 | hex: 58 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAZlBMVEUAAABOt6tMtaxUq6pNtqxOta1MtqxNtqwAaVzg8vE/qZ4UfnEjjIFrwrqi2NSe19IbhHkkjYEfiHwPeGwYgXUJc2YGb2JKtKpDrKI1npMslYoDbF9GsKYxmo8nkYULdWg4opdevbTShbprAAAAB3RSTlMAVbsIuT6drnBT7QAAAXhJREFUaN7t1ttugkAUhWEPtZuKtoKonLHv/5KdPbtxxfQKyjJN3f+FM0HDl2GAuPC8x7VZjel1PQlZyqhe1kwEChnZQ+Eh7x9QeMgbFCIChYhAISJQmAgUJgKFiUBhIlCYCBQmAoWJQGEiUJgIFCYChYlAYSJQeAiUJQmBMjvyuf/ZCGR6jjjiiCOOOPJfkV2SJIc42yYhm6BC5KpjL6FKZzUFkWMYTxIqwuR8oSC2gKtIa0uaEdllsU5Cg/2mD0PTzomIoM7OPqgtLORy0g2/KlXSEKnDgUG3PRcecjknVjkdGXKtuEPyWCVWb8ZBpiMIiJXdL2VLRSRN8CBOQ5pT7A45xmoJwe2EuPFSGDKQEHx1xlIoyEHfYpleRB5SNuFAVSb6SUNyu7NSLGUmJLX0Hm4bu5m7+MqfDUGpiGQ6Kb+fyJSDtLdz7/DUj0PqcE162940dJvgclU6VlHXWf1X/6044ogjjjjiiCOOPC2yWf26zcLzHtYXOWalpWSMI00AAAAASUVORK5CYII=", 59 | txt: 60 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAdVBMVEUAAAC5aMi7aMe6aci0acO6aMi4Z8m6aMi6aMhKFIzz5fVUG5F+O6jGgdGzYsSqXcDetuTXp9+ZT7ZoK5ydUrmvX8KMRbB2NaRPF49hJJhNFo21ZMaiVbu3ZseTSrOHQa1aH5SmWb2CPapvL6BLFIy+ccxtL6AB1V29AAAACHRSTlMAu0BrEMwvppEqA8AAAAF1SURBVGje7dbbbsIwEARQoJRuGiAtuUFuQAL8/yfW46CuUJ9CM6gqOw9mTCQfWZFWmVgsj8xiOiRv87uQmQzK65yPQCEjK1V4yOeHKjzkXRUiogoRUYWIqMJEVGEiqjARVZiIKkxEFSaiChNRhYmowkRUYSKqMBFVmIgqPESVFyoCZXTkvPqZ8wDk/hhiiCGGGGLIf0XS4CbJ8eTWJZ5UgW/bm+fZKIjEbg1rEcldKVIOkuCnEVnj9FxGQdZLJMCBKJHIzvVYJMNF3LbF35A6lGowohKQSPpsXD9F3srlmtBtNr6NhPjjl0dQRx7S4NXjtV+Eh8gh6FMxkaw3YmEideiRhIrIBfuipCJRESB7KpIHPmFJRNICAmYIEcGQ2e3dcqhpiJ+M2RrXaWhI6/q2lA5XYSElDsylH/kbErJHr67DZcdB6hBnf2vJeEgZu6S+JqgNWorWik/navXHv1YMMcQQQwwxxBBDnhVZTH+d2cRieVC+AK8ju3x99/d1AAAAAElFTkSuQmCC", 61 | "7zip": 62 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAbFBMVEUAAAD/kAD/kQD/jwD/kQD/kAD/kQD/kgD/kQD/4LL/oST/vWL/y4P/v2f/xXb/wWz/rDr/lQj/3ar/qTT/nBn/z4r/2J//u17/uFj/tE3/nyD/mRH/3q7/2qT/sUn/r0L/pi3/1Jb/t1T/yoCsVSHpAAAACHRSTlMAVbsIuT6dVGARlPYAAAFTSURBVGje7dfZboNADAXQLKXNkCmEJRCWrP3/f6xHDVykvjSNb6Smvi/glznS2JZgZrE8LtHilrwuf4XMVzflZclEoJCRFgoPeV9D4SEOChGBQkSgEBEoTAQKE4HCRKAwEShMBAoTgcJEoDARKEwEChOBwkSgMBEoPATKGw+BMldFuvh7sp8hd8YQQwwxxBBDnh/ZuUmyZ0Fy1nW1m6/UgqTsxqeCnMhIljtXybNIxpTqyPH6idigQ7E6sg2nkpFSDj2Hl40P2Uu5Ve9JmK0dyN65vlVHKkHQaC9VrT5dp+v1YAiqTB1J5NhmKLrQkUJxT7AkfTddy0R/GQ9y7Mf06vJOE8GSHIfiLMVhpYhgSfKh0RfMgCpST5pQ5lL4NKRVRarJNK3dmEITKeTAPX6tOUjjvb+Mg+bHxH/sa8UQQwwxxBBDDDHkfyHR4u5EM4vlYfkE84S0uUVE8WIAAAAASUVORK5CYII=", 63 | folder: 64 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAk1BMVEUAAAD/yyn/ySf/nwD/wB7/oAD/oQD/nwD/yyn/qgD/xCL/yyf/yij/yyf/wCL/yij/yij/uxn/wyH/oQD/oAD/uBT/nwD/oAD/wR7/vRz/oAD/qgj/vBn/oAD/ySn/yyf/uRj/oQD/oAD/oAD/uhj/txf/ySj/ogD/nQD/zCj/yyn/yij/oAD/xyX/vRv/rgz/qAfeNa39AAAAK3RSTlMAqlVV4/2rWDkD/IZ7Tgr22NHQXE9BOPfl3Nm2rp6dnJKKgXx2WUw/Ly0sB6zbXAAAAORJREFUaN7t0VkOgkAURNFGQQEF53meh34I+1+d/L8mflAmxtTdwEmlDGOMMYYvnY6bjqZA4t6aibOgDTNOgajQykFUcGUsKrgSLeX7yk0+FYxqI0dR4bdsRIXf0pKy/JVZQLG/j6qQIraw4osbyTMLLDu7kKI0oMrEgbwsuLlGVhaenjLAI2uFLPDIQCE+HvGJEPk3ZIhHhgrx8IhHhAgRIkSIECFChAgRIj+LbPHITiEdPNJVSIhHQoVEfbTRj4wqQSNXReBf6RhnXfDr7h5eDyP0vKepLg2TRu2SMDWMMcYYvDcqK0d6s+l/JQAAAABJRU5ErkJggg==", 65 | exe: 66 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAb1BMVEUAAAD/gav/gKr/jar/gK3/gKv/gKr/gKvpHmP85OzvOHfyRH/6aJn+lLj9utH9t870TIXtMnHrJGjzSILqIWX+e6j9d6TsKWv4XpL0UIj5ZJbxQX38cqH7a5z5Zpj3WI31U4vwPnvtLm/7bp7/jLPzdBCVAAAAB3RSTlMAVbsIPp1ULZjL1gAAAYdJREFUaN7t1tlOwzAQBdBuMCVpIUmdtenO/38jsSflIvFU6lshmPuQ1B7JR6PYVicWy+OymN2Sp/mPkKnclNmciUAhI2soPOT1DQoPeYFCRKAQEShEBAoTgcJEoDARKEwEChOBwkSgMBEoTAQKE4HCRKAwEShMBAoPgfLMQ6BMoyLv6++JjiCIIYYYYoghhvxdZLVEUsmHZ1H6+fPwqxZJl8g+EtL4V3OdPlIQbSARXbwoYyIu0zSirfRSuuHVjlg+lvu7kEKQehhncvB0NSIbVCMhh/DBc12bhZS+lVYboSHSYhdERVwa0mkrRTBc/4mctVxGOYxHncnCYCuKoFzFRLowOMRGXB7S6EwSljwDKbRcRfzwl6WmEeLuOvmD4s85Eel9Fys3PDoesvVNhHYSGlK5sLP2oZ+oiEs0rchmvOLrL1d+PZZ3dyDIVhtJr5fLziNIFwnJxrVVO8VCLgnSyml46oWy8ROlHBNk97v/rRhiiCGGGGKIIYb8U2QxuzuLicXysHwA0QemOVUpFhMAAAAASUVORK5CYII=", 67 | png: 68 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAh1BMVEUAAAA/UbQ/ULU5Vas/UbU+UrU/UbQ/UbXo6va8wuV3hMtgcMK/xeaQmtSwt+DP1OyLltKGkdBDVLdjcsPf4vNRYr3b3vGapNhWZb7j5vRJWrnm6fXLz+ukrd2OmNRodsV/i85dbMHFyumUnta1vOOpsd2ep9pYaL9NXrtFV7jW2u/T1+5ue8dTiF0NAAAAB3RSTlMAVbsIuT6drnBT7QAAAelJREFUaN7t1tluwjAQheFu1E7YgnFiEsjCTpf3f76OMe5Ae1PiDKrQ/Dc5taJ8lQDBA8fdrt7TNb0+t0IexVW9PFMiqJAifVTokNEQFTpEokKIoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKJoEKHoPJIgqDSOTLr/079FQmKEUYYYYQRRv4zkk7rpWqLxNKVrYaFsEXwx+i4JrAGx6UmYwnlo2UYYp2pR+azC+Qt8rfkcSgi9f6EyN0Fsj27JW2LZMaYjYQ2HtHFGTK1J1FcJxqupi0ytqOSUGoRW3WGlHBdKRiNvTcIURpW7JF3hYh90RsBFRIqQhCxgJV4RDYecY92bytTlmUajEwcAnPxjcwschBYAJLmsD4dMsxgeqRvEdUFovoDGHnhkGQtZXSB2P9idky1QzAjTsghh5fhB5K5e6aByEB5xL5ttxSIXoPhkf1c5muHLCX0FoxkVVU1NTwHEbGBY4ek7lNqmwcgY+FDpIaLQ1RuH02CiJVDTmtNg8TfyBCu2R6G6hxRHx45aBi6rAycdIyIxCOikdh72ilSaI+ISe6NqNWXVh1F0fYcMXAQH1cCa+cOU7PQUi929R38JGKEEUYYYYQRRhi5O6T3FFzvgeNu1heMCaqMp79tLwAAAABJRU5ErkJggg==", 69 | aac: 70 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAZlBMVEUAAAD/wAb/wgf/xgD/wQf/wQj/wQb/wgb/wQfEcgX/8+DUhgbflgb/yzP/3oX/3H/MfAXIdwX9vwfWigXknQbbkAXPgQX4twf8vAbyrwbrpgb6ugb1swfuqgbimgbooQbhmAb/xyD2TAKRAAAACHRSTlMAVbsIuT6dVGARlPYAAAISSURBVGje7dbrUtswEAVgLk1bVaL1RU4sx3bS939JtLodM/yyzDIMs2cG4uwQf5a0EnmQSD4vp6c9+flchTz+3pUfz5wIFGbkBQof8vcfFD7kDxRGBAojAoURgcKJQOFEoHAiUDgRKJwIFE4ECicChROBwolA4USgcCJQOBEofAiUX3wIlMcPRf6/vM8OpD6CCCKIIIII8oWR2bnLMaRXStltwflCg7ejaRVVbFePdHSL87ZilM+c310alaK7amRRlOumEu56z89wViVDNTIoyg2FWanN2Ky/ble3YHg1SBunAoW7CrlgWGHFNIa3A8EqkzOWyjkWbFyRMpc3PMoOBKtMP1NZaJr8Nt9wKp220FUl0viP0n37XLAk9vn5bVmebvSpQ2Z6bpLa3J+a5s7mXljh129GuskUOmyJhSs9erD7D0POYV4mbIJbbKLQC4cRPHdDL2W+ehpUfJkOI1jlIQ3IlUOmiwMa0h/og4hWiIkti7SEobsuPjXIqDZp0iGDLNvdMdXuE/ogMsfZQgZarXwa2Nod39MHDYWOqDUdMqEw0FVarXs+jdcKpGvL/ljj3JvUTGkIjhaFStaQoWrWZFGhlSgu3ANnbhyCedsb95ruGsI0Y1B23vzTMGmhR432q0K01rd0bfy1mfyvvPWc9rmG9uhb7w3uO3wlEkQQQQQRRBBBBPl2yOnpcE4PEsmn5RVOlr2WFeWCkgAAAABJRU5ErkJggg==", 71 | xls: 72 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAnFBMVEUAAAA5jTw4jjw5jTk5jj06kD43jTw4jjz////o9elbo1+eyqCZxpzx9/H+//7K4ctsrG88kUDQ5dFhpWVBk0Q5jz3s9OzE3cW+2sC72bxZoVzl8Obg7eDN486IvIuBuIRvrXJPm1L4+/jz+PPb69zV59W11benzamUwpaMvo57tH1xr3Rdo2BJmE1FlknG38et0K+cx55mqGlMmlDVvqvMAAAAB3RSTlMAVbsIuT6drnBT7QAAAYpJREFUaN7t1llvwjAQBGCO0k25SiDhCLQc5Ybe//+/VfWaDFXFA60HCWnnIdG++NNIjp2CxXK5VErn5Lb8J6QoZ+WmzESgkJEMCg+p1aHwkDsoRAQKEYFCRKAwEShMBAoTgcJEoDARKEwEChOBwkSgMBEoTAQKE4HCRKDwEChFEgIlOPJZ/Z04IHI6hhhiiCGGGHIKSXr3Lh0/T3Tsx0Gb1CKXnh8XOq4lKJJ0dVmtstNhGAdBkMfjKm0dthIYSedu3eZ3lYkaizQQgrR05b4roh5hC7/q0tUDtxQCkjXd2gN5cO/ZlIHIm1bxW+BdKMjzkyru2U04iKwjZCwkJB7mxjxlIbLNkZbQkLThjZHwkHHeZEdBcEpqlZiF1CJkQ0Kms6PvpPHCQQY/vvgVBeng7HJYRkDS9uEU/vD3FwEZR76I+CrRJDiSDH0R3F+jODRSzy9G3PGboAiO+T2uYmzjUMgSRY6qrIIiWUOz93NLx+706v6FDTHEEEMMMcQQJlIp/TuVgsVysXwBMlak1DNsev8AAAAASUVORK5CYII=", 73 | csharp: 74 | "data:image/png;base64,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", 75 | avi: 76 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAk1BMVEUAAADzQjb0Qzf/OTn0RDbzQjX0QzbzQzf0Qzb/6+76pKH4hH39ycn2ZVv6oJz8vr30RDj1T0T/5+n7rar+3d76mJP6nJj4eXH2Yln+2Nr5kIr4fnf1V0z0Rzv8wsH7sK73c2v2XFH1Sj7+4uX909T9zs79xsb8vbv7p6T5lZD3cGf3aWD+3+D8xMP8t7b5iYL1VEgPl/i3AAAACHRSTlMAVbsIuT6dVGARlPYAAAHUSURBVGje7dbZUgIxEAVQAdGEbWbYmY19V+D/v87uDJm2yheRbqrUvg/OLR9yIOkATxrN41Kv3pKX2o+QirkpzzVJhBRhZEyKHNLokCKHWFIEEVIEEVIEEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVLkEFJe5RBSKqxI2v6a7HvInVFEEUUUUUSRv460rbVvGbbIQobGZQu1H5oWPJoMyMBCDtjcku+uhUuoPcOGrBFplF43wza2kIQNSS1mEmI/Yj1iO2OL2JDYurSxh31oMbap2zg2JIcdgpUGxq99wjKBsmdDIjxgWHJtMAlOGuzcxULGbEgTV8E3MPcktsQNMBtyglVSlGKD2RSLNtwAcyELOI+Vm7BNMcR0PUZsyKi4Iyt4XIrrj+gC70vEhvSKl7yDx7kc4ugAf3LDgdCaxRvakoqbFrMhB0vpRn6IOwEOMBeCU0RJ/BC3ltZODBcSTj4jUz/EmB0bMsZdGmLwKJaZgewLZMSG4AHn5X2xMz/EQC/YkHX5yWhy3KJy4GxguJD0+vXhd6kf+iG2MRsyC4Jgm12PJ4DM/X+xuTSgz37LrxVFFFFEEUUUUUSR/4bUq3en/qTRPCwfjDq8iNZ7a4wAAAAASUVORK5CYII=", 77 | html: 78 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAZlBMVEUAAABOt6tMtaxUq6pNtqxOta1MtqxNtqwAaVzg8vEGb2ITfXAVfnFAqZ8tlos9ppsznJJrwrqi2NSe19INdmkfiHwpkocCa14Jc2c5o5gYgnVIsqg2n5QjjIFEraMnkIQRem5evbS21sD5AAAAB3RSTlMAVbsIuT6drnBT7QAAAXBJREFUaN7t1stuwjAQhWEupTOFXKAldu7Q93/Jjo1gVKEsCD6IxfwLPCQWH5E3WVjW69qsHulzPQtZ0kN9rJGIKmDkoAoO+f5RBYd8qQJEVAEiqgARVZCIKkhEFSSiChJRBYmogkRUQSKqIBFVkIgqSEQVJKIKElEFh6iyBCGqJEd+D/clRKYzxBBDDDHEEEPeFSmZeUuxo4x7qliTG1uWWrp0ZmlHOUtpEd3QeSTCJYV6ToU0zrlWplrW4oo4Cg3JkFARf0u6ItllAxbx8UgYiXjmRsa9TDgkYz7JWMk0H/FVbDuFOObz5U+c5iLaFFJ69h2NQhU4JN8x9+Hi8AxSx/wk4piHcCRNgTv4XDYdqWbfIZHw2YRLUKSV78wnLFJwqMQiI0uesAjVsmT/kCxWpkQqWZwit5qUSB+OZDaSyzO3FKtkbOLUyzRQrJVxJOpk1+3GmN0q3+dtxRBDDDHEEEMMMWQmslk93WZhWS/rD702qQKJu8/ZAAAAAElFTkSuQmCC", 79 | torrent: 80 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAQlBMVEUAAABMr1BLsE9LsE9OsE9Mr1Bxk3FMsE9LsU5NrlFMsE9NrlFMr1Dc7chwvm6i1Jiw2qNPsVKQzIil1ppxvm9qvGnVfqFUAAAADHRSTlMAg3ddIMYBdUE/x0I6OfvFAAABQklEQVRo3u3ZwW6DMBBFUbBxCKkJ0Cb//6vd5SJV2Ig3KVI0d+nNkazZvcbzPO8z6mIfDtfHbgfxdcti6VohLm02qL0UEQxNKf5VNqr0YzcrJBXuKpu1fWPRDombSLBDwvtui1oNmX7ej0zjiGKNYKBYIxgo1ggGijWCgWKOYKDYIxgo9ggGij2CgaIidQNFRzAIRUXqBoqOYBCKjGAUFBHBKCoSglFRdOQxvZrHVTPvDwH5032N3DM54ogjjjjiiCOOnIc8v19Na2Ti/SkjyzxWmhcBQakZAoJSMSQEpWroCAphyAhK0dARFMKQkLqCoSMoVUNHUDCsERQMawQFwxpBwTBHUDDsERQMewQF4xgS8h4Fo1CvDQILRqF4yrRBycpIzXZXK2T4j+Hs/AmwaYakEmnYNcuG9nAhdo3ned5H9At63gb2rVwlnwAAAABJRU5ErkJggg==", 81 | jpg: 82 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAilBMVEUAAAA/UbQ/ULU5Vas/UbU+UrU/UbQ/UbXo6vbg4/NgcMKhqtucpdmIk9G/xea8wuWyueKOmNSYotdmdMRWZb5QYbyDj89ndsVDVLfj5vTb3vK3vuSjrNyRnNXDyOhvfMhKW7nm6PWkrNyVn9Z3hMtaasBFVrjW2u/Q1e3Kz+uvtuB/i86rs9+mrtyWEvPmAAAAB3RSTlMAVbsIuT6drnBT7QAAAcVJREFUaN7t1ulygjAUhuFu9kTcAAVZFHDf7//2moShnx1/iTlO2znvD5OJo8+EIOOLJD2vzts9fb63Ql7prj7eOREozIgHhQ/p9aHwIQoKIwKFEYHCiEDhRKBwIlA4ESicCBROBAonAoUTgcKJQOFEoHAiUDgRKJwIFD4EyisTAsU5Enm3JXcg7RNEEEEEEUSQ34okm6kXOUAGSqmhHrvK1t1fvOatydEu7oPELWJbka1Mm4Xh1j2iAruPq5WeQ+QchrNMj6k5B99cvGBc5nbBHTJtNjAnihZ6XJvD3+vJyS1CMz3JidZ62JEpxPVyhdiFQ/3VPpnGy+UydowEelIQXfSwJOQW8estHPUQMiHRXOlibdVINbFFrhC0234jcb0yco50x8SO5Bui+kz6HMgsCAbriKj5uZztLGiPRHEcn/AVFhkTmpv1RxFP6RKivr1jb5HSHE71IFKZZ1NJycE+qm6RbWauH/bUCqFCfzZb5fp1sQGCVkpXrOZ++gBSqqYZAUF6jyhsiVDQ3LJbINdVRUNkA2qL0NTPVFqcyOaPRqMN/WztZ4t0lw+qv/+XSBBBBBFEEEEEEeQfIp23h+u8SNLT+gJSUakHemojGwAAAABJRU5ErkJggg==", 83 | react: 84 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAxlBMVEUAAAAhlvQqnP8ek/Uhl/MhlvMilvIhlvQhl/MelvYfl/AglvIglvMhlvMhlvMhlvMglvQhlvMimP8hlvMhlvMglvMhlvQhlvQglvMhlvQhlvMglvQglvMhlvMhlvMglvMilvMglvQhlvMglvMilvUgl/Uhl/MhlvMhlvIhlvQhlvQhlvQglfIglvMhlvMglvMgl/MhlvQglvQhlfQgl/L6RRUglvQglfH5RRT4RBX7RhX5RRb5RRX/Rw/5RRX/Rw4hlvP5RRV6tYRqAAAAQHRSTlMA+AQKFfwl6I8aECDb7PDMyJgHe2xhXPTQRsKddeK5Pq9WgGY0L9O8oorfk07Wq6ZRtHAqOemGNodIPSvnEPkSRz9FrAAABdhJREFUaN7tWnl3ojAQl8MLL1BBEFS8FY96rbbb7a79/l9qnQQIgSig7b6+fZ1/+hommcxM5pfJjJlv+qb/l0qN9WRV2w6M+nWeujHY1nT9ySrdJSK3zZ5dqpo9Nk/PrHo8WTuXXkYfphNqG1EWo02xVPtpZWjnMHVzIU27EZaUUk4cTMoXtI02b7tm4wb1gC8GnGum9lzrq4sK4hilkcHrMGfhLlrcOXjBWs5Xo4ZHnF0RDwgKYkjlEJgxDwhVO2jNlob/V1vo347KE55CWoPJF36dD44Ic2yewmWUL2DzHQVK+wmcjxQBAmssQ4PjCfa/JGGPT8Yhhg14qJhYSBOcTilCzH5erdAfRYg4EpzfTCxkduE2WeeaO7vEaTHT4gkMM2R9OOSxjPyJaYBU5ws2fGDjSBbFRo/9Ec5fUhkSLMQEvKIbMB3m1xx8qqc5XALjg1j2fFIWr20u6fHaAzNjXJDhg47QQGZsgocPMVhMq81H17CRDFFCkLKNMgjIzI+Zq4Dt5Fmt8Ji5RGCOGF2F0UoOqYowV40cCxiVkmIwnNNxGFU4iMGee1g5FrCPYDCTlAByjZB2CIY16k7rhLRdwlgqEG7SynWJG4iDutGIlxMLeYIbK5iSlBYITLbTdg1Re2rn0bVWCsYeAOgssZDGhXuKrWTslGnnfIM6U2VnYLtBXmElFrKEbdd7DZu1PFuU3TjUK+DKdJcWd05JXJowyYzm2egS1bUybzSHQ63f14bDZmOurKtRrux8lCgSrUlwVks2B3n4m2Mo3AKzDkwZ/vo02Ylx2GhyZFd6Qdvz+LSyr9Wde675vVbQifacsr8lwg5uyVV8DLPbPBMa2rCXsXtrBudeTYxFxdtMeZD3N8/L2FhMynEk/ixkO8czg8I02ibvKju7AJQJ8UxwsXE1oghSTiGFucDazDV4fhO9C2bup4Ho5VCcBPBdAc2u3qn1MswBRjHr5WrioILXMkPTxDY+S0fJldlydzg/344ww0tohzBdcGdb+HTLIuPyXpNQWmNkKXEwHGR9fXl5hb9BRq6EMeWJXC12JBUQauQRQ+ecT3gJj/48/3q/0K/nt6DvYfUithYhDSlTEwjqIql7ykfAY51ogP/5492lHz9p0B81YJeUD/bOOYjKBivJMWGsCzeu6Mv4/e7TbyzFOxpbsLcSuo3LQX+uYKlwlgFKILJ8WyE9fF18i1kkegn5qcAkEKoaKyEGyvtWfX6n6Nm3rBtgemQJlYguEHn0ZYpo5w+Az4OqZChVmPC28l06ZYe0hI5HxVfk9T1Er7QqVYkNCBg4yuTwhVxPSX8JC3nxPw3OlNvpQCh/pBDzmpB4c+UfN5fv+FV6x/9K6ngSEernHWGyXCUXG4xvdwcjgZXi58JKBl1YDgMgRw8A5BgDZOidVtViof4tCvWlm1AvC5FLy/64S2uLqxci4/rlqOt3CMa46/odcJHrF6hunhFVjkibPpVIrG4nEhU6kSge3URCiU5bkpSID6REw3QpEU9SoiUzuVt4KapzvDe5O3a8VHUhXXvAr4Pp/CldmtoLJvfr3K06gcIR1slCHSdLuMeqsiLzOCWuLCHudOplI8/ing4zmXov6fB0iKfxkfUIsk3qEVQwbdYj6DhO9ZxrndMRnlBM9zDlT9baSSqgvLZOPGhm3PHElozmoutkr6+edbqLpiGRJ/bdxQK+iIsF9nRaQzR1iwWFIn93sUAG4EpQ9tjGlj0eL+A4jAKOk/lKpajYoto+tqj2eHmw6MSUBx8udE5ESb9Z6PxKJdt/UnwWHiqjf6WGQEaPbW0crrY2vlaT5p+0m4rMxtmKbpyt2I2zj24BzhktwAeamfWh28xU6WbmsB5CnU0mBeG2rOBaz3JTNjnSlu1YVFtWzqShETJOZaH21UCDmWc2mAuq12BujVK24z+9VQ60CTX9l4wI3z7W9Ied2oGfLxzYPAel8sjPF4BK1pOu1+zG7R9iNGy5hn6I8U3f9N/SX9TxYMM0vP4xAAAAAElFTkSuQmCC", 85 | mov: 86 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAolBMVEUAAADzQjb0Qzf/OTn0RDbzQjX0Qzb0Qzb/6+76pKH4fHX6oJz8v772ZVv5ioP/6ez/5+n9xMT0Rjn+2tz7sa/91NT3cGf1STz+4eP6nJf4gnv3dW32XVL1TUD9ysr+3t/7rqv7qKX6op35ko31V0z+1tf90NH8vLr5joj4eXH3a2L2aF71UUX8tbP6mpT1VEj8wcD7qqf5lZD5ioX2YVf4h4CY71jTAAAAB3RSTlMAVbsIuT6drnBT7QAAAnNJREFUaN7t1tty2jAQBuAcSleAqI0xdjDmfCaQE+37v1q1u8Y7TCcXbKNMm9F/EUlO8GdLuxluQkI+L427a/L9XoXcwlX5du8TEcUz0mHFL9Jss+IXMaJ4RETxiIjiERHFJyKKT0QUn4goPhFRfCKi+ERE8YmI4hMRxSciik9EFJ+IKD4RUfwhotx6QkT5cGTZ+TP5FYg+AQlIQAISkID8S0i5fzx8CPLDYH7yIqNFi+aj9gQXY1rtcVoAZeWmXQ2y5cWTIOXKVJkmAMmDm8wAs8RrCw1y5EW3RnIy5JtJ6sY1YFr05hrkIaEdimqk7cZ4kO2sGyN3ywLHw/n7UQ80iHnE+dCckRy35wQASZf36Rn9IbiM8YIOecP5vEay+u1a9OB878H5bXcKJDbGVg8ZM7JwwwYwz8guAQZUU8zHIwXy4j6XAxwinCJCG/8KmCTizdwb/CMuQAsKZOCeP6OdmTQZmVJRUbBbMixixiwWvAZ5srTfM2PSV0ZSpIHSoxPnS1u2Sg0y39J+993903eRgtqp436uQIPMSmOi0RI7YfMOwkU8ga1bNVVIii+xK/B1rJzJ/OJMuIjLFEkVcsRqak6xW8ZSXdOL6uK6KnpYYyrEYq+v3ec7sJY+sRd9wkVsqX9USBfy2HBn9410PD1xwdeBiphy0iKwMdh+NZL0qkMZreWkU0ZKJcKD2dUI7Zd5eWuvsNGr2xZk9EGNLOlfkiBJ19RZAOcQ4WquR/DELQgCI1sRERvnIjaZAhlaa/HhTtYWbpi65R4ou+MkivuzEur8cr/c5P/jV6KABCQgAQlIQAISkC+ONO7+Oo2bkJBPy28vJrKQVswJOAAAAABJRU5ErkJggg==", 87 | woff: 88 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAilBMVEUAAAC5aMi7aMe6aci6aMi0acO4Z8m6aMi2bci6aMhKFIzz5fV5OKWnWb5oK5y7aciKRK+kV7zGgdHetuTXp99+O6hdI5ecUbhjJppTGpFPF46tXsG2ZcaWTLV1NKNsLZ5ZH5S4ZseSSbKOR7BWHZOGQaxxMaGpW79MFo2yYsSaT7ehVbuCPqrAdM17FobCAAAACXRSTlMAu0BrzBEvpg42dNklAAACP0lEQVRo3u3WbXOTQBAH8LZqdc/khCqEp/CQhATa+P2/nvsQ3am+IcJmOtP7z7RcGtgfx94xvQsJuWUe76/J5y//hTzAVfn4yRJRxRh5+saKLfLjuyi2yFdVDBFVDBFVDBFVLBFVLBFVLBFVLBFVLBFVLBFVLBFVLBFVLBFVLBFVLBFVLBFV7BBVPlghqiyN/Hz6NxORebFENAEJSEACEpCA3A6pnHNDBwCtcx4PJ/x8AMxL3Q5FuiqBsnJ/sl/rOJuGcHF3AhjxkAPAMx4b0LLFfgmkwZOf8cYdpgSI8JC8qrpdAEnw5IiKEybldkJm/bml+Y3yV59wYkJyGUdTkR1eswKoHaYH8HiI4Yi/jwBQkdILEoGEkPSqxss1HiBzUpeqVl3BFMgEs/lIN/ByKghJebG1EPMSo5TU+242Aind+8lRhm7N89ny/VM6Xg+zEX7+ayzLj4jKn7lPDXBy+paRJKaUjLQxZzrS0zJNsDEHXFf8AfavkZgRyZGRS6qJiGy/vsE7pZ+atqYBQr2taRZnnE3mXAEGCC2slCaA/cgRS2Xv+L97stpQ1tKTDQemI5mjFDglTg0Gq4s2uxTNnWx7g31Cu1peLd5dXmBL73jMRt6uAAkPysvkshGgPEj1+cjoKC/Sb5cD5jTQqGloRodqAUR6MVRYWnqjj5AybGARxP++rODecHYk82KFZZDIe99zLRxsQTLua+/rXXU5Q78ocVy/wf9WAhKQgAQkIAEJSEDePfJ4PzsPdyEhN8ovQ3De7e2LbrIAAAAASUVORK5CYII=", 89 | "c++": 90 | "data:image/png;base64,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", 91 | mp3: 92 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAbFBMVEUAAAD/wAb/wgf/xgD/wQf/wQj/wQb/wgb/wQfEcgX/8+DThgbuqQbmoAbspgf/yzP/3oX/3H/knAbLegXGdQX9vgfRgwXdkwbNfQX7uwbajwXIdwXxrgbglwb1swfWigX4twfqpQboogb/xyBoWPWlAAAACHRSTlMAVbsIuT6dVGARlPYAAAIGSURBVGje7daJbqMwEAbgHpvdYU3prmMbbG76/u9YD24zpRGVMulUVeVfSsxA4IsPObnJyfm6HO4uye97FnILF+XXvSRCijDySIoc8u8/KXLIX1IEEVIEEVIEEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVIkEVLkEFL+yCGk3H4q8vR4ngsQfjKSkYxkJCMZ+c7I1A2WhzwUmCEV3VpUAGWR0jrtIUUf8cQ48BGdin6LJKcDzPhSmo6NjKlwhFDMgP04lUfLRVrA2OItYvq+H7FWAIBjVU+lic3MRYp1EMoNcjxdnmDCL2LTeNYchCalPkdsG48W8MuyVLGccWh5iElDAg4Ptwg4Whb4aX5PVHy4BfB4+DGCl0se0pt1Uqo47vU7xKeuYQat0VDARFR8rVMSwhYZ8LHGA5xWsfJMpI73O4AmLk9CKDW8QQIXCUN88xO+jeeIs7Bmds6kkodgJ6oFu6PeI6a3cIrHZfDAQ0acjjrgMnKEGK310lmgpPOKhyi8uTniZtxsJv4sE57nItYU6fYdZG7bNuBquwZJO3nYRbqXvUtfMVypKao9JG1hau4Nf+JVGmzjd5DN70lj2Qg02OwjUL8aE1yOlEqpGjGl5tiEWHYAXWwCbFKOpjBO25/wlygjGclIRjKSkYxk5Kchh7urc7jJyfmyPAMCocCv5MAhUAAAAABJRU5ErkJggg==", 93 | pdf: 94 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAh1BMVEUAAAD/VyH/VyL/VRz/VyL/ViH/WCL/VyL/6+776ef+rJT/uar/cUf/dUn/fFX9qI//WST/w7j/4eH/pI3/po//kHD/f1j/dUv/Xyz/0cn/oor/nYP/5uf/29f/ysL/s6H/g1//aTv/397/zcX/6Or/wLL/iGX/bkL/ZDX/rpv/lnn/lXf/i2rWGuWlAAAAB3RSTlMAVbsIuT6drnBT7QAAAXpJREFUaN7t1ttugkAUheGqtUNRW0ZBOYniuYf3f77OwDTL2JvaYZm03f/Vmpj4hUAId5J0u4b9a3oY/Ajpqau6HzARKGRkDIWHhM9QeMgjFCIChYhAISJQmAgUJgKFiUBhIlCYCBQmAoWJQGEiUJgIFCYChYlAYSJQeAiUHgmB0jlST74WfQ/xTBBBBBFEEEH+LPIUtG22+UnZRu0xCyeqaRygtQfims6B2FYRAQnKBRCbjjpEyjiORzsztg6p4rAKTMUnErcdPZCpHUlgmrTIzJzf7A+pQyKFfJBoadYrEJWZ8d4xonTz70BCM14YSH6GFGbojpF0alYCpLlJW4csmk6eSHTcm7GrL5CsRVy5B4JWio9kKR0pw1RdIpVD5k21D1IWRZHMLXGO5Gbsu3y6EJCVGTEVcW+ANRdJ7YUsIyKy1FUZmA6KiLhmio5sEtUVMtZaj9RZhbaNwoN7pGt7/A1fK4IIIogggggiiCD/FBn2vRveSdLN+gDRzag6fGOSLgAAAABJRU5ErkJggg==", 95 | ppt: 96 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAh1BMVEUAAAD/bAD/bQD/cAD/bQD/awD/bQD/bQD/////8+D/dxH/iC3/9Ov/u4L/qmv/t3z/pGD/4cr/sXf/kkD/28D/2Lv/cQb/+/j/lET/0Kz/7d//n1f/eRT/6tr/dQ//+PP/5dL/xpr/wpT/vYv/r3P/mk3/kDz/izT/giT/fhz/9e7/1bb/rG5NLz2gAAAAB3RSTlMAVbsIuT6drnBT7QAAAXdJREFUaN7t10lXgzAUhuEO1otQWktlHjpP6v//fQaD+aiuoLnVc7zv6jZdPOQkCxhI0v2ajLr0OO6FDKlTD2NOBAoz4kHhQ/w5FD7kCQojAoURgcKIQOFEoHAiUDgRKJwIFE4ECicChROBwolA4USgcCJQOBEonAgUPgTKkAmBYh25eD+LOiD9E0QQQQQRRJBfQCr3s8osRK4uwu92vZCpo4vDXC/MnKZseyHVs3NVT8QUVhoxrXJ7CBSNoHhpD9kEgb9wVHmDZEEQbGI1rIm8QJXqRVVvZFmfb6mGtwZ5MYdxqic9Lwj1RGiuhtc2EtVbebeHmAePDKLK1ORbRJodxARE/zW3i9RnW7YRT18FW8jBdc97R7X7Qly3OC7qrRWWEDQtNIJ8so2smrNBKVlG4vRM10g5I4vIPkmO9TeHQdZJkpwKQnZuF8IVFkSQG5E0DEOPWh3Uwu47kqjF7R9/JRJEEEEEEUQQQQT5r8hkdHOTgSTdrQ+o46cimmRaOwAAAABJRU5ErkJggg==", 97 | epub: 98 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAxlBMVEUAAAD/cUT/cES/Ngy/NgziVyLlAAC/Ngz/cEL/b0K/NgzANgz/cEO/Ngz/cES+Ng3/b0L/cUO+Ng3/cEK/Ngu/NQ2+Ngv/cUL/cEP/cEP/cEP/b0L/b0P/cUPANgu/Ngv/cEO/NgyjKAzgWDHaUy2rLhH3aj6kKQ3GRCDRTCexMhT6bED2aD3tYTfzZjy2NhfmXTTdVS7kWjOpLA/xZDquMBLoXTXLRyOnKg79bUHfVi/WTyrTTSnQSybDQB7APh29PBu5OBiosyf0AAAAIHRSTlMAqoCAqwgBZ11O6dmrpqKiiHp6aVlMLyzp6NjXrqyJiLVQv/8AAAH6SURBVGje7drZcoIwFAbgbtp93/eDwWrFQNncbfX9X6qJp4rOQBQSnV6c/yZInHzERIaZwxaFQimQ0u3b+Z7IdqGcXRyWlhLl/SMLA0XzcF1eMo09axoonpeSch6nlgkETlRzubHMIHCgQI5NIU/Zxp1lCoH7TGRfgRj7va7MIZeZyK45ZIcQQgghhBBCCCFk7Yhvz+IDNBmm1QRMS5znonVtEehibyC6cyHVyiwdADb74AUgUxeHn4AdNfiYdTd8AwiOnY5g2roIhimRSpAPYQ4Gx4o55z15upGOBJzboWh/8iFfMA37GxtacjieishFH8iL0UXwvJ+JBKKt6iOeOOpnIj3RevpIrJpJdyzaQZHd5a24JqPvn1h+zdFBqoz1hqFcWdUWHn9AMSTX/6SeExkyma9FpNaHdKRv25OJDjUWHlP95gCg3MJhVwOJXdd1AECFQE0cRHpbOEkbb4Xgy0ufQzpy85lC+pMdgZiXIFEl90x8F5OCcDnaoBmEckaIRI7DPTmxQrf6WgoCXtIdSSRJ2xwShdPuASwgDccMgspo0hn7MI906g6sjgQsCT4viGYxTWb3OMh0bYzfcv7fIxEhhBBCCCGEEEKIAtl8ucl84WzzJUDzxcznTZRlDzdSYF5/qfy1tPai/+N1eYXXF951X1+gUCj58wtnbw12f55dNQAAAABJRU5ErkJggg==", 99 | c: 100 | "data:image/png;base64,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", 101 | flv: 102 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAeFBMVEUAAADzQjb0Qzf/OTn0RDbzQjX0Qzb0Qzb/6+72ZVv8vr32YFX3dW36pKH6oJz+2Nr0Rzr6m5f6lpH3cGf+3d7/5uj4fXb4eHD1T0T9xsb7rar2Z131Vkv7p6T3a2L1TD/+2Nn9zs77sK76nZn5jof2W1D8ubf4gXpMF+79AAAAB3RSTlMAVbsIuT6drnBT7QAAAXBJREFUaN7t1tlOwmAUBGAW8dAFLEvL0hYERN//Df3PgXRMvBHbIVHOXNBJSfiS/tOEnsdzv4wGt+R5+CukLzflachEoJCRCAoPmUyh8JAxFCIChYhAISJQmAgUJgKFiUBhIlCYCBQmAoWJQGEiUJgIFCYChYlAYSJQeAiUPgmB0jlSRd+T/QxpGUccccQRRxz5x0gyRlaShs8X0cz1RmX1rHXOQEq9UVj90BoxEFmGOrG2DW0prZHTzJJ8RY6hHqwdQtu2RzK5BogU+sU+lLWWgoPYby9CWWlZcxDZXDd1CteNcBAbcQysNVJGmqpBmhHnIlmOAXcw4VmDYMSR7DBgAmLvx5s9tZqBYMRHede3tAtkYTk3CEb8qg8t3wtjXRhxahvjIBixHgwTicaXJBwEI7Zz6R7J40sSHbGm7hxBdjpiTcpEbMQYcAukikMapIwRPe46XKd/5N+KI4444ogjjjjiyEMio0HrjHoez93yCV71ou+7Uk4XAAAAAElFTkSuQmCC", 103 | dmg: 104 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAYFBMVEUAAAD/gav/gKr/jar/gK3/gKv/gKvpHmP85OzyQ378c6HyR4H+fKjwOHf+lLj9utH9t870TIX9d6XtLG3rJGf4YJPvNXT3XZL1U4rsKGv7bp76ZZjuMHH6aZv2V43/jLOjGU3yAAAABnRSTlMAVbsIPp2VTiuNAAAB/0lEQVRo3u3W7W7bIBQG4DbNzFxwNwy28efu/y7HOaW8lfYr2KeaKl4pMdgOD/FBJE81NV+X++2R/HgpQp6bh3J7kUSgCCNvUOSQX7+hyCE/oQgiUAQRKIIIFEkEiiQCRRKBIolAkUSgSCJQJBEokggUSQSKJAJFEoEiiUCRQ6A8CyFQLkf+vP2bB5DyVKQiFalIRSryXyOv+74UIa2i+E3vaSDuh3TVU6flprEz39m+FiKc1gDpGs6uMtJvKsXvJxA1AvEMNgHIiPtmU4Js1vIYNiNq5YtjRgZurKul41GC6HicaP59RiyXQWWk+3iGlhqlCM/6IASPbs0Ic1yLhSZTjFgaLiPK0KmMLOlU5NqYYuTg+TMypqJs1GRkxfyRAoSK4hLScVEM1YYRrvt8ATIA2UJ88Rk/AHG09t5zBeKoBH2j4/jTJyTVn6+dR+bGKTXQ23RchaAm2zvi6UvonkYLQOYLkIDVpWg1uYn6FqtLYQMtRjQ10iDGeKU6pUJCMPRJxMXG9IE0naIsTLdpz5/OIkbz9pqRQ3EVMkK3uf4MMnejVzzVjPChBbJQ3+ug5zIkRzdA+OkNQGJxEGdKEX80nxFLByBQ+Cf0QSR0HD2lT/bUi+09nqNtM/ZCw1m0oz8DdvkGf4kqUpGKVKQiFalIRb4Zcr+dzv2ppubL8heKlpRwpzQ/5gAAAABJRU5ErkJggg==", 105 | tif: 106 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAUVBMVEUAAAA/UbQ/ULU5Vas/UbU+UrU/UbQ/UbXo6vabpNhgcMJKW7l8iM1UZL2hqtvl6PVkcsPL0Ou7wuRsecd4hsxEVbdTY73V2e+osd65wORBU7YNcnYUAAAAB3RSTlMAVbsIuT6drnBT7QAAAOVJREFUaN7t1skSgjAURFEGMZA4Muv/f6hMVV2UGxCaEu27eW+Vs0gW8ZTariiY0zH8CPHNrA4hE4FCRiwUHnJJoPCQGAoRgUJEoBARKEwEChOBwkSgMBEoTAQKE4HCRKAwEShMBAoTgcJEoDARKDwEik9CoKyOlPa9YhqyMCFChAgRIuSXkSIelRvXjrMxpxiVQoaeSdu1OaluFztCqqTPLUBQi9y6bYTczZCQr0Eq2+WoyFAuZNqdZF1u/69LiJAVkEeaprZfi7TJGZM1o97Tb0WIECFChAgRIuQfkShYXOQptVkvGLufPMdKLhUAAAAASUVORK5CYII=", 107 | apk: 108 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAZlBMVEUAAAD/gav/gKr/jar/gK3/gKv/gKvpHmP85OzuMXHqJGf4YJTsLW71VIv+lLj9utH9t87vN3X+e6fxPnv/fqrzSoPsKmzrJmn6Zpj3W5D9dKL7b5/7a5v2V430T4fyRH/wO3j/jLPUh81YAAAABnRSTlMAVbsIPp2VTiuNAAAB80lEQVRo3u3W61LCMBAFYEVsTAtqk7S03Frf/yXNJsKpODLT1XUc3fMnF5h8ubVwo9H8XJaLObm/YyG3xaws7iQRKMLIIxQ55OkZihzyAEUQgSKIQBFEoEgiUCQRKJIIFEkEiiQCRRKBIolAkUSgSCJQJBEokggUSQSKHALlVgiB8u3Iy+PHzED4UUQRRRRRRJG/jDgb406t3uaMzT53+NjoqNJQd8VEKhNTnVprc45P8urt0z112cBEhjQgEKQOQIKlnh1zu8LGxJRhgmy8H1vqXQNJ6z1yz6QzKd0Eqcn2sdKeEUeoDVykychwgRS7tD0n5EitfcFF2jhDG7foEinKNHpGttRoCi5CE24aTBPIZoLQ5Vg5NnKkMSqSLpCtITkjDU6NhdDNdI4m+h5xI12zQEjOKrARmq8tipoO+YyUbduWJq0OiKnYyCHf/mMqMoJYN0UsG6nzZnc0yCUykAHE9EzEpSnGULmdPPF+OFDzhDR1OhUe0ptJDjj4FCB16NJSeIifIvWnSJVvYes4iKM7NPqYkRR3BanSC5ODVOn9e34X91eQVG4cAxnwS+Kpeg3psZQ5SJ7+AVegdFeQ0KZvzEb2Zcwu17dU7+LTGYtxitjYQUj6pFz/5n8riiiiiCKKKKKIIv8SWS6+nOWNRvNjeQVzuJNKIySCvAAAAABJRU5ErkJggg==", 109 | php: 110 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAnFBMVEUAAAAAu9MAvdQAvNQAvNQAvNQAt9AAvNUAvNMAvNUAvNQAu9UAvNQAvNQAvNUAvNUAu9UAvtQAvNMA//8AvNT///9m1+X7/v5Azd/r+vwQwNeR4uxV0uLK8faI4Oue5u8rx9yU4+3E8PWt6vJd1eQ5y940yt0aw9kHvtbP8/eB3uoixdq97vRs2edR0eL0/P3j+Pt22+hQ0eEyydypTjXSAAAAFHRSTlMAgHeIXfoK33U/5jDj53NaQi8uAUQzrUoAAAGfSURBVGje7dnZcoIwFIBhpMjmUpejQrTUghRwt33/d+uBofWiTWiTWB3n/DecC5xvkAnDEIOiKOpe6lh9U6q+1fmdYLccUMgx7WZj0APFfK/JsNqgXNsSGx4aGpSByLB7oCXfFiAt0JTJN8ZdXYgz5q8P0NaQi1j6kEcu4upD3Ivfd6xFCCGEEEIIIVXTulWQQ9kG5z1UrXDM8JhO694ySWQ2+Sw8AbbA6QmqQhwDPM4nXyUbNQRLxEhZ+K6GYGsxUnbMJZGAMRYUOBwYD3nGUzZRqewkkVfAsnJacBEoS3DaqiAQ47QWIyucQiUkwWkuRgKcZpqupGBVF7iSZTntETn3Ddkq3JMIV3MU4hAyHhLjKad4gk1V18kOOMi5IldE1vWKP0ZVhx+QIgMVJEzSpmfXLN7lIIukjLH616IVzwCTRpaAiZEXwAgh5O8vEgyqRC8S6e2/EhFCCCGEEHKPiM5Pttf9+NzRh4wMbo4uwzH4mboQU4DYvh6ja//DdpN3/Y0zvBZf+b/yjMZsU9dmprih5T5I5Vojg6Io6k76ALZvtFVPD2lHAAAAAElFTkSuQmCC", 111 | mpg: 112 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAnFBMVEUAAADzQjb0Qzf/OTn0RDbzQjX0QzbzQzf0Qzb/6+74dm72ZVv5ioP6pKH4fHX6oJz8v73+2Nn/6ez1SDz4hH3+1NT6nJf5k471TUD/5+n9zMz8wcD3bmX2YFb/5ef9x8f9xcT2WU/1UEX+4uT+3uD7qKX5joj2aF/90NH8ubf7sa/7rKn6o5/4gXr7tLH3c2r3amL1V0z+2dv4fXUhZ3yDAAAACHRSTlMAVbsIuT6dVGARlPYAAAIzSURBVGje7dbbcqJAEAbgHNbdbliVgAFFFCPiAc/J+79buqFCGywvHNOpVGr+C+kZq/hmptHizsbm+9J6uCZ/H42Qe7gqfx41EVGUEVcUPaTdFUUPQVEUEVEUEVEUEVE0EVE0EVE0EVE0EVE0EVE0EVE0EVE0EVE0EVE0EVE0EVE0EVH0EFH+6SGi3H8pcnTPE1yBmMciFrGIRSxikZ+MTN3E7Zsg/5EzqgZJOegAOFhllkb1XTupTzP+MDFF5tUgbCLsHBpvE/7cEFlVg4kgkqzc5lwm/IUZkgVc9/1TJAvDcMczHrdjTEX8dug98ZLMECwX5+Ap8lR//VJdZ9yeBRWDvhkScd09R4IZVVuAHV1C4PBWDgbIAHHIdUxlA4GUV1Dd+g048zzPXQNkSDcPAKY+lU0krp49bkkCdQyQcFDeoUPH3m4gZcMdAPkxGSNeeeA5YpF/QoKRx6c5haBEyHwpY9L4zRwxBXimFhc1ImlDjQyrmZ4Bko8Q/f6RPqarcyQNvgQpeBPOFnECwyYy7gZA8al0b0JWsKEzW/OzmgqSRVHUS4jgZDSxB05siHiwR1y+8lqXp42XlPO9m5AJBGOkvFLzLyBrmtjdiMCKkfVlhCf8RPZkhPAFnYtI9YVfRGGM5six+nO9jCwGWGe8MENgyf0/RyT72YcRu3Al4niet2HM87bcYBomtG66FPA5/SjNcPy8dn7BK5FFLGIRi1jEIhaxyC9DWg83p3VnY/NteQehgMZLDySFDwAAAABJRU5ErkJggg==", 113 | css: 114 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAdVBMVEUAAABOt6tMtaxUq6pNtqxOta1MtqxNtqwAaVzg8vFLtKpDrKEEbWABal1rwrqi2NSe19IPeWw7pJo3oZYul4xIsqcjjYEchXkUfXEGb2I0npMqlIgMdmlGr6U/qJ0IcWQJc2cxmo8nkYUfiX0YgnVAqp9evbSkvhVAAAAAB3RSTlMAVbsIuT6drnBT7QAAAkdJREFUaN7t1tl2mzAQANAsdUUFpEVCYl/t9P8/sRotnjR9svCkJyeaF3nAniuJAfyQIsXHxenplvj+HIU8spvi2zMlggox8oIKHfLzFyp0yA9UCBFUCBFUCBFUKBFUKBFUKBFUKBFUKBFUKBFUKBFUKBFUKBFUKBFUKBFUKBFU6BBUHokQVO6O/H75N25A4iMhCUlIQhKSkP+GqFnOnGHwWb6+zSchcn4MEW2ZZVnZCp+/XiAvmtznss1MdFodQOoyc1HWNu8LnxfS5jrzsebRiATDKwLWgXkBVevsGhWPRPgKv+7FNpqxNQcaqF6LGtajTQ7nx15osPtIpIeasNu5qVJOjC3mwGDywYyLOQxLmE1+MWMTiZyvvx3dVGHGdtugOmcCtpH5bWsjkcpN3E91h5XYgfHcBHeW8PkUicCWb+7qKKW4uyblgJcY0E4euxk7U+OvErPtrnFzTOiuVt4RwftmCatpfP/290SYXHzZyeVD4fKG3xFhvF5t1dFXnXThlFhkcY37ntkss4dc7ZYRkch47a7J9KhCpoWl4PdymM05EoFaw5tPW1VVtpaEVubsbPIacn3gZtR2r3HjtrCAOTOh2DksYIBWiEREeNpKKDqxPDxWajjhhm7ynXyJRFgFVfTeFL5IC8V1rX3Oof3WvW4AH2KR+d37I+/w/TK7x3SIVcUiTIY34SKcOgbTdV3fBWM+8I6f9FhkRbWr673Ydlk56jyc3ys4P6hP8JcoIQlJSEISkpCEJOQLIqenw3F6SJHiw+IP+sut5pdU0NsAAAAASUVORK5CYII=", 115 | csv: 116 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAdVBMVEUAAABOt6tMtaxUq6pNtqxOta1MtqxMtq1NtqwAaVzg8vFrwrpDrKKi2NSe19JKtKoKdGcDbF8Gb2MWf3Mhi39AqZ46o5gokYYZgnZHsKYznZIbhXgPeGxIsqg3oJUslooSe3Aul4wljoMeiHw8pZsjjYFevbT5wlXDAAAACHRSTlMAVbsIuT6dVGARlPYAAAI4SURBVGje7dbJctswDAbgLHULNWy1kxYla7Hlvv8jliBK4pCTaSOdTPhfZDoz+EgI9OQpJ+fjcni5Jd9fk5BnuCnfXiURVoSRN1JkkV+/SZFFfrIiiLAiiLAiiLAiibAiibAiibAiibAiibAiibAiibAiibAiibAiibAiibAiibAih7DyQw5h5fmhyJ+397kBSU9GMpKRjGQkI/8NKXu9DwCcXvfDYxE11oXLZIEydA2uV41/w08GfCb3sUpEtCtJudAp4hqLV+7Z0nFxK10aouoiZsFaFa9ngM49GtoMfZOEjFhl222LzxJgw1rn3aI1Acy47MHFuA91mYQMeBCNJ8AuWYCjexyxa1hdUZM2cGmpcSmIjW/zQi1fw5tGVFPtEdeoLWnI2W8cY2inx7Bh5VICLLgLPlkScolTVZ5csCh+c+LBwPUAsBGWgNDGzwCck5+uxkQG15YGpHsUAjvdk/o60LrD6mTphyHQT4VPswNm9rOseIDvR6juSofp6aZjeUsDkoJQq6/wLtozLYQLoju6LvdO10m5QMz131TRvBlsoUpFjG8D35h+mqbVdwkRHYZ49S8mFZnj+NOM0rUIN34OQ4y5piD8A27Dj5il2ibc8D4MMUanIlShHk1X4ZFK6l8xLgbXDZ8WJywN4RtOsXi0ldcLn5YHOAUBFZSaRnRogxFfgv9muweBclmboq46FYdhbFzrxh1CbOsyfIZ/iTKSkYxkJCMZyUhGviByeLk7h6ecnA/LX6QwwN6Ew2NRAAAAAElFTkSuQmCC", 117 | asc: 118 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAclBMVEUAAABOt6tMtaxUq6pOta1MtqxNtqwAaVzg8vFLtKoDbF9rwrqi2NSe19JDraJAqZ4jjYEVfnEGb2M8pptIsacJc2Yul4wrlYopkocahHcPeGwMdWkxmo8YgXYRe241n5QljoMhi38eh3s3oZYznJFevbQOHZ8vAAAABnRSTlMAVbsIPp2VTiuNAAACM0lEQVRo3u3W23LaMBAG4IRQq1JaCx/lAwZs0vd/xWq9SNtOrpDZTDLZfyaxZWb209HwJJF8XPa7e/LjJQl5zu7K7oUTIYUZeUWFF/n1GxVe5CcpjAgpjAgpjAgpnAgpnAgpnAgpnAgpnAgpnAgpnAgpnAgpnAgpnAgpnAgpnAgpfAgpz0wIKQ9H/ry+zx1IegQRRBBBBBHk0yDaXq3+r11V+UbkqJQ6UdNOxj8wfShbz6XyGZ3egkxQI/b0zShMeUWzUbcUOh3Ra9U2jAONVQG4blTMnI6csZu3Vg/V26oF6+DbF5i6rjovcM2TkWVFTI2t8jYq56+NH2ZoZyd/06UhWBa6fcQWgBVMG9zorIp+5++mVATKHPxfH0jssM59sqz1zQE3BOywVASAalDK6LgmxmUhXVwuXfukIg3UB+l8GxhkPGrqQr/5xNt1qq/+/4IPWrWmcfoRCM2HW89KGbZ0g8yQPwwZfBWLG7QKp7NFZtQPQnI8DtkFz15gjivT4fNpK+JUDGDEwNBG2l1hTychRSRw2tphGGb44AoP8A09QBvvkpDa/ItcsNQYt7LOrAon6JJ44rFmeYBM2FEbXitO4X4bwxsAVsklIVM4H1g9x/kzc3uAIfZh0aZuBszUKYiGUm94X2JPc7hijMUdENNlCQh+ldT0RXKCxRiDgXp9oiVLQlxRFEsACx+9nsWiVGac87hw0G4W+wV/EgkiiCCCCCKIIIJ8A2S/25z9k0TyYfkLJnKWKZDc4r4AAAAASUVORK5CYII=" 119 | }; 120 | }, 121 | extendIcons() { 122 | return { 123 | "org.openxmlformats.wordprocessingml.document": this.icons().word, 124 | docx: this.icons().word, 125 | dotx: this.icons().word, 126 | dot: this.icons().word, 127 | odt: this.icons().word, 128 | "org.openxmlformats.spreadsheetml.sheet": this.icons().xls, 129 | xlxs: this.icons().xls, 130 | xltx: this.icons().xls, 131 | xlt: this.icons().xls, 132 | csv: this.icons().xls, 133 | ods: this.icons().xls, 134 | "com.netscape.javascript-source": this.icons().javascript, 135 | js: this.icons().javascript, 136 | "com.sun.java-source": this.icons.java 137 | }; 138 | }, 139 | icon(item) { 140 | var type = item.kMDItemContentType; 141 | if (type === "public.folder") { 142 | return this.icons().folder; 143 | } 144 | var icon = this.extendIcons()[type]; 145 | if (icon === undefined) { 146 | var name = item.kMDItemFSName; 147 | var extension = Tools.getExtension(name); 148 | if (extension !== "") { 149 | icon = this.icons()[extension] || this.extendIcons()[extension]; 150 | if (icon !== undefined) { 151 | return icon; 152 | } else { 153 | return this.icons().file; 154 | } 155 | } else { 156 | return this.icons().file; 157 | } 158 | } 159 | return icon; 160 | } 161 | }; 162 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Finder from "./Finder.vue"; 3 | import "xe-utils"; 4 | import VXETable from "vxe-table"; 5 | import "vxe-table/lib/index.css"; 6 | import ElementUI from "element-ui"; 7 | import "../theme/index.css"; 8 | import store from "./store"; 9 | 10 | Vue.use(VXETable); 11 | Vue.use(ElementUI); 12 | 13 | Vue.config.productionTip = false; 14 | 15 | Vue.directive("focus", { 16 | update: (el, { value }) => { 17 | if (value) { 18 | el.focus(); 19 | } 20 | } 21 | }); 22 | 23 | new Vue({ 24 | store, 25 | render: h => h(Finder) 26 | }).$mount("#app"); 27 | -------------------------------------------------------------------------------- /src/store.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | /* eslint-disable no-undef */ 3 | import Vue from "vue"; 4 | import Vuex from "vuex"; 5 | 6 | Vue.use(Vuex); 7 | 8 | const store = new Vuex.Store({ 9 | state: { 10 | settings: { 11 | _id: "Mverything-setting", 12 | data: { 13 | databaseVersion: 1, 14 | isFindFileContent: false, 15 | searchRoot: "user", 16 | searchKey: ":", 17 | preview: { 18 | native: false 19 | }, 20 | keyList: [], 21 | fileExtension: "txt,md,markdown,json,xml,java,py,c,cpp,html,css,vue", 22 | pictureExtension: "png,jpg,jpeg,bmp,svg,ico", 23 | videoExtension: "mp4,flv", 24 | audioExtension: "mp3,ogg,wav" 25 | }, 26 | _rev: "" 27 | } 28 | }, 29 | getters: { 30 | settings: state => { 31 | console.log("setting getter"); 32 | var settings = state.settings; 33 | if (settings._rev === "") { 34 | console.log("rev is empty"); 35 | var result = utools.db.get(settings._id); 36 | console.log("db result:", result); 37 | if (result) { 38 | settings = result; 39 | store.commit("updateSettings", settings); 40 | } 41 | } 42 | return settings; 43 | } 44 | }, 45 | mutations: { 46 | updateSettings(state, settings) { 47 | console.log("update settings", settings); 48 | state.settings = settings; 49 | }, 50 | updateSettingsRev(state, rev) { 51 | console.log("update rev:", rev); 52 | state.settings._rev = rev; 53 | }, 54 | updateSettingsKeyList(state, keyList) { 55 | console.log("update keyList:", keyList); 56 | state.settings.data.keyList = keyList; 57 | } 58 | } 59 | }); 60 | 61 | export default store; 62 | -------------------------------------------------------------------------------- /src/tools.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | export default { 3 | getExtension(name) { 4 | var index = name.lastIndexOf(".") || 0; 5 | if (index > 0) { 6 | return name.substring(index + 1, name.length).toLowerCase(); 7 | } 8 | return ""; 9 | }, 10 | generateListToMap(list, keyName, valueName) { 11 | var result = {}; 12 | for (var i = 0; i < list.length; i++) { 13 | var item = list[i]; 14 | result[item[keyName]] = item[valueName]; 15 | } 16 | return result; 17 | }, 18 | findIndexInList(list, key, keyName) { 19 | for (var i = 0; i < list.length; i++) { 20 | if (key === list[i][keyName]) { 21 | return i; 22 | } 23 | } 24 | return -1; 25 | }, 26 | databaseUpdate(settings) { 27 | console.log("database update before:", settings); 28 | if ( 29 | !settings["data"]["databaseVersion"] || 30 | settings["data"]["databaseVersion"] < 1 31 | ) { 32 | settings["data"]["databaseVersion"] = 1; 33 | settings["data"]["fileExtension"] = "txt,java,py,c,cpp,html,css,vue"; 34 | settings["data"]["pictureExtension"] = "png,jpg,jpeg,bmp,svg,ico"; 35 | } 36 | if ( 37 | !settings["data"]["databaseVersion"] || 38 | settings["data"]["databaseVersion"] < 2 39 | ) { 40 | settings["data"]["databaseVersion"] = 2; 41 | settings["data"]["preview"] = { 42 | native: false 43 | }; 44 | } 45 | if ( 46 | !settings["data"]["databaseVersion"] || 47 | settings["data"]["databaseVersion"] < 3 48 | ) { 49 | settings["data"]["databaseVersion"] = 3; 50 | settings["data"]["videoExtension"] = "mp4,flv"; 51 | settings["data"]["audioExtension"] = "mp3,ogg,wav"; 52 | } 53 | console.log("database update finish:", settings); 54 | return settings; 55 | } 56 | }; 57 | -------------------------------------------------------------------------------- /theme/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanyuanxiaoyao/Mverything/956c4e3fedb3325b03cce46b51f6f179e2d2986e/theme/fonts/element-icons.ttf -------------------------------------------------------------------------------- /theme/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanyuanxiaoyao/Mverything/956c4e3fedb3325b03cce46b51f6f179e2d2986e/theme/fonts/element-icons.woff -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); 2 | 3 | module.exports = { 4 | publicPath: "./", 5 | productionSourceMap: false, 6 | configureWebpack: { 7 | optimization: { 8 | minimizer: [ 9 | new UglifyJsPlugin({ 10 | uglifyOptions: { 11 | compress: { 12 | drop_console: true, 13 | drop_debugger: false, 14 | pure_funcs: ["console.log"] 15 | } 16 | } 17 | }) 18 | ] 19 | } 20 | } 21 | }; 22 | --------------------------------------------------------------------------------