├── LICENSE ├── README.md ├── assets ├── larry3d.flf └── standard.flf ├── bindata.go ├── char.go ├── cmd └── figlet4go │ └── figlet4go.go ├── color.go ├── font.go ├── fontmanager.go ├── parser.go ├── render.go ├── screenshot └── figlet4go.png └── tools └── build-default-font.sh /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 getwe, 2016 probandula 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FIGlet for Go 2 | 3 | [![Go Report Card](https://goreportcard.com/badge/github.com/mbndr/figlet4go)](https://goreportcard.com/report/github.com/mbndr/figlet4go) 4 | 5 | `figlet4go` is a go library which is a port of [FIGlet](http://www.figlet.org/) to Golang. 6 | With `figlet4go` it's easy to create **ascii text banners** in the command-line or with the given api. 7 | 8 | ![screenshot](./screenshot/figlet4go.png) 9 | 10 | 11 | This Repository used to be a fork of [getwe/figlet4go](https://github.com/getwe/figlet4go), but I changed so much that it's not compatible anymore 12 | 13 | ## Installation 14 | 15 | ``` 16 | $ go get -u github.com/mbndr/figlet4go/... 17 | ``` 18 | 19 | ## Usage 20 | 21 | ### Command-line 22 | You can use the `figlet4go` command in the command-line. 23 | For example (generates the banner on top): 24 | ```bash 25 | $ figlet4go -str "figlet4go" -font "larry3d" -colors "green;FF9900;cyan" 26 | ``` 27 | For a usage instruction read the commands usage with `figlet4go -h`. 28 | 29 | ### Basic 30 | You have to create a renderer (`ascii`) and let it render the desired string through the `Render` method. After that you can simply print the returned string. 31 | ```go 32 | import "github.com/mbndr/figlet4go" 33 | 34 | // ... 35 | 36 | ascii := figlet4go.NewAsciiRender() 37 | 38 | // The underscore would be an error 39 | renderStr, _ := ascii.Render("Hello World") 40 | fmt.Print(renderStr) 41 | ``` 42 | 43 | ### Colored 44 | The colors given in the `[]figlet4go.Color` slice are repeating if the string is longer than the slice. You have to call the `RenderOpts` instead of the `Render` method to give the Renderer the Options. 45 | If you use a `TrueColor` color, you have to ensure that your [terminal supports](https://gist.github.com/XVilka/8346728/) it. 46 | If you use a `AnsiColor` with an `TrueColor` only parser (f.e. `ParserHTML`), `TrueColor` objects are automatically generated. 47 | ```go 48 | import "github.com/mbndr/figlet4go" 49 | 50 | // ... 51 | 52 | ascii := figlet4go.NewAsciiRender() 53 | 54 | // Adding the colors to RenderOptions 55 | options := figlet4go.NewRenderOptions() 56 | options.FontColor = []figlet4go.Color{ 57 | // Colors can be given by default ansi color codes... 58 | figlet4go.ColorGreen, 59 | figlet4go.ColorYellow, 60 | figlet4go.ColorCyan, 61 | // ...or by an hex string... 62 | figlet4go.NewTrueColorFromHexString("885DBA"), 63 | // ...or by an TrueColor object with rgb values 64 | figlet4go.TrueColor{136, 93, 186}, 65 | } 66 | 67 | renderStr, _ := ascii.RenderOpts("Hello Colors", options) 68 | fmt.Print(renderStr) 69 | ``` 70 | 71 | ### Other font 72 | If you want to use another font, you have to specify the name of the font as in this example. 73 | Is the font you want to use not [included](#builtin) you have to load the font manually with the `LoadFont` method. This method will walk the path recursively and load all `.flf` files. 74 | ```go 75 | import "github.com/mbndr/figlet4go" 76 | 77 | // ... 78 | 79 | ascii := figlet4go.NewAsciiRender() 80 | 81 | options := figlet4go.NewRenderOptions() 82 | options.FontName = "larry3d" 83 | 84 | // If 'larry3d' wouldn't be included you would have to load your .flf files like that: 85 | ascii.LoadFont("/path/to/fonts/") 86 | 87 | renderStr, _ := ascii.RenderOpts("Hello Fonts", options) 88 | fmt.Print(renderStr) 89 | ``` 90 | 91 | ### Other parser 92 | A Parser can be set through the `GetParser` function with a valid key 93 | ```go 94 | import "github.com/mbndr/figlet4go" 95 | 96 | // ... 97 | 98 | ascii := figlet4go.NewAsciiRender() 99 | 100 | options := figlet4go.NewRenderOptions() 101 | p, _ := figlet4go.GetParser("html") 102 | options.Parser = *p 103 | 104 | renderStr, _ := ascii.RenderOpts("Hello Fonts", options) 105 | fmt.Print(renderStr) 106 | ``` 107 | 108 | ## Parsers 109 | There a currently these Parsers available: 110 | 111 | | Parser | What does it do? | 112 | | --------- | ------ | 113 | | ParserTerminal | Parses the result directly | 114 | | ParserHTML | Parses a pasteable `` html block | 115 | 116 | ## Fonts 117 | 118 | ### Builtin 119 | The builtin fonts are built into the `bindata.go` file with the tool [go-bindata](https://github.com/jteeuwen/go-bindata). 120 | The bash script for building the default font is stored in `tools/` (`go-bindata` must be installed). 121 | 122 | The default font is `standard`. These are the builtin fonts: 123 | 124 | | Font name | Source | 125 | | --------- | ------ | 126 | | standard | http://www.figlet.org/fontdb_example.cgi?font=standard.flf | 127 | | larry3d | http://www.figlet.org/fontdb_example.cgi?font=larry3d.flf | 128 | 129 | ### Other fonts 130 | Other fonts can mainly be found on [figlet](http://www.figlet.org). You have to load them as in [this example](#other-font). 131 | 132 | ## Todo 133 | - [ ] Tests 134 | - [ ] automatically the perfect char margin 135 | - [ ] Linebreak possible? 136 | - [ ] Pointer-Value standarization 137 | - [ ] Parser as interface 138 | - [x] Cli client 139 | - [x] Colors in the cli client 140 | - [x] No dependencies (fatih/color) 141 | - [x] Truecolor support 142 | - [x] More parsers (HTML) 143 | - [x] Better parsers (maybe stored in a map) 144 | - [x] Writer choosing for writing to file 145 | -------------------------------------------------------------------------------- /assets/larry3d.flf: -------------------------------------------------------------------------------- 1 | flf2a$ 9 6 30 1 5 2 | larry3d.flf by Larry Gelberg (larryg@avs.com) 3 | (stolen liberally from Juan Car's puffy.flf) 4 | tweaked by Glenn Chappell 5 | Version 1.2 2/24/94 6 | 7 | $$$ @ 8 | $$$ @ 9 | $$$ @ 10 | $$$ @ 11 | $$$ @ 12 | $$$ @ 13 | $$$ @ 14 | $$$ @ 15 | $$$@@ 16 | __ @ 17 | /\ \ @ 18 | \ \ \ @ 19 | \ \ \ @ 20 | \ \_\ @ 21 | \/\_\@ 22 | \/_/@ 23 | @ 24 | @@ 25 | __ __ @ 26 | /\ \\ \ @ 27 | \ \_\\_\ @ 28 | \/_//_/$ @ 29 | $ $ @ 30 | $ $@ 31 | @ 32 | @ 33 | @@ 34 | __ __ @ 35 | _\ \\ \__ @ 36 | /\__ _ _\ @ 37 | \/_L\ \\ \L_ @ 38 | /\_ _ _\@ 39 | \/_/\_\\_\/@ 40 | \/_//_/ @ 41 | @ 42 | @@ 43 | __ @ 44 | /\ \_ @ 45 | \/'__`\ @ 46 | /\ \_\_\ @ 47 | \ \____ \ @ 48 | \/\ \_\ \@ 49 | \ `\_ _/@ 50 | `\_/\_\@ 51 | \/_/@@ 52 | __ __ @ 53 | /\_\ / / @ 54 | \/_/ / / @ 55 | / / @ 56 | / / __ @ 57 | /_/ /\_\@ 58 | /_/ \/_/@ 59 | @ 60 | @@ 61 | ____ @ 62 | /| _ \ @ 63 | |/\ | @ 64 | \// __`\/\ @ 65 | /| \L> <_@ 66 | | \_____/\/@ 67 | \/____/\/ @ 68 | @ 69 | @@ 70 | __ @ 71 | /\ \ @ 72 | \ \/$ @ 73 | \/ $ @ 74 | $ $ @ 75 | $ $@ 76 | @ 77 | @ 78 | @@ 79 | _ @ 80 | /' \ @ 81 | /\ ,/' @ 82 | \ \ \ @ 83 | \ \ `\ @ 84 | \ `\__\@ 85 | `\/_/ @ 86 | @ 87 | @@ 88 | __ @ 89 | /\ `\ @ 90 | \`\ \ @ 91 | `\`\ \ @ 92 | `\/' \@ 93 | /\__/@ 94 | \/_/ @ 95 | @ 96 | @@ 97 | __ @ 98 | _\ \ _ @ 99 | /\_` ' \ @ 100 | \/_> <_ @ 101 | /\_, ,_\@ 102 | \/_/\_\/@ 103 | \/_/ @ 104 | @ 105 | @@ 106 | __ @ 107 | /\ \ @ 108 | \_\ \___ @ 109 | /\___ __\@ 110 | \/__/\ \_/@ 111 | \ \_\ @ 112 | \/_/ @ 113 | @ 114 | @@ 115 | @ 116 | @ 117 | @ 118 | @ 119 | __ @ 120 | /\ \@ 121 | \ \/@ 122 | \/ @ 123 | @@ 124 | @ 125 | @ 126 | @ 127 | _______ @ 128 | /\______\@ 129 | \/______/@ 130 | @ 131 | @ 132 | @@ 133 | @ 134 | @ 135 | @ 136 | @ 137 | __ @ 138 | /\_\@ 139 | \/_/@ 140 | @ 141 | @@ 142 | __@ 143 | / /@ 144 | / / @ 145 | / / @ 146 | / / @ 147 | /_/ @ 148 | /_/ @ 149 | @ 150 | @@ 151 | __ @ 152 | /'__`\ @ 153 | /\ \/\ \ @ 154 | \ \ \ \ \ @ 155 | \ \ \_\ \@ 156 | \ \____/@ 157 | \/___/ @ 158 | @ 159 | @@ 160 | _ @ 161 | /' \ @ 162 | /\_, \ @ 163 | \/_/\ \ @ 164 | \ \ \ @ 165 | \ \_\@ 166 | \/_/@ 167 | @ 168 | @@ 169 | ___ @ 170 | /'___`\ @ 171 | /\_\ /\ \ @ 172 | \/_/// /__ @ 173 | // /_\ \@ 174 | /\______/@ 175 | \/_____/ @ 176 | @ 177 | @@ 178 | __ @ 179 | /'__`\ @ 180 | /\_\L\ \ @ 181 | \/_/_\_<_ @ 182 | /\ \L\ \@ 183 | \ \____/@ 184 | \/___/ @ 185 | @ 186 | @@ 187 | __ __ @ 188 | /\ \\ \ @ 189 | \ \ \\ \ @ 190 | \ \ \\ \_ @ 191 | \ \__ ,__\@ 192 | \/_/\_\_/@ 193 | \/_/ @ 194 | @ 195 | @@ 196 | ______ @ 197 | /\ ___\ @ 198 | \ \ \__/ @ 199 | \ \___``\ @ 200 | \/\ \L\ \@ 201 | \ \____/@ 202 | \/___/ @ 203 | @ 204 | @@ 205 | ____ @ 206 | /'___\ @ 207 | /\ \__/ @ 208 | \ \ _``\ @ 209 | \ \ \L\ \@ 210 | \ \____/@ 211 | \/___/ @ 212 | @ 213 | @@ 214 | ________ @ 215 | /\_____ \@ 216 | \/___//'/'@ 217 | /' /' @ 218 | /' /' @ 219 | /\_/ @ 220 | \// @ 221 | @ 222 | @@ 223 | __ @ 224 | /'_ `\ @ 225 | /\ \L\ \ @ 226 | \/_> _ <_ @ 227 | /\ \L\ \@ 228 | \ \____/@ 229 | \/___/ @ 230 | @ 231 | @@ 232 | __ @ 233 | /'_ `\ @ 234 | /\ \L\ \ @ 235 | \ \___, \ @ 236 | \/__,/\ \ @ 237 | \ \_\@ 238 | \/_/@ 239 | @ 240 | @@ 241 | @ 242 | @ 243 | __ @ 244 | /\_\ @ 245 | \/_/_ @ 246 | /\_\@ 247 | \/_/@ 248 | @ 249 | @@ 250 | @ 251 | @ 252 | __ @ 253 | /\_\ @ 254 | \/_/_ @ 255 | /\ \@ 256 | \ \/@ 257 | \/ @ 258 | @@ 259 | ___ @ 260 | / / @ 261 | / / @ 262 | /< < @ 263 | \ `\ `\ @ 264 | `\ `\_|@ 265 | `\// @ 266 | @ 267 | @@ 268 | @ 269 | _______ @ 270 | /\______\ @ 271 | \/______/_ @ 272 | /\______\@ 273 | \/______/@ 274 | @ 275 | @ 276 | @@ 277 | __ @ 278 | /\ `\ @ 279 | \ `\ `\ @ 280 | `\ > >@ 281 | / / @ 282 | /\_/ @ 283 | \// @ 284 | @ 285 | @@ 286 | _ @ 287 | /'_`\ @ 288 | /\_\/\`\@ 289 | \/_//'/'@ 290 | /\_\ @ 291 | \/\_\@ 292 | \/_/@ 293 | @ 294 | @@ 295 | @ 296 | __ @ 297 | /'_`\_ @ 298 | /'/'_` \ @ 299 | /\ \ \L\ \ @ 300 | \ \ `\__,_\@ 301 | \ `\_____\@ 302 | `\/_____/@ 303 | @@ 304 | ______ @ 305 | /\ _ \ @ 306 | \ \ \L\ \ @ 307 | \ \ __ \ @ 308 | \ \ \/\ \ @ 309 | \ \_\ \_\@ 310 | \/_/\/_/@ 311 | @ 312 | @@ 313 | ____ @ 314 | /\ _`\ @ 315 | \ \ \L\ \ @ 316 | \ \ _ <' @ 317 | \ \ \L\ \@ 318 | \ \____/@ 319 | \/___/ @ 320 | @ 321 | @@ 322 | ____ @ 323 | /\ _`\ @ 324 | \ \ \/\_\ @ 325 | \ \ \/_/_ @ 326 | \ \ \L\ \@ 327 | \ \____/@ 328 | \/___/ @ 329 | @ 330 | @@ 331 | ____ @ 332 | /\ _`\ @ 333 | \ \ \/\ \ @ 334 | \ \ \ \ \ @ 335 | \ \ \_\ \@ 336 | \ \____/@ 337 | \/___/ @ 338 | @ 339 | @@ 340 | ____ @ 341 | /\ _`\ @ 342 | \ \ \L\_\ @ 343 | \ \ _\L @ 344 | \ \ \L\ \@ 345 | \ \____/@ 346 | \/___/ @ 347 | @ 348 | @@ 349 | ____ @ 350 | /\ _`\ @ 351 | \ \ \L\_\@ 352 | \ \ _\/@ 353 | \ \ \/ @ 354 | \ \_\ @ 355 | \/_/ @ 356 | @ 357 | @@ 358 | ____ @ 359 | /\ _`\ @ 360 | \ \ \L\_\ @ 361 | \ \ \L_L @ 362 | \ \ \/, \@ 363 | \ \____/@ 364 | \/___/ @ 365 | @ 366 | @@ 367 | __ __ @ 368 | /\ \/\ \ @ 369 | \ \ \_\ \ @ 370 | \ \ _ \ @ 371 | \ \ \ \ \ @ 372 | \ \_\ \_\@ 373 | \/_/\/_/@ 374 | @ 375 | @@ 376 | ______ @ 377 | /\__ _\ @ 378 | \/_/\ \/ @ 379 | \ \ \ @ 380 | \_\ \__ @ 381 | /\_____\@ 382 | \/_____/@ 383 | @ 384 | @@ 385 | _____ @ 386 | /\___ \ @ 387 | \/__/\ \ @ 388 | _\ \ \ @ 389 | /\ \_\ \@ 390 | \ \____/@ 391 | \/___/ @ 392 | @ 393 | @@ 394 | __ __ @ 395 | /\ \/\ \ @ 396 | \ \ \/'/' @ 397 | \ \ , < @ 398 | \ \ \\`\ @ 399 | \ \_\ \_\@ 400 | \/_/\/_/@ 401 | @ 402 | @@ 403 | __ @ 404 | /\ \ @ 405 | \ \ \ @ 406 | \ \ \ __ @ 407 | \ \ \L\ \@ 408 | \ \____/@ 409 | \/___/ @ 410 | @ 411 | @@ 412 | @ 413 | /'\_/`\ @ 414 | /\ \ @ 415 | \ \ \__\ \ @ 416 | \ \ \_/\ \ @ 417 | \ \_\\ \_\@ 418 | \/_/ \/_/@ 419 | @ 420 | @@ 421 | __ __ @ 422 | /\ \/\ \ @ 423 | \ \ `\\ \ @ 424 | \ \ , ` \ @ 425 | \ \ \`\ \ @ 426 | \ \_\ \_\@ 427 | \/_/\/_/@ 428 | @ 429 | @@ 430 | _____ @ 431 | /\ __`\ @ 432 | \ \ \/\ \ @ 433 | \ \ \ \ \ @ 434 | \ \ \_\ \ @ 435 | \ \_____\@ 436 | \/_____/@ 437 | @ 438 | @@ 439 | ____ @ 440 | /\ _`\ @ 441 | \ \ \L\ \@ 442 | \ \ ,__/@ 443 | \ \ \/ @ 444 | \ \_\ @ 445 | \/_/ @ 446 | @ 447 | @@ 448 | _____ @ 449 | /\ __`\ @ 450 | \ \ \/\ \ @ 451 | \ \ \ \ \ @ 452 | \ \ \\'\\ @ 453 | \ \___\_\@ 454 | \/__//_/@ 455 | @ 456 | @@ 457 | ____ @ 458 | /\ _`\ @ 459 | \ \ \L\ \ @ 460 | \ \ , / @ 461 | \ \ \\ \ @ 462 | \ \_\ \_\@ 463 | \/_/\/ /@ 464 | @ 465 | @@ 466 | ____ @ 467 | /\ _`\ @ 468 | \ \,\L\_\ @ 469 | \/_\__ \ @ 470 | /\ \L\ \ @ 471 | \ `\____\@ 472 | \/_____/@ 473 | @ 474 | @@ 475 | ______ @ 476 | /\__ _\ @ 477 | \/_/\ \/ @ 478 | \ \ \ @ 479 | \ \ \ @ 480 | \ \_\@ 481 | \/_/@ 482 | @ 483 | @@ 484 | __ __ @ 485 | /\ \/\ \ @ 486 | \ \ \ \ \ @ 487 | \ \ \ \ \ @ 488 | \ \ \_\ \ @ 489 | \ \_____\@ 490 | \/_____/@ 491 | @ 492 | @@ 493 | __ __ @ 494 | /\ \/\ \ @ 495 | \ \ \ \ \ @ 496 | \ \ \ \ \ @ 497 | \ \ \_/ \@ 498 | \ `\___/@ 499 | `\/__/ @ 500 | @ 501 | @@ 502 | __ __ @ 503 | /\ \ __/\ \ @ 504 | \ \ \/\ \ \ \ @ 505 | \ \ \ \ \ \ \ @ 506 | \ \ \_/ \_\ \@ 507 | \ `\___x___/@ 508 | '\/__//__/ @ 509 | @ 510 | @@ 511 | __ __ @ 512 | /\ \ /\ \ @ 513 | \ `\`\/'/' @ 514 | `\/ > < @ 515 | \/'/\`\ @ 516 | /\_\\ \_\@ 517 | \/_/ \/_/@ 518 | @ 519 | @@ 520 | __ __ @ 521 | /\ \ /\ \@ 522 | \ `\`\\/'/@ 523 | `\ `\ /' @ 524 | `\ \ \ @ 525 | \ \_\@ 526 | \/_/@ 527 | @ 528 | @@ 529 | ________ @ 530 | /\_____ \ @ 531 | \/____//'/' @ 532 | //'/' @ 533 | //'/'___ @ 534 | /\_______\@ 535 | \/_______/@ 536 | @ 537 | @@ 538 | ____ @ 539 | /\ _\ @ 540 | \ \ \/ @ 541 | \ \ \ @ 542 | \ \ \_ @ 543 | \ \___\@ 544 | \/___/@ 545 | @ 546 | @@ 547 | __ @ 548 | /\ `\ @ 549 | \`\ `\ @ 550 | `\`\ `\ @ 551 | `\`\ `\ @ 552 | `\`\__\@ 553 | `\/__/@ 554 | @ 555 | @@ 556 | ____ @ 557 | /\__ \ @ 558 | \/_/\ \ @ 559 | \ \ \ @ 560 | \_\ \ @ 561 | /\___\@ 562 | \/___/@ 563 | @ 564 | @@ 565 | __ @ 566 | / `\ @ 567 | /\_/\_\ @ 568 | \//\// $ @ 569 | $ $ @ 570 | $ $@ 571 | @ 572 | @ 573 | @@ 574 | @ 575 | @ 576 | @ 577 | @ 578 | @ 579 | $ $ @ 580 | $_______ @ 581 | /\______\@ 582 | \/______/@@ 583 | __ @ 584 | /\ \ @ 585 | \ \\$ @ 586 | \// $ @ 587 | $ $ @ 588 | $ $@ 589 | @ 590 | @ 591 | @@ 592 | @ 593 | @ 594 | __ @ 595 | /'__`\ @ 596 | /\ \L\.\_ @ 597 | \ \__/.\_\@ 598 | \/__/\/_/@ 599 | @ 600 | @@ 601 | __ @ 602 | /\ \ @ 603 | \ \ \____ @ 604 | \ \ '__`\ @ 605 | \ \ \L\ \@ 606 | \ \_,__/@ 607 | \/___/ @ 608 | @ 609 | @@ 610 | @ 611 | @ 612 | ___ @ 613 | /'___\ @ 614 | /\ \__/ @ 615 | \ \____\@ 616 | \/____/@ 617 | @ 618 | @@ 619 | __ @ 620 | /\ \ @ 621 | \_\ \ @ 622 | /'_` \ @ 623 | /\ \L\ \ @ 624 | \ \___,_\@ 625 | \/__,_ /@ 626 | @ 627 | @@ 628 | @ 629 | @ 630 | __ @ 631 | /'__`\ @ 632 | /\ __/ @ 633 | \ \____\@ 634 | \/____/@ 635 | @ 636 | @@ 637 | ___ @ 638 | /'___\ @ 639 | /\ \__/ @ 640 | \ \ ,__\@ 641 | \ \ \_/@ 642 | \ \_\ @ 643 | \/_/ @ 644 | @ 645 | @@ 646 | @ 647 | @ 648 | __ @ 649 | /'_ `\ @ 650 | /\ \L\ \ @ 651 | \ \____ \ @ 652 | \/___L\ \@ 653 | /\____/@ 654 | \_/__/ @@ 655 | __ @ 656 | /\ \ @ 657 | \ \ \___ @ 658 | \ \ _ `\ @ 659 | \ \ \ \ \ @ 660 | \ \_\ \_\@ 661 | \/_/\/_/@ 662 | @ 663 | @@ 664 | @ 665 | __ @ 666 | /\_\ @ 667 | \/\ \ @ 668 | \ \ \ @ 669 | \ \_\@ 670 | \/_/@ 671 | @ 672 | @@ 673 | @ 674 | __ @ 675 | /\_\ @ 676 | \/\ \ @ 677 | \ \ \ @ 678 | _\ \ \ @ 679 | /\ \_\ \@ 680 | \ \____/@ 681 | \/___/ @@ 682 | __ @ 683 | /\ \ @ 684 | \ \ \/'\ @ 685 | \ \ , < @ 686 | \ \ \\`\ @ 687 | \ \_\ \_\@ 688 | \/_/\/_/@ 689 | @ 690 | @@ 691 | ___ @ 692 | /\_ \ @ 693 | \//\ \ @ 694 | \ \ \ @ 695 | \_\ \_ @ 696 | /\____\@ 697 | \/____/@ 698 | @ 699 | @@ 700 | @ 701 | @ 702 | ___ ___ @ 703 | /' __` __`\ @ 704 | /\ \/\ \/\ \ @ 705 | \ \_\ \_\ \_\@ 706 | \/_/\/_/\/_/@ 707 | @ 708 | @@ 709 | @ 710 | @ 711 | ___ @ 712 | /' _ `\ @ 713 | /\ \/\ \ @ 714 | \ \_\ \_\@ 715 | \/_/\/_/@ 716 | @ 717 | @@ 718 | @ 719 | @ 720 | ___ @ 721 | / __`\ @ 722 | /\ \L\ \@ 723 | \ \____/@ 724 | \/___/ @ 725 | @ 726 | @@ 727 | @ 728 | @ 729 | _____ @ 730 | /\ '__`\ @ 731 | \ \ \L\ \@ 732 | \ \ ,__/@ 733 | \ \ \/ @ 734 | \ \_\ @ 735 | \/_/ @@ 736 | @ 737 | @ 738 | __ @ 739 | /'__`\ @ 740 | /\ \L\ \ @ 741 | \ \___, \ @ 742 | \/___/\ \ @ 743 | \ \_\@ 744 | \/_/@@ 745 | @ 746 | @ 747 | _ __ @ 748 | /\`'__\@ 749 | \ \ \/ @ 750 | \ \_\ @ 751 | \/_/ @ 752 | @ 753 | @@ 754 | @ 755 | @ 756 | ____ @ 757 | /',__\ @ 758 | /\__, `\@ 759 | \/\____/@ 760 | \/___/ @ 761 | @ 762 | @@ 763 | __ @ 764 | /\ \__ @ 765 | \ \ ,_\ @ 766 | \ \ \/ @ 767 | \ \ \_ @ 768 | \ \__\@ 769 | \/__/@ 770 | @ 771 | @@ 772 | @ 773 | @ 774 | __ __ @ 775 | /\ \/\ \ @ 776 | \ \ \_\ \@ 777 | \ \____/@ 778 | \/___/ @ 779 | @ 780 | @@ 781 | @ 782 | @ 783 | __ __ @ 784 | /\ \/\ \ @ 785 | \ \ \_/ |@ 786 | \ \___/ @ 787 | \/__/ @ 788 | @ 789 | @@ 790 | @ 791 | @ 792 | __ __ __ @ 793 | /\ \/\ \/\ \ @ 794 | \ \ \_/ \_/ \@ 795 | \ \___x___/'@ 796 | \/__//__/ @ 797 | @ 798 | @@ 799 | @ 800 | @ 801 | __ _ @ 802 | /\ \/'\ @ 803 | \/> \@ 815 | /\___/@ 816 | \/__/ @@ 817 | @ 818 | @ 819 | ____ @ 820 | /\_ ,`\ @ 821 | \/_/ /_ @ 822 | /\____\@ 823 | \/____/@ 824 | @ 825 | @@ 826 | _ @ 827 | /' \@ 828 | \ ,/'@ 829 | <' \ @ 830 | < \ `\ @ 831 | \`\__\@ 832 | \/__/@ 833 | @ 834 | @@ 835 | __ @ 836 | /\ \ @ 837 | \ \ \ @ 838 | \ \ \ @ 839 | \ \ \ @ 840 | \ \ \ @ 841 | \ \ \ @ 842 | \ \_\@ 843 | \/_/@@ 844 | __ @ 845 | /\ `\ @ 846 | \`\ \ @ 847 | \ \ `>@ 848 | //' \ @ 849 | /\__/' @ 850 | \/_/ @ 851 | @ 852 | @@ 853 | _ _ @ 854 | /' \/' \ @ 855 | /\_/\__//$ @ 856 | \//\/__/ $ @ 857 | $ $@ 858 | @ 859 | @ 860 | @ 861 | @@ 862 | __ __ @ 863 | /\_\/\_\ @ 864 | \/\ _ \ @ 865 | \ \ \L\ \ @ 866 | \ \ __ \ @ 867 | \ \_\/\_\@ 868 | \/_/\/_/@ 869 | @ 870 | @@ 871 | __ __ @ 872 | /\_\/\_\ @ 873 | \/\ __ \ @ 874 | \ \ \/\ \ @ 875 | \ \ \_\ \ @ 876 | \ \_____\@ 877 | \/_____/@ 878 | @ 879 | @@ 880 | __ __ @ 881 | /\_\/\_\ @ 882 | \/\ \/\ \ @ 883 | \ \ \ \ \ @ 884 | \ \ \_\ \ @ 885 | \ \_____\@ 886 | \/_____/@ 887 | @ 888 | @@ 889 | __ __ @ 890 | /\_\/\_\ @ 891 | \/_/\/_/_ @ 892 | /'_` \ @ 893 | /\ \L\ \ @ 894 | \ `\__,_\@ 895 | `\/_,__/@ 896 | @ 897 | @@ 898 | __ __ @ 899 | /\_\/\_\ @ 900 | \/_/\/_/ @ 901 | /'_`\ @ 902 | /\ \L\ \@ 903 | \ `\___/@ 904 | `\/__/ @ 905 | @ 906 | @@ 907 | __ __ @ 908 | /\_\ \_\ @ 909 | \/_/\/_/_ @ 910 | /\ \/\ \ @ 911 | \ \ \_\ \@ 912 | \ `\___/@ 913 | `\/__/ @ 914 | @ 915 | @@ 916 | ______ @ 917 | /\ __ \ @ 918 | \ \ \/\ \ @ 919 | \ \ \<_<_ @ 920 | \ \ \ \ \@ 921 | \ \ \\_/@ 922 | \ \_\/ @ 923 | \/_/ @ 924 | @@ 925 | -------------------------------------------------------------------------------- /assets/standard.flf: -------------------------------------------------------------------------------- 1 | flf2a$ 6 5 16 15 11 0 24463 2 | Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig 3 | Includes ISO Latin-1 4 | figlet release 2.1 -- 12 Aug 1994 5 | Modified for figlet 2.2 by John Cowan 6 | to add Latin-{2,3,4,5} support (Unicode U+0100-017F). 7 | Permission is hereby given to modify this font, as long as the 8 | modifier's name is placed on a comment line. 9 | 10 | Modified by Paul Burton 12/96 to include new parameter 11 | supported by FIGlet and FIGWin. May also be slightly modified for better use 12 | of new full-width/kern/smush alternatives, but default output is NOT changed. 13 | $@ 14 | $@ 15 | $@ 16 | $@ 17 | $@ 18 | $@@ 19 | _ @ 20 | | |@ 21 | | |@ 22 | |_|@ 23 | (_)@ 24 | @@ 25 | _ _ @ 26 | ( | )@ 27 | V V @ 28 | $ @ 29 | $ @ 30 | @@ 31 | _ _ @ 32 | _| || |_ @ 33 | |_ .. _|@ 34 | |_ _|@ 35 | |_||_| @ 36 | @@ 37 | _ @ 38 | | | @ 39 | / __)@ 40 | \__ \@ 41 | ( /@ 42 | |_| @@ 43 | _ __@ 44 | (_)/ /@ 45 | / / @ 46 | / /_ @ 47 | /_/(_)@ 48 | @@ 49 | ___ @ 50 | ( _ ) @ 51 | / _ \/\@ 52 | | (_> <@ 53 | \___/\/@ 54 | @@ 55 | _ @ 56 | ( )@ 57 | |/ @ 58 | $ @ 59 | $ @ 60 | @@ 61 | __@ 62 | / /@ 63 | | | @ 64 | | | @ 65 | | | @ 66 | \_\@@ 67 | __ @ 68 | \ \ @ 69 | | |@ 70 | | |@ 71 | | |@ 72 | /_/ @@ 73 | @ 74 | __/\__@ 75 | \ /@ 76 | /_ _\@ 77 | \/ @ 78 | @@ 79 | @ 80 | _ @ 81 | _| |_ @ 82 | |_ _|@ 83 | |_| @ 84 | @@ 85 | @ 86 | @ 87 | @ 88 | _ @ 89 | ( )@ 90 | |/ @@ 91 | @ 92 | @ 93 | _____ @ 94 | |_____|@ 95 | $ @ 96 | @@ 97 | @ 98 | @ 99 | @ 100 | _ @ 101 | (_)@ 102 | @@ 103 | __@ 104 | / /@ 105 | / / @ 106 | / / @ 107 | /_/ @ 108 | @@ 109 | ___ @ 110 | / _ \ @ 111 | | | | |@ 112 | | |_| |@ 113 | \___/ @ 114 | @@ 115 | _ @ 116 | / |@ 117 | | |@ 118 | | |@ 119 | |_|@ 120 | @@ 121 | ____ @ 122 | |___ \ @ 123 | __) |@ 124 | / __/ @ 125 | |_____|@ 126 | @@ 127 | _____ @ 128 | |___ / @ 129 | |_ \ @ 130 | ___) |@ 131 | |____/ @ 132 | @@ 133 | _ _ @ 134 | | || | @ 135 | | || |_ @ 136 | |__ _|@ 137 | |_| @ 138 | @@ 139 | ____ @ 140 | | ___| @ 141 | |___ \ @ 142 | ___) |@ 143 | |____/ @ 144 | @@ 145 | __ @ 146 | / /_ @ 147 | | '_ \ @ 148 | | (_) |@ 149 | \___/ @ 150 | @@ 151 | _____ @ 152 | |___ |@ 153 | / / @ 154 | / / @ 155 | /_/ @ 156 | @@ 157 | ___ @ 158 | ( _ ) @ 159 | / _ \ @ 160 | | (_) |@ 161 | \___/ @ 162 | @@ 163 | ___ @ 164 | / _ \ @ 165 | | (_) |@ 166 | \__, |@ 167 | /_/ @ 168 | @@ 169 | @ 170 | _ @ 171 | (_)@ 172 | _ @ 173 | (_)@ 174 | @@ 175 | @ 176 | _ @ 177 | (_)@ 178 | _ @ 179 | ( )@ 180 | |/ @@ 181 | __@ 182 | / /@ 183 | / / @ 184 | \ \ @ 185 | \_\@ 186 | @@ 187 | @ 188 | _____ @ 189 | |_____|@ 190 | |_____|@ 191 | $ @ 192 | @@ 193 | __ @ 194 | \ \ @ 195 | \ \@ 196 | / /@ 197 | /_/ @ 198 | @@ 199 | ___ @ 200 | |__ \@ 201 | / /@ 202 | |_| @ 203 | (_) @ 204 | @@ 205 | ____ @ 206 | / __ \ @ 207 | / / _` |@ 208 | | | (_| |@ 209 | \ \__,_|@ 210 | \____/ @@ 211 | _ @ 212 | / \ @ 213 | / _ \ @ 214 | / ___ \ @ 215 | /_/ \_\@ 216 | @@ 217 | ____ @ 218 | | __ ) @ 219 | | _ \ @ 220 | | |_) |@ 221 | |____/ @ 222 | @@ 223 | ____ @ 224 | / ___|@ 225 | | | @ 226 | | |___ @ 227 | \____|@ 228 | @@ 229 | ____ @ 230 | | _ \ @ 231 | | | | |@ 232 | | |_| |@ 233 | |____/ @ 234 | @@ 235 | _____ @ 236 | | ____|@ 237 | | _| @ 238 | | |___ @ 239 | |_____|@ 240 | @@ 241 | _____ @ 242 | | ___|@ 243 | | |_ @ 244 | | _| @ 245 | |_| @ 246 | @@ 247 | ____ @ 248 | / ___|@ 249 | | | _ @ 250 | | |_| |@ 251 | \____|@ 252 | @@ 253 | _ _ @ 254 | | | | |@ 255 | | |_| |@ 256 | | _ |@ 257 | |_| |_|@ 258 | @@ 259 | ___ @ 260 | |_ _|@ 261 | | | @ 262 | | | @ 263 | |___|@ 264 | @@ 265 | _ @ 266 | | |@ 267 | _ | |@ 268 | | |_| |@ 269 | \___/ @ 270 | @@ 271 | _ __@ 272 | | |/ /@ 273 | | ' / @ 274 | | . \ @ 275 | |_|\_\@ 276 | @@ 277 | _ @ 278 | | | @ 279 | | | @ 280 | | |___ @ 281 | |_____|@ 282 | @@ 283 | __ __ @ 284 | | \/ |@ 285 | | |\/| |@ 286 | | | | |@ 287 | |_| |_|@ 288 | @@ 289 | _ _ @ 290 | | \ | |@ 291 | | \| |@ 292 | | |\ |@ 293 | |_| \_|@ 294 | @@ 295 | ___ @ 296 | / _ \ @ 297 | | | | |@ 298 | | |_| |@ 299 | \___/ @ 300 | @@ 301 | ____ @ 302 | | _ \ @ 303 | | |_) |@ 304 | | __/ @ 305 | |_| @ 306 | @@ 307 | ___ @ 308 | / _ \ @ 309 | | | | |@ 310 | | |_| |@ 311 | \__\_\@ 312 | @@ 313 | ____ @ 314 | | _ \ @ 315 | | |_) |@ 316 | | _ < @ 317 | |_| \_\@ 318 | @@ 319 | ____ @ 320 | / ___| @ 321 | \___ \ @ 322 | ___) |@ 323 | |____/ @ 324 | @@ 325 | _____ @ 326 | |_ _|@ 327 | | | @ 328 | | | @ 329 | |_| @ 330 | @@ 331 | _ _ @ 332 | | | | |@ 333 | | | | |@ 334 | | |_| |@ 335 | \___/ @ 336 | @@ 337 | __ __@ 338 | \ \ / /@ 339 | \ \ / / @ 340 | \ V / @ 341 | \_/ @ 342 | @@ 343 | __ __@ 344 | \ \ / /@ 345 | \ \ /\ / / @ 346 | \ V V / @ 347 | \_/\_/ @ 348 | @@ 349 | __ __@ 350 | \ \/ /@ 351 | \ / @ 352 | / \ @ 353 | /_/\_\@ 354 | @@ 355 | __ __@ 356 | \ \ / /@ 357 | \ V / @ 358 | | | @ 359 | |_| @ 360 | @@ 361 | _____@ 362 | |__ /@ 363 | / / @ 364 | / /_ @ 365 | /____|@ 366 | @@ 367 | __ @ 368 | | _|@ 369 | | | @ 370 | | | @ 371 | | | @ 372 | |__|@@ 373 | __ @ 374 | \ \ @ 375 | \ \ @ 376 | \ \ @ 377 | \_\@ 378 | @@ 379 | __ @ 380 | |_ |@ 381 | | |@ 382 | | |@ 383 | | |@ 384 | |__|@@ 385 | /\ @ 386 | |/\|@ 387 | $ @ 388 | $ @ 389 | $ @ 390 | @@ 391 | @ 392 | @ 393 | @ 394 | @ 395 | _____ @ 396 | |_____|@@ 397 | _ @ 398 | ( )@ 399 | \|@ 400 | $ @ 401 | $ @ 402 | @@ 403 | @ 404 | __ _ @ 405 | / _` |@ 406 | | (_| |@ 407 | \__,_|@ 408 | @@ 409 | _ @ 410 | | |__ @ 411 | | '_ \ @ 412 | | |_) |@ 413 | |_.__/ @ 414 | @@ 415 | @ 416 | ___ @ 417 | / __|@ 418 | | (__ @ 419 | \___|@ 420 | @@ 421 | _ @ 422 | __| |@ 423 | / _` |@ 424 | | (_| |@ 425 | \__,_|@ 426 | @@ 427 | @ 428 | ___ @ 429 | / _ \@ 430 | | __/@ 431 | \___|@ 432 | @@ 433 | __ @ 434 | / _|@ 435 | | |_ @ 436 | | _|@ 437 | |_| @ 438 | @@ 439 | @ 440 | __ _ @ 441 | / _` |@ 442 | | (_| |@ 443 | \__, |@ 444 | |___/ @@ 445 | _ @ 446 | | |__ @ 447 | | '_ \ @ 448 | | | | |@ 449 | |_| |_|@ 450 | @@ 451 | _ @ 452 | (_)@ 453 | | |@ 454 | | |@ 455 | |_|@ 456 | @@ 457 | _ @ 458 | (_)@ 459 | | |@ 460 | | |@ 461 | _/ |@ 462 | |__/ @@ 463 | _ @ 464 | | | __@ 465 | | |/ /@ 466 | | < @ 467 | |_|\_\@ 468 | @@ 469 | _ @ 470 | | |@ 471 | | |@ 472 | | |@ 473 | |_|@ 474 | @@ 475 | @ 476 | _ __ ___ @ 477 | | '_ ` _ \ @ 478 | | | | | | |@ 479 | |_| |_| |_|@ 480 | @@ 481 | @ 482 | _ __ @ 483 | | '_ \ @ 484 | | | | |@ 485 | |_| |_|@ 486 | @@ 487 | @ 488 | ___ @ 489 | / _ \ @ 490 | | (_) |@ 491 | \___/ @ 492 | @@ 493 | @ 494 | _ __ @ 495 | | '_ \ @ 496 | | |_) |@ 497 | | .__/ @ 498 | |_| @@ 499 | @ 500 | __ _ @ 501 | / _` |@ 502 | | (_| |@ 503 | \__, |@ 504 | |_|@@ 505 | @ 506 | _ __ @ 507 | | '__|@ 508 | | | @ 509 | |_| @ 510 | @@ 511 | @ 512 | ___ @ 513 | / __|@ 514 | \__ \@ 515 | |___/@ 516 | @@ 517 | _ @ 518 | | |_ @ 519 | | __|@ 520 | | |_ @ 521 | \__|@ 522 | @@ 523 | @ 524 | _ _ @ 525 | | | | |@ 526 | | |_| |@ 527 | \__,_|@ 528 | @@ 529 | @ 530 | __ __@ 531 | \ \ / /@ 532 | \ V / @ 533 | \_/ @ 534 | @@ 535 | @ 536 | __ __@ 537 | \ \ /\ / /@ 538 | \ V V / @ 539 | \_/\_/ @ 540 | @@ 541 | @ 542 | __ __@ 543 | \ \/ /@ 544 | > < @ 545 | /_/\_\@ 546 | @@ 547 | @ 548 | _ _ @ 549 | | | | |@ 550 | | |_| |@ 551 | \__, |@ 552 | |___/ @@ 553 | @ 554 | ____@ 555 | |_ /@ 556 | / / @ 557 | /___|@ 558 | @@ 559 | __@ 560 | / /@ 561 | | | @ 562 | < < @ 563 | | | @ 564 | \_\@@ 565 | _ @ 566 | | |@ 567 | | |@ 568 | | |@ 569 | | |@ 570 | |_|@@ 571 | __ @ 572 | \ \ @ 573 | | | @ 574 | > >@ 575 | | | @ 576 | /_/ @@ 577 | /\/|@ 578 | |/\/ @ 579 | $ @ 580 | $ @ 581 | $ @ 582 | @@ 583 | _ _ @ 584 | (_)_(_)@ 585 | /_\ @ 586 | / _ \ @ 587 | /_/ \_\@ 588 | @@ 589 | _ _ @ 590 | (_)_(_)@ 591 | / _ \ @ 592 | | |_| |@ 593 | \___/ @ 594 | @@ 595 | _ _ @ 596 | (_) (_)@ 597 | | | | |@ 598 | | |_| |@ 599 | \___/ @ 600 | @@ 601 | _ _ @ 602 | (_)_(_)@ 603 | / _` |@ 604 | | (_| |@ 605 | \__,_|@ 606 | @@ 607 | _ _ @ 608 | (_)_(_)@ 609 | / _ \ @ 610 | | (_) |@ 611 | \___/ @ 612 | @@ 613 | _ _ @ 614 | (_) (_)@ 615 | | | | |@ 616 | | |_| |@ 617 | \__,_|@ 618 | @@ 619 | ___ @ 620 | / _ \@ 621 | | |/ /@ 622 | | |\ \@ 623 | | ||_/@ 624 | |_| @@ 625 | 160 NO-BREAK SPACE 626 | $@ 627 | $@ 628 | $@ 629 | $@ 630 | $@ 631 | $@@ 632 | 161 INVERTED EXCLAMATION MARK 633 | _ @ 634 | (_)@ 635 | | |@ 636 | | |@ 637 | |_|@ 638 | @@ 639 | 162 CENT SIGN 640 | _ @ 641 | | | @ 642 | / __)@ 643 | | (__ @ 644 | \ )@ 645 | |_| @@ 646 | 163 POUND SIGN 647 | ___ @ 648 | / ,_\ @ 649 | _| |_ @ 650 | | |___ @ 651 | (_,____|@ 652 | @@ 653 | 164 CURRENCY SIGN 654 | /\___/\@ 655 | \ _ /@ 656 | | (_) |@ 657 | / ___ \@ 658 | \/ \/@ 659 | @@ 660 | 165 YEN SIGN 661 | __ __ @ 662 | \ V / @ 663 | |__ __|@ 664 | |__ __|@ 665 | |_| @ 666 | @@ 667 | 166 BROKEN BAR 668 | _ @ 669 | | |@ 670 | |_|@ 671 | _ @ 672 | | |@ 673 | |_|@@ 674 | 167 SECTION SIGN 675 | __ @ 676 | _/ _)@ 677 | / \ \ @ 678 | \ \\ \@ 679 | \ \_/@ 680 | (__/ @@ 681 | 168 DIAERESIS 682 | _ _ @ 683 | (_) (_)@ 684 | $ $ @ 685 | $ $ @ 686 | $ $ @ 687 | @@ 688 | 169 COPYRIGHT SIGN 689 | _____ @ 690 | / ___ \ @ 691 | / / __| \ @ 692 | | | (__ |@ 693 | \ \___| / @ 694 | \_____/ @@ 695 | 170 FEMININE ORDINAL INDICATOR 696 | __ _ @ 697 | / _` |@ 698 | \__,_|@ 699 | |____|@ 700 | $ @ 701 | @@ 702 | 171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 703 | ____@ 704 | / / /@ 705 | / / / @ 706 | \ \ \ @ 707 | \_\_\@ 708 | @@ 709 | 172 NOT SIGN 710 | @ 711 | _____ @ 712 | |___ |@ 713 | |_|@ 714 | $ @ 715 | @@ 716 | 173 SOFT HYPHEN 717 | @ 718 | @ 719 | ____ @ 720 | |____|@ 721 | $ @ 722 | @@ 723 | 174 REGISTERED SIGN 724 | _____ @ 725 | / ___ \ @ 726 | / | _ \ \ @ 727 | | | / |@ 728 | \ |_|_\ / @ 729 | \_____/ @@ 730 | 175 MACRON 731 | _____ @ 732 | |_____|@ 733 | $ @ 734 | $ @ 735 | $ @ 736 | @@ 737 | 176 DEGREE SIGN 738 | __ @ 739 | / \ @ 740 | | () |@ 741 | \__/ @ 742 | $ @ 743 | @@ 744 | 177 PLUS-MINUS SIGN 745 | _ @ 746 | _| |_ @ 747 | |_ _|@ 748 | _|_|_ @ 749 | |_____|@ 750 | @@ 751 | 178 SUPERSCRIPT TWO 752 | ___ @ 753 | |_ )@ 754 | / / @ 755 | /___|@ 756 | $ @ 757 | @@ 758 | 179 SUPERSCRIPT THREE 759 | ____@ 760 | |__ /@ 761 | |_ \@ 762 | |___/@ 763 | $ @ 764 | @@ 765 | 180 ACUTE ACCENT 766 | __@ 767 | /_/@ 768 | $ @ 769 | $ @ 770 | $ @ 771 | @@ 772 | 181 MICRO SIGN 773 | @ 774 | _ _ @ 775 | | | | |@ 776 | | |_| |@ 777 | | ._,_|@ 778 | |_| @@ 779 | 182 PILCROW SIGN 780 | _____ @ 781 | / |@ 782 | | (| | |@ 783 | \__ | |@ 784 | |_|_|@ 785 | @@ 786 | 183 MIDDLE DOT 787 | @ 788 | _ @ 789 | (_)@ 790 | $ @ 791 | $ @ 792 | @@ 793 | 184 CEDILLA 794 | @ 795 | @ 796 | @ 797 | @ 798 | _ @ 799 | )_)@@ 800 | 185 SUPERSCRIPT ONE 801 | _ @ 802 | / |@ 803 | | |@ 804 | |_|@ 805 | $ @ 806 | @@ 807 | 186 MASCULINE ORDINAL INDICATOR 808 | ___ @ 809 | / _ \@ 810 | \___/@ 811 | |___|@ 812 | $ @ 813 | @@ 814 | 187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 815 | ____ @ 816 | \ \ \ @ 817 | \ \ \@ 818 | / / /@ 819 | /_/_/ @ 820 | @@ 821 | 188 VULGAR FRACTION ONE QUARTER 822 | _ __ @ 823 | / | / / _ @ 824 | | |/ / | | @ 825 | |_/ /|_ _|@ 826 | /_/ |_| @ 827 | @@ 828 | 189 VULGAR FRACTION ONE HALF 829 | _ __ @ 830 | / | / /__ @ 831 | | |/ /_ )@ 832 | |_/ / / / @ 833 | /_/ /___|@ 834 | @@ 835 | 190 VULGAR FRACTION THREE QUARTERS 836 | ____ __ @ 837 | |__ / / / _ @ 838 | |_ \/ / | | @ 839 | |___/ /|_ _|@ 840 | /_/ |_| @ 841 | @@ 842 | 191 INVERTED QUESTION MARK 843 | _ @ 844 | (_) @ 845 | | | @ 846 | / /_ @ 847 | \___|@ 848 | @@ 849 | 192 LATIN CAPITAL LETTER A WITH GRAVE 850 | __ @ 851 | \_\ @ 852 | /_\ @ 853 | / _ \ @ 854 | /_/ \_\@ 855 | @@ 856 | 193 LATIN CAPITAL LETTER A WITH ACUTE 857 | __ @ 858 | /_/ @ 859 | /_\ @ 860 | / _ \ @ 861 | /_/ \_\@ 862 | @@ 863 | 194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX 864 | //\ @ 865 | |/_\| @ 866 | /_\ @ 867 | / _ \ @ 868 | /_/ \_\@ 869 | @@ 870 | 195 LATIN CAPITAL LETTER A WITH TILDE 871 | /\/| @ 872 | |/\/ @ 873 | /_\ @ 874 | / _ \ @ 875 | /_/ \_\@ 876 | @@ 877 | 196 LATIN CAPITAL LETTER A WITH DIAERESIS 878 | _ _ @ 879 | (_)_(_)@ 880 | /_\ @ 881 | / _ \ @ 882 | /_/ \_\@ 883 | @@ 884 | 197 LATIN CAPITAL LETTER A WITH RING ABOVE 885 | _ @ 886 | (o) @ 887 | /_\ @ 888 | / _ \ @ 889 | /_/ \_\@ 890 | @@ 891 | 198 LATIN CAPITAL LETTER AE 892 | ______ @ 893 | / ____|@ 894 | / _ _| @ 895 | / __ |___ @ 896 | /_/ |_____|@ 897 | @@ 898 | 199 LATIN CAPITAL LETTER C WITH CEDILLA 899 | ____ @ 900 | / ___|@ 901 | | | @ 902 | | |___ @ 903 | \____|@ 904 | )_) @@ 905 | 200 LATIN CAPITAL LETTER E WITH GRAVE 906 | __ @ 907 | _\_\_ @ 908 | | ____|@ 909 | | _|_ @ 910 | |_____|@ 911 | @@ 912 | 201 LATIN CAPITAL LETTER E WITH ACUTE 913 | __ @ 914 | _/_/_ @ 915 | | ____|@ 916 | | _|_ @ 917 | |_____|@ 918 | @@ 919 | 202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX 920 | //\ @ 921 | |/_\| @ 922 | | ____|@ 923 | | _|_ @ 924 | |_____|@ 925 | @@ 926 | 203 LATIN CAPITAL LETTER E WITH DIAERESIS 927 | _ _ @ 928 | (_)_(_)@ 929 | | ____|@ 930 | | _|_ @ 931 | |_____|@ 932 | @@ 933 | 204 LATIN CAPITAL LETTER I WITH GRAVE 934 | __ @ 935 | \_\ @ 936 | |_ _|@ 937 | | | @ 938 | |___|@ 939 | @@ 940 | 205 LATIN CAPITAL LETTER I WITH ACUTE 941 | __ @ 942 | /_/ @ 943 | |_ _|@ 944 | | | @ 945 | |___|@ 946 | @@ 947 | 206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX 948 | //\ @ 949 | |/_\|@ 950 | |_ _|@ 951 | | | @ 952 | |___|@ 953 | @@ 954 | 207 LATIN CAPITAL LETTER I WITH DIAERESIS 955 | _ _ @ 956 | (_)_(_)@ 957 | |_ _| @ 958 | | | @ 959 | |___| @ 960 | @@ 961 | 208 LATIN CAPITAL LETTER ETH 962 | ____ @ 963 | | _ \ @ 964 | _| |_| |@ 965 | |__ __| |@ 966 | |____/ @ 967 | @@ 968 | 209 LATIN CAPITAL LETTER N WITH TILDE 969 | /\/|@ 970 | |/\/ @ 971 | | \| |@ 972 | | .` |@ 973 | |_|\_|@ 974 | @@ 975 | 210 LATIN CAPITAL LETTER O WITH GRAVE 976 | __ @ 977 | \_\ @ 978 | / _ \ @ 979 | | |_| |@ 980 | \___/ @ 981 | @@ 982 | 211 LATIN CAPITAL LETTER O WITH ACUTE 983 | __ @ 984 | /_/ @ 985 | / _ \ @ 986 | | |_| |@ 987 | \___/ @ 988 | @@ 989 | 212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX 990 | //\ @ 991 | |/_\| @ 992 | / _ \ @ 993 | | |_| |@ 994 | \___/ @ 995 | @@ 996 | 213 LATIN CAPITAL LETTER O WITH TILDE 997 | /\/| @ 998 | |/\/ @ 999 | / _ \ @ 1000 | | |_| |@ 1001 | \___/ @ 1002 | @@ 1003 | 214 LATIN CAPITAL LETTER O WITH DIAERESIS 1004 | _ _ @ 1005 | (_)_(_)@ 1006 | / _ \ @ 1007 | | |_| |@ 1008 | \___/ @ 1009 | @@ 1010 | 215 MULTIPLICATION SIGN 1011 | @ 1012 | @ 1013 | /\/\@ 1014 | > <@ 1015 | \/\/@ 1016 | @@ 1017 | 216 LATIN CAPITAL LETTER O WITH STROKE 1018 | ____ @ 1019 | / _// @ 1020 | | |// |@ 1021 | | //| |@ 1022 | //__/ @ 1023 | @@ 1024 | 217 LATIN CAPITAL LETTER U WITH GRAVE 1025 | __ @ 1026 | _\_\_ @ 1027 | | | | |@ 1028 | | |_| |@ 1029 | \___/ @ 1030 | @@ 1031 | 218 LATIN CAPITAL LETTER U WITH ACUTE 1032 | __ @ 1033 | _/_/_ @ 1034 | | | | |@ 1035 | | |_| |@ 1036 | \___/ @ 1037 | @@ 1038 | 219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX 1039 | //\ @ 1040 | |/ \| @ 1041 | | | | |@ 1042 | | |_| |@ 1043 | \___/ @ 1044 | @@ 1045 | 220 LATIN CAPITAL LETTER U WITH DIAERESIS 1046 | _ _ @ 1047 | (_) (_)@ 1048 | | | | |@ 1049 | | |_| |@ 1050 | \___/ @ 1051 | @@ 1052 | 221 LATIN CAPITAL LETTER Y WITH ACUTE 1053 | __ @ 1054 | __/_/__@ 1055 | \ \ / /@ 1056 | \ V / @ 1057 | |_| @ 1058 | @@ 1059 | 222 LATIN CAPITAL LETTER THORN 1060 | _ @ 1061 | | |___ @ 1062 | | __ \@ 1063 | | ___/@ 1064 | |_| @ 1065 | @@ 1066 | 223 LATIN SMALL LETTER SHARP S 1067 | ___ @ 1068 | / _ \@ 1069 | | |/ /@ 1070 | | |\ \@ 1071 | | ||_/@ 1072 | |_| @@ 1073 | 224 LATIN SMALL LETTER A WITH GRAVE 1074 | __ @ 1075 | \_\_ @ 1076 | / _` |@ 1077 | | (_| |@ 1078 | \__,_|@ 1079 | @@ 1080 | 225 LATIN SMALL LETTER A WITH ACUTE 1081 | __ @ 1082 | /_/_ @ 1083 | / _` |@ 1084 | | (_| |@ 1085 | \__,_|@ 1086 | @@ 1087 | 226 LATIN SMALL LETTER A WITH CIRCUMFLEX 1088 | //\ @ 1089 | |/_\| @ 1090 | / _` |@ 1091 | | (_| |@ 1092 | \__,_|@ 1093 | @@ 1094 | 227 LATIN SMALL LETTER A WITH TILDE 1095 | /\/| @ 1096 | |/\/_ @ 1097 | / _` |@ 1098 | | (_| |@ 1099 | \__,_|@ 1100 | @@ 1101 | 228 LATIN SMALL LETTER A WITH DIAERESIS 1102 | _ _ @ 1103 | (_)_(_)@ 1104 | / _` |@ 1105 | | (_| |@ 1106 | \__,_|@ 1107 | @@ 1108 | 229 LATIN SMALL LETTER A WITH RING ABOVE 1109 | __ @ 1110 | (()) @ 1111 | / _ '|@ 1112 | | (_| |@ 1113 | \__,_|@ 1114 | @@ 1115 | 230 LATIN SMALL LETTER AE 1116 | @ 1117 | __ ____ @ 1118 | / _` _ \@ 1119 | | (_| __/@ 1120 | \__,____|@ 1121 | @@ 1122 | 231 LATIN SMALL LETTER C WITH CEDILLA 1123 | @ 1124 | ___ @ 1125 | / __|@ 1126 | | (__ @ 1127 | \___|@ 1128 | )_) @@ 1129 | 232 LATIN SMALL LETTER E WITH GRAVE 1130 | __ @ 1131 | \_\ @ 1132 | / _ \@ 1133 | | __/@ 1134 | \___|@ 1135 | @@ 1136 | 233 LATIN SMALL LETTER E WITH ACUTE 1137 | __ @ 1138 | /_/ @ 1139 | / _ \@ 1140 | | __/@ 1141 | \___|@ 1142 | @@ 1143 | 234 LATIN SMALL LETTER E WITH CIRCUMFLEX 1144 | //\ @ 1145 | |/_\|@ 1146 | / _ \@ 1147 | | __/@ 1148 | \___|@ 1149 | @@ 1150 | 235 LATIN SMALL LETTER E WITH DIAERESIS 1151 | _ _ @ 1152 | (_)_(_)@ 1153 | / _ \ @ 1154 | | __/ @ 1155 | \___| @ 1156 | @@ 1157 | 236 LATIN SMALL LETTER I WITH GRAVE 1158 | __ @ 1159 | \_\@ 1160 | | |@ 1161 | | |@ 1162 | |_|@ 1163 | @@ 1164 | 237 LATIN SMALL LETTER I WITH ACUTE 1165 | __@ 1166 | /_/@ 1167 | | |@ 1168 | | |@ 1169 | |_|@ 1170 | @@ 1171 | 238 LATIN SMALL LETTER I WITH CIRCUMFLEX 1172 | //\ @ 1173 | |/_\|@ 1174 | | | @ 1175 | | | @ 1176 | |_| @ 1177 | @@ 1178 | 239 LATIN SMALL LETTER I WITH DIAERESIS 1179 | _ _ @ 1180 | (_)_(_)@ 1181 | | | @ 1182 | | | @ 1183 | |_| @ 1184 | @@ 1185 | 240 LATIN SMALL LETTER ETH 1186 | /\/\ @ 1187 | > < @ 1188 | _\/\ |@ 1189 | / __` |@ 1190 | \____/ @ 1191 | @@ 1192 | 241 LATIN SMALL LETTER N WITH TILDE 1193 | /\/| @ 1194 | |/\/ @ 1195 | | '_ \ @ 1196 | | | | |@ 1197 | |_| |_|@ 1198 | @@ 1199 | 242 LATIN SMALL LETTER O WITH GRAVE 1200 | __ @ 1201 | \_\ @ 1202 | / _ \ @ 1203 | | (_) |@ 1204 | \___/ @ 1205 | @@ 1206 | 243 LATIN SMALL LETTER O WITH ACUTE 1207 | __ @ 1208 | /_/ @ 1209 | / _ \ @ 1210 | | (_) |@ 1211 | \___/ @ 1212 | @@ 1213 | 244 LATIN SMALL LETTER O WITH CIRCUMFLEX 1214 | //\ @ 1215 | |/_\| @ 1216 | / _ \ @ 1217 | | (_) |@ 1218 | \___/ @ 1219 | @@ 1220 | 245 LATIN SMALL LETTER O WITH TILDE 1221 | /\/| @ 1222 | |/\/ @ 1223 | / _ \ @ 1224 | | (_) |@ 1225 | \___/ @ 1226 | @@ 1227 | 246 LATIN SMALL LETTER O WITH DIAERESIS 1228 | _ _ @ 1229 | (_)_(_)@ 1230 | / _ \ @ 1231 | | (_) |@ 1232 | \___/ @ 1233 | @@ 1234 | 247 DIVISION SIGN 1235 | @ 1236 | _ @ 1237 | _(_)_ @ 1238 | |_____|@ 1239 | (_) @ 1240 | @@ 1241 | 248 LATIN SMALL LETTER O WITH STROKE 1242 | @ 1243 | ____ @ 1244 | / _//\ @ 1245 | | (//) |@ 1246 | \//__/ @ 1247 | @@ 1248 | 249 LATIN SMALL LETTER U WITH GRAVE 1249 | __ @ 1250 | _\_\_ @ 1251 | | | | |@ 1252 | | |_| |@ 1253 | \__,_|@ 1254 | @@ 1255 | 250 LATIN SMALL LETTER U WITH ACUTE 1256 | __ @ 1257 | _/_/_ @ 1258 | | | | |@ 1259 | | |_| |@ 1260 | \__,_|@ 1261 | @@ 1262 | 251 LATIN SMALL LETTER U WITH CIRCUMFLEX 1263 | //\ @ 1264 | |/ \| @ 1265 | | | | |@ 1266 | | |_| |@ 1267 | \__,_|@ 1268 | @@ 1269 | 252 LATIN SMALL LETTER U WITH DIAERESIS 1270 | _ _ @ 1271 | (_) (_)@ 1272 | | | | |@ 1273 | | |_| |@ 1274 | \__,_|@ 1275 | @@ 1276 | 253 LATIN SMALL LETTER Y WITH ACUTE 1277 | __ @ 1278 | _/_/_ @ 1279 | | | | |@ 1280 | | |_| |@ 1281 | \__, |@ 1282 | |___/ @@ 1283 | 254 LATIN SMALL LETTER THORN 1284 | _ @ 1285 | | |__ @ 1286 | | '_ \ @ 1287 | | |_) |@ 1288 | | .__/ @ 1289 | |_| @@ 1290 | 255 LATIN SMALL LETTER Y WITH DIAERESIS 1291 | _ _ @ 1292 | (_) (_)@ 1293 | | | | |@ 1294 | | |_| |@ 1295 | \__, |@ 1296 | |___/ @@ 1297 | 0x0100 LATIN CAPITAL LETTER A WITH MACRON 1298 | ____ @ 1299 | /___/ @ 1300 | /_\ @ 1301 | / _ \ @ 1302 | /_/ \_\@ 1303 | @@ 1304 | 0x0101 LATIN SMALL LETTER A WITH MACRON 1305 | ___ @ 1306 | /_ _/@ 1307 | / _` |@ 1308 | | (_| |@ 1309 | \__,_|@ 1310 | @@ 1311 | 0x0102 LATIN CAPITAL LETTER A WITH BREVE 1312 | _ _ @ 1313 | \\_// @ 1314 | /_\ @ 1315 | / _ \ @ 1316 | /_/ \_\@ 1317 | @@ 1318 | 0x0103 LATIN SMALL LETTER A WITH BREVE 1319 | \_/ @ 1320 | ___ @ 1321 | / _` |@ 1322 | | (_| |@ 1323 | \__,_|@ 1324 | @@ 1325 | 0x0104 LATIN CAPITAL LETTER A WITH OGONEK 1326 | @ 1327 | _ @ 1328 | /_\ @ 1329 | / _ \ @ 1330 | /_/ \_\@ 1331 | (_(@@ 1332 | 0x0105 LATIN SMALL LETTER A WITH OGONEK 1333 | @ 1334 | __ _ @ 1335 | / _` |@ 1336 | | (_| |@ 1337 | \__,_|@ 1338 | (_(@@ 1339 | 0x0106 LATIN CAPITAL LETTER C WITH ACUTE 1340 | __ @ 1341 | _/_/ @ 1342 | / ___|@ 1343 | | |___ @ 1344 | \____|@ 1345 | @@ 1346 | 0x0107 LATIN SMALL LETTER C WITH ACUTE 1347 | __ @ 1348 | /__/@ 1349 | / __|@ 1350 | | (__ @ 1351 | \___|@ 1352 | @@ 1353 | 0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX 1354 | /\ @ 1355 | _//\\@ 1356 | / ___|@ 1357 | | |___ @ 1358 | \____|@ 1359 | @@ 1360 | 0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX 1361 | /\ @ 1362 | /_\ @ 1363 | / __|@ 1364 | | (__ @ 1365 | \___|@ 1366 | @@ 1367 | 0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE 1368 | [] @ 1369 | ____ @ 1370 | / ___|@ 1371 | | |___ @ 1372 | \____|@ 1373 | @@ 1374 | 0x010B LATIN SMALL LETTER C WITH DOT ABOVE 1375 | [] @ 1376 | ___ @ 1377 | / __|@ 1378 | | (__ @ 1379 | \___|@ 1380 | @@ 1381 | 0x010C LATIN CAPITAL LETTER C WITH CARON 1382 | \\// @ 1383 | _\/_ @ 1384 | / ___|@ 1385 | | |___ @ 1386 | \____|@ 1387 | @@ 1388 | 0x010D LATIN SMALL LETTER C WITH CARON 1389 | \\//@ 1390 | _\/ @ 1391 | / __|@ 1392 | | (__ @ 1393 | \___|@ 1394 | @@ 1395 | 0x010E LATIN CAPITAL LETTER D WITH CARON 1396 | \\// @ 1397 | __\/ @ 1398 | | _ \ @ 1399 | | |_| |@ 1400 | |____/ @ 1401 | @@ 1402 | 0x010F LATIN SMALL LETTER D WITH CARON 1403 | \/ _ @ 1404 | __| |@ 1405 | / _` |@ 1406 | | (_| |@ 1407 | \__,_|@ 1408 | @@ 1409 | 0x0110 LATIN CAPITAL LETTER D WITH STROKE 1410 | ____ @ 1411 | |_ __ \ @ 1412 | /| |/ | |@ 1413 | /|_|/_| |@ 1414 | |_____/ @ 1415 | @@ 1416 | 0x0111 LATIN SMALL LETTER D WITH STROKE 1417 | ---|@ 1418 | __| |@ 1419 | / _` |@ 1420 | | (_| |@ 1421 | \__,_|@ 1422 | @@ 1423 | 0x0112 LATIN CAPITAL LETTER E WITH MACRON 1424 | ____ @ 1425 | /___/ @ 1426 | | ____|@ 1427 | | _|_ @ 1428 | |_____|@ 1429 | @@ 1430 | 0x0113 LATIN SMALL LETTER E WITH MACRON 1431 | ____@ 1432 | /_ _/@ 1433 | / _ \ @ 1434 | | __/ @ 1435 | \___| @ 1436 | @@ 1437 | 0x0114 LATIN CAPITAL LETTER E WITH BREVE 1438 | _ _ @ 1439 | \\_// @ 1440 | | ____|@ 1441 | | _|_ @ 1442 | |_____|@ 1443 | @@ 1444 | 0x0115 LATIN SMALL LETTER E WITH BREVE 1445 | \\ //@ 1446 | -- @ 1447 | / _ \ @ 1448 | | __/ @ 1449 | \___| @ 1450 | @@ 1451 | 0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE 1452 | [] @ 1453 | _____ @ 1454 | | ____|@ 1455 | | _|_ @ 1456 | |_____|@ 1457 | @@ 1458 | 0x0117 LATIN SMALL LETTER E WITH DOT ABOVE 1459 | [] @ 1460 | __ @ 1461 | / _ \@ 1462 | | __/@ 1463 | \___|@ 1464 | @@ 1465 | 0x0118 LATIN CAPITAL LETTER E WITH OGONEK 1466 | @ 1467 | _____ @ 1468 | | ____|@ 1469 | | _|_ @ 1470 | |_____|@ 1471 | (__(@@ 1472 | 0x0119 LATIN SMALL LETTER E WITH OGONEK 1473 | @ 1474 | ___ @ 1475 | / _ \@ 1476 | | __/@ 1477 | \___|@ 1478 | (_(@@ 1479 | 0x011A LATIN CAPITAL LETTER E WITH CARON 1480 | \\// @ 1481 | __\/_ @ 1482 | | ____|@ 1483 | | _|_ @ 1484 | |_____|@ 1485 | @@ 1486 | 0x011B LATIN SMALL LETTER E WITH CARON 1487 | \\//@ 1488 | \/ @ 1489 | / _ \@ 1490 | | __/@ 1491 | \___|@ 1492 | @@ 1493 | 0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX 1494 | _/\_ @ 1495 | / ___|@ 1496 | | | _ @ 1497 | | |_| |@ 1498 | \____|@ 1499 | @@ 1500 | 0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX 1501 | /\ @ 1502 | _/_ \@ 1503 | / _` |@ 1504 | | (_| |@ 1505 | \__, |@ 1506 | |___/ @@ 1507 | 0x011E LATIN CAPITAL LETTER G WITH BREVE 1508 | _\/_ @ 1509 | / ___|@ 1510 | | | _ @ 1511 | | |_| |@ 1512 | \____|@ 1513 | @@ 1514 | 0x011F LATIN SMALL LETTER G WITH BREVE 1515 | \___/ @ 1516 | __ _ @ 1517 | / _` |@ 1518 | | (_| |@ 1519 | \__, |@ 1520 | |___/ @@ 1521 | 0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE 1522 | _[]_ @ 1523 | / ___|@ 1524 | | | _ @ 1525 | | |_| |@ 1526 | \____|@ 1527 | @@ 1528 | 0x0121 LATIN SMALL LETTER G WITH DOT ABOVE 1529 | [] @ 1530 | __ _ @ 1531 | / _` |@ 1532 | | (_| |@ 1533 | \__, |@ 1534 | |___/ @@ 1535 | 0x0122 LATIN CAPITAL LETTER G WITH CEDILLA 1536 | ____ @ 1537 | / ___|@ 1538 | | | _ @ 1539 | | |_| |@ 1540 | \____|@ 1541 | )__) @@ 1542 | 0x0123 LATIN SMALL LETTER G WITH CEDILLA 1543 | @ 1544 | __ _ @ 1545 | / _` |@ 1546 | | (_| |@ 1547 | \__, |@ 1548 | |_))))@@ 1549 | 0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX 1550 | _/ \_ @ 1551 | | / \ |@ 1552 | | |_| |@ 1553 | | _ |@ 1554 | |_| |_|@ 1555 | @@ 1556 | 0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX 1557 | _ /\ @ 1558 | | |//\ @ 1559 | | '_ \ @ 1560 | | | | |@ 1561 | |_| |_|@ 1562 | @@ 1563 | 0x0126 LATIN CAPITAL LETTER H WITH STROKE 1564 | _ _ @ 1565 | | |=| |@ 1566 | | |_| |@ 1567 | | _ |@ 1568 | |_| |_|@ 1569 | @@ 1570 | 0x0127 LATIN SMALL LETTER H WITH STROKE 1571 | _ @ 1572 | |=|__ @ 1573 | | '_ \ @ 1574 | | | | |@ 1575 | |_| |_|@ 1576 | @@ 1577 | 0x0128 LATIN CAPITAL LETTER I WITH TILDE 1578 | /\//@ 1579 | |_ _|@ 1580 | | | @ 1581 | | | @ 1582 | |___|@ 1583 | @@ 1584 | 0x0129 LATIN SMALL LETTER I WITH TILDE 1585 | @ 1586 | /\/@ 1587 | | |@ 1588 | | |@ 1589 | |_|@ 1590 | @@ 1591 | 0x012A LATIN CAPITAL LETTER I WITH MACRON 1592 | /___/@ 1593 | |_ _|@ 1594 | | | @ 1595 | | | @ 1596 | |___|@ 1597 | @@ 1598 | 0x012B LATIN SMALL LETTER I WITH MACRON 1599 | ____@ 1600 | /___/@ 1601 | | | @ 1602 | | | @ 1603 | |_| @ 1604 | @@ 1605 | 0x012C LATIN CAPITAL LETTER I WITH BREVE 1606 | \__/@ 1607 | |_ _|@ 1608 | | | @ 1609 | | | @ 1610 | |___|@ 1611 | @@ 1612 | 0x012D LATIN SMALL LETTER I WITH BREVE 1613 | @ 1614 | \_/@ 1615 | | |@ 1616 | | |@ 1617 | |_|@ 1618 | @@ 1619 | 0x012E LATIN CAPITAL LETTER I WITH OGONEK 1620 | ___ @ 1621 | |_ _|@ 1622 | | | @ 1623 | | | @ 1624 | |___|@ 1625 | (__(@@ 1626 | 0x012F LATIN SMALL LETTER I WITH OGONEK 1627 | _ @ 1628 | (_) @ 1629 | | | @ 1630 | | | @ 1631 | |_|_@ 1632 | (_(@@ 1633 | 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE 1634 | _[] @ 1635 | |_ _|@ 1636 | | | @ 1637 | | | @ 1638 | |___|@ 1639 | @@ 1640 | 0x0131 LATIN SMALL LETTER DOTLESS I 1641 | @ 1642 | _ @ 1643 | | |@ 1644 | | |@ 1645 | |_|@ 1646 | @@ 1647 | 0x0132 LATIN CAPITAL LIGATURE IJ 1648 | ___ _ @ 1649 | |_ _|| |@ 1650 | | | | |@ 1651 | | |_| |@ 1652 | |__|__/ @ 1653 | @@ 1654 | 0x0133 LATIN SMALL LIGATURE IJ 1655 | _ _ @ 1656 | (_) (_)@ 1657 | | | | |@ 1658 | | | | |@ 1659 | |_|_/ |@ 1660 | |__/ @@ 1661 | 0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX 1662 | /\ @ 1663 | /_\|@ 1664 | _ | | @ 1665 | | |_| | @ 1666 | \___/ @ 1667 | @@ 1668 | 0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX 1669 | /\@ 1670 | /_\@ 1671 | | |@ 1672 | | |@ 1673 | _/ |@ 1674 | |__/ @@ 1675 | 0x0136 LATIN CAPITAL LETTER K WITH CEDILLA 1676 | _ _ @ 1677 | | |/ / @ 1678 | | ' / @ 1679 | | . \ @ 1680 | |_|\_\ @ 1681 | )__)@@ 1682 | 0x0137 LATIN SMALL LETTER K WITH CEDILLA 1683 | _ @ 1684 | | | __@ 1685 | | |/ /@ 1686 | | < @ 1687 | |_|\_\@ 1688 | )_)@@ 1689 | 0x0138 LATIN SMALL LETTER KRA 1690 | @ 1691 | _ __ @ 1692 | | |/ \@ 1693 | | < @ 1694 | |_|\_\@ 1695 | @@ 1696 | 0x0139 LATIN CAPITAL LETTER L WITH ACUTE 1697 | _ //@ 1698 | | | // @ 1699 | | | @ 1700 | | |___ @ 1701 | |_____|@ 1702 | @@ 1703 | 0x013A LATIN SMALL LETTER L WITH ACUTE 1704 | //@ 1705 | | |@ 1706 | | |@ 1707 | | |@ 1708 | |_|@ 1709 | @@ 1710 | 0x013B LATIN CAPITAL LETTER L WITH CEDILLA 1711 | _ @ 1712 | | | @ 1713 | | | @ 1714 | | |___ @ 1715 | |_____|@ 1716 | )__)@@ 1717 | 0x013C LATIN SMALL LETTER L WITH CEDILLA 1718 | _ @ 1719 | | | @ 1720 | | | @ 1721 | | | @ 1722 | |_| @ 1723 | )_)@@ 1724 | 0x013D LATIN CAPITAL LETTER L WITH CARON 1725 | _ \\//@ 1726 | | | \/ @ 1727 | | | @ 1728 | | |___ @ 1729 | |_____|@ 1730 | @@ 1731 | 0x013E LATIN SMALL LETTER L WITH CARON 1732 | _ \\//@ 1733 | | | \/ @ 1734 | | | @ 1735 | | | @ 1736 | |_| @ 1737 | @@ 1738 | 0x013F LATIN CAPITAL LETTER L WITH MIDDLE DOT 1739 | _ @ 1740 | | | @ 1741 | | | [] @ 1742 | | |___ @ 1743 | |_____|@ 1744 | @@ 1745 | 0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT 1746 | _ @ 1747 | | | @ 1748 | | | []@ 1749 | | | @ 1750 | |_| @ 1751 | @@ 1752 | 0x0141 LATIN CAPITAL LETTER L WITH STROKE 1753 | __ @ 1754 | | // @ 1755 | |//| @ 1756 | // |__ @ 1757 | |_____|@ 1758 | @@ 1759 | 0x0142 LATIN SMALL LETTER L WITH STROKE 1760 | _ @ 1761 | | |@ 1762 | |//@ 1763 | //|@ 1764 | |_|@ 1765 | @@ 1766 | 0x0143 LATIN CAPITAL LETTER N WITH ACUTE 1767 | _/ /_ @ 1768 | | \ | |@ 1769 | | \| |@ 1770 | | |\ |@ 1771 | |_| \_|@ 1772 | @@ 1773 | 0x0144 LATIN SMALL LETTER N WITH ACUTE 1774 | _ @ 1775 | _ /_/ @ 1776 | | '_ \ @ 1777 | | | | |@ 1778 | |_| |_|@ 1779 | @@ 1780 | 0x0145 LATIN CAPITAL LETTER N WITH CEDILLA 1781 | _ _ @ 1782 | | \ | |@ 1783 | | \| |@ 1784 | | |\ |@ 1785 | |_| \_|@ 1786 | )_) @@ 1787 | 0x0146 LATIN SMALL LETTER N WITH CEDILLA 1788 | @ 1789 | _ __ @ 1790 | | '_ \ @ 1791 | | | | |@ 1792 | |_| |_|@ 1793 | )_) @@ 1794 | 0x0147 LATIN CAPITAL LETTER N WITH CARON 1795 | _\/ _ @ 1796 | | \ | |@ 1797 | | \| |@ 1798 | | |\ |@ 1799 | |_| \_|@ 1800 | @@ 1801 | 0x0148 LATIN SMALL LETTER N WITH CARON 1802 | \\// @ 1803 | _\/_ @ 1804 | | '_ \ @ 1805 | | | | |@ 1806 | |_| |_|@ 1807 | @@ 1808 | 0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE 1809 | @ 1810 | _ __ @ 1811 | ( )| '_\ @ 1812 | |/| | | |@ 1813 | |_| |_|@ 1814 | @@ 1815 | 0x014A LATIN CAPITAL LETTER ENG 1816 | _ _ @ 1817 | | \ | |@ 1818 | | \| |@ 1819 | | |\ |@ 1820 | |_| \ |@ 1821 | )_)@@ 1822 | 0x014B LATIN SMALL LETTER ENG 1823 | _ __ @ 1824 | | '_ \ @ 1825 | | | | |@ 1826 | |_| | |@ 1827 | | |@ 1828 | |__ @@ 1829 | 0x014C LATIN CAPITAL LETTER O WITH MACRON 1830 | ____ @ 1831 | /_ _/ @ 1832 | / _ \ @ 1833 | | (_) |@ 1834 | \___/ @ 1835 | @@ 1836 | 0x014D LATIN SMALL LETTER O WITH MACRON 1837 | ____ @ 1838 | /_ _/ @ 1839 | / _ \ @ 1840 | | (_) |@ 1841 | \___/ @ 1842 | @@ 1843 | 0x014E LATIN CAPITAL LETTER O WITH BREVE 1844 | \ / @ 1845 | _-_ @ 1846 | / _ \ @ 1847 | | |_| |@ 1848 | \___/ @ 1849 | @@ 1850 | 0x014F LATIN SMALL LETTER O WITH BREVE 1851 | \ / @ 1852 | _-_ @ 1853 | / _ \ @ 1854 | | |_| |@ 1855 | \___/ @ 1856 | @@ 1857 | 0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 1858 | ___ @ 1859 | /_/_/@ 1860 | / _ \ @ 1861 | | |_| |@ 1862 | \___/ @ 1863 | @@ 1864 | 0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE 1865 | ___ @ 1866 | /_/_/@ 1867 | / _ \ @ 1868 | | |_| |@ 1869 | \___/ @ 1870 | @@ 1871 | 0x0152 LATIN CAPITAL LIGATURE OE 1872 | ___ ___ @ 1873 | / _ \| __|@ 1874 | | | | | | @ 1875 | | |_| | |__@ 1876 | \___/|____@ 1877 | @@ 1878 | 0x0153 LATIN SMALL LIGATURE OE 1879 | @ 1880 | ___ ___ @ 1881 | / _ \ / _ \@ 1882 | | (_) | __/@ 1883 | \___/ \___|@ 1884 | @@ 1885 | 0x0154 LATIN CAPITAL LETTER R WITH ACUTE 1886 | _/_/ @ 1887 | | _ \ @ 1888 | | |_) |@ 1889 | | _ < @ 1890 | |_| \_\@ 1891 | @@ 1892 | 0x0155 LATIN SMALL LETTER R WITH ACUTE 1893 | __@ 1894 | _ /_/@ 1895 | | '__|@ 1896 | | | @ 1897 | |_| @ 1898 | @@ 1899 | 0x0156 LATIN CAPITAL LETTER R WITH CEDILLA 1900 | ____ @ 1901 | | _ \ @ 1902 | | |_) |@ 1903 | | _ < @ 1904 | |_| \_\@ 1905 | )_) @@ 1906 | 0x0157 LATIN SMALL LETTER R WITH CEDILLA 1907 | @ 1908 | _ __ @ 1909 | | '__|@ 1910 | | | @ 1911 | |_| @ 1912 | )_) @@ 1913 | 0x0158 LATIN CAPITAL LETTER R WITH CARON 1914 | _\_/ @ 1915 | | _ \ @ 1916 | | |_) |@ 1917 | | _ < @ 1918 | |_| \_\@ 1919 | @@ 1920 | 0x0159 LATIN SMALL LETTER R WITH CARON 1921 | \\// @ 1922 | _\/_ @ 1923 | | '__|@ 1924 | | | @ 1925 | |_| @ 1926 | @@ 1927 | 0x015A LATIN CAPITAL LETTER S WITH ACUTE 1928 | _/_/ @ 1929 | / ___| @ 1930 | \___ \ @ 1931 | ___) |@ 1932 | |____/ @ 1933 | @@ 1934 | 0x015B LATIN SMALL LETTER S WITH ACUTE 1935 | __@ 1936 | _/_/@ 1937 | / __|@ 1938 | \__ \@ 1939 | |___/@ 1940 | @@ 1941 | 0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX 1942 | _/\_ @ 1943 | / ___| @ 1944 | \___ \ @ 1945 | ___) |@ 1946 | |____/ @ 1947 | @@ 1948 | 0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX 1949 | @ 1950 | /_\_@ 1951 | / __|@ 1952 | \__ \@ 1953 | |___/@ 1954 | @@ 1955 | 0x015E LATIN CAPITAL LETTER S WITH CEDILLA 1956 | ____ @ 1957 | / ___| @ 1958 | \___ \ @ 1959 | ___) |@ 1960 | |____/ @ 1961 | )__)@@ 1962 | 0x015F LATIN SMALL LETTER S WITH CEDILLA 1963 | @ 1964 | ___ @ 1965 | / __|@ 1966 | \__ \@ 1967 | |___/@ 1968 | )_)@@ 1969 | 0x0160 LATIN CAPITAL LETTER S WITH CARON 1970 | _\_/ @ 1971 | / ___| @ 1972 | \___ \ @ 1973 | ___) |@ 1974 | |____/ @ 1975 | @@ 1976 | 0x0161 LATIN SMALL LETTER S WITH CARON 1977 | \\//@ 1978 | _\/ @ 1979 | / __|@ 1980 | \__ \@ 1981 | |___/@ 1982 | @@ 1983 | 0x0162 LATIN CAPITAL LETTER T WITH CEDILLA 1984 | _____ @ 1985 | |_ _|@ 1986 | | | @ 1987 | | | @ 1988 | |_| @ 1989 | )__)@@ 1990 | 0x0163 LATIN SMALL LETTER T WITH CEDILLA 1991 | _ @ 1992 | | |_ @ 1993 | | __|@ 1994 | | |_ @ 1995 | \__|@ 1996 | )_)@@ 1997 | 0x0164 LATIN CAPITAL LETTER T WITH CARON 1998 | _____ @ 1999 | |_ _|@ 2000 | | | @ 2001 | | | @ 2002 | |_| @ 2003 | @@ 2004 | 0x0165 LATIN SMALL LETTER T WITH CARON 2005 | \/ @ 2006 | | |_ @ 2007 | | __|@ 2008 | | |_ @ 2009 | \__|@ 2010 | @@ 2011 | 0x0166 LATIN CAPITAL LETTER T WITH STROKE 2012 | _____ @ 2013 | |_ _|@ 2014 | | | @ 2015 | -|-|- @ 2016 | |_| @ 2017 | @@ 2018 | 0x0167 LATIN SMALL LETTER T WITH STROKE 2019 | _ @ 2020 | | |_ @ 2021 | | __|@ 2022 | |-|_ @ 2023 | \__|@ 2024 | @@ 2025 | 0x0168 LATIN CAPITAL LETTER U WITH TILDE 2026 | @ 2027 | _/\/_ @ 2028 | | | | |@ 2029 | | |_| |@ 2030 | \___/ @ 2031 | @@ 2032 | 0x0169 LATIN SMALL LETTER U WITH TILDE 2033 | @ 2034 | _/\/_ @ 2035 | | | | |@ 2036 | | |_| |@ 2037 | \__,_|@ 2038 | @@ 2039 | 0x016A LATIN CAPITAL LETTER U WITH MACRON 2040 | ____ @ 2041 | /__ _/@ 2042 | | | | |@ 2043 | | |_| |@ 2044 | \___/ @ 2045 | @@ 2046 | 0x016B LATIN SMALL LETTER U WITH MACRON 2047 | ____ @ 2048 | / _ /@ 2049 | | | | |@ 2050 | | |_| |@ 2051 | \__,_|@ 2052 | @@ 2053 | 0x016C LATIN CAPITAL LETTER U WITH BREVE 2054 | @ 2055 | \_/_ @ 2056 | | | | |@ 2057 | | |_| |@ 2058 | \____|@ 2059 | @@ 2060 | 0x016D LATIN SMALL LETTER U WITH BREVE 2061 | @ 2062 | \_/_ @ 2063 | | | | |@ 2064 | | |_| |@ 2065 | \__,_|@ 2066 | @@ 2067 | 0x016E LATIN CAPITAL LETTER U WITH RING ABOVE 2068 | O @ 2069 | __ _ @ 2070 | | | | |@ 2071 | | |_| |@ 2072 | \___/ @ 2073 | @@ 2074 | 0x016F LATIN SMALL LETTER U WITH RING ABOVE 2075 | O @ 2076 | __ __ @ 2077 | | | | |@ 2078 | | |_| |@ 2079 | \__,_|@ 2080 | @@ 2081 | 0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 2082 | -- --@ 2083 | /_//_/@ 2084 | | | | |@ 2085 | | |_| |@ 2086 | \___/ @ 2087 | @@ 2088 | 0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE 2089 | ____@ 2090 | _/_/_/@ 2091 | | | | |@ 2092 | | |_| |@ 2093 | \__,_|@ 2094 | @@ 2095 | 0x0172 LATIN CAPITAL LETTER U WITH OGONEK 2096 | _ _ @ 2097 | | | | |@ 2098 | | | | |@ 2099 | | |_| |@ 2100 | \___/ @ 2101 | (__(@@ 2102 | 0x0173 LATIN SMALL LETTER U WITH OGONEK 2103 | @ 2104 | _ _ @ 2105 | | | | |@ 2106 | | |_| |@ 2107 | \__,_|@ 2108 | (_(@@ 2109 | 0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX 2110 | __ /\ __@ 2111 | \ \ //\\/ /@ 2112 | \ \ /\ / / @ 2113 | \ V V / @ 2114 | \_/\_/ @ 2115 | @@ 2116 | 0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX 2117 | /\ @ 2118 | __ //\\__@ 2119 | \ \ /\ / /@ 2120 | \ V V / @ 2121 | \_/\_/ @ 2122 | @@ 2123 | 0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 2124 | /\ @ 2125 | __//\\ @ 2126 | \ \ / /@ 2127 | \ V / @ 2128 | |_| @ 2129 | @@ 2130 | 0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX 2131 | /\ @ 2132 | //\\ @ 2133 | | | | |@ 2134 | | |_| |@ 2135 | \__, |@ 2136 | |___/ @@ 2137 | 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS 2138 | [] []@ 2139 | __ _@ 2140 | \ \ / /@ 2141 | \ V / @ 2142 | |_| @ 2143 | @@ 2144 | 0x0179 LATIN CAPITAL LETTER Z WITH ACUTE 2145 | __/_/@ 2146 | |__ /@ 2147 | / / @ 2148 | / /_ @ 2149 | /____|@ 2150 | @@ 2151 | 0x017A LATIN SMALL LETTER Z WITH ACUTE 2152 | _ @ 2153 | _/_/@ 2154 | |_ /@ 2155 | / / @ 2156 | /___|@ 2157 | @@ 2158 | 0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE 2159 | __[]_@ 2160 | |__ /@ 2161 | / / @ 2162 | / /_ @ 2163 | /____|@ 2164 | @@ 2165 | 0x017C LATIN SMALL LETTER Z WITH DOT ABOVE 2166 | [] @ 2167 | ____@ 2168 | |_ /@ 2169 | / / @ 2170 | /___|@ 2171 | @@ 2172 | 0x017D LATIN CAPITAL LETTER Z WITH CARON 2173 | _\_/_@ 2174 | |__ /@ 2175 | / / @ 2176 | / /_ @ 2177 | /____|@ 2178 | @@ 2179 | 0x017E LATIN SMALL LETTER Z WITH CARON 2180 | \\//@ 2181 | _\/_@ 2182 | |_ /@ 2183 | / / @ 2184 | /___|@ 2185 | @@ 2186 | 0x017F LATIN SMALL LETTER LONG S 2187 | __ @ 2188 | / _|@ 2189 | |-| | @ 2190 | |-| | @ 2191 | |_| @ 2192 | @@ 2193 | 0x02C7 CARON 2194 | \\//@ 2195 | \/ @ 2196 | $@ 2197 | $@ 2198 | $@ 2199 | $@@ 2200 | 0x02D8 BREVE 2201 | \\_//@ 2202 | \_/ @ 2203 | $@ 2204 | $@ 2205 | $@ 2206 | $@@ 2207 | 0x02D9 DOT ABOVE 2208 | []@ 2209 | $@ 2210 | $@ 2211 | $@ 2212 | $@ 2213 | $@@ 2214 | 0x02DB OGONEK 2215 | $@ 2216 | $@ 2217 | $@ 2218 | $@ 2219 | $@ 2220 | )_) @@ 2221 | 0x02DD DOUBLE ACUTE ACCENT 2222 | _ _ @ 2223 | /_/_/@ 2224 | $@ 2225 | $@ 2226 | $@ 2227 | $@@ 2228 | -------------------------------------------------------------------------------- /bindata.go: -------------------------------------------------------------------------------- 1 | // Code generated by go-bindata. 2 | // sources: 3 | // larry3d.flf 4 | // standard.flf 5 | // DO NOT EDIT! 6 | 7 | package figlet4go 8 | 9 | import ( 10 | "bytes" 11 | "compress/gzip" 12 | "fmt" 13 | "io" 14 | "io/ioutil" 15 | "os" 16 | "path/filepath" 17 | "strings" 18 | "time" 19 | ) 20 | 21 | func bindataRead(data []byte, name string) ([]byte, error) { 22 | gz, err := gzip.NewReader(bytes.NewBuffer(data)) 23 | if err != nil { 24 | return nil, fmt.Errorf("Read %q: %v", name, err) 25 | } 26 | 27 | var buf bytes.Buffer 28 | _, err = io.Copy(&buf, gz) 29 | clErr := gz.Close() 30 | 31 | if err != nil { 32 | return nil, fmt.Errorf("Read %q: %v", name, err) 33 | } 34 | if clErr != nil { 35 | return nil, err 36 | } 37 | 38 | return buf.Bytes(), nil 39 | } 40 | 41 | type asset struct { 42 | bytes []byte 43 | info os.FileInfo 44 | } 45 | 46 | type bindataFileInfo struct { 47 | name string 48 | size int64 49 | mode os.FileMode 50 | modTime time.Time 51 | } 52 | 53 | func (fi bindataFileInfo) Name() string { 54 | return fi.name 55 | } 56 | func (fi bindataFileInfo) Size() int64 { 57 | return fi.size 58 | } 59 | func (fi bindataFileInfo) Mode() os.FileMode { 60 | return fi.mode 61 | } 62 | func (fi bindataFileInfo) ModTime() time.Time { 63 | return fi.modTime 64 | } 65 | func (fi bindataFileInfo) IsDir() bool { 66 | return false 67 | } 68 | func (fi bindataFileInfo) Sys() interface{} { 69 | return nil 70 | } 71 | 72 | var _larry3dFlf = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5a\x5d\x6b\x5c\x39\x0f\xbe\x9f\x5f\xa1\x8b\xc0\x69\xe1\x10\xbd\x4d\xfb\x2e\x14\x86\x61\xa0\x17\x85\x65\xae\xf7\xca\xa0\x33\x6d\x27\xd9\xb2\xd3\xa4\x24\xcd\xee\x06\xf2\xe3\x17\xdb\x92\x25\xf9\xf8\xcc\x67\x92\x0d\x5b\x7b\x4e\xc6\x8f\x25\x4b\x8f\x3e\x7c\xae\xb7\xd7\x57\xeb\x0b\xf8\x08\xbf\xc1\xfb\xff\xc1\x3b\xf8\xff\x6c\xbb\xbe\xbf\x7f\x7a\xff\xed\xf2\x7a\x7b\x0d\x5f\x9e\x60\x15\xa7\xf0\x79\xb3\xfd\xb2\xb9\xbf\x81\x37\xe9\xe9\xcd\x72\xfd\xf7\xc3\xe5\xd7\xbb\x1f\x6f\x67\x6f\x1e\x7e\xdd\x6d\x37\xb7\xb0\xfd\xfe\x65\x73\xbf\xde\x6e\x9f\xe0\xfa\xfe\xee\x07\xfc\xfe\xb8\xbe\x85\x4f\xeb\xfb\xee\x01\x7e\x3e\x5e\x5f\x3f\xc5\xd5\xde\xce\x7e\xfd\xb3\x59\xff\xb5\xf9\x16\x97\xfd\xbc\xdd\xdc\xde\xc2\xa7\x3f\xd7\x3f\x7f\x6e\xb6\x5b\x98\xdf\xdc\x7c\x5d\x3e\x7e\x7f\xfc\x7a\xb9\xf9\xf6\xb8\x98\xfd\xb1\xb9\x7f\xf8\x7e\x77\x0b\xef\x2e\xaf\xe0\x0a\xaf\x3e\xe0\xc7\x0f\xb3\xd9\xc5\xc5\x05\xf0\xcf\x72\x06\x3a\x5b\xce\x40\x67\x71\x52\x66\x69\x22\xb3\x3c\xe1\x19\x4f\xf2\x4c\x26\x69\x56\x26\x71\xb6\x5c\xce\x80\x88\xd7\xc2\x00\x21\x8f\xe2\x20\xe4\x55\x78\x18\xbf\x15\x20\x50\xc8\xdf\x0f\x18\x28\xe4\x95\x02\x12\xea\x9a\x66\x94\x97\x76\xab\x5b\x00\x0a\x71\xb5\x8c\x81\x84\x48\xc8\x3b\x65\x41\x79\xa7\x32\xd3\x85\x1d\xca\x68\x12\x67\x0a\x1b\x1f\x52\x06\x4e\x9f\xc4\x6d\xc4\x41\xfc\x4d\x52\x05\xa4\x55\x7e\xbe\xa2\xb4\x12\x86\xf8\x77\xe9\x79\x92\x19\x09\xf3\x56\x45\x48\xde\xac\x87\x85\xd1\x54\x15\x2b\xc2\x8b\x22\x02\x76\x44\x43\xd0\xcf\x03\x6f\x25\xee\x91\x08\x42\x56\x49\xd6\x76\xde\x04\x0c\x81\x80\xd5\x3c\x04\x52\xe5\xb3\xfa\x15\x2c\xfe\x93\x84\x8c\xeb\x23\x20\xcb\x88\x3c\x91\x6d\xe6\x09\xcf\xd2\x84\xb2\xf8\x90\xff\x96\x01\xd2\xa4\x3a\xe1\xb1\xb0\xac\x73\x55\x39\x3e\x47\x0d\x06\x9e\x3d\x63\x1c\x3d\xcb\x17\x03\x22\x44\xf9\x31\xc9\x19\xff\x34\xac\x16\x00\x73\x5a\xce\xe0\x39\xab\x80\x30\x6b\x3b\x20\x4f\x6a\xc0\x11\x7c\xdb\x86\xf1\x42\x20\x93\x1d\x89\x71\x19\xcb\xba\x68\x5a\xae\xb3\xe1\x64\x0c\xf9\x53\xec\x64\x71\x0c\xd0\x63\xe7\x7c\x45\x9c\x65\x28\xde\x32\x04\xe2\x73\x1a\x42\x65\x31\x76\x58\x6d\x9f\x2d\x23\xc4\x7f\xf3\x52\x43\x1c\x67\xc7\x1b\x42\xdc\x43\x3e\xa8\x40\x7c\x2c\xd5\xe2\xd5\xf6\x2b\x4f\x80\xe2\x06\x03\x74\x20\x3e\xb0\x80\x78\x02\xe2\x00\x3d\xf4\xce\xfa\xad\xe9\x3b\xe5\xbb\x71\x05\x26\x27\x91\xf4\x42\xd9\xb8\xd9\xff\xa2\x77\x45\x80\x78\xbe\xc9\xce\x19\xc0\x10\xcc\x21\x60\xf2\x51\xf5\x7f\x86\x89\x6a\x8a\x36\x90\xcf\x9f\x9f\x4e\x1c\x81\x1b\x52\xfe\x91\xbd\x52\xd9\x6a\x32\xc6\xfd\x2b\xec\xdf\x1a\x2f\x88\xee\xa9\x2c\x41\xa4\x3e\xaa\xfe\x99\x8f\x3c\xfb\xb3\xf1\xe5\xec\xa0\x71\xd1\x3c\xd8\x65\xc5\xc6\x8c\x1d\xff\x20\x13\x7c\x00\xf9\x4f\x68\x5f\xf9\x27\xa8\xec\x49\x13\xfb\x4e\xa6\xe9\x32\xd4\x73\x50\x49\x66\x25\x51\x45\x31\xc5\x02\x8c\x01\xec\x52\x31\x79\x89\x54\x24\x0a\x50\x64\x8a\x64\x8d\x80\x85\xdd\xe2\x98\xa5\x92\xd3\x35\x54\x53\xd3\xfa\x38\xb4\x4c\xa9\x91\xc2\xca\x40\x52\xa0\xe2\x4d\x90\x9e\x9c\xa2\x46\x17\xc6\x4c\xf8\x94\xb3\xf2\xbc\x13\x72\x88\x29\x40\xd0\x0b\xfb\xb0\x17\xab\x36\x73\x40\xd8\xcf\xa9\xc2\xe9\x09\x3d\xce\x83\x82\x13\x61\xc1\x8e\xca\x1f\xf2\x11\x06\x2b\xb0\x97\xb8\x25\x72\x33\x78\x0b\x68\x3e\x56\x13\x28\x19\x32\xc9\x2d\x88\x69\x33\xa7\x6b\xb8\xf6\x75\x00\x71\x76\xc4\x0e\x3b\x76\xc0\x2e\xfe\xa6\xe3\x4c\x23\xe6\x37\x75\xb9\x18\xd3\xc6\x00\x63\xaf\xb0\xb6\x03\xc6\x05\x8d\xed\x2c\x80\xe0\x05\x6c\xc7\x53\xb1\xa0\x39\xb8\x92\x72\xf4\xec\x8a\x71\xd9\x1e\xd5\x19\xbd\x3b\x36\xf2\x80\x86\x7b\x98\x4f\x25\xae\x49\x3a\xc2\xae\x21\x41\xa6\x04\x98\xd1\xf7\x8e\x5b\xa8\xe8\x47\x74\x53\x2f\x44\xc5\xf9\x81\x89\x34\x0d\xe2\x72\x73\x80\x39\x2b\x62\x48\xbf\x29\xda\xc6\xc0\xfd\x2c\x71\x7b\x47\x64\xb5\x7a\xa0\xe2\x2d\x26\x6c\xf0\x56\x33\xb3\x14\xc1\x25\xa4\x14\xd2\xd9\xa9\xd5\x5a\xc5\xad\x54\xc1\x6d\x7e\x01\xb0\xa8\xc4\x0d\xe2\xee\xd9\x4e\xf7\x64\x3a\xd9\x60\x72\x1a\x93\xa2\x7f\x18\x38\x5e\x15\x8f\xc0\x63\x0b\x81\x4a\x20\x63\x9b\x19\x8b\x04\x37\xce\x20\x94\x4c\x2e\x9b\x6a\x76\xf9\x98\x4e\xe5\xbc\x24\x8f\x45\x8b\x83\x70\x77\x43\x57\x44\x56\x5f\x51\x3e\x5b\xe1\xac\x5c\x95\x03\x29\xf7\x16\x02\xe5\xb8\x58\x68\xcc\xb8\x42\xe2\xd3\x03\x72\x62\x97\x12\x27\xca\x1a\x83\x17\x6c\x98\x77\x0a\x7d\x0e\x81\xee\x46\x15\x0f\x62\x11\xc5\x2c\x5f\x1d\xd5\xc8\xaa\xf1\xde\x25\x19\x2f\x8f\xba\xb2\xb2\x02\x85\x15\xbc\xac\xac\x06\xd3\x20\x2a\x1e\xaa\x29\x59\x3b\x52\x23\xda\x59\x11\x1c\x2c\x59\x58\x91\x95\x0c\xfb\x73\x24\x03\x5f\x4a\x55\x2d\x01\xaa\x1c\x06\x9c\xc3\xc0\x4b\x38\x8c\x81\x27\xae\xd2\x4d\xca\xa8\x55\xab\x2d\xbb\xe2\x34\x57\x18\x3c\x43\x43\x0f\x9a\xdb\x1d\x04\xaf\xe0\xa4\xd9\xaa\x4d\x57\x49\xe5\xc4\x33\x72\xe4\x7d\xaa\x8e\x54\xa8\xaa\xee\x53\x9c\x52\x55\x87\xc1\x64\xcf\xa7\xa9\x5a\x9f\x95\x4a\x0d\x6c\x39\x6b\xfc\x55\x9a\x03\x67\x7b\x8e\x7f\x86\x5d\x20\x34\x79\x49\xfa\x71\x29\xa6\xa3\x0d\x42\xc3\x1b\x14\x54\xe8\xe4\x4a\x87\x0a\xbd\x43\xe7\x43\x70\xe6\xdd\xc3\xe0\xcc\x7b\x78\x11\xf3\x36\x4a\x07\x6a\xb1\xa4\xa7\x49\xcf\x93\x60\x15\x7f\x8a\x79\xc3\x04\x6d\x81\xd0\x56\x2f\xf5\xd0\xe9\xb4\x75\xba\x88\xa1\x0b\x4e\x44\xab\xe1\xd4\x74\x3b\x3c\xe2\x7a\xda\x6c\x07\xfc\x1e\x4a\x4b\x4c\xeb\xa9\xe9\x03\x86\x33\xe1\x7b\xa6\x6d\x4e\xb5\x43\x21\x18\xd0\x54\x5f\xe0\x73\x7e\x73\x0a\x7f\x51\x45\x9e\x96\x3a\x2d\x71\xf2\xd2\xa6\xf6\xf6\xd9\x7e\x6d\xd0\xc7\xf2\x17\xbc\xb6\x31\x0b\xbc\x43\x77\xe0\x13\xf9\x06\x16\xfe\x4a\x5a\x66\xa8\x94\x45\x1e\x12\x1f\x01\x3c\x72\x9c\x79\x74\x6c\xef\x60\xb4\x0b\x93\xf9\xa4\x9d\xfc\xab\xbb\xe9\xd8\xe2\xc7\x7d\xe6\x5a\x19\x76\x67\xbe\x0b\x6a\x0f\x64\x08\x83\x89\x28\x43\x40\x58\xe4\x88\x52\xdc\xba\x43\x8d\x29\x29\xbf\xaf\xec\xbf\x41\xb0\xf5\x4e\x54\x43\xa5\x05\x27\x05\x5a\xde\x41\x44\x91\x0a\x4b\x2a\x6a\x18\xce\xb1\xc1\x51\xc6\x90\x4b\x78\x28\x81\x9b\xeb\x78\xfd\xb2\x4c\x45\xd2\x54\x72\x10\x81\xcf\x1c\x6a\x7b\x1c\x59\xe4\xf8\x18\x1c\x01\xb0\xfb\x3b\xea\x03\x17\x52\xad\x33\x80\x23\x3d\x1b\x4f\xf7\x79\x60\xc1\x2a\x2c\x3b\x94\xb2\x70\x90\xb1\xb4\x90\x07\xe9\x21\xfb\xc6\xf4\xae\x2e\x5b\x9d\x8f\xf9\x6c\x0c\x9a\x94\xa2\xbe\x9d\xb5\x79\xb0\x40\xae\x65\x01\xa6\x63\x41\x28\xc4\x19\x10\x63\x0d\x9b\x9b\xf9\xee\xa2\xa8\x75\x4f\xb4\x13\x6c\xef\x1f\x4d\x8e\x0b\x6e\xda\x84\xb6\x90\x5c\x71\xaf\xb5\xfd\xe4\xf5\x44\x28\xd7\x13\x78\xce\xf5\xc4\xd4\x7e\x27\x1b\xbe\xab\x70\x19\x48\xba\x3f\x78\x19\xca\x7e\x47\x59\xcc\x94\xc9\xb5\xb3\x46\x12\x3f\x8a\xb3\x0c\xd9\xce\x1a\xfb\x93\xb2\x46\x3f\x92\x48\x27\x4d\x42\x6d\x11\x96\x9b\x34\x3d\x86\xe9\xbe\x84\x51\x92\xba\xa5\xa9\x73\x7c\x3f\x42\xbb\x11\x54\x7a\x11\x18\x47\xb0\xb3\x53\xdd\x3a\x40\xbb\xfd\x21\x94\x6c\xe9\xc8\xed\x83\xa8\xbc\xad\x05\xe9\x01\x73\xc8\x59\xd6\x97\xb8\xbb\xee\x8d\x0e\xb3\xab\x66\x17\xd3\x5f\x64\x12\x51\x39\x7d\xb4\x45\x12\xe5\xf8\xe6\xec\xca\x1b\x96\xb1\x2c\x50\xf6\x04\x32\x97\x6c\x2f\x51\x77\x96\xcf\x4d\xf9\x27\x7c\xe3\xe3\x78\xd1\x60\x51\xa0\xfd\x7a\xeb\xcc\x2d\x7f\x16\xf6\x0c\xe3\xdb\xf5\x52\x56\x6a\x51\x69\x0a\x2c\xf1\x93\x03\x74\x85\x9d\xbd\x15\x78\x85\xc2\xd1\x84\x1d\xbd\xe4\x8d\xc4\x5c\x85\xb5\x12\x1d\x12\x0c\x98\xf3\x2f\xda\xdb\x1b\x11\x26\xb7\x52\x38\x40\x8b\x9a\x2e\x16\x1b\x5c\x70\x68\x52\x88\xea\xb2\x56\x62\x11\xf7\xb0\xac\xa6\xf1\x48\x39\x88\xb1\xc1\xe3\x5a\x4c\x83\x77\x24\x4d\x28\xcb\x81\xd2\x04\x93\x69\xc3\x3c\xf6\xf8\xb2\x1f\xda\x6a\xa1\xd0\xf5\x69\xf5\xe0\x0e\xfe\x9e\x8d\xae\x22\xe8\xc0\xab\x08\xda\x77\x15\xd1\x70\xbd\x19\x50\x79\x05\x62\xe8\xf2\xcd\x6d\xd9\xb9\xee\xdb\x33\xdf\x84\xe7\xfa\x63\x10\x9a\xed\x85\x66\xe3\x66\x73\x63\xfc\xd0\x63\xf0\x97\x79\xac\xfb\xac\x64\xdb\x93\x75\x99\xa1\x26\x86\xb6\x14\xde\x6b\x45\xa3\xa3\xd6\x37\x43\xac\x79\x96\x1a\xc4\xf6\x72\xc6\x31\xf9\x5c\x0c\x84\xe7\x82\x81\x72\x00\xd5\x15\xe4\x04\x06\x34\x3d\x5f\xb0\x3c\x5e\x85\x29\x95\x5e\xc6\x4d\xc5\x55\x57\xb0\x47\xf8\x2d\xa0\x09\x73\xe0\x17\x88\x18\xb8\x4b\x98\xb8\x00\x98\x23\x27\x81\x28\x3e\x8f\x47\xdc\x89\x34\xc4\x83\x66\x71\xab\x5d\x31\x1c\x34\xce\xc2\x90\x8e\x6d\x01\xe2\x24\x68\x8a\x5b\xd6\xf7\x6e\x2e\x80\x42\xea\xfd\x50\x1a\x07\x00\xee\xe2\xca\x5c\x5b\xed\x31\x42\x21\xfc\x4e\xda\xa3\x7d\xd2\xfe\x9c\xdf\x39\x99\x83\xd4\x23\x5a\x8d\x78\xd3\x76\x5e\x59\xbd\x4a\x25\xe3\x52\x4b\x41\xb3\xb0\x02\x0d\x75\x07\xb7\x3c\x5c\x16\xc0\x9c\xce\xef\xe2\xc8\x0b\x3e\x8b\x78\xca\xe9\xc5\x86\xcc\x03\xa9\x92\xcd\xca\x9a\x24\x15\x72\xb7\x6b\x10\xf8\xbd\x08\xa9\x6e\x08\xf3\xdb\x6f\xd9\x64\x08\xb9\x0a\x28\xef\x03\x56\xef\xbf\xd5\x71\x79\x6f\xcc\x06\x9f\x87\xf8\x5c\x44\xae\xc5\xec\x6d\xba\x6a\x11\x8a\x85\x65\x6d\xe1\x49\xbd\xe6\x9d\xf0\xe4\xe0\xf1\xd5\x5a\x45\x4d\xf8\xd7\x6f\xbb\xee\x80\xcf\x0a\xa4\xf2\x45\x2d\x37\x26\x9a\x82\xbd\xc0\xc7\xca\xbd\x3f\xba\x51\x56\xd0\x15\xdc\x61\xd7\xd0\x06\xf9\xe8\x46\x99\x4b\xa6\x6b\x54\xee\x79\xa0\xbd\x67\xb5\x01\xe9\x44\xd4\xaa\xc7\x4d\xa3\xb6\x5c\x39\xe6\xb9\xbc\xa1\x53\x0e\x5d\xa9\xc2\xbf\x90\x56\x50\x1b\xaf\xcd\x2c\x97\xb3\xff\x02\x00\x00\xff\xff\x1d\x76\x41\x67\x61\x2c\x00\x00") 73 | 74 | func larry3dFlfBytes() ([]byte, error) { 75 | return bindataRead( 76 | _larry3dFlf, 77 | "larry3d.flf", 78 | ) 79 | } 80 | 81 | func larry3dFlf() (*asset, error) { 82 | bytes, err := larry3dFlfBytes() 83 | if err != nil { 84 | return nil, err 85 | } 86 | 87 | info := bindataFileInfo{name: "larry3d.flf", size: 11361, mode: os.FileMode(436), modTime: time.Unix(1477497051, 0)} 88 | a := &asset{bytes: bytes, info: info} 89 | return a, nil 90 | } 91 | 92 | var _standardFlf = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x7c\x6d\x73\xda\xc8\xb2\xff\x7b\x3e\x45\xbf\xd8\xfa\x07\xea\x1f\x3c\x46\xb6\xb1\x5d\x95\x93\x32\x06\xd9\xd6\x06\x83\x8f\x80\xec\x49\x56\x5b\xb3\x24\x26\x31\xb5\x04\x52\x36\x3e\x7b\x53\x57\xf7\xbb\xdf\x9a\x47\x8d\x66\x7a\xa4\x91\x73\x6e\x6a\xd7\x60\x8c\xfa\x37\x3d\x33\xdd\xbf\x7e\x18\xe9\xcb\xe6\x4b\xb4\xfc\x05\xfa\x70\x02\xbd\x3e\xf4\x4e\xa0\xd7\x83\x43\x88\x8e\x8f\xfb\x47\xad\xd9\x7e\xb9\xbd\x5f\x3e\xde\xc3\xa7\x1f\x70\xbd\x59\x6d\xb7\x30\x7c\x58\x7e\xff\xbe\xda\x6c\xe0\xff\x41\xb2\xe4\xbf\xae\xe1\x88\x9c\x1f\x41\xb7\x0b\x9f\x96\x4f\xab\x7b\xd8\x6d\xe1\xea\x71\xb9\xfd\xeb\xd5\x13\x1c\x3c\xad\xbf\xb6\x92\xed\xe7\xcd\xf3\xfd\xea\x09\x92\xd9\x14\xc6\xcb\xfd\x7a\xdb\xed\xb5\xbe\xac\xbf\x6e\x56\x7b\x78\x5c\x6d\x56\xcb\xa7\x15\x44\x07\x3d\x26\xa0\x17\xc1\xe0\xf9\x2b\xf4\xce\xcf\x8f\x5b\xb7\xbb\xfb\xf5\x97\xf5\xea\x1e\xbe\xec\x1e\x41\x7e\x3d\x3a\x88\xd8\x48\x7e\xdd\x3d\x6c\x61\xb8\xfb\x7b\xb9\x85\x37\x9f\xd9\xcb\xc5\xe7\xcf\xeb\xcd\xc1\xee\xf1\xeb\xdb\x16\xc0\x7e\x07\xcb\xfb\x7b\x89\xf4\xdf\xd1\xeb\xa3\xd7\xc7\xaf\x4f\xfe\x07\x9e\x9e\xbf\x7f\xdf\x3d\xee\xa1\xbd\xd8\xae\x3f\xef\xee\x57\xb0\xf8\xff\x87\xbd\xc3\xc3\xee\x61\xef\xf4\xaa\x73\xd0\xba\x5b\x3d\x7e\x5b\x3f\x3d\xad\x77\x5b\x58\x3f\xc1\xc3\xea\x71\xf5\xe9\x07\x7c\x5d\xff\x7b\xb5\x65\x02\xbf\xb1\xc1\xfc\x80\xfd\xc3\xfa\x09\xbe\xec\xb6\xfb\xd7\xb0\x7c\x82\xcd\x6e\xfb\x95\xbd\xee\x1f\x56\xad\x6f\x62\xb4\x8f\xaf\x9e\x60\xbb\xfc\xb6\x62\x32\xbe\x6f\x96\x9f\xc5\x74\x2c\xe1\xf3\xee\xdb\xb7\xd5\x76\x0f\x9b\xf5\x76\x75\xd0\x2a\x74\xfb\xf4\x03\xee\x96\xcf\x1b\xb8\x7c\x7e\xdc\xef\xb6\xf0\xe6\x69\xb7\x79\xde\xaf\x77\xdb\x8b\xd5\xf2\x71\xff\xb0\x59\x6f\xff\x3a\xd8\xae\xf6\x6f\xa1\x17\x91\xf3\x3e\x1b\xc8\x5a\x4c\x26\x6c\x57\x7f\xc3\xf7\xe5\xe3\xf2\xdb\x6a\xbf\x7a\x6c\x49\xdd\x84\xc0\xab\xe4\x9a\xcd\xd5\x72\x7b\xcf\xde\xfe\xb6\xde\x1e\x00\xdc\x2e\x7f\xc0\x72\xf3\xb4\x83\x4f\x2b\x78\xda\xac\xbf\x3e\xec\x37\x3f\xe0\x9b\x39\xc3\x9f\x56\xfb\xfd\xea\x11\x9e\x9f\x56\xad\xdd\x17\x2e\xfe\xcb\xf3\x66\xd3\xfd\x7b\x7d\xbf\x7f\x20\x7f\xad\x1e\xb7\xe4\xe9\xdb\xf3\xd3\x03\x2c\x37\xfb\xd5\xe3\x76\xb9\x5f\xff\x7b\xf5\xf4\x1a\x3e\x3d\xef\xe1\x7e\xf5\x65\xf9\xbc\xd9\xc3\xee\x79\xff\xfd\x79\xcf\x34\x9f\x4c\xe7\xf0\xf9\x61\xb9\xfd\xba\xba\x3f\x68\xc1\x2f\x17\xd8\xff\x17\x2d\x00\x0a\x17\x2d\xc8\x21\x2f\x7e\x52\xf6\xb3\x4d\x3b\xec\xaf\x00\xf2\x4b\xfc\x6b\x6d\xc8\x81\x7f\xfc\x1e\xde\x03\xff\xf3\x2f\x50\x7e\x55\x17\xb0\x4b\xd8\x7f\xfc\x53\x9a\x43\x9e\x43\x2e\x90\x28\xc0\xc1\x01\xfb\x4c\xfe\xc2\xbf\x9b\xf3\x6b\x72\x9a\xe7\x34\x2f\x24\x19\xe2\xa8\xf8\x34\x87\x9c\xbd\x12\xa0\x7c\x78\x19\xa5\x90\xf1\x71\x01\x10\xfe\x77\x9a\xab\x01\x03\xa5\x42\x0d\x22\xfe\x04\x04\x08\x97\x41\x80\xf0\x91\x10\x4a\xb4\x92\x05\x0e\x55\x83\x6e\x03\x85\x0e\xc8\x2b\x28\x64\x24\xe3\x33\xd4\xa6\x6f\x01\xde\xb0\x4f\x33\x4a\x29\xc9\x88\x31\xd8\x62\x3e\xdb\x7c\x9a\x72\x01\xf8\x8b\xf1\xb3\xc0\x91\x43\x11\xd3\x0e\xce\x0b\x64\x34\x63\x5f\xa5\x42\xf3\x0c\x32\x35\x01\xce\x0b\xa1\x44\x4d\xba\x18\x3b\x1b\x17\x07\xc8\x40\x4e\x0c\x61\xf3\x91\xf1\xef\x64\xc4\x98\xe0\xe2\x32\xd0\xab\xa6\x97\x4c\xaf\x97\xb1\x3e\xe6\xe2\xc8\x8b\xed\x9f\xd6\x04\xd8\x08\xfa\x6b\xec\x9f\x40\x60\xff\x04\x02\xdb\x47\xa1\x08\xa5\x0d\xaa\xa7\x54\x4d\x6a\x69\xbd\x41\xae\x37\x38\xaa\x53\x39\xbf\x62\x8d\xd5\xfc\x6b\x73\xa0\x72\xa2\xf9\x5a\xdb\x03\x13\xbb\xc8\xb4\x1c\xc3\x7e\xf4\x97\x14\x02\x53\x53\x2e\x22\xdb\xbd\x42\x2e\xdb\xc8\xc4\x99\x84\xd2\xc5\x7a\x8e\xa4\x3a\x6c\x45\x32\x35\x83\x1d\x89\x88\x0f\x4f\xad\xa6\x30\x3f\xe3\xad\x92\x59\x2c\xad\xbd\xb6\xf6\xe0\xd9\xdb\xdc\x52\xa3\x06\x1f\xb4\x29\x71\x8b\x13\x62\x5e\xe9\x59\x6e\xab\x39\xc0\xe7\xb6\xa4\x39\xe4\x7a\x69\x41\xaf\xad\x10\x5d\x5e\x54\x7b\x55\x85\x11\x5b\xeb\x5b\x8d\x8c\x6e\x09\xf3\x92\xd7\x7a\x34\xc8\xc5\xce\xfe\x44\xf7\x2a\xfe\xa5\xb2\xc9\x98\x1e\x42\xea\xad\x9c\x40\x26\x4d\xd9\xb1\x5f\xc4\xa6\x6a\xac\xcb\x72\x2f\x19\x77\xa7\x0a\xb5\xd0\x4f\xad\x89\xda\x37\x99\x5a\x05\xed\x74\xd9\x64\xd3\x8e\x43\x02\x7a\x32\xf9\x56\x97\x28\x4c\x1d\xfa\xa7\x32\x19\x68\x6b\x2b\xe3\xd3\x2b\x07\x9b\xc9\x4d\xa5\xac\xbb\x70\x01\x84\xfb\x35\x25\x94\xfd\xa2\x4c\x49\x02\x88\x4d\x51\xcc\x92\x67\x43\x8b\x9d\x91\x83\x61\xf9\x75\x1b\x5a\xcc\x80\xc0\x52\xc3\xd7\x36\xa6\xfe\x9a\xf9\x4c\x19\x1c\x3c\xc7\xd3\x78\x4c\x59\xaf\x2b\xe8\x75\xe5\x3e\xba\x8c\x5c\xe7\x44\xc0\x18\xb6\x76\x0d\x5a\x0c\xcd\x01\x37\x25\x4c\x67\x15\x35\x98\x0e\xd2\x45\x86\xe2\x8b\xae\xa6\xfc\xef\xd2\x61\x16\x4e\xd3\xdd\x6d\xd2\x45\x29\x5e\x54\x34\x69\xe2\x69\x33\xa0\x6a\xfc\x72\x58\x14\x82\x7d\xb9\x30\xb8\x9c\x19\xa0\x20\xe5\x57\xc2\xe8\x72\x38\x90\xcb\x45\x73\x73\x4b\x69\x0d\xd5\x22\x60\xef\x6a\x16\x86\xff\x2f\xe6\x82\xd1\xb2\x1c\x68\x46\xf4\x98\xa1\xe0\x14\x28\xcf\x91\x33\xc3\x99\xd6\x14\x32\x7d\x7d\x56\xcc\x70\xe6\xe0\xff\x1c\xf9\xa1\xfb\x59\xd9\x0f\x14\xbc\xe6\xdb\x55\x81\xc8\x25\x2b\x0e\x43\x86\x37\xa0\x75\xf6\x5e\x4c\x34\xa3\x65\xc1\x8c\x66\xb8\x57\x23\x28\x02\x45\x9c\xc6\x3b\x24\x50\xc2\x8d\x21\x6c\xb6\xa9\xd8\x67\x32\xa6\xcb\x0a\xd7\xcb\x7e\xd1\xa4\x98\xc1\x7b\xd0\xc1\x5d\x66\x11\x63\x49\x50\x59\x96\x25\xce\x92\x68\x09\x75\xe5\x1a\xa2\x95\x50\x2d\x4e\x87\x60\xda\x31\xdb\x26\x24\x82\x10\x35\x18\x7d\xe1\x7b\x1d\xed\x54\x4f\x2a\xfb\xa7\x62\x19\x5f\x98\x5f\x32\x3d\x65\x79\xc2\x99\xe6\xbe\xf0\x3b\x67\xd7\xe8\x09\xd3\x53\xa5\x26\x49\x4d\x4f\xa6\x27\xc6\x76\x0c\x6a\x9f\xb8\xe1\xba\x36\x69\x81\xc0\x26\x9c\xf3\x7e\x26\x06\x29\xf3\x84\xf2\x0b\x12\xa9\x57\xbd\x73\xe2\x00\x2b\xc8\x00\x81\x85\x25\x26\x85\x34\x2a\x93\x3e\x93\xac\xdb\xc6\x2e\x7d\x8d\xfa\xfb\xc2\xf3\x39\x11\x5f\xc1\xae\x07\x18\xbb\x1a\xc0\x05\xe3\x28\xd8\x82\x59\xad\xa5\x84\xc2\xeb\x53\x35\xb8\xe0\x01\xa3\x98\x90\x69\x0f\xe6\xc3\x2c\xbe\xac\xd9\x54\x71\xa9\xf2\x79\x0e\x35\x85\xce\xaa\xdc\x23\x45\xf0\x53\x37\xab\x06\x45\x20\x2c\x5a\x44\x99\xfe\x1c\x45\xcf\xa0\x8a\x53\xe5\x70\x34\x8b\x12\xb5\x63\xcd\x21\x49\x74\x9b\x36\x41\xbb\x5f\x84\x2d\xed\x61\xa0\x83\x29\xed\x64\x3e\x61\xa6\xda\x7f\x5a\x8c\x51\x56\xdf\x22\x49\x24\x44\x86\xc6\x73\x68\x6d\x13\x9b\xb7\x6a\xd2\x89\x1a\x64\xcd\x5b\x07\x16\x63\xbe\x6c\xdf\x08\x3f\x59\xde\xdc\x54\xfb\xbb\x57\x66\xd4\xaa\xb1\x5c\x83\xba\x28\xe2\x2f\x65\x84\xaa\xd4\xc2\x37\x66\x69\x73\x17\x49\xa6\x0e\x51\x4d\xab\x60\x57\xba\x81\x9a\x1a\x59\x45\x80\x58\x61\xb2\x10\x40\x1c\x9c\xa8\xd0\x8b\x8d\xeb\x4b\x22\x4a\x52\x4a\x82\x2c\x59\xb6\xfb\x40\xa8\xef\xad\x34\x03\x84\xf1\x1a\xe9\xef\x78\x03\x63\x79\xa8\x8c\x44\x88\xa4\x3b\xc5\x76\xf6\x6c\xcb\xc2\x88\xca\xd6\x04\xc1\xbd\x81\x37\xa5\x92\x9a\x2e\x38\x79\xad\x54\xdb\xaa\x9a\x3c\xc5\x8a\x25\x29\x6f\xe1\xad\xf1\x3b\xcf\xc4\x24\xcb\x91\x5c\xd0\x1c\x51\xcc\x86\xbf\x3a\xf1\x52\x9b\x76\xa8\x72\x4c\x84\x66\x96\xfd\x31\x04\x24\xcc\x43\x2e\x36\x43\xcd\xba\x5c\x40\x5f\x5c\xf8\xce\xf0\x44\x02\x43\x0e\x27\xd0\x8a\x61\xd7\x94\x4c\xc2\x87\x8d\x98\x95\x4b\x80\xda\xa3\xe7\x99\xfa\x24\xe7\xa6\x2f\xbd\xc6\x45\xab\xd7\x3f\x04\x98\x4c\xbb\x97\x69\x3c\x78\x07\xb3\xbb\xc1\x30\xf6\x57\x9a\x7b\xfd\x1e\x40\x32\x79\x1f\xa7\xf3\x78\x04\xf1\xbf\x86\xe3\xc1\xed\x60\x9e\x4c\x27\x70\x3b\x48\xdf\x85\x51\x55\xaf\x1f\x01\x0c\xe3\xc9\x1c\x66\xc9\xf5\x44\x32\x57\x11\x27\xaa\xa0\xa1\x53\x0e\x1a\x00\x40\xd2\x9a\xa8\x0e\xf7\xfa\x47\x00\x77\xd3\xc5\x64\x64\x88\x31\xea\x14\xaf\x29\x9f\x6f\x5a\x64\xc9\x46\x2a\xd7\xa6\xaf\xad\x5c\x4e\x88\x3c\x06\x18\x2e\xd2\x34\x9e\x0c\x3f\x48\xa9\x44\x14\x88\x45\x19\x56\x9a\x69\xb1\x86\xb2\x5c\xc1\xfe\xca\x8b\x15\xa4\xb4\x20\xbd\xfe\x09\xc0\x87\x78\xa2\x06\x48\x95\x0f\x2f\x3c\x5c\xce\x3f\xcb\x4b\xef\xb0\x20\xb9\xd7\xef\x03\x5c\xa6\xd3\x77\xf1\x04\x2e\x07\xa9\x65\xe0\x34\xb7\x4d\x9e\x1b\x78\xaf\x7f\x0a\x30\x8b\x87\x7c\x7d\x8c\x49\x02\x19\x0e\xf0\x29\x26\x2a\x00\xce\x20\x93\x85\xa3\x8c\x79\x4b\x3e\x4b\xd2\xf0\x7b\xfd\x33\x80\x51\x32\x88\xd3\x78\x96\xcc\xf0\x5d\xca\xcb\x52\x2a\x16\x75\xdf\x19\x9a\x9c\x03\x0c\xa7\x77\x1f\xd2\xe4\xfa\x66\x5e\x5a\x3b\x5d\x6a\xd4\x65\x20\x50\x4e\x91\x45\x85\x9a\xe6\xdb\xfc\x8b\x45\xb1\x89\xe6\x85\x97\x17\x29\x1f\x07\x3a\x3d\x04\xb8\x8a\x6f\x93\x49\x32\x89\x61\x9a\x8e\x92\xc9\x60\x0c\xc9\x64\x94\x0c\x07\xf3\x69\xda\x2a\xd8\x58\x5b\xb6\x36\xaa\xbc\x5c\x6e\x33\x3d\x7f\xef\xb4\x07\x30\x8e\xaf\xe6\xdd\xbb\x69\x32\x99\x27\x93\x6b\x18\x4d\x17\x97\xe3\x18\x06\x93\xeb\x71\x0c\xff\x5c\x4c\xe7\x25\x8b\x50\x4e\x9e\xeb\xa1\xea\x80\xba\x12\xa8\x6b\x81\x65\x7e\xe9\x9d\x46\xc0\x9b\x3f\x7a\x7e\x00\xcb\x0a\xa0\x14\x2f\xa8\xe1\x5a\x13\x7e\x7a\x04\x30\x9b\x5e\xcd\xe1\xe6\xc3\xdd\x4d\x3c\x29\x45\xcc\xa6\x54\xa8\x53\xfc\x18\x20\x8d\xaf\x93\xd9\x3c\x4e\xe3\x51\xd8\xca\xe5\xdc\xef\xc9\x95\xe3\x01\x0b\xd1\x2b\x97\xd3\x9c\x66\xf8\xca\x9d\x00\xdc\x0e\x86\xe9\x74\x12\xd0\x62\xc0\xde\xe9\x21\xf7\x01\x46\xf1\x75\x1a\xc7\x7a\xb8\x45\xec\xa7\x1d\x72\xe1\x8f\x09\x78\x54\x3f\x05\xb8\x1b\x2f\x66\xdd\xdb\x64\xb2\x98\x95\xfc\x96\x98\x3e\xa4\xd1\x42\x99\x7e\xce\xb8\xb5\xc4\x33\x80\xd9\xe2\x2e\x4e\x67\xc3\x34\xb9\x9b\xc3\xfc\xb7\x69\xa9\x5c\x06\x1d\x34\x1e\x28\xf3\x6b\xef\xf4\xdc\x92\x72\x93\xc6\xb1\x19\x57\x50\x55\xdc\xb5\xc2\x3e\x4b\xce\xd9\x21\xc0\x60\xb8\x98\xc7\x30\x18\x32\xcf\xdc\x92\xf1\x06\x11\x5f\x37\x53\x4c\x23\xd1\xec\x9d\xf5\x00\x6e\x93\x61\x3a\x45\xb6\x69\x75\xd5\xf0\x40\x1b\x5a\xae\x85\x45\x00\x77\xc9\x78\x98\x4e\x7f\x33\x16\xab\x60\x34\x00\x55\x5b\x6b\x2b\x89\x3c\x9e\x55\x69\x0e\xdf\x4f\xb6\x47\x3f\x3b\x62\x23\x1c\x8d\xc6\x31\x8c\xa6\xf3\x56\x31\xba\xa2\x6c\x8f\xa8\xc5\x68\x20\x1e\x25\xe3\xf1\xa0\x55\x58\x8a\xfd\x93\xcb\xe8\xd0\x0e\xbf\xe2\xa4\xbc\x0e\xd3\x49\x8c\xb6\x96\x68\xee\x60\xf5\xd9\x56\x9f\x0d\x17\x63\xbf\x97\x52\x4e\x4a\x10\x8d\x5c\xc3\xdc\xb7\x27\xce\x4e\x01\xb8\x6f\x0d\x74\x50\xba\x98\x96\x99\x0d\x04\xdd\x42\x50\x4d\x04\x33\x54\xe1\x30\x67\x00\xef\x17\xe3\xeb\x41\x0a\x57\xe9\x40\x70\xcc\x74\xc2\xc4\x0f\xd2\x79\x9c\xaa\x2d\xa0\x92\x4c\xe6\x0a\xb8\x23\x57\x69\x06\xe1\x1f\xc9\x32\x0d\x01\xc2\xf6\xbc\x50\x48\x14\xfe\x55\x3f\x02\xca\xeb\x79\x8e\xa3\xde\x0c\xc6\x57\x26\x64\x81\xa8\xb2\xa6\x5c\xf4\xaf\x3a\x0a\xaf\x28\x31\x51\x52\x0e\xb8\x35\xd8\xf9\xa1\x0b\xc6\x2d\x4c\x29\x39\xd3\xb5\x48\xad\x27\x37\x39\x43\x53\x6e\x7a\x25\x5d\x69\x59\x5b\xbf\xbe\x72\x10\x66\xc0\xf5\xcf\x45\x3c\x2b\x73\x8b\xec\x90\xc9\xa6\x8d\xee\xac\x8b\xaa\x59\x66\xe5\x11\xbd\xf3\x08\x60\x3c\x98\x27\x13\x18\x0e\xee\x92\xf9\x60\x0c\xe3\x78\x3e\x8f\x53\x18\xc0\x6f\xc9\xfc\x06\xae\xd3\xc1\xfb\xb8\x65\x76\xfd\x18\x35\x29\xd7\x1e\x14\xb6\xf7\xce\x8f\xaa\x31\xb8\x9f\x51\x91\x88\x92\x4c\x1a\x62\x1c\x57\x63\x0c\x93\x74\xb8\xb8\xbd\x1a\xc7\xff\xe2\x42\x89\xca\x6f\x08\xcd\xf2\x66\x40\x27\xd5\x40\xf3\x64\x3c\xe2\xca\xb0\xcc\x48\x62\x64\x4d\x95\xe9\x57\x63\xf8\x02\xaf\x86\xf9\x54\xef\xfc\xb4\x1a\x27\x65\xae\x62\x70\x39\x7d\x1f\x97\xb8\x0d\xda\xbb\x4e\x43\x85\xce\x7c\x40\x42\xb2\x70\xeb\xaa\xcb\x43\x00\x0a\x7e\xe4\x66\xa3\xa2\x5f\xde\x6c\x54\x21\x3b\x43\x72\x98\x54\x23\x9e\x7b\x10\x87\x72\x3f\x14\xde\xfc\x05\xed\xbf\x0e\xb3\xae\x8b\x56\x74\x78\xe8\x41\x89\x7d\xd6\xc3\xc2\x3a\xac\xe5\xe7\x8d\x0b\xa2\xc3\x5e\x35\x86\x6b\x3d\xcc\x35\x37\xc4\xf0\x79\x81\x38\xcc\x7a\xc2\x81\x7c\xae\x20\x0e\xda\xd9\xe1\x38\x3e\x77\x90\x94\x17\x46\x4d\x59\x46\x65\x2f\xb0\xdc\x95\xb4\xbb\x91\xd1\xa1\xcf\xfa\x13\x6b\x31\xd4\x96\x52\xc5\xbf\x3a\xb9\x3e\x8b\x4f\x90\x05\x20\xaa\xb5\x40\xb3\x3c\x48\xb8\xcf\xcc\x93\x30\x77\xc2\x01\x84\x6d\xea\xb6\x4d\xae\xda\x6c\xe6\xa4\xfb\xac\x3c\x9e\xdf\xe8\xbc\x40\xe7\xf5\xa0\xbb\x73\xa5\x36\x79\x51\xee\x77\xbb\x75\x12\xc6\x67\xda\x13\xc4\x03\x6b\x07\xcc\xf7\x8c\xee\xa0\x1e\xfc\xa9\xc2\xaf\xac\xdc\x05\x88\x7a\x3e\x93\x9e\xd6\x13\x62\x60\x29\x2a\xea\xf9\x4c\x7a\x5a\x4f\x88\xc1\x18\x3e\x93\x9e\x06\x12\x62\x30\x90\xcf\xa4\xa7\xf5\x84\x18\x8c\xe1\x33\xe7\x69\xd8\x0e\x0e\xc6\x61\x69\xe6\x62\x3c\x4f\xee\xc6\x2c\xda\x2e\x55\x49\xd4\x57\x19\xf3\x88\x53\x83\xf2\xc4\x60\x56\x9c\x16\xe4\x32\x7c\xa6\x2c\xc7\x3a\x9b\xa7\xd3\x77\xb1\x4d\x3c\x84\xa8\xa0\x54\xa5\x07\x84\xa8\xb6\x17\x41\x06\xea\x33\xe9\x45\x00\xf1\x84\xd5\x3c\xa3\x9e\xcf\x9c\x17\x01\xc4\x13\x8a\xe1\xb3\xe5\x45\xcd\x2e\x85\x2c\x6f\x04\x14\xf9\xcc\x7a\x51\xbd\x83\x1a\x16\x8a\xa3\xc8\x67\xda\x1f\x3c\x93\x46\xf9\xa4\x55\x34\xca\x9d\xca\x5f\x14\xf9\x4c\x7b\x7e\x33\x4d\x27\x4e\x6b\xb1\x38\x24\x54\xb4\x40\x8d\x82\xaf\x2d\x5c\x9b\xf3\xec\x76\x30\xd6\xa2\x67\x37\x83\xf4\x0e\x66\xad\x17\x96\x94\xa3\xe8\x18\x15\x5b\x99\x65\x34\x6a\x53\x47\xd1\x49\x15\x02\xee\x52\x1b\x22\xf4\xab\x10\x42\x1c\x6a\x18\xcc\x69\x15\x0c\xee\x4e\x1b\x2a\x72\x56\x85\x10\xe0\x4c\xc3\x50\xce\xab\x50\xec\xdc\x42\xad\x4a\xbb\xdd\x29\x4e\x76\xbe\x0a\x80\x39\x3a\xc4\x61\xe2\x52\xf2\x2e\x37\x97\xe9\x72\xff\x04\xbd\x81\x19\x80\x71\x30\xc0\x69\x05\x48\xa4\x1e\x8a\xe4\x66\x14\x00\x0d\x8e\x3c\xa8\x5c\xe2\x28\x42\xa5\x63\x99\x84\x8e\x3a\x2e\xc2\x8e\x36\x44\x47\xb8\x51\x63\x19\x84\x8e\x36\x82\x65\xe3\x96\xed\xcd\x1c\xb4\x51\x04\x03\xe0\x86\x1d\x96\x31\x98\xd4\xaf\x0e\xaf\xc9\x0e\x81\xb5\x8d\x70\xe3\x2e\xe7\x0b\x54\x16\x51\xb2\x8a\x66\x56\x74\x84\xdb\xaf\x95\x21\x18\xd5\x54\xbf\x24\xdc\x4e\x03\x72\x02\xb0\x8e\x55\x96\x8a\x49\x5c\x34\x6e\x9c\x81\x19\x01\x84\x9d\x8e\x8b\x8e\x71\xdb\x94\xf9\x00\x0b\xa3\xc4\x05\xaa\xad\x0e\x94\x7d\xa4\xfa\x68\xba\x05\xe3\xd2\xec\x31\x6e\x8a\x58\x06\x50\x0e\x39\x43\x8f\x87\x44\xc7\xb8\x39\x36\xcb\x02\xaa\x3a\xbb\xd1\x31\x6e\x94\xcd\x72\x80\x6a\x04\xdc\x34\x5f\x90\x01\x54\xc3\xe0\x06\xda\x2c\xfe\xaf\x46\xc0\x8d\xb3\x79\xf4\x5f\x8d\x72\x0a\x30\x4a\xde\x27\xb3\x72\xdc\xaf\x43\x24\x1d\x4a\x33\xd9\x76\xe9\x81\x49\xb6\xe5\xe1\xe6\xeb\xe4\x01\x65\xc2\x28\x4e\x22\x29\x9b\x86\x36\x21\x6a\xd8\x76\x32\x20\x80\x70\x63\x7e\x79\x2e\xe0\x90\xec\x09\x6e\xc8\x2f\xcf\x04\x5c\x04\xdc\xa2\x7f\x32\x0f\x70\x61\x70\xb3\xfe\xb9\x2c\xc0\x45\xc1\x4d\xdb\x97\x03\x04\x4c\x97\x75\x60\x28\x3a\xc1\x4d\x1b\xcf\x00\x1a\x1d\x4f\x8b\x4e\x70\x73\xfe\xf0\x73\x53\x64\x29\x70\xf8\x5f\x87\x3d\x6f\xf5\x54\x86\x88\xba\xe1\x6b\x84\x6d\x85\xd9\x86\x95\x9e\x39\x0e\xbe\xb5\x1c\x14\x1d\xae\x01\xa1\x40\x49\x83\x58\x97\xa3\xd4\x74\x52\x2e\xd3\x58\x94\x1c\xf5\xb9\xcc\x2c\x93\x69\x7f\x23\x65\xf0\xad\x65\x81\x18\xc7\xe4\x4c\x8f\x12\xac\x4b\x4d\x37\x65\x7a\x3d\x9d\xc4\xef\x3c\xee\xb1\x56\x99\x36\x6d\x2b\x9c\xca\x9c\x0d\x43\x09\x3f\xbd\x6c\xa0\xf8\x2a\x32\x43\xdb\x1e\x75\x00\x4c\x8d\x08\xb8\x38\xf7\xe8\xbf\x11\x88\xc3\xe0\x71\x9f\x03\x52\x6c\x32\xbd\xc7\xea\xce\x43\x73\xf1\xbe\x72\xcc\x10\x73\x91\xea\xfc\x39\x70\x1a\xc9\x9a\xaa\x82\x13\x0a\x8e\xa4\x80\x48\x91\x90\x04\xe9\x33\xa8\xd6\x67\x34\x9d\x1b\xf9\xe1\xef\x7f\x98\x0c\xd9\x54\x9d\xcb\x2a\x75\x4a\x40\x26\x4e\x23\x6d\x86\x35\xab\x33\x90\x4e\x26\xcb\x94\xcd\x53\x23\x6d\x0f\xd6\x64\x54\xb9\x30\x26\x88\xc2\x68\xa4\x45\xec\xd1\x62\xe4\xd3\x82\x52\x1d\x58\xbb\x35\x56\xec\x76\x1b\x0e\x73\x85\x6a\x61\x81\x30\xc1\x2f\xbc\x05\x80\x81\x78\x0b\xf9\x23\xb4\x0e\xab\x7b\xf3\xfa\x6e\x43\x5e\xd7\x92\xb7\x62\xe7\x34\x27\x0a\x2f\xa7\x68\x5f\x82\x63\xe2\x4c\xe3\x20\x42\xb7\xdb\xcd\x5f\xae\x59\x4d\xb7\xae\x8a\x37\x43\x3b\x68\x1c\xa7\xb2\x6a\x50\xe6\x4d\xea\xf0\x66\x48\xd6\xcd\x51\x7c\x5c\x13\xd7\xf2\x66\x23\x65\x2a\xab\x08\x0a\x24\xcb\x58\x74\x79\x21\xd7\xc8\x49\x52\x6a\x75\xf1\x31\x4d\x5c\xe5\xd3\x7c\xb7\x81\x56\xeb\x83\xb3\x8d\x0f\xe8\xc2\xa4\x9e\x80\xaa\x0b\x87\xf0\xf6\xf3\xbc\xfc\x1c\xae\x4a\x9b\x6a\x7e\xee\xe1\x6c\x83\xa2\xd8\xbe\xd9\xaf\x47\xc1\xff\x3d\x1f\xd3\xc4\x55\x5e\xad\xf9\x8a\xe0\x2c\x83\x81\x88\x6b\xb3\xe0\x22\x1b\x17\xef\x63\x98\x6b\x8c\x95\x29\xc9\xb0\x43\x0d\x14\xdc\x16\x06\xa6\x0a\x4e\x33\x28\x92\x19\x69\x50\x75\x48\x2c\xe8\x1e\x28\x8e\xe4\x63\x9c\x6b\x2b\xa0\x45\xd9\x32\x5c\x21\x9c\x71\x2c\x10\xa3\x28\xd0\xf4\x7e\x2e\x06\xe2\xed\x31\x5d\x23\x46\x49\x7f\xff\xe3\x27\xf4\x89\x70\xa2\xc1\x80\x98\x97\xf9\x09\x9d\x7c\x5c\x73\x1d\x7a\x8e\xa6\x42\xa3\x0e\x15\xb5\x6f\x0e\x84\x93\x8d\x0b\x63\xba\x81\x40\x7d\x3a\x9d\x4e\x47\xc1\xf8\xd8\xe6\x06\xd9\xdb\x3c\x6b\x11\xc3\x27\x90\x39\x47\x56\xab\x6e\x74\xe7\x58\x38\xe5\xa0\x48\xfa\x7e\x51\xc8\x75\xd9\x27\xac\x52\xc9\x91\x7c\xbc\x73\x63\x45\x1e\xe6\x21\xdc\x7f\x34\xbb\x75\x9f\xe3\xe0\xa4\x83\xa1\x88\xa0\xf0\x1f\x4d\x6f\x6d\xe4\x28\x3e\xde\x49\xca\x15\x45\x22\x3c\x69\xe8\xa3\x04\xb8\xe8\xca\xb2\xb7\x2e\x55\x82\x68\xf2\x57\xd4\xe6\xb9\x30\x1f\xaf\x24\xe5\x08\x89\xe8\x7e\x6b\x83\x81\xe2\x64\x62\x49\x56\x91\x97\x42\xa8\x2b\xfb\x73\xc9\x3e\x1e\x49\x1c\x67\xd8\x78\xd0\x38\x6d\x58\x82\xc5\xd1\xe2\xca\xce\x07\x17\xe6\x63\x86\xc4\x8a\x0b\x42\x9f\x28\x61\x44\x1c\x11\x4e\x07\x8e\x64\x50\xc5\x2d\xb9\x6f\x8d\x17\x9a\x53\x21\x54\xc9\x3c\xf2\x79\xff\xc4\x75\xca\x54\x44\x64\x4d\xe6\xd6\xd3\x7c\x1c\x4d\xe7\xe3\x78\x36\x83\xa4\xa5\x43\x30\xa8\x99\xd8\x23\xd7\xa5\x27\xd7\x83\xf9\x22\x8d\x21\xf9\x55\xce\x27\x14\x53\x5a\xdc\xdd\x0e\xc5\xdb\x22\xc1\xcb\xdd\x7a\x34\x07\xb1\xdd\x79\x19\xa2\xa6\x70\x58\x8c\x5c\xde\xa3\x0c\xfa\x2e\x65\x2e\xdc\xe7\xc4\x7f\xc5\x03\x14\x1d\xa1\xf0\x22\x45\x7e\xa1\x9f\x20\x62\x50\x93\x0e\xeb\xcb\xb7\x84\x2a\x44\xdc\x95\xe3\x78\x24\x53\xf5\x10\x31\x72\xa5\x81\x78\xb5\xee\xba\xe6\xd2\x7d\xee\xfb\x9d\xcd\x7e\x14\xca\xe7\xe5\x85\x67\x05\x95\x82\x1f\xc8\xfb\x6c\xc4\x5d\xda\x52\x0f\xc6\xb2\x0a\x08\xf7\xdf\x18\x8c\x42\x09\xb9\x11\xbc\x53\x00\xe0\x2d\x8f\x77\x69\xa9\x2f\x5e\xdc\xb9\x9c\x13\x15\xfa\xfa\x6e\x2f\xe7\x52\x7d\xa7\x84\xc6\x56\x4f\x15\x64\xf6\x96\xf3\xf3\x53\x4a\x03\xe7\x2c\x8c\x27\x80\x3f\x1a\xa0\x83\xb7\x40\x88\xe3\xb8\x70\x2b\xbb\xac\x1e\xb3\x35\xd9\xce\x58\xab\x47\x6d\xae\xe9\xb0\x6a\xd4\x65\x18\x25\x1a\x7b\xd5\xdd\x5b\x63\x35\x47\x35\x3a\xc8\x9c\x86\xaa\xa4\x86\x09\xcb\x9a\xcf\x7b\x5c\xa9\x41\x20\x88\x7a\x87\x1c\x6a\xe2\x20\x57\xd5\xba\x94\xee\x09\xf2\x2c\x89\xf4\xda\xb5\x0a\x79\xda\xde\x5e\x24\x0d\xa4\x71\x4a\x9f\x38\x77\xf3\x73\x0c\xdf\x41\xb3\xb1\x1d\x8c\x15\x10\x44\x3e\xe3\x25\x27\x44\x8a\x24\xfc\x08\x7d\xa5\x2e\x78\xc3\xcc\x41\x31\x58\x87\xaf\x12\x21\x98\x55\x1c\xfb\x0e\x8b\x4e\x2c\x4b\x56\x37\xac\x34\x7f\x00\x12\x87\xc1\xbb\x63\x13\xb7\xde\xaf\x1c\x92\x3a\xa8\xdd\x20\x4c\x3d\xf6\x9d\x05\x9f\x60\xa6\xd7\x48\x9b\x0e\xed\x98\x40\x78\xf7\xdb\x81\xb1\x1c\x6c\xbd\x3e\x16\x8c\xef\x4c\xe9\xc4\x32\xc4\x8c\xbc\xf4\xe1\x54\x1c\x06\xa7\x08\x0b\x84\x97\x62\x84\x2e\x19\xf2\x94\xc1\xda\xb5\xc1\xe3\xfc\x09\xdc\xa5\xf1\x30\x1e\xc5\x23\xb8\xfc\x00\x83\xbb\x29\xdb\xbf\x77\x37\xe6\x51\xb1\x0b\xf5\xd4\x30\xf1\xbe\x0d\x1d\x86\x2b\x0f\xd7\x18\x41\x10\xf6\x54\x12\x05\xee\xad\x37\x4d\xae\x1b\xee\x06\x50\xf2\x0b\xa7\x7c\xec\x29\x33\x49\xd9\x75\x0b\xaf\x25\x1a\x77\x49\x52\x3d\x72\x5f\x6e\x30\xad\xa8\x2c\x83\x79\x58\x0c\x64\x16\xee\x3f\x66\xc1\x71\xf0\x44\xe1\x3f\x8d\xe2\xcb\x20\xa6\x56\xa6\x03\xea\x81\x56\x40\xbb\xc8\x03\xcc\x2a\xce\xfb\x72\x18\x3c\x99\xf8\xcf\x82\x9c\xd4\xdc\x96\xa0\x6e\xe8\x34\xba\x8c\xc5\x59\x3e\xa7\x26\x5f\x8b\x86\x27\x1b\xff\x37\x58\xfe\x74\x64\xaa\xda\x33\x56\xc9\xd7\x78\x16\x8d\xa0\xc9\x52\x20\x9f\x8b\x66\x04\x87\xcb\x75\x6b\xc2\x36\x52\xe7\x88\x46\x19\xb4\xec\x10\xe4\xf3\x83\x4b\x83\x30\xea\xb6\x7c\x23\x96\xaa\xb7\xc4\xaa\xe1\x96\xa1\x7d\xe9\x4b\x6a\x93\x20\xc5\x7a\x6b\x21\x4f\xc4\xe3\x30\x78\xce\x92\x22\x4d\x6f\xcd\x81\xd2\x73\x18\x77\xc1\x79\x03\x90\x13\x5f\xd2\x92\x3a\xf4\xd7\xf4\xc9\x7e\x65\x5e\x3a\xc1\x93\x16\x07\xa6\xcc\x7e\x75\x9a\x74\x8a\xd2\xe3\x89\xaf\xde\x94\xda\xc4\xf7\x73\xeb\x81\x73\x52\x8a\x10\x9f\xe6\xbd\x26\xeb\xe1\x63\x9d\x99\x67\x57\x35\x7f\x54\x22\x87\xc1\xe9\x67\xe6\x9e\x72\xb8\x90\x60\x01\x4f\x9b\xe2\x82\x7d\xdc\x33\x43\x2b\xb3\xd9\x4b\x9f\xf7\xc8\xb1\x70\xfe\xc1\x90\xd4\xa6\x22\x34\xa3\xa1\x9a\xf8\x78\x67\xe6\xb5\x8c\x06\x6a\x18\xa9\xdf\x09\xce\x3c\x0e\x0c\x14\xdd\x39\xa8\xd4\xa1\x88\x32\xfa\x3e\xbe\x99\x79\x6c\xe2\x65\x0b\xd1\xc7\x89\x66\xe6\xda\x84\x34\x89\xea\xf1\x1b\x82\xbd\xf7\xc8\x60\x6b\x60\x3f\xa9\x03\x6a\xce\x37\x1b\x6b\xd0\xc7\xfb\x16\x2e\x4c\x91\x0d\x8b\x57\xdf\xe3\xd4\x8c\x35\xf0\xf1\xc4\xdc\x5a\x83\x97\x3f\xbf\x94\xc3\xe0\x3c\x31\x77\x4f\x63\x04\x8d\xdf\x10\xec\x63\x88\xb9\x93\xa2\x56\x29\xd0\xcd\xbb\x79\xb7\x52\x01\x9c\x20\x1c\x14\xcf\x0a\x74\x2b\x34\xa8\xb9\x05\xae\x68\x18\x68\x13\x23\x59\xb3\x5b\xe0\x38\x4c\xe5\xf9\xdd\x17\x80\x60\xa7\x46\xfa\x3e\x7e\x58\x54\x9d\x1a\x01\x55\xa7\x0f\x57\x06\x27\x88\x0a\x94\xe2\x29\x5a\x0d\xb4\xf1\xb1\xc5\xc2\x6e\x36\xe8\x18\x2e\xab\xbb\x39\x11\x83\xc1\x89\xe2\xe5\x20\xa8\x2e\x3e\xbe\x58\xa0\xb7\x4a\x4d\xb5\x37\xaf\x79\xca\x20\xba\x3a\x38\x65\xd4\x22\xd1\xc6\x5a\x9d\xd6\xdd\x71\x69\x65\x11\xdd\x2e\x74\xbb\x62\xd7\x11\xd2\x78\xd7\x9d\x56\x1e\x1f\xc7\x32\x16\x1d\x9f\x54\x62\xa1\x9a\xf9\xb8\x65\xe1\xf6\x8f\x1a\x3f\x1b\xda\xe8\x52\x9d\xe2\xd4\x62\xa3\x18\x7e\x21\xfc\xb9\x9b\x45\xdf\xea\xd4\xc7\x32\xbf\xb9\xd1\x90\xa8\x25\x92\xcc\x78\xbc\x26\x10\x92\x65\x3f\xff\x9c\x69\x3e\x12\x9c\x88\x90\x71\x80\x1a\x06\xc8\x87\x56\xb2\x41\xbc\xf8\x89\x9f\x1c\xdb\xc7\x55\x1f\x7c\x67\x5e\x05\x34\x03\x86\x06\x37\xef\x72\x2c\x9c\xaf\x2a\x91\x84\x8a\x95\x6b\x8b\x9c\xde\x38\xf5\xf1\x17\x72\x98\xff\xf7\x3f\x40\x14\x9e\xc5\x22\x37\xb9\x23\x99\x43\xf9\x7a\x34\x1f\xed\xfb\xde\x88\x7a\x5a\x55\xf8\xa3\xbd\x39\x00\xde\x9d\xf9\xe8\x24\x1e\x60\x24\x1e\x75\xcf\x51\xe5\x82\x7d\x9d\x9a\x8f\x48\xe3\x96\xfe\xfe\x47\xe3\x07\x93\x73\x10\xbc\x4b\x83\x40\xa8\xd3\x7a\x81\x4f\x82\xe5\xc2\x7d\x7d\x9a\x8f\x6e\xb0\xfe\xb2\xd1\xe3\x1d\x9a\x8f\xde\x30\x3d\x78\xe4\x38\x1d\x8d\xa7\x93\x6b\x71\xb3\x79\x71\x5c\x5e\x3f\x96\xbb\xab\x5b\x56\xdd\x9a\xd0\x36\x1a\x9e\x82\x1a\x9d\x1a\x5c\xa6\x9f\xe8\x87\xbf\x88\x0b\x47\x67\xa0\xd8\x9d\x9f\x36\x15\x36\xa6\x79\xe7\x17\xef\xab\xbc\xfc\x1c\xcc\x35\xe5\x66\x25\xbe\xe4\xfc\x90\x17\x5c\x82\xe9\xd0\x3d\x63\xd3\x2f\x45\xf1\x22\x1a\x8d\xa0\x44\x6f\xc6\xf3\xfa\x40\x3d\x26\x49\x67\x47\x55\xe3\xfe\xdf\x00\x00\x00\xff\xff\xf2\x77\x6b\x98\xab\x6e\x00\x00") 93 | 94 | func standardFlfBytes() ([]byte, error) { 95 | return bindataRead( 96 | _standardFlf, 97 | "standard.flf", 98 | ) 99 | } 100 | 101 | func standardFlf() (*asset, error) { 102 | bytes, err := standardFlfBytes() 103 | if err != nil { 104 | return nil, err 105 | } 106 | 107 | info := bindataFileInfo{name: "standard.flf", size: 28331, mode: os.FileMode(436), modTime: time.Unix(1477320163, 0)} 108 | a := &asset{bytes: bytes, info: info} 109 | return a, nil 110 | } 111 | 112 | // Asset loads and returns the asset for the given name. 113 | // It returns an error if the asset could not be found or 114 | // could not be loaded. 115 | func Asset(name string) ([]byte, error) { 116 | cannonicalName := strings.Replace(name, "\\", "/", -1) 117 | if f, ok := _bindata[cannonicalName]; ok { 118 | a, err := f() 119 | if err != nil { 120 | return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) 121 | } 122 | return a.bytes, nil 123 | } 124 | return nil, fmt.Errorf("Asset %s not found", name) 125 | } 126 | 127 | // MustAsset is like Asset but panics when Asset would return an error. 128 | // It simplifies safe initialization of global variables. 129 | func MustAsset(name string) []byte { 130 | a, err := Asset(name) 131 | if err != nil { 132 | panic("asset: Asset(" + name + "): " + err.Error()) 133 | } 134 | 135 | return a 136 | } 137 | 138 | // AssetInfo loads and returns the asset info for the given name. 139 | // It returns an error if the asset could not be found or 140 | // could not be loaded. 141 | func AssetInfo(name string) (os.FileInfo, error) { 142 | cannonicalName := strings.Replace(name, "\\", "/", -1) 143 | if f, ok := _bindata[cannonicalName]; ok { 144 | a, err := f() 145 | if err != nil { 146 | return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) 147 | } 148 | return a.info, nil 149 | } 150 | return nil, fmt.Errorf("AssetInfo %s not found", name) 151 | } 152 | 153 | // AssetNames returns the names of the assets. 154 | func AssetNames() []string { 155 | names := make([]string, 0, len(_bindata)) 156 | for name := range _bindata { 157 | names = append(names, name) 158 | } 159 | return names 160 | } 161 | 162 | // _bindata is a table, holding each asset generator, mapped to its name. 163 | var _bindata = map[string]func() (*asset, error){ 164 | "larry3d.flf": larry3dFlf, 165 | "standard.flf": standardFlf, 166 | } 167 | 168 | // AssetDir returns the file names below a certain 169 | // directory embedded in the file by go-bindata. 170 | // For example if you run go-bindata on data/... and data contains the 171 | // following hierarchy: 172 | // data/ 173 | // foo.txt 174 | // img/ 175 | // a.png 176 | // b.png 177 | // then AssetDir("data") would return []string{"foo.txt", "img"} 178 | // AssetDir("data/img") would return []string{"a.png", "b.png"} 179 | // AssetDir("foo.txt") and AssetDir("notexist") would return an error 180 | // AssetDir("") will return []string{"data"}. 181 | func AssetDir(name string) ([]string, error) { 182 | node := _bintree 183 | if len(name) != 0 { 184 | cannonicalName := strings.Replace(name, "\\", "/", -1) 185 | pathList := strings.Split(cannonicalName, "/") 186 | for _, p := range pathList { 187 | node = node.Children[p] 188 | if node == nil { 189 | return nil, fmt.Errorf("Asset %s not found", name) 190 | } 191 | } 192 | } 193 | if node.Func != nil { 194 | return nil, fmt.Errorf("Asset %s not found", name) 195 | } 196 | rv := make([]string, 0, len(node.Children)) 197 | for childName := range node.Children { 198 | rv = append(rv, childName) 199 | } 200 | return rv, nil 201 | } 202 | 203 | type bintree struct { 204 | Func func() (*asset, error) 205 | Children map[string]*bintree 206 | } 207 | 208 | var _bintree = &bintree{nil, map[string]*bintree{ 209 | "larry3d.flf": &bintree{larry3dFlf, map[string]*bintree{}}, 210 | "standard.flf": &bintree{standardFlf, map[string]*bintree{}}, 211 | }} 212 | 213 | // RestoreAsset restores an asset under the given directory 214 | func RestoreAsset(dir, name string) error { 215 | data, err := Asset(name) 216 | if err != nil { 217 | return err 218 | } 219 | info, err := AssetInfo(name) 220 | if err != nil { 221 | return err 222 | } 223 | err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) 224 | if err != nil { 225 | return err 226 | } 227 | err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) 228 | if err != nil { 229 | return err 230 | } 231 | err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) 232 | if err != nil { 233 | return err 234 | } 235 | return nil 236 | } 237 | 238 | // RestoreAssets restores an asset under the given directory recursively 239 | func RestoreAssets(dir, name string) error { 240 | children, err := AssetDir(name) 241 | // File 242 | if err != nil { 243 | return RestoreAsset(dir, name) 244 | } 245 | // Dir 246 | for _, child := range children { 247 | err = RestoreAssets(dir, filepath.Join(name, child)) 248 | if err != nil { 249 | return err 250 | } 251 | } 252 | return nil 253 | } 254 | 255 | func _filePath(dir, name string) string { 256 | cannonicalName := strings.Replace(name, "\\", "/", -1) 257 | return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) 258 | } 259 | -------------------------------------------------------------------------------- /char.go: -------------------------------------------------------------------------------- 1 | package figlet4go 2 | 3 | import ( 4 | "errors" 5 | "strings" 6 | ) 7 | 8 | // Represents a single ascii character 9 | type asciiChar struct { 10 | // Slice with the lines of the Char 11 | Lines []string 12 | // Color of the char 13 | Color Color 14 | } 15 | 16 | // Creates a new ascii character 17 | func newAsciiChar(font *font, char rune) (*asciiChar, error) { 18 | // If not ascii, throw an error 19 | if char < 0 || char > 127 { 20 | return nil, errors.New("Not Ascii") 21 | } 22 | 23 | // Get the font's representation of the char 24 | lines := font.getCharSlice(char) 25 | 26 | return &asciiChar{Lines: lines}, nil 27 | } 28 | 29 | // Return a line of the char as string with color if set 30 | func (char *asciiChar) GetLine(index int, p Parser) string { 31 | prefix := "" 32 | suffix := "" 33 | 34 | line := handleReplaces(char.Lines[index], p) 35 | 36 | if char.Color != nil { 37 | prefix = char.Color.getPrefix(p) 38 | suffix = char.Color.getSuffix(p) 39 | } 40 | 41 | return prefix + line + suffix 42 | } 43 | 44 | // Replace all parser specific things 45 | func handleReplaces(str string, p Parser) string { 46 | if p.Replaces == nil { 47 | return str 48 | } 49 | // Replace for each entry 50 | for old, new := range p.Replaces { 51 | str = strings.Replace(str, old, new, -1) 52 | } 53 | return str 54 | } 55 | -------------------------------------------------------------------------------- /cmd/figlet4go/figlet4go.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "flag" 5 | "fmt" 6 | "github.com/mbndr/figlet4go" 7 | "log" 8 | "os" 9 | "strings" 10 | ) 11 | 12 | var ( 13 | str *string = flag.String("str", "", "String to be converted with FIGlet") 14 | font *string = flag.String("font", "", "Font name to use") 15 | fontpath *string = flag.String("fontpath", "", "Font path to load fonts from") 16 | colors *string = flag.String("colors", "", "Character colors separated by ';'\n\tPossible colors: black, red, green, yellow, blue, magenta, cyan, white, or any hexcode (f.e. '885DBA')") 17 | parser *string = flag.String("parser", "terminal", "Parser to use\tPossible parsers: terminal, html") 18 | file *string = flag.String("file", "", "File to write to") 19 | ) 20 | 21 | func main() { 22 | // Parse the flags 23 | flag.Parse() 24 | 25 | // Validate and log the error 26 | validate() 27 | 28 | // Create objects 29 | ascii := figlet4go.NewAsciiRender() 30 | options := figlet4go.NewRenderOptions() 31 | 32 | // Load fonts 33 | if *fontpath != "" { 34 | ascii.LoadFont(*fontpath) 35 | } 36 | 37 | // Set the font 38 | options.FontName = *font 39 | 40 | // Set the parser 41 | p, err := figlet4go.GetParser(*parser) 42 | if err != nil { 43 | p, _ = figlet4go.GetParser("terminal") 44 | } 45 | options.Parser = *p 46 | 47 | // Set colors 48 | if *colors != "" { 49 | options.FontColor = getColorSlice(*colors) 50 | } 51 | 52 | // Render the string 53 | renderStr, err := ascii.RenderOpts(*str, options) 54 | if err != nil { 55 | log.Fatal(err) 56 | } 57 | 58 | // Write to file if given 59 | if *file != "" { 60 | // Create file 61 | f, err := os.Create(*file) 62 | defer f.Close() 63 | if err != nil { 64 | log.Fatal(err) 65 | } 66 | // Write to file 67 | b, err := f.WriteString(renderStr) 68 | if err != nil { 69 | log.Fatal(err) 70 | } 71 | fmt.Printf("Wrote %d bytes to %s\n", b, *file) 72 | return 73 | } 74 | 75 | // Default is printing 76 | fmt.Print(renderStr) 77 | } 78 | 79 | // Get a slice with colors to give to the RenderOptions 80 | // Splits the given string with the separator ";" 81 | func getColorSlice(colorStr string) []figlet4go.Color { 82 | 83 | givenColors := strings.Split(colorStr, ";") 84 | 85 | colors := make([]figlet4go.Color, len(givenColors)) 86 | 87 | for i, c := range givenColors { 88 | switch c { 89 | case "black": 90 | colors[i] = figlet4go.ColorBlack 91 | case "red": 92 | colors[i] = figlet4go.ColorRed 93 | case "green": 94 | colors[i] = figlet4go.ColorGreen 95 | case "yellow": 96 | colors[i] = figlet4go.ColorYellow 97 | case "blue": 98 | colors[i] = figlet4go.ColorBlue 99 | case "magenta": 100 | colors[i] = figlet4go.ColorMagenta 101 | case "cyan": 102 | colors[i] = figlet4go.ColorCyan 103 | case "white": 104 | colors[i] = figlet4go.ColorWhite 105 | default: 106 | // Try to parse the TrueColor from the string 107 | color, err := figlet4go.NewTrueColorFromHexString(c) 108 | if err != nil { 109 | log.Fatal(err) 110 | } 111 | colors[i] = color 112 | } 113 | } 114 | 115 | return colors 116 | } 117 | 118 | // Validate if all required options are given 119 | // flag.Parse() must be called before this 120 | func validate() { 121 | if *str == "" { 122 | flag.Usage() 123 | os.Exit(1) 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /color.go: -------------------------------------------------------------------------------- 1 | package figlet4go 2 | 3 | import ( 4 | "encoding/hex" 5 | "errors" 6 | "fmt" 7 | ) 8 | 9 | // Escape char 10 | const escape string = "\x1b" 11 | 12 | // Terminal AnsiColors 13 | var ( 14 | ColorBlack AnsiColor = AnsiColor{30} 15 | ColorRed AnsiColor = AnsiColor{31} 16 | ColorGreen AnsiColor = AnsiColor{32} 17 | ColorYellow AnsiColor = AnsiColor{33} 18 | ColorBlue AnsiColor = AnsiColor{34} 19 | ColorMagenta AnsiColor = AnsiColor{35} 20 | ColorCyan AnsiColor = AnsiColor{36} 21 | ColorWhite AnsiColor = AnsiColor{37} 22 | ) 23 | 24 | // TrueColor lookalikes for displaying AnsiColor f.e. with the HTML parser 25 | // Colors based on http://clrs.cc/ 26 | // "TrueColorForAnsiColor" 27 | var tcfac map[AnsiColor]TrueColor = map[AnsiColor]TrueColor{ 28 | ColorBlack: {0, 0, 0}, 29 | ColorRed: {255, 65, 54}, 30 | ColorGreen: {149, 189, 64}, 31 | ColorYellow: {255, 220, 0}, 32 | ColorBlue: {0, 116, 217}, 33 | ColorMagenta: {177, 13, 201}, 34 | ColorCyan: {105, 206, 245}, 35 | ColorWhite: {255, 255, 255}, 36 | } 37 | 38 | // Color has a pre- and a suffix 39 | type Color interface { 40 | getPrefix(p Parser) string 41 | getSuffix(p Parser) string 42 | } 43 | 44 | // AnsiColor representation 45 | type AnsiColor struct { 46 | code int 47 | } 48 | 49 | // TrueColor with rgb Attributes 50 | type TrueColor struct { 51 | r int 52 | g int 53 | b int 54 | } 55 | 56 | // Prefix for ansi color 57 | func (tc TrueColor) getPrefix(p Parser) string { 58 | switch p.Name { 59 | 60 | case "terminal": 61 | return fmt.Sprintf("%v[38;2;%d;%d;%dm", escape, tc.r, tc.g, tc.b) 62 | 63 | case "html": 64 | return fmt.Sprintf("", tc.r, tc.g, tc.b) 65 | } 66 | 67 | return "" 68 | } 69 | 70 | // Suffix for ansi color 71 | func (tc TrueColor) getSuffix(p Parser) string { 72 | switch p.Name { 73 | 74 | case "terminal": 75 | return fmt.Sprintf("%v[0m", escape) 76 | 77 | case "html": 78 | return "" 79 | } 80 | 81 | return "" 82 | } 83 | 84 | // NewTrueColorFromHexString returns a Truecolor object based on a hexadezimal string 85 | func NewTrueColorFromHexString(c string) (*TrueColor, error) { 86 | rgb, err := hex.DecodeString(c) 87 | if err != nil { 88 | return nil, errors.New("Invalid color given (" + c + ")") 89 | } 90 | 91 | return &TrueColor{ 92 | int(rgb[0]), 93 | int(rgb[1]), 94 | int(rgb[2]), 95 | }, nil 96 | } 97 | 98 | // Prefix for ansi color 99 | func (ac AnsiColor) getPrefix(p Parser) string { 100 | switch p.Name { 101 | 102 | case "terminal": 103 | return fmt.Sprintf("%v[0;%dm", escape, ac.code) 104 | 105 | case "html": 106 | // Get the TrueColor for the AnsiColor 107 | tc := tcfac[ac] 108 | return tc.getPrefix(p) 109 | } 110 | 111 | return "" 112 | 113 | } 114 | 115 | // Suffix for ansi color 116 | func (ac AnsiColor) getSuffix(p Parser) string { 117 | switch p.Name { 118 | 119 | case "terminal": 120 | return fmt.Sprintf("%v[0m", escape) 121 | 122 | case "html": 123 | // Get the TrueColor for the AnsiColor 124 | tc := tcfac[ac] 125 | return tc.getSuffix(p) 126 | } 127 | 128 | return "" 129 | } 130 | -------------------------------------------------------------------------------- /font.go: -------------------------------------------------------------------------------- 1 | package figlet4go 2 | 3 | // Explanation of the .flf file header 4 | // THE HEADER LINE 5 | // 6 | // The header line gives information about the FIGfont. Here is an example 7 | // showing the names of all parameters: 8 | // 9 | // flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in 10 | // | | | | | | | | | | the entire file must be "flf2a". 11 | // / / | | | | | | | \ 12 | // Signature / / | | | | | \ Codetag_Count 13 | // Hardblank / / | | | \ Full_Layout* 14 | // Height / | | \ Print_Direction 15 | // Baseline / \ Comment_Lines 16 | // Max_Length Old_Layout* 17 | // 18 | // * The two layout parameters are closely related and fairly complex. 19 | // (See "INTERPRETATION OF LAYOUT PARAMETERS".) 20 | // 21 | 22 | import ( 23 | "strings" 24 | ) 25 | 26 | // Represents a single font 27 | type font struct { 28 | // Hardblank symbol 29 | hardblank string 30 | // Height of one char 31 | height int 32 | // A string for each line of the char 33 | fontSlice []string 34 | } 35 | 36 | // Get a slice of strings containing the chars lines 37 | func (f *font) getCharSlice(char rune) []string { 38 | 39 | height := f.height 40 | beginRow := (int(char) - 32) * height 41 | 42 | lines := make([]string, height) 43 | 44 | // Get the char lines of the char 45 | for i := 0; i < height; i++ { 46 | row := f.fontSlice[beginRow+i] 47 | row = strings.Replace(row, "@", "", -1) 48 | row = strings.Replace(row, f.hardblank, " ", -1) 49 | lines[i] = row 50 | } 51 | 52 | return lines 53 | } 54 | -------------------------------------------------------------------------------- /fontmanager.go: -------------------------------------------------------------------------------- 1 | package figlet4go 2 | 3 | import ( 4 | "errors" 5 | "io/ioutil" 6 | "os" 7 | "path/filepath" 8 | "strconv" 9 | "strings" 10 | ) 11 | 12 | // Default font if no other valid given 13 | const defaultFont string = "standard" 14 | 15 | // Extension of a font file 16 | const extension string = "flf" 17 | 18 | // Builtin fonts to load 19 | var defaultFonts []string = []string{ 20 | "standard", 21 | "larry3d", 22 | } 23 | 24 | // Holds the available fonts 25 | type fontManager struct { 26 | // The already read fonts 27 | fontLib map[string]*font 28 | // The in given pathes found fonts 29 | fontList map[string]string 30 | } 31 | 32 | // Create a new fontmanager 33 | // Initializes the fontManager, 34 | // loads the builtin fonts and returns it 35 | func newFontManager() *fontManager { 36 | fm := &fontManager{ 37 | fontLib: make(map[string]*font), 38 | fontList: make(map[string]string), 39 | } 40 | fm.loadBuildInFont() 41 | return fm 42 | } 43 | 44 | // Get a font by name 45 | // Default font if no other font could be loaded 46 | func (fm *fontManager) getFont(fontName string) *font { 47 | // Get the font from the fontLib 48 | _, ok := fm.fontLib[fontName] 49 | // Font not found 50 | if !ok { 51 | // Try to load it from loaded fontList 52 | err := fm.loadDiskFont(fontName) 53 | // Font also not found here, use the default font 54 | if err != nil { 55 | fontName = defaultFont 56 | } 57 | } 58 | 59 | return fm.fontLib[fontName] 60 | } 61 | 62 | // Loads all .flf files recursively in the fontPath path 63 | // Saves the found font files in a map with the name as the key 64 | // and the path as the value. Doesn't load them at this point 65 | // for performance. Called in the AsciiRenderer 66 | func (fm *fontManager) loadFontList(fontPath string) error { 67 | // Walk through the path 68 | return filepath.Walk(fontPath, func(path string, info os.FileInfo, err error) error { 69 | // Return an error if occurred 70 | if err != nil { 71 | return err 72 | } 73 | // If the current item is a directory or has not the correct suffix 74 | if info.IsDir() || !strings.HasSuffix(info.Name(), "."+extension) { 75 | return nil 76 | } 77 | // Extract the font name 78 | fontName := strings.TrimSuffix(info.Name(), "."+extension) 79 | // Save the font to the list 80 | fm.fontList[fontName] = path 81 | 82 | return nil 83 | }) 84 | } 85 | 86 | // Load a font from disk 87 | // The font must be registered in the fontList 88 | func (fm *fontManager) loadDiskFont(fontName string) error { 89 | // Get the fontpath 90 | path, ok := fm.fontList[fontName] 91 | // Font is not registered 92 | if !ok { 93 | return errors.New("Font Not Found: " + fontName) 94 | } 95 | 96 | // Read file contents 97 | fontStr, err := ioutil.ReadFile(path) 98 | if err != nil { 99 | return err 100 | } 101 | 102 | // Parse the file contents 103 | font, err := parseFontContent(string(fontStr)) 104 | if err != nil { 105 | return err 106 | } 107 | 108 | // Register the font object in the fontLib 109 | fm.fontLib[fontName] = font 110 | 111 | return nil 112 | } 113 | 114 | // Load the builtin fonts from the bindata.go file 115 | // Load all fonts specified on top (defaultFonts) 116 | func (fm *fontManager) loadBuildInFont() error { 117 | 118 | // Load each default font 119 | for _, name := range defaultFonts { 120 | // Get Contents 121 | fontStr, err := Asset(name + "." + extension) 122 | if err != nil { 123 | return err 124 | } 125 | // Load the font 126 | err = fm.loadBindataFont(fontStr, name) 127 | if err != nil { 128 | return err 129 | } 130 | } 131 | 132 | return nil 133 | } 134 | 135 | // Load a bindata font 136 | func (fm *fontManager) loadBindataFont(fontBinary []byte, fontName string) error { 137 | 138 | // Get the font 139 | font, err := parseFontContent(string(fontBinary)) 140 | if err != nil { 141 | return err 142 | } 143 | // Register the font object in the fontLib 144 | fm.fontLib[fontName] = font 145 | 146 | return nil 147 | } 148 | 149 | // Parse a font from a content string 150 | // Used to load fonts from disk and the builtin fonts 151 | func parseFontContent(cont string) (*font, error) { 152 | // Get all lines 153 | lines := strings.Split(cont, "\n") 154 | 155 | if len(lines) < 1 { 156 | return nil, errors.New("Font content error") 157 | } 158 | 159 | // Get the header metadata 160 | header := strings.Split(lines[0], " ") 161 | 162 | // Line end of the comment 163 | commentEndLine, _ := strconv.Atoi(header[5]) 164 | 165 | // Char height 166 | height, _ := strconv.Atoi(header[1]) 167 | 168 | // Initialize the font 169 | font := &font{ 170 | hardblank: header[0][len(header[0])-1:], 171 | height: height, 172 | fontSlice: lines[commentEndLine+1:], 173 | } 174 | 175 | return font, nil 176 | } 177 | -------------------------------------------------------------------------------- /parser.go: -------------------------------------------------------------------------------- 1 | package figlet4go 2 | 3 | import "errors" 4 | 5 | // Parser stores some output specific stuff 6 | type Parser struct { 7 | // Name used for switching in colors.go 8 | Name string 9 | // Parser prefix 10 | Prefix string 11 | // Parser suffix 12 | Suffix string 13 | // Newline representation 14 | NewLine string 15 | // Things to be replaced (f.e. \n to
) 16 | Replaces map[string]string 17 | } 18 | 19 | var parsers map[string]Parser = map[string]Parser{ 20 | 21 | // Default terminal parser 22 | "terminal": {"terminal", "", "", "\n", nil}, 23 | // Parser for HTML code 24 | "html": {"html", "", "", "
", map[string]string{" ": " "}}, 25 | } 26 | 27 | // GetParser returns a parser by its key 28 | func GetParser(key string) (*Parser, error) { 29 | parser, ok := parsers[key] 30 | if !ok { 31 | return nil, errors.New("Invalid parser key: " + key) 32 | } 33 | return &parser, nil 34 | } 35 | -------------------------------------------------------------------------------- /render.go: -------------------------------------------------------------------------------- 1 | package figlet4go 2 | 3 | // RenderOptions are used to set color or maybe future 4 | // options to the AsciiRenderer 5 | type RenderOptions struct { 6 | // Name of the used font 7 | FontName string 8 | // Colors of the font 9 | FontColor []Color 10 | // Parser 11 | Parser Parser 12 | } 13 | 14 | // NewRenderOptions creates new RenderOptions 15 | // Sets the default font name 16 | func NewRenderOptions() *RenderOptions { 17 | p, _ := GetParser("terminal") 18 | return &RenderOptions{ 19 | FontName: defaultFont, 20 | Parser: *p, 21 | } 22 | } 23 | 24 | // AsciiRender is the wrapper to render a string 25 | type AsciiRender struct { 26 | // FontManager to store all the fonts 27 | fontMgr *fontManager 28 | } 29 | 30 | // NewAsciiRender creates a new AsciiRender 31 | func NewAsciiRender() *AsciiRender { 32 | return &AsciiRender{ 33 | fontMgr: newFontManager(), 34 | } 35 | } 36 | 37 | // LoadFont loads all *.flf font files recursively in a path 38 | func (ar *AsciiRender) LoadFont(fontPath string) error { 39 | return ar.fontMgr.loadFontList(fontPath) 40 | } 41 | 42 | // LoadBinDataFont loads provided font binary 43 | func (ar *AsciiRender) LoadBindataFont(fontBinary []byte, fontName string) error { 44 | return ar.fontMgr.loadBindataFont(fontBinary, fontName) 45 | } 46 | 47 | // Render renders a string with the default options 48 | // Calls the RenderOpts method with a new RenderOptions object 49 | func (ar *AsciiRender) Render(str string) (string, error) { 50 | return ar.RenderOpts(str, NewRenderOptions()) 51 | } 52 | 53 | // RenderOpts renders a string with special RenderOptions 54 | // Can be called from the user (if options wished) or the above Render method 55 | // Contains the whole rendering logic 56 | func (ar *AsciiRender) RenderOpts(str string, opt *RenderOptions) (string, error) { 57 | // Should the text be colored 58 | colored := len(opt.FontColor) > 0 59 | 60 | // Load the font 61 | font := ar.fontMgr.getFont(opt.FontName) 62 | 63 | // Slice holding the chars 64 | chars := []*asciiChar{} 65 | 66 | // Index of the current color 67 | curColorIndex := 0 68 | 69 | // Foreach char create the ascii char 70 | for _, char := range str { 71 | // AsciiChar 72 | asciiChar, err := newAsciiChar(font, char) 73 | if err != nil { 74 | return "", err 75 | } 76 | 77 | // Set color if given 78 | if colored { 79 | // Start colors from beginning if length is reached 80 | if curColorIndex == len(opt.FontColor) { 81 | curColorIndex = 0 82 | } 83 | // Assign color and increment the index 84 | asciiChar.Color = opt.FontColor[curColorIndex] 85 | curColorIndex++ 86 | } 87 | 88 | // Append the char to the chars slice 89 | chars = append(chars, asciiChar) 90 | } 91 | 92 | // Result which will be returned 93 | result := "" 94 | 95 | result += opt.Parser.Prefix 96 | 97 | // Foreach line of the font height 98 | for curLine := 0; curLine < font.height; curLine++ { 99 | // Add the current line of the char to the result 100 | for i := range chars { 101 | result += chars[i].GetLine(curLine, opt.Parser) 102 | } 103 | // A new line at the end 104 | result += opt.Parser.NewLine 105 | } 106 | 107 | result += opt.Parser.Suffix 108 | 109 | return result, nil 110 | } 111 | -------------------------------------------------------------------------------- /screenshot/figlet4go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbndr/figlet4go/d6cef5b186ea823676889379eaed64caab29adb9/screenshot/figlet4go.png -------------------------------------------------------------------------------- /tools/build-default-font.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Build the bindata.go file with the default font in it 3 | cd ../assets 4 | go-bindata -o ../bindata.go -pkg figlet4go ./ --------------------------------------------------------------------------------