├── logo.png ├── website ├── www │ ├── about.php │ ├── api-doc.php │ ├── generator.php │ ├── .htaccess │ ├── api.php │ ├── css │ │ └── style.css │ ├── terminal.html │ └── js │ │ ├── generator.js │ │ ├── popper.min.js │ │ ├── bootstrap.min.js │ │ └── jquery-3.4.1.min.js ├── content │ ├── about.php │ ├── generator.php │ └── api-doc.php └── base.php ├── twitter_bot ├── example_keys.py └── tweet.py ├── generator ├── continuous_quotes.py ├── verb_list.py ├── adjective_list.py ├── noun_list.json ├── noun_list.py └── hackergenerator.py ├── .github └── workflows │ └── twitter.yml ├── LICENSE.md ├── .gitignore ├── README.md └── examples.txt /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GlOwl/hackerman/HEAD/logo.png -------------------------------------------------------------------------------- /website/www/about.php: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /website/www/api-doc.php: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /website/www/generator.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /twitter_bot/example_keys.py: -------------------------------------------------------------------------------- 1 | consumer_key = "" 2 | consumer_secret = "" 3 | 4 | access_token = "-" 5 | access_token_secret = "" 6 | 7 | #path = "/path/to/generator/" 8 | -------------------------------------------------------------------------------- /website/www/.htaccess: -------------------------------------------------------------------------------- 1 | DirectoryIndex generator.php index.php index.html 2 | 3 | RewriteEngine On 4 | 5 | RewriteCond %{REQUEST_FILENAME}.php -f 6 | RewriteCond %{REQUEST_URI} !/$ 7 | RewriteRule ^(.*)$ $1\.php 8 | -------------------------------------------------------------------------------- /twitter_bot/tweet.py: -------------------------------------------------------------------------------- 1 | import tweepy 2 | import json 3 | 4 | path = "../generator/" 5 | 6 | from keys import * 7 | 8 | import sys 9 | sys.path.append(path) 10 | import hackergenerator 11 | 12 | auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 13 | auth.set_access_token(access_token, access_token_secret) 14 | 15 | api = tweepy.API(auth) 16 | 17 | tweet = hackergenerator.sentence(); 18 | 19 | api.update_status(status = tweet) 20 | -------------------------------------------------------------------------------- /website/www/api.php: -------------------------------------------------------------------------------- 1 | 100) $n = 100; 8 | 9 | if($f != "json" && $f != "csv") $f = "json"; 10 | 11 | if($f == "json") { 12 | header('Content-type: application/json'); 13 | } else if($f == "csv") { 14 | header('Content-type: text/csv'); 15 | } 16 | 17 | echo shell_exec("python3 ../../generator/hackergenerator.py ".$n." ".$f." ".$s); 18 | ?> 19 | -------------------------------------------------------------------------------- /generator/continuous_quotes.py: -------------------------------------------------------------------------------- 1 | import hackergenerator 2 | import time 3 | import sys 4 | import os 5 | 6 | if(len(sys.argv) >= 2): 7 | i = int(sys.argv[1]) 8 | else: 9 | i = 10 10 | 11 | if(len(sys.argv) >= 3): 12 | n = int(sys.argv[2]) 13 | else: 14 | n = 10 15 | 16 | while(True): 17 | for x in range(0, n): 18 | sentence = hackergenerator.sentence() 19 | print(sentence) 20 | #os.system("espeak '" + sentence + "'") #if you are to lazy to read install espeak and uncomment this line. 21 | print("") 22 | time.sleep(i) 23 | -------------------------------------------------------------------------------- /website/content/about.php: -------------------------------------------------------------------------------- 1 |

About

2 |

3 | This is a pure fun project, no money is being made here, 4 | no personal data is being collected and no hackers were harmed producing this website.
5 |
6 | If you like to contribute, give feedback or fork the source code 7 | check us out on GitHub
8 |
9 | Also make sure to follow @hackermanwtf for your daily dose of hackerman quotes! 10 |

11 | -------------------------------------------------------------------------------- /website/www/css/style.css: -------------------------------------------------------------------------------- 1 | p { 2 | font-size: 1.2rem; 3 | } 4 | 5 | code { 6 | font-size: 100%; 7 | } 8 | 9 | .navbar { 10 | padding: 0.5rem 0rem; 11 | } 12 | 13 | .navbar-brand { 14 | font-size: 1.5rem; 15 | } 16 | 17 | .btn:not(.disabled):hover { 18 | margin-top: 0px; 19 | border-width: 0 1px 4px 1px !important; 20 | } 21 | 22 | .blockquote { 23 | font-size: 1.5rem; 24 | background: #DCDCDC63; 25 | border-radius: 5px; 26 | border-bottom: 4px solid #DCDCDC; 27 | } 28 | 29 | .blockquote p { 30 | font-size: 1.5rem; 31 | } 32 | 33 | #navbar { 34 | border-left: 0; 35 | border-right: 0; 36 | } 37 | 38 | #navbackgrond { 39 | border-color: #127ba3; 40 | border-style: solid; 41 | border-width: 0 0 5px 0; 42 | background-color: #158CBA !important; 43 | padding: 0.5rem 1rem; 44 | position: absolute; 45 | top: 0; 46 | width: 100%; 47 | height: 4.2rem; 48 | } -------------------------------------------------------------------------------- /website/content/generator.php: -------------------------------------------------------------------------------- 1 |
2 |

3 | 4 | 5 |
6 | 7 |
8 |
9 | 10 |
11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 |
19 |
20 |

The good stuff

21 |
22 | 23 |
24 | 25 |
26 |

Left overs

27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /.github/workflows/twitter.yml: -------------------------------------------------------------------------------- 1 | on: 2 | schedule: 3 | - cron: "0 14 * * *" 4 | 5 | name: Twitter Bot 6 | 7 | jobs: 8 | 9 | tweet: 10 | name: tweet 11 | runs-on: ubuntu-latest 12 | steps: 13 | - id: checkout 14 | uses: actions/checkout@v2 15 | - id: pip 16 | run: pip3 install tweepy 17 | - id: build-keys 18 | env: 19 | ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} 20 | ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }} 21 | CONSUMER_KEY: ${{ secrets.CONSUMER_KEY }} 22 | CONSUMER_SECRET: ${{ secrets.CONSUMER_SECRET }} 23 | run: | 24 | echo "consumer_key = \"$CONSUMER_KEY\"" > twitter_bot/keys.py 25 | echo "consumer_secret = \"$CONSUMER_SECRET\"" >> twitter_bot/keys.py 26 | echo "access_token = \"$ACCESS_TOKEN\"" >> twitter_bot/keys.py 27 | echo "access_token_secret = \"$ACCESS_TOKEN_SECRET\"" >> twitter_bot/keys.py 28 | echo "path = \"generator/\"" >> twitter_bot/keys.py 29 | - id: tweet 30 | run: | 31 | python3 twitter_bot/tweet.py 32 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Anatol Pomplun & Stefan Kremser 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, 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, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /website/www/terminal.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Hackerman terminal 7 | 8 | 27 | 28 | 29 | 30 |
31 |

32 |
33 | 34 | 35 | 36 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /website/content/api-doc.php: -------------------------------------------------------------------------------- 1 |

Online API

2 |

Single Quotes

3 |

Get a single random generated quote at:

4 |

hackerman.wtf/api

5 |

Returned is JSON file:

6 |

{ "quotes": ["Quantum LCDs restrict a UTF-8."] }

7 |

Try it out

8 | 9 |

Multiple Quotes

10 |

Get multiple random generated quotes at:

11 |

hackerman.wtf/api?n=3

12 |

13 | The parameter 'n' sets the number of requested quotes (max. 100 per query).
14 | Returned is a JSON file: 15 |

16 |

17 | 18 | { "quotes": [ 19 | "A system framework addresses a system.", 20 | "The common model will identify the key.", 21 | "A virus framework addresses a random framework." 22 | ] } 23 | 24 |

25 |

Try it out

26 | 27 |

CSV Format

28 |

Get quotes in CSV format at:

29 |

hackerman.wtf/api?n=3&f=csv

30 | 31 |

32 | The parameter 'n' sets the number of requested quotes (max. 100 per query).
33 | The parameter 'f' sets the format, allowed is 'csv' and 'json' (default = json).
34 | Returned is a CSV file: 35 |

36 |

37 | 38 | A bandwidth will address a spacetime algorithm.
39 | Build the UTF-8 bandwidth, then you can build LCD models! 40 |
41 |

42 |

Try it out

43 | 44 |

Random Seed

45 |

Get quotes generated using your own seed at:

46 |

hackerman.wtf/api?s=123

47 | 48 |

49 | The parameter 's' sets the random seed string.
50 | Returned is a JSON file: 51 |

52 |

53 | {"quotes": ["Proprietary e-mails build a string."]} 54 |

55 |

Try it out

56 | 57 |

Offline Python Script

58 |

59 | No internet, no problem! If you like to generate quotes on your own machine, you can!
60 | Just visit our Github 61 | and run the python script that is creating these quotes. 62 |

63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Twitter API 2 | twitter_bot/keys.py 3 | 4 | # Byte-compiled / optimized / DLL files 5 | __pycache__/ 6 | *.py[cod] 7 | *$py.class 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | wheels/ 26 | pip-wheel-metadata/ 27 | share/python-wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | MANIFEST 32 | 33 | # PyInstaller 34 | # Usually these files are written by a python script from a template 35 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 36 | *.manifest 37 | *.spec 38 | 39 | # Installer logs 40 | pip-log.txt 41 | pip-delete-this-directory.txt 42 | 43 | # Unit test / coverage reports 44 | htmlcov/ 45 | .tox/ 46 | .nox/ 47 | .coverage 48 | .coverage.* 49 | .cache 50 | nosetests.xml 51 | coverage.xml 52 | *.cover 53 | .hypothesis/ 54 | .pytest_cache/ 55 | 56 | # Translations 57 | *.mo 58 | *.pot 59 | 60 | # Django stuff: 61 | *.log 62 | local_settings.py 63 | db.sqlite3 64 | db.sqlite3-journal 65 | 66 | # Flask stuff: 67 | instance/ 68 | .webassets-cache 69 | 70 | # Scrapy stuff: 71 | .scrapy 72 | 73 | # Sphinx documentation 74 | docs/_build/ 75 | 76 | # PyBuilder 77 | target/ 78 | 79 | # Jupyter Notebook 80 | .ipynb_checkpoints 81 | 82 | # IPython 83 | profile_default/ 84 | ipython_config.py 85 | 86 | # pyenv 87 | .python-version 88 | 89 | # pipenv 90 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 91 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 92 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 93 | # install all needed dependencies. 94 | #Pipfile.lock 95 | 96 | # celery beat schedule file 97 | celerybeat-schedule 98 | 99 | # SageMath parsed files 100 | *.sage.py 101 | 102 | # Environments 103 | .env 104 | .venv 105 | env/ 106 | venv/ 107 | ENV/ 108 | env.bak/ 109 | venv.bak/ 110 | 111 | # Spyder project settings 112 | .spyderproject 113 | .spyproject 114 | 115 | # Rope project settings 116 | .ropeproject 117 | 118 | # mkdocs documentation 119 | /site 120 | 121 | # mypy 122 | .mypy_cache/ 123 | .dmypy.json 124 | dmypy.json 125 | 126 | # Pyre type checker 127 | .pyre/ 128 | -------------------------------------------------------------------------------- /website/base.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Hackerman Quote <?php echo "$title"; ?> 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |
22 |
23 |
24 | 25 | 28 | 29 | 30 | 31 | 32 | 33 |
34 | 35 | 55 | 56 |
57 |
58 |
59 |
60 | 61 | 62 | 63 | 64 | 65 | "; 68 | } 69 | ?> 70 | 71 | -------------------------------------------------------------------------------- /website/www/js/generator.js: -------------------------------------------------------------------------------- 1 | let quotes = []; 2 | let bad_quotes = []; 3 | let good_quotes = []; 4 | 5 | function render_main_quote() { 6 | $("#quote").text(quotes[0]); 7 | } 8 | 9 | function render_good_quotes() { 10 | $("#good-list").empty(); 11 | for (let i = 0; i < good_quotes.length; i++) { 12 | $("#good-list").append("" + good_quotes[i] + ""); 13 | } 14 | } 15 | 16 | function render_bad_quotes() { 17 | $("#bad-list").empty(); 18 | for (let i = 0; i < bad_quotes.length; i++) { 19 | $("#bad-list").append("" + bad_quotes[i] + ""); 20 | } 21 | } 22 | 23 | function render_quotes() { 24 | render_main_quote(); 25 | render_good_quotes(); 26 | render_bad_quotes(); 27 | } 28 | 29 | function add_quote(q) { 30 | quotes.unshift(q); 31 | } 32 | 33 | function add_quotes(q) { 34 | for (let i = 0; i < q.length; i++) add_quote(q[i]); 35 | } 36 | 37 | function move_good_quote(i) { 38 | add_quotes(good_quotes.splice(i, 1)); 39 | render_quotes(); 40 | } 41 | 42 | function move_bad_quote(i) { 43 | add_quotes(bad_quotes.splice(i, 1)); 44 | render_quotes(); 45 | } 46 | 47 | function load_new_quotes() { 48 | if (quotes.length <= 1) { 49 | $.ajax({ 50 | url: "api?n=10&f=json&s=" + (Math.floor(Math.random() * 1000000) + 1), 51 | success: function(result) { 52 | add_quotes(result.quotes); 53 | render_quotes(); 54 | } 55 | }); 56 | } else { 57 | render_quotes(); 58 | } 59 | } 60 | 61 | function add_default_quote() { 62 | if (quotes.length == 0) add_quote($("#quote").text()); 63 | } 64 | 65 | $("#good-button").click(function() { 66 | add_default_quote(); 67 | 68 | // Move first quote from quotes to good_quotes 69 | good_quotes.unshift(quotes.shift()); 70 | 71 | load_new_quotes(); 72 | }); 73 | 74 | $("#bad-button").click(function() { 75 | add_default_quote(); 76 | 77 | // Move first from quotes to bad_quotes 78 | bad_quotes.unshift(quotes.shift()); 79 | 80 | load_new_quotes(); 81 | }); 82 | 83 | $("#copy").click(function() { 84 | let $temp = $(""); 85 | $("body").append($temp); 86 | $temp.val($("#quote").text()).select(); 87 | document.execCommand("copy"); 88 | $temp.remove(); 89 | }); 90 | 91 | $("#download").click(function() { 92 | let content = "data:text/csv;charset=utf-8,"; 93 | 94 | for (let i = 0; i < good_quotes.length; i++) { 95 | content += good_quotes[i] + "\r\n"; 96 | } 97 | 98 | var uri = encodeURI(content); 99 | var link = document.createElement("a"); 100 | link.setAttribute("href", uri); 101 | link.setAttribute("download", "hackerquotes.txt"); 102 | document.body.appendChild(link); 103 | 104 | link.click(); 105 | }); -------------------------------------------------------------------------------- /generator/verb_list.py: -------------------------------------------------------------------------------- 1 | # V -> verb 2 | 3 | # r -> regular (add s at the end to make it multiple) 4 | # i -> irregular (needs a lists of conjugations) 5 | 6 | verb_list = [ 7 | ["r", "init"], 8 | ["r", "pull"], 9 | ["r", "push"], 10 | ["r", "clone"], 11 | ["r", "fetch"], 12 | ["r", "commit"], 13 | ["r", "rebase"], 14 | ["r", "merge"], 15 | ["r", "fork"], 16 | ["r", "stash"], 17 | ["r", "tag"], 18 | ["r", "cherry-pick"], 19 | ["r", "checkout"], 20 | ["r", "wrap"], 21 | ["r", "iterate"], 22 | ["r", "loop"], 23 | ["r", "port"], 24 | ["r", "infect"], 25 | ["r", "append"], 26 | ["r", "change"], 27 | ["r", "normalize"], 28 | ["r", "average"], 29 | ["r", "decrypt"], 30 | ["r", "encrypt"], 31 | ["r", "convert"], 32 | ["r", "access"], 33 | ["r", "coordinate"], 34 | ["r", "power"], 35 | ["r", "monitor"], 36 | ["r", "regulate"], 37 | ["r", "detect"], 38 | ["r", "block"], 39 | ["r", "debug"], 40 | ["r", "observe"], 41 | ["r", "bypass"], 42 | ["r", "input"], 43 | ["r", "synthesize"], 44 | ["r", "connect"], 45 | ["r", "parse"], 46 | ["r", "generate"], 47 | ["r", "copy"], 48 | ["r", "analyze"], 49 | ["r", "control"], 50 | ["r", "benchmark"], 51 | ["r", "request"], 52 | ["r", "enter"], 53 | ["r", "call"], 54 | ["r", "detect"], 55 | ["r", "print"], 56 | ["r", "simulate"], 57 | ["r", "emulate"], 58 | ["r", "intercept"], 59 | ["r", "sequence"], 60 | ["r", "synchronize"], 61 | ["r", "test"], 62 | ["r", "tokenize"], 63 | ["r", "format"], 64 | ["r", "constrain"], 65 | ["r", "import"], 66 | ["r", "export"], 67 | ["r", "develop"], 68 | ["r", "invert"], 69 | ["r", "slice"], 70 | ["r", "index"], 71 | ["r", "join"], 72 | ["r", "shorten"], 73 | ["r", "partition"], 74 | ["r", "decompile"], 75 | ["r", "split"], 76 | ["r", "swap"], 77 | ["r", "cast"], 78 | ["r", "clear"], 79 | ["r", "stream"], 80 | ["r", "remove"], 81 | ["r", "add"], 82 | ["r", "signal"], 83 | ["r", "process"], 84 | ["r", "disconnect"], 85 | ["r", "start"], 86 | ["r", "interpret"], 87 | ["r", "yield"], 88 | ["r", "match"], 89 | ["r", "inspect"], 90 | ["r", "collect"], 91 | ["r", "restrict"], 92 | ["r", "display"], 93 | ["r", "address"], 94 | ["r", "identify"], 95 | ["i", "build", {"simple_present" : {"i": "build", "you": "build", "it": "builds", "we": "build", "they": "build"}, "simple_past" : {"i": "built", "you": "built", "it": "built", "we": "built", "they": "built"}, "simple_future" : {"i": "will build", "you": "will build", "it": "will build", "we": "will build", "they": "will build"}}], 96 | ["r", "load"], 97 | ["r", "define"], 98 | ["r", "decentralize"], 99 | ["r", "update"], 100 | ["r", "encode"], 101 | ["r", "virtualize"], 102 | ["r", "transmit"], 103 | ["r", "compile"], 104 | ["r", "randomize"], 105 | ["r", "deauth"], 106 | ["r", "alter"], 107 | ["r", "mute"], 108 | ["r", "hash"] 109 | ] 110 | 111 | 112 | """ 113 | - read 114 | - write 115 | - send 116 | - override 117 | 118 | - swap out 119 | """ 120 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hackerman Quote Generator 2 | 3 | --- 4 | 5 | ## Update November 2020 6 | 7 | Because of the server costs we decided to take hackerman.wtf offline, which also runs the @hackermanwtf twitter account. 😢 8 | 9 | --- 10 | 11 |

PICTURE logo

12 | 13 |

14 | 🐦 @hackermanwtf 15 | | 🌍 hackerman.wtf
16 |
17 | Generate your own hackerman quotes

18 | 19 | ## Idea 20 | 21 | Hollywood and the media in general loves to portrait hackers as these beings that 22 | make computers do anything! They just have to type fast enough, 23 | or at least faster than the hacker on the other side. 24 | 25 | In countless shows and movies, characters say a lot of nonsense 26 | to sound like a real badass hacker. 27 | 28 | If you also want to sound like a badass hacker but struggle to learn the basics 29 | of computer engineering, don't worry, we got you covered! 30 | 31 | We created this sentence generator to make nonsense hacker quotes. 32 | Grammatically (more or less) correct English sentences mixed with 33 | buzzwords to sound very technical, but don't make any sense. 34 | 35 | **Why?** Because we can! But also because it's fun and these quotes make great 36 | jokes and can be used as placeholder text and descriptions. 37 | 38 | **One more thing...** just a generator alone would be boring, so we are hosting 39 | a website where anyone can easily get their daily dose of hacker quotes. 40 | Oh and we are creating an API for anyone to use. 41 | (Who needs Lorem-Ipsum when you can fill your website with hacker quotes!) 42 | 43 | ## Website 44 | 45 | Visit [hackerman.wtf](https://hackerman.wtf). 46 | 47 | ## Twitter Account 48 | 49 | Follow [@hackermanwtf](http://twitter.com/hackermanwtf) to get your daily dose 50 | of hackerman quotes! 51 | 52 | ## API 53 | 54 | ## Online API 55 | 56 | Visit [hackerman.wtf/api-doc](https://hackerman.wtf/api-doc) to learn about the 57 | online API. 58 | 59 | ## Local Generator Script 60 | 61 | The magic happens in [generator/hackergenerator.py](https://github.com/GlOwl/hackerman/blob/master/generator/hackergenerator.py). 62 | 63 | You can just run the script using `python3 hackergenerator.py`. 64 | 65 | That's not enough for you? Try `python3 hackergenerator.py 1000`! 66 | 67 | You are a robot? Try `python3 hackergenerator.py 10 json`! 68 | 69 | The script expects 3 arguments: `python3 hackergenerator.py [number_of_quotes] [format] [seed]`. 70 | `[number_of_quotes]` is self expandatory (default = 1), `[format]` can be `csv` or `json` (default = csv), `[seed]` is a random seed string. 71 | 72 | ## Credits & Resources 73 | 74 | **Authors:** 75 | - Stefan Kremser [@spacehuhn](https://github.com/spacehuhn) 76 | - Anatol Pomplun [@GlOwl](https://github.com/GlOwl) 77 | 78 | **Tools:** 79 | - [Python 3](https://www.python.org) Programming Language 80 | - [Bootstrap](https://getbootstrap.com/) Web Library 81 | - [Layoutit](https://www.layoutit.com/) Bootstrap Builder 82 | - [Lumen](https://bootswatch.com/lumen/) Bootstrap Theme 83 | - [jQuery](https://jquery.com/) JavaScript Framework 84 | - [Tweepy](https://www.tweepy.org/) Python Module to interface the Twitter API 85 | 86 | ## License 87 | 88 | This software is licensed under the MIT License. See the [license file](LICENSE) for details. 89 | -------------------------------------------------------------------------------- /generator/adjective_list.py: -------------------------------------------------------------------------------- 1 | 2 | # t = attrributive adjective (before noun) 3 | # ------- all following currently unused -------- 4 | # p = predicative adjective (after verb e.g. is, was, will be...) 5 | # (unused) c = comparative adjective (can be used to compare two nouns) 6 | 7 | # a = absolute no comperative or superlative 8 | # e = appnd -er / -est to get the superlative 9 | # m = append adjective after more / most or less / least 10 | 11 | adjective_list = [ 12 | ["tm", "quantum"], 13 | ["tm", "virtual"], 14 | ["ta", "shortened"], 15 | ["tm", "common"], 16 | ["te", "raw"], 17 | ["tm", "random"], 18 | ["ta", "audio"], 19 | ["tm", "industrial"], 20 | ["tm", "3D-printed"], 21 | ["tm", "proprietary"], 22 | ["tm", "forbidden"], 23 | ["ta", "patented"], 24 | ["tm", "neural"], 25 | ["tm", "wireless"], 26 | ["tm", "online"], 27 | ["tm", "offline"], 28 | ["tm", "primary"], 29 | ["ta", "8-bit"], 30 | ["tm", "open"], 31 | ["ta", "live"], 32 | ["tm", "flexible"], 33 | ["tm", "adaptive"], 34 | ["tm", "artificial"], 35 | ["tm", "mobile"], 36 | ["tm", "meta"], 37 | ["tm", "regular"], 38 | ["tm", "variable"], 39 | ["tm", "global"], 40 | ["tm", "automatic"], 41 | ["tm", "geometric"], 42 | ["tm", "inductive"], 43 | ["tm", "default"], 44 | ["tm", "constant"], 45 | ["tm", "asymmetric"], 46 | ["tm", "symmetric"], 47 | ["tm", "robust"], 48 | ["tm", "analog"], 49 | ["tm", "digital"], 50 | ["tm", "micro"], 51 | ["tm", "standardized"], 52 | ["tm", "hidden"], 53 | ["tm", "biometric"], 54 | ["tm", "safety"], 55 | ["tm", "emulated"], 56 | ["ta", "root"], 57 | ["ta", "generic"], 58 | ["ta", "bricked"], 59 | ["ta", "miscellaneous"], 60 | ["ta", "haptic"], 61 | ["tm", "logical"], 62 | ["ta", "physical"], 63 | ["ta", "relative"], 64 | ["ta", "lasered"], 65 | ["ta", "licensed"], 66 | ["ta", "robotic"], 67 | ["tm", "immersive"], 68 | ["ta", "customized"], 69 | ["ta", "malfunctioning"], 70 | ["tm", "granular"], 71 | ["ta", "quality"], 72 | ["ta", "open source"], 73 | ["tm", "sophisticated"], 74 | ["tm", "statistical"], 75 | ["tm", "DIY"], 76 | ["ta", "remote"], 77 | ["ta", "handheld"], 78 | ["tm", "bleeding edge"], 79 | ["tm", "modern"], 80 | ["tm", "outdated"], 81 | ["ta", "legacy"], 82 | ["ta", "visual"], 83 | ["ta", "guidance"], 84 | ["tm", "private"], 85 | ["tm", "public"], 86 | ["tm", "cyber"], 87 | ["ta", "numeric"], 88 | ["ta", "mathematical"], 89 | ["ta", "linguistic"], 90 | ["ta", "platform-specific"], 91 | ["ta", "normalized"], 92 | ["ta", "bitwise"], 93 | ["ta", "hexadecimal"], 94 | ["ta", "octal"], 95 | ["ta", "binary"], 96 | ["ta", "decimal"], 97 | ["te", "large"], 98 | ["te", "small"], 99 | ["tm", "normal"], 100 | ["ta", "infected"], 101 | ["ta", "internal"], 102 | ["tm", "synchron"], 103 | ["tm", "asynchron"], 104 | ["ta", "biometric"], 105 | ["ta", "idle"], 106 | ["ta", "external"], 107 | ["ta", "reserved"], 108 | ["ta", "explicit"], 109 | ["ta", "implicit"], 110 | ["tm", "decentralized"], 111 | ["tm", "interactive"], 112 | ["ta", "lambda"], 113 | ["tm", "recursive"], 114 | ["te", "weak"], 115 | ["ta", "matching"], 116 | ["tm", "similar"], 117 | ["te", "strong"], 118 | ["ta", "partial"], 119 | ["ta", "performance"], 120 | ["ta", "build in"] 121 | ] 122 | """ 123 | - speed 124 | - detection 125 | - high 126 | - plasma 127 | - titanium 128 | - usability 129 | - surveillance 130 | - face detection 131 | - floating 132 | - localized 133 | - read only 134 | - write only 135 | 136 | - singleton 137 | """ 138 | -------------------------------------------------------------------------------- /generator/noun_list.json: -------------------------------------------------------------------------------- 1 | { 2 | "ber": [ 3 | "logic" 4 | ], 5 | "sar": [ 6 | "git", 7 | "github", 8 | "gitlab", 9 | "gitea", 10 | "bitbucket", 11 | "GTFO", 12 | "baremetal" 13 | ], 14 | "sber": [ 15 | "status", 16 | "spacehuhn", 17 | "IRC", 18 | "WiFi", 19 | "Bluetooth", 20 | "ethernet", 21 | "LAN", 22 | "WAN", 23 | "NAS", 24 | "VM", 25 | "middleware", 26 | "bottleneck", 27 | "data", 28 | "analysis", 29 | "intelligence", 30 | "indicator", 31 | "IC", 32 | "fax", 33 | "foo", 34 | "bar", 35 | "bandwidth", 36 | "web", 37 | "syntax", 38 | "interpreter", 39 | "OS", 40 | "provider", 41 | "driver", 42 | "encoder", 43 | "internet", 44 | "IoT" 45 | ], 46 | "sbr": [ 47 | "SBC", 48 | "ATX", 49 | "ITX", 50 | "USB", 51 | "ASCII", 52 | "null", 53 | "NaN", 54 | "undefined", 55 | "spacetime", 56 | "UTF-8", 57 | "handler" 58 | ], 59 | "ser": [ 60 | "SoC", 61 | "HDD", 62 | "SSD", 63 | "SD", 64 | "LED", 65 | "IDE", 66 | "PoC", 67 | "UI", 68 | "GUI" 69 | ], 70 | "smar": [ 71 | "pullrequest", 72 | "mergerequest", 73 | "powersupply", 74 | "ifloop", 75 | "garbagecollector" 76 | ], 77 | "smber": [ 78 | "log", 79 | "stash", 80 | "tag", 81 | "origin", 82 | "master", 83 | "lemur", 84 | "laser", 85 | "signal", 86 | "network", 87 | "analyzer", 88 | "application", 89 | "firewall", 90 | "cybernuke", 91 | "mainframe", 92 | "server", 93 | "cloud", 94 | "cable", 95 | "antenna", 96 | "grid", 97 | "display", 98 | "monitor", 99 | "microcontroller", 100 | "controller", 101 | "keyboard", 102 | "tree", 103 | "bucket", 104 | "observer", 105 | "singleton", 106 | "array", 107 | "transmitter", 108 | "DVD", 109 | "emulation", 110 | "clock", 111 | "MCU", 112 | "phone", 113 | "space", 114 | "sample", 115 | "sensor", 116 | "camera", 117 | "battery", 118 | "process", 119 | "website", 120 | "homepage", 121 | "app", 122 | "error", 123 | "warning", 124 | "sequence", 125 | "information", 126 | "pattern", 127 | "simulation", 128 | "simulator", 129 | "troll", 130 | "regulator", 131 | "container", 132 | "breadboard", 133 | "controller", 134 | "drone", 135 | "deauther", 136 | "thread", 137 | "model", 138 | "switch", 139 | "dimension", 140 | "key", 141 | "java", 142 | "coffee", 143 | "integer", 144 | "double", 145 | "string", 146 | "adapter", 147 | "framework", 148 | "system", 149 | "algorithm", 150 | "virus", 151 | "exeption", 152 | "path", 153 | "reference", 154 | "template", 155 | "wildcard", 156 | "interface", 157 | "loop", 158 | "demon", 159 | "core", 160 | "string", 161 | "document", 162 | "cookie", 163 | "codec", 164 | "e-mail", 165 | "service", 166 | "cache", 167 | "database", 168 | "object", 169 | "index", 170 | "list", 171 | "tuple", 172 | "range", 173 | "stream", 174 | "component", 175 | "module", 176 | "library", 177 | "limit", 178 | "function", 179 | "code", 180 | "wave", 181 | "blockchain", 182 | "repository", 183 | "northbridge", 184 | "southbridge" 185 | ], 186 | "smbers": [ 187 | "dictionary" 188 | ], 189 | "smbr": [ 190 | "reality", 191 | "LCD" 192 | ], 193 | "smer": [ 194 | "branch", 195 | "commit", 196 | "request", 197 | "transition", 198 | "editor", 199 | "frame", 200 | "identifier", 201 | "reader", 202 | "writer", 203 | "label", 204 | "collector", 205 | "token" 206 | ] 207 | } -------------------------------------------------------------------------------- /examples.txt: -------------------------------------------------------------------------------- 1 | Connecting the transmitter won't do anything, we need to navigate the mobile XSS transmitter! 2 | If we input the sensor, we can get to the CSS sensor through the auxiliary CSS sensor! 3 | If we navigate the array, we can get to the XSS array through the wireless XSS array! 4 | I'll bypass the cross-platform HDD monitor, that should monitor the HDD monitor! 5 | I'll hack the haptic CSS matrix, that should matrix the CSS matrix! 6 | I'll input the primary SDD bus, that should bus the SDD bus! 7 | I'll parse the primary SMS feed, that should feed the SMS feed! 8 | I'll synthesize the online FTP transmitter, that should transmitter the FTP transmitter! 9 | The ADP hard drive is down, input the bluetooth hard drive so we can input the ADP hard drive! 10 | The AGP bus is down, index the haptic bus so we can index the AGP bus! 11 | The GB feed is down, hack the multi-byte feed so we can hack the GB feed! 12 | The IB circuit is down, input the 1080p circuit so we can input the IB circuit! 13 | The IB microchip is down, transmit the haptic microchip so we can transmit the IB microchip! 14 | The SAS firewall is down, input the 1080p firewall so we can input the SAS firewall! 15 | The SCSI interface is down, hack the optical interface so we can hack the SCSI interface! 16 | The SDD array is down, generate the mobile array so we can generate the SDD array! 17 | The SDD card is down, compress the cross-platform card so we can compress the SDD card! 18 | The USB bandwidth is down, compress the haptic bandwidth so we can compress the USB bandwidth! 19 | The USB circuit is down, override the cross-platform circuit so we can override the USB circuit! 20 | Try to copy the SMS transmitter, maybe it will copy the haptic transmitter! 21 | Try to navigate the PNG firewall, maybe it will navigate the redundant firewall! 22 | Try to parse the RAM alarm, maybe it will parse the wireless alarm! 23 | Try to synthesize the PNG application, maybe it will synthesize the online application! 24 | Try to synthesize the USB microchip, maybe it will synthesize the haptic microchip! 25 | Use the bluetooth JBOD pixel, then you can override the bluetooth pixel! 26 | Use the primary SAS pixel, then you can synthesize the primary pixel! 27 | Use the wireless SAS panel, then you can generate the wireless panel! 28 | We need to bypass the optical RAM circuit! 29 | We need to generate the redundant PNG transmitter! 30 | We need to input the optical AI microchip! 31 | You can't copy the application without copying the wireless SCSI application! 32 | You can't generate the bus without bypassing the primary GB bus! 33 | You can't generate the driver without copying the digital SMS driver! 34 | You can't generate the matrix without transmitting the digital XSS matrix! 35 | 36 | SENTENCE 37 | [INDEPENDENT_CLAUSE] 38 | INDEPENDENT_CLAUSE + CONJUNCTION + INDEPENDENT_CLAUSE 39 | INDEPENDENT_CLAUSE + CONJUNCTION + DEPENDENT_CLAUSE 40 | 41 | INDEPENDENT_CLAUSE 42 | SUBJECT_PHRASE + VERB_PHRASE(case defined by noun(&time)) 43 | SUBJECT_PHRASE + VERB_PHRASE(case defined by noun(&time)) + OBJECT_PHRASE 44 | 45 | DEPENDENT_CLAUSE 46 | REFFERNECE + VERB_PHRASE(case defined by refference(&time)) 47 | 48 | CONJUNCTION 49 | conjunction 50 | 51 | SUBJECT_PHRASE 52 | NOUN_PHRASE 53 | 54 | OBJECT_PHRASE 55 | NOUN_PHRASE 56 | 57 | NOUN_PHRASE 58 | (PRONOUN [defined by noun, ending dependent on starting letter next]) + (ADJECTIVE_PHRASE) + NOUN 59 | 60 | VERB_PHRASE 61 | VERB 62 | 63 | VERB 64 | verb 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | no - noun 74 | ve - verb 75 | ad - adjective 76 | av - adverb 77 | pn - pronoun 78 | pr - preposition 79 | co - conjunction 80 | in - interjection 81 | 82 | Sentence -> IndependentSentence, (Conjunction, IndependentSentence) 83 | Sentence -> IndependentSentence, 84 | IndependentSentence -> Noun Phrase, Verb Phrase 85 | NounPhrase -> (Determiner), Noun1 86 | Noun1 -> (AdjectivePhrase), Noun1, (PrepositionalPhrase) 87 | Noun1 -> Noun1, Conjunction, Noun1 88 | VerbPhrase -> (Adverb), verb, (Noun1) 89 | VerbPhrase -> VerbPhrase, Conjunction, VerbPhrase 90 | AdjectivePhrase -> (Adverb), Adjective 91 | 92 | 93 | nouns -> Thing, Place, Person 94 | pronouns -> the, a, number 95 | verbs -> action/state of being 96 | Proverbs/Preposition 97 | Time: in, on, at 98 | Location: in, on, at 99 | Means: by 100 | Origin: from 101 | Destination: to 102 | Co-participant: with 103 | 104 | modifiers 105 | adjectives -> modify nouns 106 | adverbs -> modify verbs, adjectives and adverbs 107 | prepositions -> 108 | interjections -> 109 | 110 | conjunctions -> 111 | Coordinationg Conjunctions 112 | yet, or, nor, for, and, so, but 113 | Paired Conjunctions 114 | both . . . and 115 | either . . . or 116 | neither . . . nor 117 | not . . . but 118 | not . . . nor 119 | not only . . . but (also) 120 | whether . . . or 121 | 122 | Subject 123 | Noun 124 | 125 | Object 126 | Noun 127 | 128 | Predicate 129 | verb 130 | verb - object 131 | 132 | Clause 133 | Subject - predicate 134 | 135 | Simple_Sentence -> 136 | Clause 137 | 138 | Coumpund_Sentence 139 | Clause - Coordination - Clause 140 | 141 | Complex_Sentence 142 | Clause - "when"/"after"/"before" - Dependent Clause 143 | 144 | Complex_Compound_Sentence 145 | Clause - "when"/"after"/"before" - Dependent Clause - Coordination - Clause 146 | Clause - Coordination - Clause - "when"/"after"/"before" - Dependent Clause 147 | -------------------------------------------------------------------------------- /generator/noun_list.py: -------------------------------------------------------------------------------- 1 | # s -> singular 2 | # m -> multiple 3 | 4 | # b -> begin of a compound noun (like "serialized" in "serialized thread") 5 | # e -> end of a compound noun (like "thread" in "serialized thread") 6 | # a -> alone (never part of a compound noun like "garbage collector") 7 | 8 | # r -> regular (add s at the end to make it multiple) 9 | # i -> irregular (needs a lists of conjugations) 10 | 11 | noun_list = [ 12 | ["sar", "git"], 13 | ["sar", "github"], 14 | ["sar", "gitlab"], 15 | ["sar", "gitea"], 16 | ["sar", "bitbucket"], 17 | ["smer", "branch"], 18 | ["smer", "commit"], 19 | ["smber", "log"], 20 | ["smar", "pull request"], 21 | ["smar", "merge request"], 22 | ["smber", "stash"], 23 | ["sber", "status"], 24 | ["smber", "tag"], 25 | ["smber", "origin"], 26 | ["smber", "master"], 27 | ["smber", "lemur"], 28 | ["sber", "spacehuhn"], 29 | ["smber", "laser"], 30 | ["smber", "signal"], 31 | ["smber", "network"], 32 | ["smber", "analyzer"], 33 | ["smber", "application"], 34 | ["smber", "firewall"], 35 | ["smber", "cybernuke"], 36 | ["sber", "IRC"], 37 | ["smber", "mainframe"], 38 | ["smber", "server"], 39 | ["smber", "cloud"], 40 | ["smbr", "reality"], 41 | ["smer", "request"], 42 | ["sber", "WiFi"], 43 | ["sber", "Bluetooth"], 44 | ["smber", "cable"], 45 | ["sber", "ethernet"], 46 | ["sber", "LAN"], 47 | ["sber", "WAN"], 48 | ["smber", "antenna"], 49 | ["sber", "NAS"], 50 | ["smar", "power supply"], 51 | ["smber", "grid"], 52 | ["smber", "display"], 53 | ["smber", "monitor"], 54 | ["smber", "microcontroller"], 55 | ["smber", "controller"], 56 | ["ser", "SoC"], 57 | ["sbr", "SBC"], 58 | ["sbr", "ATX"], 59 | ["sbr", "ITX"], 60 | ["sbr", "USB"], 61 | ["ser", "HDD"], 62 | ["ser", "SSD"], 63 | ["smber", "keyboard"], 64 | ["smer", "transition"], 65 | ["smber", "tree"], 66 | ["ser", "SD"], 67 | ["ser", "LED"], 68 | ["ser", "IDE"], 69 | ["smer", "editor"], 70 | ["smer", "frame"], 71 | ["ser", "PoC"], 72 | ["smber", "bucket"], 73 | ["sber", "VM"], 74 | ["smer", "identifier"], 75 | ["sber", "middleware"], 76 | ["sber", "bottleneck"], 77 | ["ser", "UI"], 78 | ["ser", "GUI"], 79 | ["smber", "observer"], 80 | ["smber", "singleton"], 81 | ["smber", "array"], 82 | ["smber", "transmitter"], 83 | ["smber", "DVD"], 84 | ["ber", "logic"], 85 | ["smber", "emulation"], 86 | ["smer", "reader"], 87 | ["smer", "writer"], 88 | ["smer", "label"], 89 | ["smber", "clock"], 90 | ["smber", "MCU"], 91 | ["smber", "phone"], 92 | ["smber", "space"], 93 | ["sber", "data"], 94 | ["sber", "analysis"], 95 | ["smber", "sample"], 96 | ["sber", "intelligence"], 97 | ["smber", "sensor"], 98 | ["smber", "camera"], 99 | ["smber", "battery"], 100 | ["smber", "process"], 101 | ["smber", "website"], 102 | ["smber", "homepage"], 103 | ["smber", "app"], 104 | ["smber", "error"], 105 | ["smber", "warning"], 106 | ["smber", "sequence"], 107 | ["smber", "information"], 108 | ["sbr", "ASCII"], 109 | ["smber", "pattern"], 110 | ["smber", "simulation"], 111 | ["smber", "simulator"], 112 | ["sber", "indicator"], 113 | ["smber", "troll"], 114 | ["smber", "regulator"], 115 | ["smber", "container"], 116 | ["smber", "breadboard"], 117 | ["sber", "IC"], 118 | ["smber", "controller"], 119 | ["smber", "drone"], 120 | ["smber", "deauther"], 121 | ["smar", "if loop"], 122 | ["sar", "GTFO"], 123 | ["sber", "fax"], 124 | ["smar", "garbage collector"], 125 | ["smer", "collector"], 126 | ["smber", "thread"], 127 | ["smber", "model"], 128 | ["smber", "switch"], 129 | ["smber", "dimension"], 130 | ["sber", "foo"], 131 | ["sber", "bar"], 132 | ["smber", "key"], 133 | ["smber", "java"], 134 | ["smber", "coffee"], 135 | ["sbr", "null"], 136 | ["sbr", "NaN"], 137 | ["sbr", "undefined"], 138 | ["smber", "integer"], 139 | ["smber", "double"], 140 | ["smber", "string"], 141 | ["sar", "bare metal"], 142 | ["smber", "adapter"], 143 | ["smber", "framework"], 144 | ["smber", "system"], 145 | ["smber", "algorithm"], 146 | ["sbr", "spacetime"], 147 | ["smbr", "LCD"], 148 | ["sber", "bandwidth"], 149 | ["smber", "virus"], 150 | ["sbr", "UTF-8"], 151 | ["sber", "web"], 152 | ["sbr", "handler"], 153 | ["smber", "exeption"], 154 | ["smber", "path"], 155 | ["smber", "reference"], 156 | ["smber", "template"], 157 | ["smber", "wildcard"], 158 | ["smber", "interface"], 159 | ["sber", "syntax"], 160 | ["smber", "loop"], 161 | ["smber", "demon"], 162 | ["smber", "core"], 163 | ["sber", "interpreter"], 164 | ["smber", "string"], 165 | ["smber", "document"], 166 | ["smber", "cookie"], 167 | ["smber", "codec"], 168 | ["smber", "e-mail"], 169 | ["sber", "OS"], 170 | ["smber", "service"], 171 | ["sber", "provider"], 172 | ["smber", "cache"], 173 | ["smber", "database"], 174 | ["smber", "object"], 175 | ["smbers", "dictionary"], 176 | ["sber", "driver"], 177 | ["smber", "index"], 178 | ["sber", "encoder"], 179 | ["smber", "list"], 180 | ["smber", "tuple"], 181 | ["smber", "range"], 182 | ["smber", "stream"], 183 | ["sber", "internet"], 184 | ["smber", "component"], 185 | ["smber", "module"], 186 | ["smber", "library"], 187 | ["smber", "limit"], 188 | ["smber", "function"], 189 | ["smer", "token"], 190 | ["smber", "code"], 191 | ["smber", "wave"], 192 | ["sber", "IoT"], 193 | ["smber", "blockchain"], 194 | ["smber", "repository"], 195 | ["smber", "northbridge"], 196 | ["smber", "southbridge"] 197 | ] 198 | -------------------------------------------------------------------------------- /generator/hackergenerator.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import json 3 | import random 4 | 5 | import noun_list 6 | import adjective_list 7 | import verb_list 8 | 9 | def get_json(n): 10 | """Generates and returns n sentences in Json format.""" 11 | response = { 12 | 'quotes': generate(n) 13 | } 14 | 15 | return json.dumps(response) 16 | 17 | def get_csv(n): 18 | """Generates and returns n sentences in CSV format.""" 19 | return '\n'.join(generate(n)) 20 | 21 | def generate(n): 22 | """Generates and returns n sentences and retruns them as an array.""" 23 | return [sentence() for _ in range(0, n)] 24 | 25 | def sentence(): 26 | """Generates one random sentence.""" 27 | x = random.randint(0, 6) 28 | #x = 5 #uncoment for testing a specific sentence type 29 | if(x is 0): 30 | a = random.choice(['s', 'm']) 31 | if(a is 's'): 32 | b = 'it' 33 | else: 34 | b = 'they' 35 | 36 | r = noun_phrase(definite = random.choice([True, False]), hasAdjective = random.choice([True, False, False]), singularity = a, compound = random.choice([True, False])) + " " + verb(conjugation = b, time = random.choice(['simple_present', 'simple_past', 'simple_future'])) + " " + random_noun_phrase() + ". With " + noun_phrase(definite = False, hasAdjective = False, singularity = random.choice(['s', 's', 'm']), compound = True) + "!" 37 | elif(x is 1): 38 | r = verb(conjugation = 'you', time = 'simple_present') + " " + noun_phrase(definite = True, hasAdjective = random.choice([True, False, False]), singularity = random.choice(['s', 'm']), compound = random.choice([True, False])) + ", then you can " + verb(conjugation = 'you', time = 'simple_present') + " " + noun_phrase(definite = True, hasAdjective = random.choice([True, False, False]), singularity = random.choice(['s', 'm']), compound = random.choice([True, False])) + "!" 39 | elif(x is 2): 40 | p1 = 'you' 41 | r = p1 + " can't " + verb(conjugation = 'i', time = 'simple_present') + " " + random_noun_phrase() + ", it " + verb(conjugation = 'it', time = 'simple_future', ) + " " + noun_phrase(definite = True, hasAdjective = random.choice([True, False, False]), singularity = random.choice(['s', 'm']), compound = random.choice([True, False]), n = noun_list.noun_list, a = adjective_list.adjective_list) + "!" 42 | elif(x is 3): 43 | p1 = pronoun() 44 | need = [["r", "need"]] 45 | r = p1 + " " + verb(conjugation = ('it' if p1 in ['he', 'she'] else p1), time = 'simple_present', v = need) + " to " + verb(conjugation = 'i', time = 'simple_present') + " " + noun_phrase(definite = True, hasAdjective = random.choice([True, True, False]), singularity = random.choice(['s', 'm']), compound = random.choice([True, True, False])) + "!" 46 | elif(x is 4): 47 | p1 = pronoun(singular = 's'); 48 | i1 = random.choice([" with " + noun_phrase(definite = random.choice([True, False]), hasAdjective = random.choice([True, False]), singularity = "s", compound = random.choice([True, False])), " with " + noun_phrase(definite = random.choice([True, False]), hasAdjective = random.choice([True, False]), singularity = "s", compound = random.choice([True, False])), '']) 49 | r = p1 + random.choice([" can ", " may "]) + verb(conjugation = 'i', time = 'simple_present') + " " + random_noun_phrase() + i1 + ", it " + verb(conjugation = 'it', time = 'simple_future', ) + " " + noun_phrase(definite = True, hasAdjective = random.choice([True, False, False]), singularity = random.choice(['s', 'm']), compound = random.choice([True, False]), n = noun_list.noun_list, a = adjective_list.adjective_list) + "." 50 | elif(x is 5): 51 | r = noun_phrase() + " " + verb(conjugation = 'it', time = 'simple_present') + '. Let it ' + random.choice(verb_list.verb_list)[1] + random.choice([' by itself.', " before using it."]) 52 | elif(x is 6): 53 | p = pronoun(singular = 's'); 54 | r = p + " " + verb(conjugation = p, time = 'simple_past') + " " + noun_phrase(definite = True, hasAdjective = False, singularity = "s", compound = True) + ' and ' + verb(conjugation = 'it', time = 'simple_past') + " " + random_noun_phrase() + "." 55 | return r[0].upper() + r[1:] 56 | 57 | 58 | 59 | """Pronoun1 verb(simple_future, pronoun1) noun_phrase(definite), that should verb(simple_present, it) noun_phrase(definite)! 60 | 61 | noun_phrase is adjective, verb(simple_present, you) noun_phrase so Pronoun can verb(simple_present, pronoun) noun_phrase(definite)! 62 | 63 | Pronoun verbify(need) to verb(simple_present, pronoun) noun_phrase(definite)! 64 | 65 | If pronoun1 verb(simple_present, pronoun1) noun_phrase(), pronoun1 can verb(simple_present) noun_phrase(definite) through/arround noun_phrase(definite)!""" 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | def verb(conjugation = 'it', time = 'simple_present', inverted = "no", v = verb_list.verb_list): 74 | """Generates one random verb in correct conjugation.""" 75 | a = random.choice(v) 76 | if("r" in a[0]): 77 | if(time == "simple_present"): 78 | if(conjugation in ["i", "you", "we", "they"]): 79 | return a[1] 80 | elif(conjugation in ["it"]): 81 | if((a[1][-1] in ["s", "x"]) or (a[1][-2:-1] in ["sh", "ch", "ss"])): 82 | return a[1]+"es" 83 | elif(a[1][-1] in ["y"] and a[1][-2] not in ["a", "e", "i", "o", "u"]): 84 | return a[1][:-1]+"ies" 85 | else: 86 | return a[1]+"s" 87 | 88 | if(time == "simple_past"): 89 | if(a[1][-1] in "e"): 90 | return a[1]+"d" 91 | elif(a[1][-1] in ["y"] and a[1][-2] not in ["a", "e", "i", "o", "u"]): 92 | return a[1][:-1]+"ied" 93 | else: 94 | return a[1]+"ed" 95 | 96 | if(time == "simple_future"): 97 | return "will " + a[1] 98 | 99 | else: 100 | return a[2][time][conjugation] 101 | 102 | def random_noun_phrase(): 103 | """Helping function for one completely random noun phrase from the default word list""" 104 | return noun_phrase( 105 | definite = random.choice([True, False]), 106 | hasAdjective = random.choice([True, False]), 107 | singularity = random.choice(["s", "m"]), 108 | compound = random.choice([True, False]) 109 | ) 110 | 111 | def noun_phrase(definite = True, hasAdjective = False, singularity = "s", compound = False, n = noun_list.noun_list, a = adjective_list.adjective_list): 112 | """gnerate a noun phrase ("determiner", "adjective", "noun")""" 113 | adj = "" 114 | if(hasAdjective is True): 115 | adj = adjective(a = a) + " " 116 | md = adj + noun(singularity = singularity, compound = compound, n = n) 117 | if(definite is True): 118 | return ("the " if singularity is "s" else "") + md 119 | else: 120 | #We know that this is not entirely correct but we didn't bother to do a speach analysis for every word ;p 121 | return (("a" + ("n " if (md[0] in ["a", "e", "i", "o", "u"]) else " ")) if singularity is "s" else "") + md 122 | 123 | def noun(singularity = "s", compound = False, n = noun_list.noun_list): 124 | """generate a radom noun or comound noun.""" 125 | nb = [w for w in n if "b" in w[0]] 126 | ne = [w for w in n if "e" in w[0]] 127 | na = [w for w in n if "a" in w[0]] 128 | 129 | if(compound): 130 | if(singularity in "s"): 131 | #first word in compund has to be singular? 132 | return random.choice(nb)[1] + " " + random.choice([w[1] for w in ne if "s" in w[0]]) 133 | if(singularity in "m"): 134 | x = random.choice(nb)[1] + " " + random.choice([w[1] for w in ne if "m" in w[0]]) 135 | if((x[-1] in ["s", "x"]) or (x[-2:] in ["sh", "ch", "ss"])): 136 | return x + "es" 137 | elif(x[-1] in ["y"] and x[-2] not in ["a", "e", "i", "o", "u"]): 138 | return x[:-1] + "ies" 139 | else: 140 | return x + "s" 141 | else: 142 | if(singularity in "s"): 143 | return random.choice([w[1] for w in nb+ne+na if "s" in w[0]]) 144 | if(singularity in "m"): 145 | x = random.choice([w[1] for w in nb+ne+na if "m" in w[0]]) 146 | if((x[-1] in ["s", "x"]) or (x[-2:] in ["sh", "ch", "ss"])): 147 | return (x + "es") 148 | elif(x[-1] in ["y"] and x[-2] not in ["a", "e", "i", "o", "u"]): 149 | return (x[:-1] + "ies") 150 | else: 151 | return (x + "s") 152 | 153 | def pronoun(singular = True): 154 | """Genrate a random pronoun.""" 155 | return(random.choice(["i", "you", "he", "she", "it"] if singular else ["we", "you", "they"])) 156 | 157 | def adjective(a = adjective_list.adjective_list): 158 | """Pick a random adjective.""" 159 | return random.choice(a)[1] 160 | 161 | def main(): 162 | n = 1 163 | format = "csv" 164 | 165 | if(len(sys.argv) >= 2): 166 | n = int(sys.argv[1]) 167 | 168 | if(len(sys.argv) >= 3): 169 | format = sys.argv[2] 170 | 171 | if(len(sys.argv) >= 4): 172 | random.seed(sys.argv[3]) 173 | 174 | if(format == "json"): 175 | print(get_json(n)); 176 | elif(format == "csv"): 177 | print(get_csv(n)) 178 | 179 | if __name__ == "__main__": 180 | main() 181 | -------------------------------------------------------------------------------- /website/www/js/popper.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) Federico Zivolo 2019 3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 4 | */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=e.ownerDocument.defaultView,n=o.getComputedStyle(e,null);return t?n[t]:n}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?pe:10===e?se:pe||se}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent||null;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TH','TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),le({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=fe({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},le(n,m,$(v)),le(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ge.FLIP:p=[n,i];break;case ge.CLOCKWISE:p=G(n);break;case ge.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),y&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=fe({},e.offsets.popper,D(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=C(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightwindow.devicePixelRatio||!me),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=H('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=fe({},E,e.attributes),e.styles=fe({},m,e.styles),e.arrowStyles=fe({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return j(e.instance.popper,e.styles),V(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&j(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),j(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ue}); 5 | //# sourceMappingURL=popper.min.js.map 6 | -------------------------------------------------------------------------------- /website/www/js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.3.1 (https://getbootstrap.com/) 3 | * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0